南京開卷: 〖HTK〗軟件工程原理與實踐〓〓三校樣(抽複)〓成品尺寸: 185mm×260mm〓39字×39行〖JY〗B05E趙南京開卷: 〖HTK〗軟件工程原理與實踐〓〓三校樣(抽複)〓成品尺寸: 185mm×260mm〓39字×39行〖JY〗B05E趙
〖JZ〗〖HT24.XBS〗〖STHZ〗〖WTHZ〗軟件工程原理與實踐〖WTBZ〗〖STBZ〗〖JZ(Z〗〖HT4H〗主〓編〓〖HTK〗李宗花〓朱〓林〖HTH〗副主編〓〖HTK〗郭〓輝〓謝修娟〓周〓劍〓於啟紅〖JZ)〗〖HT〗〖WTBZ〗〖HJ〗〖BG(!〗〖BHDFG4,FK60mmF〗〖WTHZ〗〖HT4DBS〗軟件工程原理與實踐〖WTBZ〗〖HT5SS〗〖BHDG2,FK15mm,K15mm。3F〗出版社南大序號〖BH〗校〓次〓校份數〖BH〗錄〓入陸文件名〖BH〗組〓版張總頁碼〖BH〗圖〓片趙圖數〖BH〗校〓對〓版式〓〖BHDG2,FK30mm,KZQF〗送校日期〖BH〗聯係電話〖ST4HZ〗〖CS%0,0,0,60〗85992128〖ST〗〖CS〗〖BHDG4,FK60mmZQF〗〖HT6K〗〖HJ*2〗〓〓您對稿件的要求、意見和建議請直接與生產責任人孫誌洋聯係(13813855199)。我們將竭誠為您提供優質的服務!〖BG)F〗〖HT〗〖HJ〗〖JZ〗〖HT4SS〗南 京 大 學 出 版 社內容簡介
本書全麵係統地介紹了軟件工程的概念、原理和方法。基於應用型人才培養目標,結合當前工業界流行的軟件建模方法、軟件開發技術等現實需求,以軟件工程案例為支撐,強調理論與實踐結合,軟件工程管理活動與技術活動結合,軟件工程的CASE工具集與軟件工程理論、方法結合,並以完整的案例分析貫穿整個軟件生命周期。介紹了軟件過程、軟件項目管理、需求工程、軟件係統建模、軟件體係結構設計、軟件設計、軟件實現、軟件測試、軟件演化以及高級軟件工程技術等知識。本書每章配有習題,可指導讀者進一步學習鞏固。
本書內容豐富,可作為軟件工程專業、計算機專業或相關信息類專業的本科生教材或教學參考書,也可作為計算機類專業的研究生自學用書,並可供應用軟件開發人員和軟件項目管理者閱讀參考。圖書在版編目(CIP)數據 軟件工程原理與實踐 \/ 李宗花, 朱林主編. — 南京:
南京大學出版社, 2020.8
ISBN 9787305229749Ⅰ. ①軟… Ⅱ. ①李… ②朱… Ⅲ. ①軟件工程-高
等學校-教材Ⅳ. ①TP311.5中國版本圖書館CIP數據核字(2020)第034839號出版發行南京大學出版社
社址南京市漢口路22號郵編210093
出版人金鑫榮書名軟件工程原理與實踐
主編李宗花朱林
責任編輯王南雁編輯熱線02583592655
助理編輯王秉華照排南京開卷文化傳媒有限公司
印刷南京人民印刷廠有限責任公司
開本787×10921\/16印張 15.75字數 384千
版次2020年8月第1版2020年8月第1次印刷
ISBN9787305229749
定價43.80元網址:http:\/\/www.njupco.com
官方微博:http:\/\/weibo.com\/njupco
微信服務號:NJUyuexue
銷售谘詢熱線:(025)83594756
版權所有,侵權必究
凡購買南大版圖書,如有印裝質量問題,請與所購
圖書銷售部門聯係調換軟件工程原理與實踐前言前言
當前,軟件工程已成為信息技術領域的一個研究熱點,是指導計算機軟件開發和維護的重要學科,有利於構造出更加複雜的軟件係統。軟件工程結合工程化的思想、原理、技術和方法來開發軟件係統,可以更加經濟地、快速地開發出高質量的軟件係統。同時,軟件工程重視管理過程,強調係統性、規範性和可度量性,從而提高軟件產品的質量,降低開發成本,保證工程按時完成,減少軟件維護。
本書在軟件工程基本理論的基礎上,主要以麵向對象軟件工程為主,兼顧麵向過程,從實用角度出發,融入當前最新的軟件工程技術,並以案例為驅動進行闡述。本書內容涵蓋了軟件工程的基本原理、概念、技術和方法,主要內容包括軟件工程基本概念、軟件過程、軟件項目管理、需求工程、軟件係統建模、軟件體係結構設計、軟件設計、軟件實現、軟件測試、軟件演化以及高級軟件工程技術。同時,本書還講述了軟件工程標準化文檔、軟件工程項目管理和開發實例等知識。在編寫過程中注重理論與應用的結合,對軟件的項目管理、需求分析、設計、實現和測試進行了全麵的闡述,同時利用網上銀行係統案例對相關理論知識進行詳細的說明。
本書由長期從事軟件工程專業研究和課程教學的教師編寫而成,編寫者結合自身的教學和科研實踐,參考國內外軟件工程資料,融合最新的軟件開發技術精心撰寫。淮陰師範學院李宗花負責編寫第四章、第七章、第九章和第十章;東南大學成賢學院朱林負責編寫第五章、第六章和第八章;東南大學成賢學院謝修娟負責編寫第一章和第二章;常熟理工學院郭輝負責編寫第三章。常熟理工學院周劍和宿遷學院於啟紅對書中部分章節的圖表做了大量的工作。全書統稿由李宗花完成。本書還得到了淮陰師範學院計算機學院陳伏兵院長等領導和老師給予的大力支持和幫助,以及江蘇省計算機學會應用型高校計算機學科建設專家委員會同行的關心,在此一並致謝。
由於軟件工程的理論、方法和技術層出不窮,軟件工程領域結合人工智能的研究發展不斷更新,加之時間倉促,編者水平有限,書中難免有不足和錯誤之處,懇請讀者批評指正,並提出寶貴意見,以便進一步完善。反饋意見請告知編者([email protected])。
編者2020年3月
南京開卷: 〖HTK〗軟件工程原理與實踐〓〓三校樣(抽複)〓成品尺寸: 185mm×260mm〓39字×39行〖JY〗B05E趙南京開卷: 〖HTK〗軟件工程原理與實踐〓〓三校樣(抽複)〓成品尺寸: 185mm×260mm〓39字×39行〖JY〗B05E趙〖MD(1〗〖HTH〗〖JY。〗〖MD)〗〖MD(2〗〖HTSS〗〖JY。〗〖MD)〗〖MD(3〗〖HTSS〗〖JY。〗〖MD)〗軟件工程原理與實踐第1章軟件工程概述第1章軟件工程概述
信息化時代,信息的獲取、處理和使用都需要大量高質量的軟件,而軟件開發一直備受質量難以保證、開發成本逐年上升、開發進度難以控製等問題的困擾。為擺脫這種被動的局麵,自20世紀60年代以來,人們開始重視對軟件開發方法、工具和過程的研究,並在1968年NATO(North Atlantic Treaty Organization:北大西洋公約組織)的一次會議上正式提出“軟件工程”概念。本章主要介紹軟件的基本概念、軟件的發展過程、軟件危機的表現以及軟件工程的概念、原理和內容等知識點。
1.1軟件
1.1.1軟件的概念及特點
1. 軟件
“軟件(Software)”一詞是在20世紀60年代出現的,是指與計算機係統操作有關的程序、數據以及配套的文檔資料。一般認為,軟件由兩部分組成:一是機器可執行的程序和數據,程序是按事先設計的功能和性能要求執行的指令序列,數據是程序運行時輸入和輸出的內容;二是與軟件開發、維護和使用有關的文檔資料。
程序和數據是軟件運行的基本要素,而文檔則是延續軟件運行壽命的資料保障。前者好比軟件的基因,直接決定軟件的質量好壞與否,通過尋找好基因、糾正基因缺陷可以使軟件變得更為強壯和優質。而後者是為軟件的修改和維護提供後方保障,包含了軟件的“基因信息”“看病記錄”等重要數據。
2. 軟件特點
軟件、硬件均是計算機係統中的重要組成部分。與硬件相比,軟件除了物理產品所具有的生命期、可出售、需維護等一些屬性外,還具有如下特點:
(1) 軟件是一種邏輯產品。軟件不是具體的物理產品,具有抽象性、無形性,它不如硬件能直觀地看得見或摸得著,軟件一般需要記錄在專門的介質上,並且必須通過測試、分析、思考、判斷來了解它的功能、性能及其他特性。軟件正確與否,隻有在機器上運行之後才能知道。
(2) 軟件是人類的智力結晶。軟件是人們通過智力勞動,依靠知識和技術等手段生產的信息產品,是人類有史以來生產的高度複雜、高成本、高風險的工業產品。軟件涉及人、社會和組織的行為和需求,軟件的應用幾乎涵蓋所有領域。
(3) 軟件不會被用壞。硬件在使用初期,由於新產品磨合問題導致這一階段故障率比較高,隨後逐漸下降並趨於穩定,但到後期,由於存在零件的老化、磨損等問題,故障率將會直線上升,這就是有名的故障率U型曲線(也稱浴盆曲線),如圖11所示。而軟件不同於硬件,不存在老化、磨損等問題,但它會存在失效與退化問題,如隨著外界環境變化,原來的軟件不再適應新的環境了,因此需要多次修改(維護)軟件。而在每次修改中,由於軟件維護存在著副作用,會帶來一些新的缺陷,致使軟件的最低故障率隨著每次的修改而升高,當故障率高到不能接受時,軟件將申請報廢,軟件故障率曲線如圖12所示。
圖11硬件故障率曲線圖
圖12軟件故障率曲線圖
(4) 軟件具有定製性。軟件不同於硬件,同一類型的機器零件可以批量生產,但軟件不行,每一個軟件的開發都要經過細致的係統分析和設計。例如同樣是開發企業辦公係統,但不同的企業需求不一樣,必須根據每個企業的具體情況定製最適用的軟件。因此軟件多是為用戶專門定製的,但隨著麵向對象技術和構件技術的發展,可以開發支持重用的軟件部件,像機器零件一樣,實現在多個不同的軟件中“即插即用”。
(5) 軟件維護工作複雜。軟件在使用維護過程中的維護工作比硬件要更為複雜,由於軟件增加新功能、修改現有功能、改正潛藏的錯誤等原因,經常性需要進行維護工作。此外,由於軟件內部邏輯關係複雜,且在維護過程中還可能產生新的錯誤,諸多因素增加了軟件維護工作的困難性。
1.1.2軟件的分類
軟件的應用幾乎已經滲透進每個行業,市場上的軟件產品可謂琳琅滿目、五花八門。根據不同的分類規則可以將軟件劃分成不同的類別。如:按照應用領域可以分為商業軟件、個人辦公軟件、工程應用軟件、人工智能軟件等;按照工作方式可以分為批處理軟件、實時軟件、交互式軟件等。本書從軟件工程的角度將軟件做如下分類。
1. 係統軟件
係統軟件是指控製和協調計算機及外部設備,支持應用軟件開發和運行的一類軟件,主要功能是調度、監控和維護計算機係統,負責管理計算機係統中各個硬件相互協調工作。
係統軟件的主要特征是:第一,與硬件有很強的交互性,係統軟件運行時期需要頻繁地與硬件交互;第二,能對資源共享進行調度管理,為用戶提供有效的資源共享服務;第三,能解決並發操作處理中存在的協調問題;第四,軟件數據結構複雜,外部接口多樣化,便於用戶反複使用。
比較有代表性的係統軟件有:
(1) 操作係統。使應用軟件能有效調用計算機硬件設備的軟件,如DOS、Windows、Linux、Unix等。
(2) 語言處理程序。包含編譯程序、解釋程序和彙編程序,如C編譯程序、JDK等。
(3) 數據庫管理係統。提供數據存儲及訪問功能的軟件,如Oracle、SQL Server、MySQL、Access等。
2. 應用軟件
應用軟件是為滿足用戶不同領域、不同問題的應用需求而提供的一類軟件。它可以拓寬計算機係統的應用領域,放大硬件的功能。應用軟件就是通常定義下的軟件,由程序+數據+文檔構成。軟件工程所涉及的就是應用軟件的開發方法學和管理學。
比較常見的應用軟件有:
(1) 文字處理軟件。用於輸入、存儲、修改、編輯及打印文字資料等,如Word、WPS等。
(2) 信息管理軟件。用於輸入、存儲、修改及檢索各種信息,如工資管理軟件、倉庫管理軟件、人事管理軟件等。
(3) 輔助設計軟件。用於高效地繪製、修改工程圖紙,進行設計過程中的常規運算等,如AutoCAD、Photoshop等。
(4) 媒體播放軟件。用於音視頻的播放,如Foobar 2000、Windows Media Player、MPlayer等。
(5) 實時控製軟件。用於隨時搜集生產裝置、飛行器等的運行狀態信息,以此為依據按預定的方案實施自動或半自動控製,安全、準確地完成任務。
3. 支撐軟件
支撐軟件,也稱為工具軟件,位於係統軟件與應用軟件之間,提供應用軟件分析、設計、編碼實現、測試、評估等輔助功能的一類軟件。
比較有代表性的支撐軟件有:
(1) 編程工具。用於軟件的編碼實現,如微軟公司的Visual Studio、Borland公司的C++ Builder、IBM公司的Eclipse等。
(2) 建模工具。用於軟件開發過程中的模型建模,如IBM公司的Rational Rose、微軟公司的Microsoft Office Visio、KBSI公司的IDEF等。
(3) 版本控製工具。提供完備的版本管理功能,如IBM Rational套裝中的ClearCase、基於Apache管理平台的開源SVN等。
(4) 軟件測試工具。用於檢索軟件錯誤,包含軟件測試工具和測試管理工具。如IBM公司的Rational係列測試工具、Mercury公司的WinRunner、Segue公司的TestDirector等。
4. 可重用軟件
在軟件開發中,由於不同的環境和功能要求,可以通過對成熟軟件的局部修改和重組,保持整體穩定性,以適應新要求,這樣的軟件稱為可重用軟件。而利用可重用軟件創建新軟件係統的過程稱為軟件重用。最早的可重用軟件要追溯到1968年的NATO軟件工程會議上提出的可複用庫,即各種標準函數庫,一般由計算機廠商提供,在新開發的程序中直接調用即可。軟件重用技術能節約軟件開發成本,有效地提高軟件生產效率,因此在軟件開發過程中,提倡盡可能多地使用可重用軟件。
軟件重用不僅僅是對程序代碼的重用,還包括對軟件開發過程中任何活動所產生的軟件製品的重用,如分析模型、設計模型、測試用例等,根據抽象程度的高低,可以將軟件重用劃分為如下的重用級別:
(1) 代碼的重用。是指目標代碼和源代碼的重用,其中目標代碼的重用級別最低,曆史最久,大部分編程語言的運行支持環境都提供了連接、綁定等功能來支持這種重用。源代碼的重用級別略高於目標代碼的重用,一般依靠含有大量可重用構件的構件庫,如“對象鏈接與嵌入”技術,在源程序級上定義可重用構件來實現重用。
(2) 設計的重用。是指對軟件設計結果的重用,如將一個設計運用於多個具體的實現,設計結果比源程序的抽象級別要高,它的重用受實現環境的影響較少,從而使可重用軟件被重用的機會更多,並且所需修改的工作量更少。
(3) 分析的重用。是指對軟件分析結果的重用,可重用的分析結果是針對問題域的某些事物或某些問題的抽象程度更高的解法,分析結果比設計結果的抽象級別更高,受設計技術及實現環境的影響較少,所以可重用的機會更大。
(4) 測試信息的重用。是指將測試用例和測試過程信息(軟件工具自動記錄的包括測試員的每一個操作、輸入參數等測試過程信息)應用到新的軟件測試或新一輪的軟件測試中。測試信息的重用級別不能同分析、設計、代碼複用級別進行準確地比較,因為不是同一事物的不同抽象層次,而是另一種信息。
1.1.3軟件的發展過程
自20世紀40年代第一台電子計算機問世後,就出現了程序的概念,發展至今,軟件經曆了三個階段。
1. 程序設計階段(1946年—1956年)
這是計算機軟件開發的初期階段,在這一階段,硬件經曆了由電子管計算機到晶體管計算機的變革,但是軟件還沒有係統化的開發方法。軟件多數是自己設計、自己使用、自己維護,軟件開發尚處於個體化生產狀態。使用低級語言編寫程序,效率低且難度大,當時認為編程是聰明人的事。由於計算機硬件價格昂貴、體積大、運算速度低、內存容量小,此階段程序設計的目標主要集中在如何提高時空效率上,又因為沒有方法學指導,程序員隻能一味地死摳代碼邏輯來提高軟件運行效率,很多時候程序員為減少一條指令,少占用一個內存單元而大動腦筋。隻追求運行效率和運行結果,程序的寫法可以不受任何約束,很少考慮框架結構、可讀性和可維護性,程序的好壞往往取決於程序員個人的經驗。
2. 程序係統階段(1956年—1968年)
此階段,軟件開發進入了作坊式生產方式,即出現了“軟件車間”。這時,硬件經曆了由晶體管計算機到中小規模集成電路計算機的變革,出現了大容量的存儲器,外圍設備也隨之迅速發展,而軟件的發展相對滯後,為提高編程效率,出現了高級程序設計語言。追求寫代碼技巧的同時,還提出了結構化程序設計方法。在20世紀50年代後期,人們逐漸認識到和程序有關的文檔的重要性,開始將程序及文檔融為一體。
這一時期軟件複雜性增加,需求增加,但軟件開發方法和軟件項目管理技術跟不上,開發速度慢,與計算機硬件的發展速度拉開了距離。此外,軟件數量猛增,而生產出來的軟件存在著質量差、開發周期變長、開發成本急劇增加、軟件可維護性差等問題。這些矛盾越來越顯著,最終導致了軟件危機。
3. 軟件工程階段(1968年以後)
此階段,軟件開發進入了產業化生產,即出現了眾多大型的“軟件公司”。這時,硬件經曆了由中小規模到大或超大規模計算機的變革,致使微處理器、個人計算機、工作站具有相當高的性價比,並廣泛應用於生產、生活的各個領域。軟件開發方式轉為工程方式,軟件工程發展迅速,出現了“計算機輔助軟件工程”。結構化開發方法和麵向對象開發方法逐漸趨於成熟,還出現了麵向服務、麵向構件等一些新開發方法。與此同時,分布式係統、計算機網絡、嵌入式係統有了很大發展,尤其在20世紀80年代後,人工智能、專家係統、人工神經網絡軟件開始走向實際應用。
1.1.4軟件危機
軟件危機是指在計算機軟件的開發和維護過程中所遇到的一係列嚴重問題。在20世紀60年代中後期,大容量、高速度計算機的出現,使計算機的應用範圍迅速擴大,軟件開發的需求急劇增長。軟件係統的規模越來越大,複雜程度越來越高,軟件可靠性問題也越來越突出。原來的個人設計、個人使用的方式不再能滿足要求,迫切需要改變軟件生產方式,提高軟件生產率,軟件危機開始爆發。
1. 軟件危機的表現
自軟件誕生以來,軟件危機就一直存在,軟件危機主要表現在以下五個方麵:
(1) 開發進度難以預測,開發成本難以控製
軟件開發經常出現拖延工期幾個月甚至幾年的現象,這種現象降低了軟件開發組織的信譽。並且經費經常超預算,實際成本常常比預算成本高出一個數量級。而為了趕進度和節約成本所采取的一些權宜之計又往往損害了軟件產品的質量,從而不可避免地會引起用戶的不滿。
(2) 開發的軟件不能滿足用戶需求
開發人員和用戶之間沒有進行充分的交流和溝通,往往是軟件開發人員不能真正了解用戶的需求,而用戶又不了解計算機求解問題的模式和能力,雙方無法用共同熟悉的語言進行交流和描述。在雙方互不充分了解的情況下,就倉促上陣設計軟件、匆忙著手編寫程序,這種“閉門造車”的開發方式必然導致最終的軟件不符合用戶的實際需要。
(3) 軟件產品質量無法保證
軟件是邏輯產品,軟件可靠性和軟件質量的定量計算還沒有確切可信的方法,加上開發進度和成本的限製,軟件質量保證活動很難完全貫徹到軟件開發的全過程中,因此,軟件的質量難以保證。
(4) 軟件產品難以維護
軟件產品本質上是開發人員代碼化的邏輯思維活動,他人難以替代。除非是開發者本人,否則很難及時檢測、排除軟件故障。而且在對軟件修改時,很可能會增加新的錯誤,這也給軟件維護工作帶來困難。
(5) 軟件缺少適當的文檔資料
文檔資料是軟件必不可少的重要組成部分。實際上,軟件的文檔資料是開發人員之間及與用戶之間交流信息的依據,是係統維護人員的技術指導手冊,更是軟件管理人員對軟件開發工程進行管理和評價的根據。缺乏必要的文檔資料或者文檔資料不合格,將給軟件開發和維護帶來許多嚴重的困難和問題。
2. 軟件危機的產生原因
造成軟件危機的原因很多,主要有以下幾點:
(1) 用戶需求不明確
在軟件開發早期,用戶自己也不清楚軟件開發的具體需求,不可能完整地給出所有需求,往往在軟件開發過程中,還會不斷地再補充需求以及修改需求等;此外,用戶在描述軟件需求時可能有遺漏、二義性甚至錯誤;再者,軟件開發人員對用戶需求的理解與用戶本來願望有差異。
(2) 缺乏正確的理論指導
由於軟件開發不同於大多數其他工業產品,其開發過程是複雜的邏輯思維過程,其產品極大程度地依賴於開發人員高度的智力投入。由於過分地依靠程序設計人員在軟件開發過程中的技巧和創造性,缺乏統一的方法學和工具方麵的支持,加劇軟件開發產品的個性化,也是發生軟件危機的一個重要原因。
(3) 軟件開發規模越來越大
隨著軟件開發應用範圍的增廣,軟件開發規模愈來愈大。大型軟件開發項目需要組織一定的人力共同完成,而多數管理人員缺乏係統地開發大型軟件的經驗。各類人員的信息交流不及時、不準確、容易產生疏漏和錯誤。
(4) 軟件開發複雜度越來越高
軟件開發不僅僅是在規模上快速地發展擴大,而且其邏輯關係複雜性也急劇地增加。現有的開發方法、工具及組織形式,在處理複雜問題時顯得力不從心。
3. 解決軟件危機的途徑
到了20世紀60年代末,軟件危機已經非常嚴重,這促使計算機科學家們開始探索緩解危機的方法。他們提出了“軟件工程”的概念,從組織管理措施和技術措施(方法和工具)兩方麵研究如何更好地開發和維護計算機軟件,從而減輕軟件危機所帶來的影響。
為消除軟件危機,具體來講,首先,應該對計算機軟件有一個正確的認識,徹底清除“軟件就是程序”的錯誤概念,軟件應該是程序、數據以及相關文檔的完整集合;其次,充分認識到軟件開發不是某種個體勞動的神秘技巧,而應該是各類人員協同配合,共同完成的工程項目,要有良好的組織、嚴謹的管理;再者,推廣和使用在實踐中總結出來的成功軟件開發技術和方法,並且研究探索更好、更有效的技術和方法;最後,應該開發和使用好的軟件開發工具,從而有效地提高軟件的生產效率。
1.2軟件工程
1.2.1軟件工程的定義
1968年,NATO在德國Garmish舉行的學術會議上,第一次提出了“軟件工程”這一術語。概括地說,軟件工程是指導計算機軟件開發和維護的工程學科,采用工程的概念、原理、技術和方法來開發與維護軟件,把經過實踐考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來,經濟地開發出高質量的軟件並有效地維護它。
事實上,軟件工程學科誕生後,人們為軟件工程給出了不同的定義,下麵列出的是四個典型的定義。
●Fritz Bauer給出的定義:軟件工程是為了經濟地獲得能夠在實際機器上高效運行的、可靠的軟件而建立和使用的一係列完善的軟件工程原則。
●美國梅隆卡耐基大學軟件工程研究所(SEI)給出的定義:軟件工程是以工程的形式應用計算機科學和數學原理,從而經濟有效地解決軟件問題。
●IEEE(Institute of Electrical and Electronics Engineers:電氣和電子工程師協會)於1990年在新版的軟件工程術語彙編中給出的修改後定義:軟件工程是將係統性的、規範化的、可定量的方法應用於軟件的開發、運行和維護中,即把工程化原則應用於軟件中。
●我國2006年的國家標準《GB\/T 114572006軟件工程術語》中給出的定義:應用計算機科學理論和技術以及工程原理和方法,按預算和進度,實現滿足用戶要求的軟件產品的定義、開發、發布和維護的工程或進行研究的學科。
軟件工程概念存在兩層含義,從狹義概念看,軟件工程著重體現在軟件開發過程中所采用的工程方法和管理體係,例如,引入成本核算、質量管理和項目管理等,即將軟件產品開發看作是一項工程項目所需要的係統工程學和管理學。從廣義概念看,軟件工程涵蓋了軟件生命周期中所有的工程方法、技術和工具,包括需求、設計、編程、測試和維護的全部內容,即完成一個軟件產品所必備的思想、理論、方法、技術和工具。
1.2.2軟件工程的基本原理
自1968年軟件工程的概念提出以來,研究軟件工程的專家學者們陸續提出了100多條關於軟件工程的準則或“信條”。著名的軟件工程專家Barry·Boehm(巴利·玻姆)於1983年綜合了這些專家學者們的意見,並總結了開發軟件的經驗,提出了軟件工程的7條基本原理。這7條原理被認為是確保軟件產品質量和開發效率的最小集合,7條原理是互相獨立的,其中任意6條原理的組合都不能代替另1條原理,因此,它們是缺一不可的最小集合。並且這7條原理又是相當完備的集合,在此之前提出的100多條軟件工程原理都可以由這7條原理任意組合或派生得到。下麵簡單介紹下這7條基本原理。
1. 用分階段的生命周期計劃嚴格管理
經統計發現,在不成功的軟件項目中有一半左右是由於計劃不周而造成,可見把建立完善的計劃作為第一條基本原理是吸取了前人的教訓而提出來的。在軟件開發與維護的漫長的生命周期中,需要完成許多性質各異的工作。這條基本原理意味著,應該把軟件生命周期劃分成若幹個階段,並相應地製定出切實可行的計劃,然後嚴格按照計劃對軟件的開發與維護工作進行管理。Boehm 認為,在軟件的整個生命周期中應該製定並嚴格執行六類計劃,它們分別是項目概要計劃,裏程碑計劃,項目控製計劃,產品控製計劃,驗證計劃和運行維護計劃。不同層次的管理人員都必須嚴格按照計劃各盡其職地管理軟件開發與維護工作,絕不能受客戶或上級人員的影響而擅自背離預定計劃。
2. 堅持進行階段評審
當時已經認識到,軟件的質量保證工作不能等到編碼階段結束之後再進行。這樣說至少有兩個理由:第一,大部分錯誤是在編碼之前造成的,據統計,編碼階段之前的錯誤占63%,而編碼錯誤僅占37%;第二,錯誤發現與改正得越晚,所需付出的代價越高。因此,在每個階段都進行嚴格的評審,以便盡早發現在軟件開發過程中所犯的錯誤,是一條必須遵循的重要原理。
3. 實行嚴格的產品控製
在軟件開發過程中不應隨意改變需求,因為改變一項需求往往需要付出較高的代價,但是,由於外部環境的變化,在軟件開發過程中改變需求又是難免的,所以隻能依靠科學的產品控製技術來順應這種要求。也就是說,當改變需求時,為了保持軟件各個配置成分的一致性,必須實行嚴格的產品控製,其中主要是實行基準配置管理。所謂基準配置又稱基線配置,它們是經過階段評審後的軟件配置成分(各個階段產生的文檔或程序代碼)。基準配置管理也稱為變動控製:一切有關修改軟件的建議,特別是涉及對基準配置的修改建議,都必須按照嚴格的規程進行評審,獲得批準以後才能實施修改。絕對不能誰想修改軟件(包括尚在開發過程中的軟件),就隨意進行修改。
4. 采用現代程序設計技術
從提出軟件工程的概念開始,人們一直致力於研究新的程序設計技術。20世紀60年代末提出的結構程序設計技術,已經成為絕大多數人公認的先進的程序設計技術。後麵又進一步發展出結構分析(SA)與結構設計(SD)技術,之後又出現麵向對象分析(OOA)、麵向對象設計(OOD)技術等。實踐表明,采用先進的技術既可提高軟件開發的效率,又能提高軟件維護的效率。
5. 結果應能清楚地審查
軟件產品是一種看不見、摸不著的邏輯產品,不同於一般的物理產品。軟件開發人員(或開發小組)的工作進展情況可見性差,難以準確度量,從而使得軟件產品的開發過程比一般產品的開發過程更難於評價和管理。為了提高軟件開發過程的可見性,更好地進行管理,應該根據軟件開發項目的總目標及完成期限,規定開發組織的責任和產品標準,從而使得所得到的結果能夠清楚地審查。
6. 開發小組的人員應該少而精
這條基本原理的含義是,軟件開發小組的組成人員的素質應該好,而人數則不宜過多。開發小組人員的素質和數量是影響軟件產品質量和開發效率的重要因素。素質高的人員的開發效率比素質低的人員的開發效率可能高幾倍至幾十倍,而且素質高的人員所開發的軟件中的錯誤明顯少於素質低的人員所開發的軟件中的錯誤。此外,隨著開發小組人員數目的增加,人員之間交流情況、討論問題的通信開銷將急劇增加,增加人數不但不能提高生產效率,相反會由於通信等問題而降低生產效率。當開發小組人員數為N時,可能的通信路徑有N(N-1)\/2條,可見隨著人數N的增大,通信開銷將急劇增加。因此,組建少而精的開發小組是軟件工程的一條基本原理。