內容簡介
該書從面向對象范型出發對軟體工程進行重新演繹,全面、系統、清晰地介紹了面向對象軟體工程的基本概念、原理、方法和工具,通過實例說明了面向對象軟體開發的整個過程。是一部值得推薦的經典之作。
《面向對象軟體工程》分為兩個部分:第一部分介紹了面向對象軟體工程的基本理論;第二部分以工作流的形式介紹了軟體生命周期。
《面向對象軟體工程》特色
●包括面向對象生命周期模型、面向對象分析、面向對象設計,以及面向對象軟體的測試和維護。
●討論了文檔、維護、復用、可移植性、測試和CASE工具等的重要性。
●包括了能力成熟度模型(CMM)和人員能力成熟度模型(P-CMM)的內容。
●與語言無關。實例代碼對於C++和Java語言背景的讀者同樣清晰。
●包括600餘篇當前熱點研究文章、經典文獻和書籍的參考文獻。
●包含2個用於說明完整軟體生命周期的運行實例,還有7個較小的實例,分別用於突出說明特定的主題。
●包括5種類型的習題,分別是概念理解、項目分析、課程設計、論文研讀和實例修改。
面向對象軟體工程方法具有下述4個特點:
(1) 把對象作為融合了數據及在數據上的操作行為的統一軟體構架,用對象分解取代了傳統方法的功能分解
(2) 把所有對象都劃分為類。每個類定義了一組數據和一組操作,類是對具有相同數據和相同操作的一組相似對象的定義
(3) 按照父類與子類的關係,把若干個相關類組成一個層次結構的系統。下層派生類自動擁有上層基類中定義的數據和操作,這種現象稱為繼承
(4) 對象彼此之間僅能通過傳送訊息互相聯繫,對象的所有私有信息都被封裝在該對象內,不能從外界直接訪問,這就是封裝性
作者簡介
StephenR.Schach,1972年獲魏茲曼科學院理科碩士學位,1973年獲開普敦大學套用數學博士學位,任教於美國范德比爾特大學計算機科學系。他著有多部有關軟體工程、面向對象軟體工程、面向對象系統分析與設計的教材。他還在國際上廣泛講授軟體工程方面的課程,包括復用、CASE和面向對象范型等。
圖書目錄
出版者的話
譯者序
前言
第一部分面向對象軟體工程簡介
第1章面向對象軟體工程的範疇3
1.1歷史方面4
1.2經濟方面6
1.3維護方面6
1.3.1現代軟體維護觀點8
1.3.2交付後維護的重要性9
1.4需求、分析和設計方面10
1.5團隊開發11
1.6沒有計畫階段的原因12
1.7沒有測試階段的原因12
1.8沒有文檔階段的原因13
1.9面向對象范型13
1.10術語15
1.11道德規範問題17
本章回顧18
延伸閱讀材料18
習題19
參考文獻20
第2章軟體生命周期模型23
2.1理想軟體開發23
2.2Winburg小型案例研究23
2.3Winburg小型案例研究經驗25
2.4TealTractors公司小型案例研究25
2.5疊代與增量26
2.6Winburg小型案例研究再探28
2.7疊代和增量的風險及其他29
2.8管理疊代與增量31
2.9其他生命周期模型31
2.9.1邊寫邊改生命周期模型32
2.9.2瀑布生命周期模型32
2.9.3快速原型生命周期模型33
2.9.4開源生命周期模型34
2.9.5敏捷過程35
2.9.6同步穩定生命周期模型37
2.9.7螺旋生命周期模型38
2.10生命周期模型的比較40
本章回顧41
延伸閱讀材料41
習題42
參考文獻43
第3章軟體過程46
3.1統一過程47
3.2疊代與增量48
3.3需求工作流49
3.4分析工作流50
3.5設計工作流51
3.6實現工作流52
3.7測試工作流52
3.7.1需求製品53
3.7.2分析製品53
3.7.3設計製品53
3.7.4實現製品53
3.8交付後維護54
3.9退役55
3.10統一過程的階段55
3.10.1初始階段56
3.10.2細化階段57
3.10.3構造階段58
3.10.4移交階段58
3.11一維與二維生命周期模型對比59
3.12改進軟體過程60
3.13能力成熟度模型60
3.14軟體過程改進的其他方面62
3.15軟體過程改進的成本與收益62
本章回顧64
延伸閱讀材料64
習題65
參考文獻65
第4章軟體團隊68
4.1團隊組織68
4.2民主團隊方式69
4.3主程式設計師團隊方式70
4.3.1《紐約時報》項目71
4.3.2主程式設計師團隊方式的不切實際性72
4.4超越主程式設計師和民主團隊72
4.5同步-穩定團隊73
4.6敏捷過程團隊74
4.7開源編程團隊74
4.8人力資源能力成熟度模型75
4.9選擇合適的團隊組織75
本章回顧76
延伸閱讀材料76
習題77
參考文獻77
第5章軟體工程工具79
5.1逐步求精79
5.2成本-效益分析法82
5.3軟體度量83
5.4CASE84
5.5CASE的分類85
5.6CASE的範圍86
5.7軟體版本88
5.7.1修訂版89
5.7.2變體89
5.8配置控制89
5.8.1交付後維護期間的配置控制91
5.8.2基線91
5.8.3產品開發過程中的配置控制91
5.9建造工具92
5.10使用CASE技術提高生產力93
本章回顧93
延伸閱讀材料93
習題94
參考文獻95
第6章測試97
6.1質量問題97
6.1.1軟體質量保證98
6.1.2管理獨立性98
6.2基於非執行的測試99
6.2.1走查99
6.2.2管理走查100
6.2.3審查100
6.2.4走查和審查的對比102
6.2.5評審的優缺點102
6.2.6審查的度量方法102
6.3基於執行的測試103
6.4應該測試什麼103
6.4.1實用性104
6.4.2可靠性104
6.4.3健壯性104
6.4.4性能105
6.4.5正確性105
6.5測試與正確性證明106
6.5.1正確性證明的例子106
6.5.2正確性證明小型實例研究108
6.5.3正確性證明和軟體工程109
6.6由誰來完成基於執行的測試111
6.7測試何時停止112
本章回顧112
延伸閱讀材料112
習題113
參考文獻114
第7章從模組到對象117
7.1什麼是模組117
7.2內聚119
7.2.1偶然性內聚119
7.2.2邏輯性內聚120
7.2.3時間性內聚120
7.2.4過程性內聚121
7.2.5通信性內聚121
7.2.6功能性內聚121
7.2.7信息性內聚121
7.2.8內聚示例122
7.3耦合122
7.3.1內容耦合122
7.3.2公共耦合123
7.3.3控制耦合124
7.3.4印記耦合125
7.3.5數據耦合125
7.3.6耦合示例126
7.3.7耦合的重要性126
7.4數據封裝127
7.4.1數據封裝和開發128
7.4.2數據封裝和維護129
7.5抽象數據類型133
7.6信息隱藏134
7.7對象135
7.8繼承、多態和動態綁定137
7.9面向對象范型139
本章回顧140
延伸閱讀材料141
習題141
參考文獻142
第8章可復用性和可移植性144
8.1復用的概念145
8.2復用的障礙146
8.3復用案例研究147
8.3.1雷錫恩飛彈系統部門147
8.3.2歐洲航天局148
8.4對象和復用149
8.5在設計和實現過程中的復用149
8.5.1設計復用149
8.5.2套用架構150
8.5.3設計模式151
8.5.4軟體體系結構152
8.5.5基於組件的軟體工程153
8.6關於設計模式的更多內容153
8.6.1FLIC小型案例研究153
8.6.2適配器設計模式154
8.6.3橋接設計模式154
8.6.4疊代器設計模式155
8.6.5抽象工廠設計模式156
8.7設計模式的範疇159
8.8設計模式的優點和缺點159
8.9復用和交付後的維護160
8.10可移植性161
8.10.1硬體的不兼容性161
8.10.2作業系統的不兼容性162
8.10.3數值計算軟體的不兼容性162
8.10.4編譯器的不兼容性163
8.11為什麼需要可移植性165
8.12實現可移植性的技術166
8.12.1可移植的系統軟體166
8.12.2可移植的套用軟體166
8.12.3可移植數據167
8.12.4基於Web的應用程式167
本章回顧168
延伸閱讀材料168
習題169
參考文獻170
第9章計畫與估算174
9.1計畫活動與軟體過程174
9.2估算項目周期和成本175
9.2.1產品規模的衡量標準176
9.2.2成本估算技術178
9.2.3中級COCOMO180
9.2.4COCOMOII182
9.2.5跟蹤周期和成本估算183
9.3估算探討183
9.4軟體項目管理計畫的組成184
9.5軟體項目管理計畫框架185
9.6IEEE軟體項目管理計畫186
9.7對測試進行計畫188
9.8培訓需求188
9.9文檔標準189
9.10計畫和估算的CASE工具189
9.11測試軟體項目管理計畫190
本章回顧190
延伸閱讀材料190
習題191
參考文獻192
第二部分軟體生命周期工作流
第10章需求工作流196
10.1確定什麼是客戶所需196
10.2需求工作流概述197
10.3域的理解197
10.4業務模型198
10.4.1訪談198
10.4.2其他技術198
10.4.3用例199
10.5初始需求200
10.6對套用域的初始理解:MSG基金會實例研究200
10.7初始業務模型:MSG基金會實例研究202
10.8初始需求:MSG基金會實例研究204
10.9需求工作流繼續:MSG基金會實例研究205
10.10修訂需求:MSG基金會實例研究206
10.11測試工作流:MSG基金會實例研究211
10.12什麼是面向對象的需求217
10.13快速原型218
10.14人為因素218
10.15復用快速原型219
10.16需求工作流的CASE工具220
10.17需求工作流的度量220
10.18需求工作流的挑戰220
本章回顧221
延伸閱讀材料222
習題222
參考文獻223
第11章分析工作流224
11.1規格說明文檔224
11.2非形式化規格說明225
11.3小型案例研究的正確性證明回顧226
11.4分析工作流227
11.5實體類的提取228
11.6電梯問題228
11.7功能建模:電梯問題案例研究229
11.8實體類建模:電梯問題案例研究230
11.8.1名詞提取230
11.8.2CRC卡片232
11.9動態建模:電梯問題案例研究233
11.10測試工作流:電梯問題案例研究235
11.11提取邊界類和控制類237
11.12初始功能建模:MSG基金會案例研究238
11.13初始類圖:MSG基金會案例研究239
11.14初始動態建模:MSG基金會案例研究240
11.15修訂實體類:MSG基金會案例研究242
11.16提取邊界類:MSG基金會案例研究243
11.17提取控制類:MSG基金會案例研究243
11.18用例實現:MSG基金會案例研究243
11.18.1EstimateFundsAvailableforWeek用例244
11.18.2ManageanAsset用例248
11.18.3UpdateEstimatedAnnualOperatingExpenses用例251
11.18.4ProduceaReport用例252
11.19類圖增量:MSG基金會案例研究256
11.20軟體項目管理計畫:MSG基金會案例研究257
11.21測試工作流:MSG基金會案例研究257
11.22統一過程中的規格說明文檔257
11.23更多關於參與者和用例的內容258
11.24支持分析工作流的CASE工具259
11.25分析工作流的挑戰259
本章回顧259
延伸閱讀材料260
習題260
參考文獻262
第12章設計工作流264
12.1面向對象設計264
12.2面向對象設計:電梯問題案例研究268
12.3面向對象設計:MSG基金會案例研究270
12.4設計工作流272
12.5測試工作流:設計273
12.6測試工作流:MSG基金會案例273
12.7詳細設計的形式化技術273
12.8實時設計技術274
12.9用於設計的CASE工具274
12.10設計的度量275
12.11設計工作流面臨的挑戰276
本章回顧277
延伸閱讀材料277
習題277
參考文獻278
第13章實現工作流280
13.1選擇程式語言280
13.2良好的編程實踐282
13.2.1使用一致和有意義的變數名282
13.2.2自文檔化代碼的問題283
13.2.3使用參數284
13.2.4為增加可讀性的代碼編排284
13.2.5嵌套的if語句285
13.3編碼標準286
13.4代碼復用286
13.5集成286
13.5.1自頂向下的集成287
13.5.2自底向上的集成288
13.5.3三明治集成288
13.5.4集成技術289
13.5.5集成管理290
13.6實現工作流290
13.7實現工作流:MSG基金會案例研究290
13.8測試工作流:實現290
13.9測試用例的選擇290
13.9.1規格說明測試與代碼測試291
13.9.2規格說明測試的可行性291
13.9.3代碼測試的可行性291
13.10黑盒單元測試技術293
13.10.1等價測試和邊界值分析293
13.10.2功能測試294
13.11黑盒測試用例:MSG基金會案例研究294
13.12玻璃盒單元測試技術296
13.12.1結構測試:語句、分支和路徑覆蓋296
13.12.2複雜性度量297
13.13代碼走查和審查298
13.14單元測試技術的比較298
13.15淨室298
13.16測試中的問題299
13.17單元測試的管理方面內容301
13.18何時重寫而不是調試代碼製品301
13.19集成測試302
13.20產品測試303
13.21驗收測試303
13.22測試流:MSG基金會案例研究304
13.23用於實現的CASE工具304
13.23.1軟體開發全過程的CASE工具304
13.23.2集成開發環境304
13.23.3商業套用環境305
13.23.4公共工具基礎結構305
13.23.5環境的潛在問題306
13.24測試工作流的CASE工具306
13.25實現工作流的度量306
13.26實現工作流面臨的挑戰307
本章回顧307
延伸閱讀材料308
習題309
參考文獻310
第14章交付後維護313
14.1開發與維護313
14.2為什麼交付後維護是必要的314
14.3交付後維護程式設計師要求具備什麼314
14.4交付後維護小型案例研究316
14.5交付後維護的管理317
14.5.1缺陷報告317
14.5.2授權對產品的修改318
14.5.3確保可維護性318
14.5.4反覆維護的問題319
14.6維護問題319
14.7交付後維護技能與開發技能321
14.8逆向工程321
14.9交付後維護期間的測試322
14.10交付後維護的CASE工具323
14.11交付後維護的度量323
14.12交付後維護:MSG基金會案例研究323
14.13交付後維護面臨的挑戰323
本章回顧323
延伸閱讀材料324
習題324
參考文獻325
第15章UML的進一步討論327
15.1UML不是一種方法學327
15.2類圖327
15.2.1聚合328
15.2.2多重性329
15.2.3組合329
15.2.4泛化330
15.2.5關聯330
15.3注釋330
15.4用例圖330
15.5構造型331
15.6互動圖331
15.7狀態圖333
15.8活動圖335
15.9包335
15.10組件圖336
15.11部署圖336
15.12UML圖回顧336
15.13UML和疊代336
本章回顧337
延伸閱讀材料337
習題337
參考文獻337
附錄338
附錄A學期項目:Osric辦公用品和裝飾公司項目338
附錄B軟體工程資源340
附錄C需求工作流:MSG基金會案例研究341
附錄D分析工作流:MSG基金會案例研究341
附錄E軟體工程管理計畫:MSG基金會案例研究341
附錄F設計工作流:MSG基金會案例研究345
附錄G實現工作流:MSG基金會案例研究(C++版)349
附錄H實現工作流:MSG基金會案例研究(Java版)349
附錄I測試工作流:MSG基金會案例研究350
……