1. 寫作背景
在計算機軟件開發的工程科學技術中,軟件工程的概念、原理、技術與方法已成為計算機科學與技術范疇的一項重要內容,在計算機科學技術領域占據無可爭議的主流地位。作為軟件技術人員,接受軟件工程的概念并不難,但是要真正理解、掌握和運用這門先進的技術并完整地進行系統開發,是有一定難度的。鑒于此,編者編寫了這本關于軟件工程系統分析、設計和實施的教材,以使更多同行受益。
幾年前,編者編寫的《軟件工程(第3版)》備受老師和其他讀者歡迎。這本書對于應用型本科學校的讀者而言,有些內容顯得深了些。為更好地反映最近幾年軟件工程領域的發展現狀,編者根據普通高等教育“十二五”國家級規劃教材的指導精神,總結近年來教學和科研的經驗,在第3版基礎上進行了調整和增刪,形成了這本第4版教材。為了方便學校教學,編者還編寫了配套的《軟件工程習題解答(第4版)》(ISBN 9787302473336)和《軟件工程實踐與課程設計》(ISBN 9787302478676)。
2. 本書結構
本書由以下四部分組成:
第一部分基礎理論,包括第1~3章。
第二部分結構化方法,包括第4~6章。
第三部分面向對象方法與實現,包括第7~11章。
第四部分質量與工程管理,包括第12~15章。
3. 本書特點
本書對有用的概念都進行了嚴格的論述,每一個概念都有相應的例子解釋,同時每章都配有習題。此外,編者還編寫了與本書配套的《軟件工程習題解答(第4版)》和《軟件工程實踐與課程設計》,幫助讀者鞏固所學知識。
4. 適用范圍
軟件工程是軟件系統開發課程的教科書,適合作為軟件工程方面課程的教材,也可作為相關工程技術人員的參考用書。
在選修本課程之前,讀者應該具有計算機的基礎知識,掌握數據結構和數據庫技術。另外,如果具有算法語言的編程經驗,會有助于深入理解系統開發過程。
5. 編寫方法
本書是編者根據近20年來對軟件工程學、面向對象方法等的教學與研究,以及編者負責或參與幾十項軟件開發項目的實踐經驗,并結合軟件開發新技術編寫而成的。根據編者的教學經驗,讀者學習一門新技術的時候,教材是非常重要的。因此,編者在修訂的時候,對于部分章節和內容進行了更新和修改,以便讀者更好地學習與掌握相關知識。
6. 如何使用本書
根據實際情況,在教授時建議安排54~60學時。教師可以按照自己的風格和喜好刪減章節,也可以根據教學目標靈活調整章節順序。
第1章緒論(2學時)
第2章基本理論(2學時)
第3章可行性研究(2學時)
第4章需求分析(4學時)
第5章總體設計(4學時)
第6章軟件詳細設計(4學時)
第7章面向對象分析(4學時)
第8章面向對象設計(2學時)
第9章用戶界面設計(2/4學時)
第10章數據庫及其接口設計(2學時)
第11章軟件實現(2學時)
第12章軟件質量(2學時)
第13章軟件測試(2學時)
第14章軟件維護(2學時)
第15章軟件項目管理與計劃(2學時)
本書的編寫過程中,受到廣東理工學院李代平負責的廣東省級重點學科建設課題——一級學科“計算機科學與技術”項目的支持。信息工程系胡致杰、賴小平、劉建友和張俊林參加了資料的收集與整理工作。由于軟件工程的知識面廣,書中不可能面面俱到,加上時間倉促,作者水平有限,書中的不足之處在所難免,懇請讀者批評指正。
編者
2017年5月于振華樓
第3版前言
1. 寫作背景
軟件工程是指導計算機軟件開發的工程科學技術。軟件工程的概念、原理、技術與方法已成為計算機科學與技術范疇的一項重要內容。用軟件工程的思想進行軟件設計與開發的先進性眾所周知,它在計算機科學技術領域占據無可爭議的主流地位。作為軟件技術人員,接受軟件工程的概念并不難,但是要真正理解、掌握和運用這門先進的技術并完整地進行系統開發,是有一定難度的。鑒于此,編者編寫了這本關于軟件工程系統分析、設計和實施的教材,以使更多同行受益。
幾年前,編者編寫的《軟件工程(第2版)》備受老師和讀者歡迎。為更好地反映最近幾年軟件工程領域的發展現狀,編者根據普通高等教育“十二五”國家級規劃教材的指導精神,總結近年來教學和科研的經驗,在第2版基礎上做了調整和增刪,形成了這本教材。主要從下述4個方面進行了精心修改; 刪掉了一些較陳舊或較次要的內容; 增加了一些較新穎或較重要的內容; 用UML的概念與符號重新改定了有關面向對象方法學的內容; 結構上也進行了必要的調整。
2. 本書結構
本書由以下四部分組成:
第一部分基礎理論,包括第1~3章。
第二部分結構化方法,包括第4~6章。
第三部分面向對象方法與實現,包括第7~16章。
第四部分質量與工程管理,包括第17~20章。
3. 本書特點
本書對各章的概念都進行了嚴格的論述,每一個概念都有相應的例子解釋,同時各章都配有習題。編者還編寫了與本書配套的《軟件工程習題與解答》,幫助讀者鞏固所學知識。
4. 適用范圍
軟件工程是軟件系統開發課程的教科書,適合開設有軟件工程課程的大學高年級和低年級研究生作為教材,也可作為工程技術人員的參考用書。
在選修本課程之前,讀者應該具有計算機的基礎知識,掌握數據結構和數據庫技術。另外,如果具有算法語言的編程經驗,會有助于深入理解系統開發過程。
5. 編寫方法
本書是編者根據近10年來對軟件工程學、面向對象方法等的教學與研究,以及編者負責或參與幾十項軟件開發項目的實踐經驗,并結合軟件開發新技術編寫而成。根據編者的教學經驗,讀者學習一門新技術的時候,教材是非常重要的。因此,編者在修訂的時候,對于部分章節和內容做了更新和修改。
6. 如何使用本書
根據實際情況,在教授時建議安排54~60學時。教師可以按照自己的風格和喜好刪除章節,也可以根據教學目標靈活調整章節順序。另外,前面帶“*”的部分為選學內容。
第1章緒論(2學時)
第2章基本理論(2學時)
第3章可行性研究(2學時)
第4章需求分析與*體系結構(4學時)
第5章總體設計(4學時)
第6章軟件詳細設計(4學時)
第7章面向對象方法概論(4學時)
第8章模型(2學時)
第9章對象分析(4學時)
第10章關系分析(4學時)
第11章控制驅動部分的設計(4學時)
第12章問題域部分設計(4學時)
第13章用戶界面設計(2/4學時)
第14章數據庫及其接口設計(2學時)
第15章*形式化方法(0/4學時)
第16章軟件實現(2學時)
第17章軟件質量(2學時)
第18章軟件測試(2學時)
第19章軟件維護(2學時)
第20章軟件項目管理與計劃(2學時)
編者
2011年1月于廣州小谷圍島
第2版前言
1. 本書背景
本書是根據普通高等教育“十一五”國家級規劃教材的指導精神而編寫的。出版后我們在教學的使用過程中,覺得有許多地方不是很理想,因此,我們根據使用該教材的教師和讀者的意見,對原書在結構和內容上做了很大的調整和修改。
隨著科學技術的進步,軟件的理論與開發方法不斷涌現。軟件工程是指導計算機軟件開發的工程科學技術。軟件工程的概念、原理、技術與方法已成為計算機科學與技術的一項重要內容。
用軟件工程進行軟件設計與開發的先進性是眾所周知的,它在計算機科學技術領域占據了無可爭議的主流地位。作為軟件技術人員,接受軟件工程的概念并不難,但是要真正理解、掌握和運用這門先進的技術并完整地進行系統開發,是有一定難度的。鑒于此我們編寫了本書,目的是向讀者提供一本關于軟件工程系統分析、設計和實施的教科書,以使更多同行受益。
2. 本書結構
本書由四部分組成:
第一部分基礎理論,包括第1~3章。
第二部分結構化方法,包括第4~6章。
第三部分面向對象方法與實現,包括第7~15章。
第四部分質量與工程管理,包括第16~19章。
3. 本書特點
本書對每章的概念都進行了嚴格的論述,每一個概念都有相應的例子解釋,同時每章都配有習題,使讀者鞏固所學知識。
4. 適用范圍
軟件工程是軟件系統開發課程的教科書。講授時間一般為40~60學時。本書適合開設有軟件工程課程的大學高年級本科生和低年級研究生作教材,也可作為工程技術人員的參考用書。
在選修本課程之前,讀者應該具有計算機的基礎知識,掌握數據結構和數據庫技術。同時具有可視化類語言的編程經驗,會有助于深入理解系統開發過程。
5. 編寫方法
本書是作者根據近10年來對軟件工程學、面向對象方法等的教學與研究,以及作者領導或參與的20項軟件項目開發的實際應用經驗,并結合軟件開發新技術編寫而成。根據過去的教學經驗,讀者學習一門新技術,教材是非常重要的。因此,在修訂的時候,對于部分章節和內容做了調整和修改。
6. 如何使用本書
根據讀者的實際情況,教師在教授本書時,建議一般在54~60學時。可以按照自己的風格和喜好刪除章節,也可以根據教學目標靈活調整章節順序。另外,前面帶“*”為選學內容。
第1章緒論(1學時)
第2章基本理論(2學時)
第3章可行性研究(2學時)
第4章軟件需求分析(4學時)
第5章總體設計(4學時)
第6章軟件詳細設計(4學時)
第7章面向對象方法概論(4學時)
第8章模型(2學時)
第9章對象分析(4/6學時)
第10章關系分析(4/6學時)
第11章面向對象設計原則(2學時)
第12章對象設計(5/6學時)
第13章接口設計(4/6學時)
*第14章形式化方法(4學時)
第15章軟件實現(2學時)
第16章軟件質量(2學時)
第17章軟件測試(2學時)
第18章軟件維護(2學時)
第19章軟件項目管理與計劃(2學時)
由于軟件工程知識面廣,在介紹中不能面面俱到。加上時間倉促,作者水平有限,書中的不足之處在所難免,懇請讀者批評指正。
編者
2007年5月于小谷圍島
第1版前言
1. 關于本書
軟件工程是指導計算機軟件開發的工程科學。人們希望通過用工程技術和管理方法使軟件開發工程化,由此產生了軟件工程學。軟件工程學是采用工程的概念、原理、技術與方法,把當前先進的技術與已經實踐證明了的正確管理方法相結合來開發軟件。從20世紀60年代提出軟件工程的概念以來,軟件工程技術逐漸成熟,現在已成為計算機科學技術中的一門重要學科。但是,還有些公司和個人仍然在隨意開發軟件,將編寫高質量的程序與開發系統混為一談,也有些軟件專業的學生或軟件開發人員還沒有掌握軟件開發出現的新技術,鑒于此我們編寫了本書。
本書是作者根據近10年來對軟件工程學、面向對象方法等教學與研究的經驗,以及領導或參與的20項軟件項目開發的實際應用經驗,并結合軟件開發新技術編寫而成。根據過去的教學經驗,讀者學習一門新技術,教材是非常重要的。因此,我們在編寫本書之前,在各方面進行了充分的準備。
2. 本書結構安排
本書由16章構成,內容如下。
第1章: 緒論。介紹的主要內容有軟件的特點、軟件的發展、軟件危機、軟件工程、軟件工程與方法學、軟件工程的基本原理等。
第2章: 軟件工程的基本理論。介紹的主要內容有軟件工程過程、軟件生存周期、軟件生存周期模型、軟件開發方法、軟件開發工具。
第3章: 可行性研究。介紹的主要內容有可行性研究的任務與步驟、系統分析、分析原理、結構化分析、系統流程圖、數據流圖、數據字典、成本效益分析、可行性研究的文檔、項目開發計劃。
第4章: 軟件需求分析與概念模型。介紹的主要內容有需求分析、IDEF方法、概念模型與規范化。
第5章: 總體設計。介紹的主要內容有軟件設計的重要性、設計過程、軟件總體設計、設計基本原理、體系結構設計、結構化設計、IDEF0圖的設計方法、軟件結構優化。
第6章: 軟件細節設計。介紹的主要內容有細節設計任務與方法、設計表示法、結構化程序設計、結構化定理、圖形工具,面向數據結構的設計。
第7章: 面向對象方法學。介紹的主要內容有傳統方法學的缺點、面向對象的基本概念、對象模型、動態模型、功能模型。
第8章: 面向對象分析。介紹的主要內容有面向對象分析的基本過程、對象的發現和標識、發現對象方法、定義屬性、定義服務、定義結構、實例連接、消息連接、建立功能模型。
第9章: 面向對象設計。介紹的主要內容有設計的準則、啟發式規則、系統分解、設計問題域子系統、設計任務子系統、設計數據管理子系統、面向對象程序設計、軟件重用、統一建模語言UML。
第10章: 形式化方法。介紹的主要內容有形式化方法的基礎知識、有限狀態機(FSM)、Petri網的基本原理、凈室方法學、客戶/服務器模式。
第11章: 用戶界面設計。介紹的主要內容有界面軟件開發綜述、人機交互子系統設計、圖形用戶界面設計、多媒體用戶界面設計、用戶界面模型、用戶界面的描述方法與技術等。
第12章: 軟件質量。介紹的主要內容有軟件質量的概述、軟件質量的度量和評價、軟件質量保證、技術評審與審查,軟件的可靠性。
第13章: 軟件實現。介紹的主要內容有程序設計語言的特性及選擇、程序設計風格、程序設計效率、冗余編程、軟件容錯技術。
第14章: 軟件測試。介紹的主要內容有軟件測試概述、測試方法、測試用例的設計、測試過程、調試。
第15章: 軟件維護。介紹的主要內容有軟件維護概述、軟件可維護性、軟件維護的特點、軟件維護的實施、維護“老化代碼”、逆向工程和再工程。
第16章: 軟件項目管理與計劃。介紹的主要內容有軟件項目管理概述、項目管理過程、軟件開發成本估算、風險分析、進度安排、軟件項目的組織。
此外,本書的最后給出了一個附錄,列出了軟件產品的主要文件,以供讀者參考。
3. 本書特點
本書側重于理論聯系實際,從實用性、易懂性出發,重點突出,內容豐富而實用。在詳細介紹理論的同時,給出了部分示例,以利于讀者掌握其實際應用的方法。此外,為了便于讀者鞏固所學的知識,在各章的后面都附有相應的小結與練習題。
4. 適用對象
本書可作為大專院校相關專業高年級學生的教材和參考書,也可供計算機專業的高級人員參考。
本書由李代平編寫,另外張信一參加了第9、11、12章的編寫,彭重嘉參加了第13~16章的編寫。
由于作者水平有限,書中的不足之處在所難免,懇請讀者批評指正。
編者
2002年7月
總體設計的基本目標就是概要地回答系統應該如何實現。設計在任何工程產品或系統中,是開發階段的第一步。設計(Design)可以定義為應用各種技術和原理,對一個設備、一個過程或一個系統,做出足夠詳細的決策,使之有可能在物理上得以實現的過程。
系統的總體設計是在前面系統分析的基礎上,為后期將要構造的系統實體建立一個模型(Model)或表達式(Representation)。與其他學科的工程設計方法一樣,隨著新理論新方法的不斷出現而繼續發展。與其他技術領域比較,軟件設計在它的發展中仍處于早期階段。研究與分析軟件設計問題才不過30年左右的時間。由此可見軟件設計方法還缺少更為經典的工程設計學科所具有的深度、適應性(Flexibility)和定量性質。但是,已經有一些軟件設計技術、設計質量準則及設計符號表示法。
5.1軟件設計的重要性
軟件設計處于軟件工程過程的技術核心地位。軟件開發中不管應用什么樣的開發模式(Development Paradigm),都要進行軟件設計。當軟件需求分析和定義完成后,就進入設計階段。它是在對系統的信息、功能、行為和各種要求理解的基礎上構想未來的系統。這種構想是否正確與完美,需要后面的編碼階段來構造,測試階段來驗證。軟件設計、軟件構造與驗證,這三項活動是必不可少的。每一項都是按一定形式變換信息,最終使之成為被確認的計算機軟件。在軟件工程過程中,這些技術階段的信息流如圖51所示。
由圖51可以看出,在軟件需求提供的信息(Information)、功能(Functional)和行為(Behavioral)模型上,設計階段可以使用任何一種設計方法。設計階段包括: 把分析階段所建立的信息域模型變換為數據結構,這種數據結構是軟件實現所需要的,也包括定義程序結構構件(Structural Components)之間相互關系的體系結構(Architectural)設計。另外還包括變換結構構件為軟件的過程描述的過程(Procedural)設計。源代碼生成并通過測試之后,進行軟件的組裝(Integrate)和確認(Validate)。
在設計中所作的決策將最終影響軟件實現的成功與否,也影響軟件維護的難易程度。所以,在軟件設計過程中的這些決策是開發階段非常關鍵的一步。
軟件設計的重要性還反映在質量(Quality)上。在開發過程中,設計是對軟件最本質的部分進行構造,構造的水平決定軟件質量。同時,設計也提供了可以進行質量評價的軟件表達式。只有通過設計,才能把用戶的需求精確地轉換為完美的軟件系統。軟件設計是整個軟件工程和軟件維護的基礎,如圖52所示。
圖51軟件設計與軟件工程
圖52設計的重要性
對于一個軟件系統,如果不進行設計而構造一個系統,可以肯定這個系統是不穩定的。這個系統即使發生很小的變動,都可能出現故障,而且很難測試,直到軟件工程過程的最后,系統的質量仍無法評價。
5.2設計過程
軟件設計是一個把需求轉換為軟件表達式的過程。這個表達式過程一般情況下是分為兩步走。首先,這種表達式只是描繪一個軟件的概貌。然后,細化為一個非常接近于源代碼的設計表達式。從軟件工程的角度講是分為總體設計和詳細設計。總體設計主要是把需求轉換為數據結構和軟件體系結構,而詳細設計主要集中在體系結構表達式的細化,從而產生詳細的數據結構和軟件的算法表達式。
軟件設計的發展在早期的設計工作中,著重在開發模塊化程序模塊所需要的準則,以及按照自頂向下(TopDown)的方式逐步細化軟件體系結構上。接著設計定義的過程方面逐漸發展成為一種叫做結構化編程(Structured Programming)的原則。之后,提出了把數據流和數據結構翻譯成設計定義的方法。近年來,多采用OO的設計方法。總結過去軟件設計的發展,可以歸納為是一個持續發展的過程。
在比較小的軟件設計中,可以把總體設計和詳細設計作為一個過程階段去完成。但是有一定規模的系統中,總體設計和詳細設計是兩個明確的階段,所以它們中的許多設計活動是不同的。除了數據、體系結構和過程設計之外,在現代的許多應用中還包括界面設計活動。界面設計主要是建立人機之間界面的布局和交互的機制。
圖53設計技術和管理方面
之間的關系
總體設計和詳細設計除了必須有先進的設計技術外,還要有同步的管理技術支持。用如圖53所示的形式表明設計技術和管理方面之間的關系。
從圖53中可以看出,由技術支持的總體設計和詳細設計都伴隨著管理技術。
前面已經提到,軟件設計的重要性之一就是軟件的質量。在整個設計過程中,設計每一步的質量都要進行正式的技術評審(Formal Technical Reviews)。要按照設計準則對設計表達式的質量進行評價。這里給出軟件設計原則如下。
(1) 設計應當模塊化(Modular),也就是說,軟件應被邏輯地劃分為能完成特定功能和子功能的構件。
(2) 設計應形成具有獨立功能特征的模塊(如子程序或過程)。
(3) 設計應使模塊之間和與外部環境之間接口的復雜性盡量地降低。
(4) 設計應該有一個分層的組織結構,這樣人們可對軟件各個構件進行理性的控制。
(5) 設計應有性質不同的可區分的數據和過程表達式。
(6) 設計應利用軟件需求分析中得到的信息和可重復的方法。
……