本書全面、系統地介紹軟件工程的基本概念、原理和典型的技術方法,在注重軟件工程學科的系統性、原理性的同時,對于軟件工程生命周期的各階段,都有詳細案例對應,讓讀者能夠在了解基本理論知識的基礎上,提升實踐動手能力,把所學內容快速運用到實際項目中。本書內容共分11章:第1章是對軟件工程的概述;第2~5章按照軟件生命周期的開發(fā)順序,以結構化方法為主線,介紹軟件工程各階段的任務、過程、方法和工具;第6章介紹軟件測試;第7~9章結合軟件生命周期過程,以面向對象方法為主線,介紹統一建模語言UML、面向對象分析及過程、面向對象設計及建模、測試等內容;第10章介紹軟件維護;第11章介紹軟件項目管理及CMM。 軟件工程是強調基礎理論與項目實踐緊密結合的學科。因此,本書在講解理論、方法、過程的同時,注重融入實際項目,并在每章后有針對性地提供專門設計的習題,讓讀者更好地在實踐中掌握基礎理論。
本書自2012年6月第1版出版發(fā)行起,至今已出版發(fā)行了3版,且已被全國多所高校選作教材用書,同時也被多所高校選為研究生入學考試參考用書,均取得了良好效果。隨著軟件工程學科的發(fā)展,軟件技術在不斷更新,軟件過程也在不停演化。作者運用近年來從事軟件工程基礎課程和軟件工程綜合訓練實訓課的教學內容,結合軟件開發(fā)的實踐經驗,在延續(xù) 第?3版書整體結構和篇幅基本不變的前提下,對內容做了以下修正和補充。
。1)在國家課程思政背景下,結合教書育人的目標,本書體現三個方面的功能:思想性、知識性、能力性。通過對實際項目的分析,將知識點有效組織和連接,并把思政貫穿軟件生命周期的全過程,真正起到學習兼育人的作用。
(2)修改了第3版中的錯誤,更加規(guī)范和完善了相關的圖、表,對文字敘述進行了進一步的加工和潤色。
(3)根據軟件工程學科發(fā)展和新技術的提出,以及項目實際應用,刪除了部分使用較少的內容。新增及補充部分內容,如軟件的本質、SCRUM、需求分析方法、系統持續(xù)集成、識別用例間行為等。
(4)在修改部分章習題的同時,緊跟時代發(fā)展和應用需求,新增部分綜合練習,目的是讓讀者更好地在實踐中應用軟件工程的基本原理、方法和 工具。
計算機專業(yè)的學生及相關技術人員大多重技術而輕文檔編寫。然而,在近年來廣受關注的敏捷過程的實施和實踐應用中,有效的文檔編寫和文檔管理仍顯示出軟件生命周期的價值和在確保軟件質量上的強大生命力。因此,本書第4版希望通過介紹軟件工程各階段所要編寫的文檔框架,來強調文檔對軟件工程過程實施、軟件質量管理的重要性。
前言的最后給出本書的結構圖,希望能幫助讀者更好地學習軟件工程。
本書結構圖給讀者提供了兩類不同的學習路徑。
學習路徑一:以兩條不同的設計思想為主線,按照前后順序進行學習。全書先基于結構化程序設計思想,介紹軟件工程的基本理論、方法、過程與工具,讓讀者全面了解和掌握軟件工程生命周期各階段的任務、過程、技術、文檔等知識體系。之后基于面向對象程序設計思想,依托統一建模語言UML,深入理解和掌握面向對象的基本概念、封裝性、繼承性和多態(tài)性,完成面向對象軟件工程的分析、設計、實現的軟件生命周期全過程。
學習路徑二:以兩條不同的設計思想為主線,按照結構圖中虛線所連接的各章對照展開學習。這樣的學習思路,是將軟件工程生命周期各階段,按照結構化程序設計思想與面向對象程序設計思想進行對比學習,便于讀者對于項目的同一階段應采用何種方法實施能產生同步比較。
兩種學習路徑都涵蓋了軟件工程各階段知識點,強調基本原理、方法與技術。兩種路徑均以實例為主線,把分散的知識點串聯起來,在注重理論與實踐相結合的同時,強化學習實效。同時,讀者通過對兩類不同設計思想的學習,對比各自軟件過程中的原理與方法,自我分析和總結它們各自的優(yōu)缺點,能更深入理解軟件工程原理與過程,從而理解不同軟件設計思想及開發(fā)方法對軟件分析、實現和維護的影響,以及對軟件質量和項目管理的推動作用。
編者向使用本書進行教學的教師和同學,以及對本書提出建議和意見的教師、學生及讀者表示誠摯的謝意。由于編者水平有限,疏漏、欠妥、謬誤之處在所難免,懇請讀者指正。
本書配套的教學資源包括教學大綱、教學PPT、習題答案和在線題庫,服務支持聯系QQ:381844463。
??????????????????????編 者
于北京理工大學
2023年1月
本書第2版自2015年6月出版以來,被眾多高校選作教材,還作為研究生入學考試的參考書,取得了良好的效果。根據作者近年來從事軟件工程基礎軟件工程綜合訓練的教學,并結合軟件開發(fā)的實踐經驗,在保持原書結構和篇幅基本不變的前提下,對第2版的內容做了以下修正和 補充:
。1)修改了第2版中出現的錯誤,更加規(guī)范和完善相關的圖、表,對文字敘述做了進一步的加工和潤色。
。2)根據軟件工程的發(fā)展,以及項目實際的應用,刪除了部分使用較少的內容,包括4GT過程模型、基于構建的開發(fā)模型、統一建模過程、Worrior圖、管道過濾器模型、面向數據的設計方法、Jackson圖等內容。新增部分內容,包括漸進交付的迭代模型、軟件過程模型的比較、強調數據字典的作用、面向對象的分析過程、基于過程的面向對象集成測試、軟件維護評審等內容,以反映軟件工程的最新發(fā)展。
。3)新增了部分章節(jié)后的習題,目的是讓讀者更好地在實踐中掌握基礎理論。
鑒于技術人員專注技術而輕文檔編寫的實際情況,即使敏捷過程、極限編程等近年來廣泛受到關注,也有一定程度的應用與實踐,但有效的文檔和管理在軟件生命周期中仍有較高價值與強大的生命力。因此,本書第3版仍希望通過介紹軟件工程各階段的文檔框架編寫,來強化文檔對軟件工程實施的重要性。
下面給出本書的結構圖,希望能給讀者更好地學習提供幫助。
在全書的結構圖中,有兩類不同的學習路徑:
一是按照本書的章節(jié)順序進行學習。先以結構化程序設計為主,介紹軟件工程的基本理論、方法、過程與工具;然后以面向對象為主,借助UML統一建模語言,完成對面向對象基本概念、封裝性、繼承性和多態(tài)性的理解,學習面向對象分析與設計的過程。
二是按照結構圖中虛線對應的章節(jié)進行學習。這樣的學習思路,是將軟件工程生命周期的各階段,按照結構化方法和面向對象方法相對比同時進 行。這樣的學習路徑,便于用戶在同一階段、對同一項目采用何種方法進行分析與設計產生同步比較。
無論使用哪種學習路徑進行學習,讀者通過對兩類設計思想的不同及軟件過程的比較,不僅能分析和總結它們各自的優(yōu)缺點,還能更深入理解相同的軟件工程過程結合不同的軟件設計思想,對軟件分析、實現和維護的影響,對軟件質量和管理發(fā)展的推動。
由于作者水平有限,疏漏、欠妥、謬誤之處在所難免,懇請讀者指正。
??????????????????????作 者
于北京理工大學
2019年1月
本書第1版自2012年7月出版以來,作為各類學生授課的教材、不同讀者的參考書,以及一些高校用書,取得了良好效果。然而,隨著軟件工程的發(fā)展,為更好地服務于讀者,編者對原書內容做了認真修改,編寫第 2版。
根據作者近年來從事軟件工程課程教學和軟件開發(fā)的實踐經驗,在保持原書結構和篇幅基本不變的前提下,第2版主要做了以下修正和補充:
(1)修改了第1版中出現的錯誤,更加規(guī)范和完善相關的圖、表,對文字敘述做了進一步的加工和潤色。
。2)增加軟件工程中較重要的內容。增加的內容包括:基于構件的開發(fā)模型,Rational統一建模過程,可行性研究及系統流程圖,需求驗證,管道與過濾器模型,軟件設計驗證,集成測試案例,確認測試案例。
(3)作者認為軟件工程基礎應該注重基礎理論與實踐相結合的理念,因而增加了每章后的習題,特別是增加了實際分析、設計習題,讓讀者更好地在實踐中掌握基礎理論。
鑒于技術人員專注技術而輕文檔編寫的實際情況,本書第2版仍希望 通過介紹軟件工程各階段的編寫文檔框架,來強調文檔對軟件工程實施的 重要性。本書各章節(jié)的安排,是按照以結構化設計思想為基礎,全面介紹軟件工程過程各階段的過程、方法和工具,讓讀者對軟件工程的實施有一個完整、清晰的認識。之后,再以面向對象設計思想為指導,詳細介紹基于面向對象的軟件工程開發(fā)過程。
下面給出本書的結構圖,希望能給讀者更好地學習提供幫助。
建議學習過程:
。1)第1章通過對軟件、軟件生命周期和軟件過程模型的介紹,讓讀者對軟件工程的基本原理、方法、過程有一個基本認識。該章是全書的導論。
。2)第2~6章以結構化方法為依托,按照軟件工程生命周期過程模型的需求分析、概要設計、詳細設計、編碼和測試等階段,全面介紹各階段涉及的過程、方法和工具,讓讀者對結構化軟件工程的實施有一個完整、清晰的認識。
。3)第7~9章以面向對象方法為依托,詳細介紹基于UML的軟件工程,包括面向對象分析、面向對象設計、設計模式、數據設計和測試,使得讀者對面向對象軟件工程的實施有一個完整、清晰的認識。通過對這兩種
方法學的比較,洞悉它們各自的優(yōu)劣,從而更好地掌握和靈活應用。
。4)第10章介紹作為軟件工程最后一個階段的軟件維護的內容和過程,以及如何提高軟件的可維護性,實現軟件再工程。
(5)第11章介紹有關軟件項目管理的基本要求和內容。該章應該貫穿于整個學習過程中,或置于最初進行學習也可行。只有通過合理的軟件項目管理這一平臺,才能按時、保質、保量地完成滿足用戶需求的、高質量的、高可靠性的軟件產品。
。6)最后通過軟件工程綜合訓練,配合一定的項目開發(fā)過程,真正把所學、所掌握的知識融入實際項目中去。
按照這樣的學習過程,讀者通過對兩類設計思想的不同以及軟件過程的比較,不僅能分析和總結它們各自的優(yōu)缺點,還能更深入理解相同的軟件工程過程結合不同的軟件設計思想,對軟件分析、實現和維護的影響,對軟件質量和管理發(fā)展的推動。
由于作者水平有限,疏漏、不妥、錯誤之處在所難免,懇請讀者指正。
??????????????????????作 者
于北京理工大學
2015年1月
軟件是信息化的核心之一,軟件產業(yè)展現國家科技發(fā)展的核心競爭力,體現國家的綜合實力。隨著計算機應用的不斷普及,互聯網應用的不斷深入和網絡技術的不斷發(fā)展,使軟件系統的規(guī)模和復雜度不斷增加,如何確保開發(fā)出符合用戶預期的、質量有保證的軟件系統仍然面臨巨大挑戰(zhàn),軟件危機的障礙仍阻礙軟件的發(fā)展。
作為計算機科學技術的一個重要分支軟件工程學,成為研究軟件需求、開發(fā)、維護、管理的普遍原理和技術相結合的、活躍的研究領域。隨著軟件工程的迅猛發(fā)展,新技術、新方法、新工具不斷涌現,為讀者學習和研究這門學科創(chuàng)造了良好的基礎和難得的機遇。
作為軟件工程學的入門介紹,本書立足于基本的原理、概念、方法和工具,從實用的角度講解軟件系統需求、設計、實現、測試、維護和管理的內容,同時兼顧對軟件工程過程介紹的全面性和系統性。
本書根據作者多年從事軟件工程課程教學和軟件開發(fā)的實踐經驗,在介紹相關理論和過程的基礎上,著重講解軟件工程在實踐中的方法、技術和工具。本書的特點體現在:
。1)減少軟件工程理論的闡述,避免對不同過程和方法的學術討論。
。2)介紹軟件工程理論的基本概念和過程,它們對軟件過程實踐起著 基石和指導作用。
。3)每章最后對各章的主要內容進行總結,便于讀者理解和掌握主要 內容。
。4)鑒于技術人員專注技術而輕文檔編寫的實際情況,書中介紹了軟 件工程各階段需要編寫的文檔框架,并通過實例不斷強調文檔對實施軟件工程的重要性。
。5)本書中的主要案例都來自于作者的研究和實際工程項目,讓讀者 深切感受到書中介紹的理論是如何指導實踐的。
本書各章節(jié)的安排,是以結構化設計思想為基礎,全面介紹軟件工程過程各階段的過程、方法和工具,讓讀者對軟件工程的實施有一個完整、清晰的認識;之后,再以面向對象設計思想為指導,詳細介紹基于面向對象的軟件工程開發(fā)過程。這樣編排的目的,是使讀者通過對兩類設計思想的不同以及軟件過程的比較,不僅能分析它們各自的優(yōu)缺點,還能更深入理解相同的軟件工程過程結合不同的軟件設計思想,對軟件分析、實現和維護的影響,
對軟件質量和管理發(fā)展的推動。
下面簡要介紹本書各章節(jié)的概貌,讓讀者對本書內容有一個提綱挈領的了解。
第1章回顧了軟件危機的產生,介紹軟件工程的產生和發(fā)展,包括軟件工程的基本概念、目標和實施原則。通過對軟件、軟件生命周期和軟件過程模型的介紹,讓讀者對軟件工程的基本原理、方法、過程有一個基本認識。
第2章介紹軟件需求工程的基本概念、任務和原則,并詳細說明結構化分析和建模過程,包括面向數據的數據建模、面向數據流的功能建模和面向狀態(tài)的行為建模。
第3章介紹軟件設計的基本概念、任務和原則,以及目前主流的軟件體系結構設計模型,它們分別是以數據為中心的數據倉庫模型、客戶端/服務器模式的分布式結構模型和層次模型。
第4章從應用角度出發(fā),詳細描述了結構化設計的兩類設計方法:面向數據流的設計方法和面向數據結構的設計方法,及其它們的設計過程。
第5章從軟件工程范疇討論程序實現和編碼,包括程序設計語言的分類、特性、準則及程序編寫規(guī)范等。
第6章介紹進行軟件測試的對象和測試技術。軟件測試對象不僅包括源碼,還包括設計方案、需求說明等軟件工程文檔。測試技術主要介紹白盒測試和黑盒測試。
第7章介紹面向對象軟件工程的建;A。UML通過圖形化的表示機制,為面向對象分析和設計提供統一的、標準化的視圖、圖、模型元素和通用機制,以刻畫面向對象方法。
第8章介紹面向對象分析的建模過程。面向對象分析模型主要由3種獨立模型構成:功能模型、靜態(tài)模型和動態(tài)模型。該章詳細說明作為建;A的靜態(tài)模型的5個層次。
第9章介紹把面向對象分析階段得到的需求模型轉換為符合用戶功能、性能,便于與某種面向對象程序設計語言編程的系統實現方案。
第10章介紹作為軟件工程最后一個階段的軟件維護的內容和過程,以及如何提高軟件的可維護性和實現軟件再工程。
第11章介紹有關軟件項目管理的基本要求和內容。通過對軟件項目的估算、項目進度管理、風險管理、質量管理、配置管理等內容的介紹,明確只有對軟件工程實行全過程的計劃、組織和控制等一系列活動,才能得到符合用戶需求的、高質量且高可靠性的軟件產品。
由于作者水平有限,疏漏、欠妥、謬誤之處在所難免,懇請讀者指正。
??????????????????????作 者
于北京理工大學
2012年1月
第1章 軟件工程概述 1
1.1 軟件工程的發(fā)展歷程 1
1.1.1 軟件危機 1
1.1.2 軟件危機出現的原因 3
1.1.3 軟件的本質特性 4
1.1.4 軟件工程的發(fā)展 5
1.1.5 國內軟件工程及軟件產業(yè)的發(fā)展 6
1.2 軟件工程的概念 7
1.2.1 軟件工程的定義 7
1.2.2 軟件工程的目標 9
1.2.3 軟件工程的實施原則 10
1.2.4 軟件工程的基本原理 11
1.3 軟件與軟件過程 13
1.3.1 軟件的概念 13
1.3.2 軟件的分類 15
1.3.3 軟件生命周期 16
1.3.4 軟件過程 17
1.4 軟件過程模型 19
1.4.1 瀑布模型 19
1.4.2 原型模型 20
1.4.3 增量模型 21
1.4.4 螺旋模型 22
1.4.5 噴泉模型 23
1.4.6 敏捷過程模型 23
1.4.7 漸進交付迭代模型 26
1.4.8 軟件過程模型的比較 28
1.5 軟件開發(fā)方法 28
1.5.1 結構化開發(fā)方法 29
1.5.2 面向對象開發(fā)方法 29
1.6 案例描述 30
1.6.1 簡歷信息自動獲取和查詢系統 30
1.6.2 試卷自動生成系統 31
1.7 本章小結 32
習題 33
第2章 軟件需求工程 35
2.1 軟件需求的基本概念 35
2.1.1 需求分析的任務 35
2.1.2 需求分析的原則 36
2.1.3 需求分析的內容 37
2.1.4 需求分析的方法 38
2.2 可行性分析 39
2.2.1 可行性分析的內容 40
2.2.2 系統流程圖 41
2.3 需求工程的過程 42
2.3.1 需求工程中的參與人員 42
2.3.2 需求工程中的活動 43
2.3.3 需求工程的管理 44
2.4 需求獲取技術 45
2.5 結構化需求分析和建模 48
2.5.1 結構化需求分析概述 48
2.5.2 面向數據的數據建模 49
2.5.3 面向數據流的功能建模 50
2.5.4 面向狀態(tài)轉換的行為建模 56
2.6 數據字典 58
2.6.1 數據字典的編寫要求 58
2.6.2 數據字典的定義 59
2.7 案例簡歷信息自動獲取和查詢系統的需求建模 61
2.7.1 數據建模E-R圖描述 61
2.7.2 功能建模數據流圖 61
2.7.3 行為建模狀態(tài)轉換圖 63
2.7.4 加工邏輯PDL語言的描述 63
2.7.5 數據字典 63
2.8 需求評審 65
2.8.1 軟件需求規(guī)格說明 65
2.8.2 需求評審標準及需求驗證 68
2.8.3 需求變更管理 70
2.9 本章小結 71
習題 72
第3章 軟件設計基礎 75
3.1 軟件設計概述 75
3.1.1 軟件設計與軟件需求 75
3.1.2 軟件設計的任務 76
3.1.3 軟件設計的原則 78
3.2 軟件體系結構設計 79
3.2.1 體系結構設計概述 79
3.2.2 以數據為中心的數據倉庫模型 80
3.2.3 客戶端/服務器模式的分布式結構 81
3.2.4 層次模型 83
3.2.5 MVC模型 84
3.3 模塊化設計 85
3.3.1 軟件模塊化與分解 85
3.3.2 抽象 86
3.3.3 信息隱藏 87
3.3.4 模塊獨立性 88
3.3.5 啟發(fā)式規(guī)則 91
3.4 界面設計 94
3.4.1 界面設計的任務 94
3.4.2 界面設計的原則 95
3.4.3 界面設計的特性 96
3.5 軟件設計評審 96
3.5.1 軟件設計規(guī)格說明 96
3.5.2 軟件設計評審標準 100
3.5.3 軟件設計驗證 101
3.6 本章小結 102
習題 103
第4章 結構化設計方法 105
4.1 結構化設計方法概述 105
4.2 面向數據流的設計方法 106
4.2.1 層次圖和結構圖 106
4.2.2 變換分析法 108
4.2.3 事務分析法 111
4.2.4 混合分析法 113
4.3 案例簡歷信息自動獲取和查詢系統的數據流設計方法 114
4.3.1 用變換分析法進行設計 114
4.3.2 用事務分析法進行設計 115
4.3.3 兩種方法的比較 116
4.4 結構化詳細設計的工具 117
4.4.1 程序流程圖 117
4.4.2 盒圖 118
4.4.3 問題分析圖 119
4.4.4 判定樹 121
4.4.5 判定表 121
4.4.6 詳細設計工具的比較 123
4.5 本章小結 124
習題 124
第5章 軟件實現 127
5.1 軟件實現的任務 127
5.2 程序設計語言 128
5.2.1 程序設計語言的分類 128
5.2.2 程序設計語言的特性 129
5.2.3 選擇程序設計語言 130
5.3 程序設計風格 131
5.3.1 程序編排和組織的準則 132
5.3.2 程序設計的效率 136
5.4 軟件重用 138
5.5 代碼評審 139
5.6 本章小結 142
習題 143
第6章 軟件測試 146
6.1 軟件測試基礎 146
6.1.1 軟件測試概念 146
6.1.2 軟件測試過程模型 147
6.1.3 軟件測試原則 149
6.1.4 軟件測試在軟件開發(fā)各階段的工作流程 151
6.1.5 軟件測試信息流 153
6.1.6 軟件測試技術分類 153
6.2 白盒測試 155
6.2.1 邏輯覆蓋 155
6.2.2 循環(huán)測試 158
6.2.3 路徑測試 160
6.3 黑盒測試 163
6.3.1 等價類劃分 164
6.3.2 邊界值分析 165
6.3.3 錯誤推測法 166
6.3.4 因果圖法 167
6.4 白盒測試和黑盒測試的比較 169
6.4.1 應用角度的不同 169
6.4.2 白盒測試的優(yōu)點與不足 170
6.4.3 黑盒測試的優(yōu)點與不足 170
6.5 軟件測試策略 170
6.5.1 單元測試 171
6.5.2 集成測試 173
6.5.3 確認測試 177
6.5.4 系統測試 178
6.6 調試 180
6.6.1 軟件調試過程 180
6.6.2 軟件調試方法 181
6.7 持續(xù)集成 182
6.7.1 持續(xù)集成的概念 182
6.7.2 持續(xù)集成的原則 183
6.8 軟件測試報告 184
6.8.1 軟件測試說明 184
6.8.2 軟件測試報告 185
6.9 本章小結 186
習題 187
第7章 統一建模語言UML 190
7.1 UML的發(fā)展 190
7.1.1 UML的產生 190
7.1.2 UML的構成 191
7.1.3 UML的特點 192
7.2 面向對象基礎 192
7.2.1 面向對象的基本概念 192
7.2.2 共享 198
7.3 UML視圖 198
7.4 UML的圖和模型元素 200
7.4.1 用例圖 200
7.4.2 類圖 202
7.4.3 包圖 203
7.4.4 狀態(tài)圖 204
7.4.5 活動圖 204
7.4.6 順序圖 206
7.4.7 協作圖 206
7.4.8 構件圖 207
7.4.9 配置圖 208
7.5 UML的關系 209
7.5.1 關聯關系 209
7.5.2 泛化關系 211
7.5.3 依賴關系 215
7.5.4 實現關系 216
7.6 UML的通用機制 216
7.6.1 修飾 217
7.6.2 注釋 217
7.6.3 規(guī)格說明 217
7.6.4 擴展機制 217
7.7 基于UML的軟件過程 219
7.8 本章小結 221
習題 222
第8章 面向對象分析 224
8.1 面向對象分析概述 224
8.1.1 傳統軟件過程中的不足 224
8.1.2 面向對象的特點 225
8.1.3 面向對象分析的基本過程 226
8.1.4 面向對象分析的3類模型 226
8.1.5 靜態(tài)模型的5個層次 227
8.2 建立功能模型(用例模型) 228
8.2.1 識別參與者 229
8.2.2 識別用例 229
8.2.3 識別用例間關系 231
8.2.4 識別用例間行為 231
8.2.5 用例描述文檔 233
8.3 建立靜態(tài)模型(對象模型) 234
8.3.1 識別類與對象 234
8.3.2 劃分主題 236
8.3.3 確定結構 237
8.3.4 確定屬性 238
8.3.5 確定服務 238
8.3.6 類圖描述文檔 239
8.3.7 包圖描述文檔 240
8.4 建立動態(tài)模型 241
8.4.1 建立順序圖及其描述文檔 241
8.4.2 建立狀態(tài)圖及其描述文檔 243
8.4.3 建立協作圖及其描述文檔 244
8.4.4 建立活動圖及其描述文檔 245
8.5 會議中心系統的面向對象分析案例研究 246
8.5.1 建立功能模型用例分析 247
8.5.2 建立靜態(tài)模型5層結構 247
8.5.3 建立動態(tài)模型交互行為 250
8.6 本章小結 251
習題 251
第9章 面向對象設計 254
9.1 面向對象設計概述 254
9.1.1 面向對象分析與設計的關系 254
9.1.2 面向對象設計原則 255
9.2 精化類及類間關系 256
9.2.1 設計類的屬性 256
9.2.2 設計類的方法 257
9.2.3 設計類間泛化關系 257
9.2.4 優(yōu)化設計 259
9.3 數據設計 261
9.3.1 基于關系數據庫的數據設計 261
9.3.2 基于其他方式的數據設計 264
9.4 人機交互設計 264
9.5 建立實現模型 265
9.5.1 構件圖及其描述文檔 265
9.5.2 配置圖及其描述文檔 267
9.6 設計模式簡介 268
9.6.1 概述 268
9.6.2 Singleton模式 269
9.6.3 Abstract Factory模式 271
9.6.4 Mediator模式 272
9.6.5 Adapter模式 275
9.6.6 Iterator模式 277
9.6.7 State模式 279
9.7 面向對象的測試 281
9.7.1 面向對象測試概述 281
9.7.2 面向對象的類測試 282
9.7.3 基于過程的面向對象單元測試 287
9.8 本章小結 288
習題 289
第10章 軟件維護 292
10.1 軟件維護概述 292
10.1.1 軟件維護的任務 292
10.1.2 軟件維護的特點 293
10.1.3 軟件維護的分類 293
10.2 軟件維護過程 294
10.2.1 軟件維護方式 295
10.2.2 軟件維護管理的基本內容 296
10.2.3 維護中存在的問題 301
10.2.4 維護活動記錄 302
10.3 軟件的可維護性 302
10.3.1 可維護性因素 302
10.3.2 提高軟件的可維護性 303
10.4 逆向工程 306
10.5 軟件維護評審 307
10.5.1 軟件維護規(guī)格說明文檔 307
10.5.2 軟件維護評審 310
10.6 本章小結 311
習題 312
第11章 軟件項目管理 314
11.1 軟件項目管理概述 314
11.1.1 軟件項目管理的特點和內容 314
11.1.2 軟件項目管理目標 315
11.1.3 軟件項目管理的4P觀點 316
11.2 軟件項目規(guī)模度量 317
11.2.1 代碼行技術 318
11.2.2 功能點計算 319
11.2.3 代碼行與功能點間的轉換 322
11.3 軟件項目估算 322
11.3.1 代碼行和功能點的其他估算模型 323
11.3.2 專家估算模型 323
11.3.3 Putnam模型 324
11.3.4 COCOMO模型 324
11.3.5 項目估算模型的小結 326
11.4 項目進度管理 327
11.4.1 項目進度控制 327
11.4.2 甘特圖 328
11.4.3 工程網絡圖 329
11.5 項目風險管理 331
11.5.1 軟件風險概念 331
11.5.2 風險管理過程 331
11.6 項目質量管理 335
11.6.1 軟件質量因素 335
11.6.2 軟件質量保證活動 339
11.6.3 軟件質量保證計劃 340
11.7 軟件配置管理 341
11.7.1 軟件配置項 342
11.7.2 配置管理過程 342
11.7.3 軟件配置管理計劃 345
11.8 項目人員組織管理 346
11.8.1 團隊組織 347
11.8.2 團隊組織方式 347
11.9 軟件能力成熟度模型 349
11.9.1 基本概念 349
11.9.2 軟件能力成熟度模型等級 350
11.9.3 關鍵過程域 351
11.10 本章小結 352
習題 353
參考文獻 356
X
軟件工程基礎(第4版)
XVII
目錄