面向對象軟體工程:使用UML、模式與Java(第3版)

《面向對象軟體工程:使用UML、模式與Java(第3版)》是2013年出版的圖書,作者是Bernd Bruegge、葉俊民。

編輯推薦

本書反映了作者10多年來構造系統以及教授軟體工程課程的體會。我們發現,學生常常孤立地學習程式設計技術和軟體工程技術,常常選擇小的問題作為研究實例。所帶來的結果是,學生們能夠有效地解決定義明確的問題,但當他們第一次真正面對複雜而真實的開發項目時,常常會感到束手無策。真實的開發過程需要很多不同的技術和工具,要求開發人員之間進行合作。針對這一情況,現今的軟體工程本科課程體系中通常包括一門軟體工程項目管理的課程,講授組織成一個開發項目所必需的知識。

圖書簡介

工具:UML、Java和設計模式
編寫本書時,在我們的頭腦中一直有一個課程項目。這個項目除了可以作為課程設計的項目之外,還可以在其他場合使用,例如用作短期集訓或者短期研發的項目等。我們使用了真實系統中的實例,並檢驗UML、基於Java的技術、設計模式、設計原理、配置管理以及質量控制等現代技術之間的互動。此外,我們討論了與項目管理相關的問題,這些問題與上述技術及其對複雜性和變化的影響相關。

前言

十多年以前,我就了解到由卡耐基·梅隆大學(CMU)的Bernd Bruegge講授的一門軟體工程課程。在很多其他大學的軟體工程課程上,通常的做法是,在一個學期中,將3~4個學生分在一個小組中,並給每一個小組分派幾個小問題或項目,其中每一個小問題或項目的研究周期不超過一個月。在這些小項目中,有一個能力較強的主程式設計師,通常通過該主程式設計師的強力帶動而推動整個小組的工作,以完成這些小項目。在這樣的背景之下,通常學生沒有必要學習溝通技能,沒有必要使用建模工具,也沒必要處理實際問題中所存在的歧義性。在這種環境下培養的學生並沒有學會怎樣去處理開發實際項目時將遇到的各種複雜性問題。在Bruegge教授的課程中,全班同學在整個學期中都在完成同一個項目:為匹茲堡市開發一個面向查詢的導航系統。學生們得在上一個學期學生所開發出的互動系統的基礎上,完成進一步的開發。客戶是市規劃部門的經理和領域權威。在該項目中,地理數據和汽車調度數據存在不精確、格式不兼容的情況,在學年結束時,學生們完成了一個超過27 000行代碼的系統,該系統最終被客戶接受。這一結果與許多其他院校教學中使用的軟體工程小項目相比,有多么大的不同啊!CMU的學生通過學習該課程,理解到了處理現實世界複雜性和雜亂性所需要的策略、組織和工具。學生們通過在實例中實踐來學習軟體工程課程,這是學會任何技藝的必由之路。

本書反映的是將軟體開發作為一門工程學科的實用哲學。作者採用一種觀點——一種使用UML面向對象的方法,這使得軟體工程的許多方面能夠為學生所了解到。這些內容包括完成實際項目所需要的建模技術、人與人之間的溝通技巧。除此之外,還包含了如何管理變化的章節內容,這是每一個實際項目中均會出現的話題,但這一內容在其他的軟體工程書籍中又常常被忽略掉。閱讀本書將會使讀者對軟體工程的豐富範疇及其複雜性有深刻的理解。

目錄

目 錄

譯者的話 I

前言 III

序言 V

致謝 XI

第1部分 開 始

第1章 軟體工程導論 3

1.1 導言:軟體工程的失誤 3

1.2 什麼是軟體工程 5

1.2.1 建模 6

1.2.2 問題求解 7

1.2.3 知識獲取 8

1.2.4 基本原理 8

1.3 軟體工程概念 9

1.3.1 參與者與角色 9

1.3.2 系統與模型 10

1.3.3 工作產品 11

1.3.4 活動、任務與資源 11

1.3.5 功能性需求與非功能性需求 12

1.3.6 記號、方法和方法學 12

1.4 軟體工程開發活動 13

1.4.1 需求獲取 13

1.4.2 分析 14

1.4.3 系統設計 16

1.4.4 對象設計 16

1.4.5 實現 16

1.4.6 測試 17

1.5 管理軟體開發 17

1.5.1 溝通 17

1.5.2 基本原理管理 18

1.5.3 軟體配置管理 18

1.5.4 項目管理 18

1.5.5 軟體生命周期 19

1.5.6 總結 19

1.6 競技場實例分析 19

1.7 推薦讀物 20

1.8 練習 21

第2章 使用UML進行建模 22

2.1 導言 22

2.2 UML綜述 23

2.2.1 用例圖 23

2.2.2 類圖 24

2.2.3 互動圖 25

2.2.4 狀態機 25

2.2.5 活動圖 26

2.3 建模活動中的概念 27

2.3.1 系統、模型和視點 27

2.3.2 數據類型、抽象數據類型和實例 29

2.3.3 類、抽象類和對象 29

2.3.4 事件類、事件和訊息 31

2.3.5 面向對象建模過程 31

2.3.6 約簡表達和原型構造 33

2.4 UML的深入透視 34

2.4.1 用例圖 34

2.4.2 類圖 39

2.4.3 互動圖 47

2.4.4 狀態機 49

2.4.5 活動圖 51

2.4.6 圖的組織 53

2.4.7 圖的擴展 55

2.5 推薦讀物 56

2.6 練習 56

第3章 項目組織和溝通 58

3.1 引言:一個有關火箭的例子 58

3.2 項目綜述 59

3.3 項目管理概念 62

3.3.1 項目管理 62

3.3.2 角色 65

3.3.3 任務和工作產品 67

3.3.4 進度表 68

3.4 項目溝通中的概念 69

3.4.1 計畫內溝通 69

3.4.2 計畫外的溝通 74

3.4.3 溝通機制 77

3.5 有組織的活動 83

3.5.1 加入一個項目團隊 83

3.5.2 使用溝通基礎設施 84

3.5.3 參加項目團隊情況通氣會議 84

3.5.4 組織客戶和項目總結 86

3.6 推薦讀物 87

3.7 練習 87

第2部分 複雜性處理

第4章 需求獲取 91

4.1 引言:可用性實例 91

4.2 對需求獲取的總的看法 92

4.3 需求獲取概念 94

4.3.1 功能需求 94

4.3.2 非功能性需求 94

4.3.3 完全性、一致性、清晰性和正確性 95

4.3.4 現實性、確認和可追蹤性 96

4.3.5 綠地工程、再工程和界面工程 97

4.4 需求獲取活動 97

4.4.1 標識參與者(Actor) 98

4.4.2 標識場景 99

4.4.3 標識用例 101

4.4.4 求精用例 103

4.4.5 標識參與者和用例之間的關係 105

4.4.6 標識初始的分析對象 108

4.4.7 標識非功能性需求 110

4.5 需求獲取管理 111

4.5.1 與客戶協商規格說明:聯合套用設計 112

4.5.2 追蹤性維護 113

4.5.3 需求獲取的編檔 114

4.6 ARENA實例研究 115

4.6.1 初始問題陳述 115

4.6.2 標識參與者和場景 117

4.6.3 標識用例 120

4.6.4 求精用例與標識關係 122

4.6.5 標識非功能性需求 126

4.6.6 應接受的教訓 126

4.7 推薦讀物 127

4.8 練習 128

第5章 分析 130

5.1 導言:光幻影 130

5.2 分析概述 131

5.3 分析的概念 132

5.3.1 對象模型和動態模型分析 132

5.3.2 實體、邊界和控制對象 132

5.3.3 泛化和特化 134

5.4 分析活動:從用例到對象 134

5.4.1 標識實體對象 135

5.4.2 標識邊界對象 137

5.4.3 標識控制對象 138

5.4.4 使用順序圖將用例映射成對象 139

5.4.5 使用CRC卡建模對象之間的互動 142

5.4.6 標識關聯 143

5.4.7 標識聚集 145

5.4.8 標識屬性 146

5.4.9 建模單一對象的狀態相關的行為 147

5.4.10 建模對象之間的繼承關係 148

5.4.11 分析模型評審 148

5.4.12 分析小結 149

5.5 分析管理 150

5.5.1 分析文檔化 151

5.5.2 分配責任 151

5.5.3 對分析的溝通 152

5.5.4 分析模型的疊代 153

5.5.5 客戶發出的結束信息 154

5.6 ARENA案例研究 156

5.6.1 標識實體對象 156

5.6.2 標識邊界對象 159

5.6.3 標識控制對象 160

5.6.4 建模對象之間的互動 161

5.6.5 評價和加固分析模型 163

5.6.6 應該吸取的教訓 165

5.7 推薦讀物 166

5.8 練習 166

第6章 系統設計:分解系統 168

6.1 導言:一個地板規劃的例子 168

6.2 系統設計概述 170

6.3 系統設計概念 171

6.3.1 子系統與類 171

6.3.2 服務與子系統接口 172

6.3.3 耦合與內聚 173

6.3.4 分層與劃分 176

6.3.5 體系結構風格 178

6.4 系統設計活動:從對象到子系統 184

6.4.1 出發點:線路規劃系統的分析模型 184

6.4.2 標識設計目標 186

6.4.3 標識子系統 188

6.5 推薦讀物 190

6.6 練習 190

第7章 系統設計:選擇設計目標 192

7.1 介紹:一個冗餘系統的例子 192

7.2 系統設計活動概述 193

7.3 概念:UML部署圖 195

7.4 系統設計活動:選擇設計目標 196

7.4.1 將子系統映射到處理器和構件上 196

7.4.2 標識並存儲持久性數據 197

7.4.3 提供訪問控制 200

7.4.4 設計全局控制流 205

7.4.5 標識服務 207

7.4.6 標識邊界條件 208

7.4.7 評審系統設計 210

7.5 管理系統設計 212

7.5.1 系統設計編檔 212

7.5.2 責任分配 213

7.5.3 系統設計交流 214

7.5.4 系統設計疊代 215

7.6 ARENA案例研究 216

7.6.1 標識設計目標 216

7.6.2 標識子系統 217

7.6.3 將子系統映射到處理器和構件 218

7.6.4 標識並存儲持久性數據 220

7.6.5 提供訪問控制 220

7.6.6 設計全局控制流 221

7.6.7 標識服務 222

7.6.8 標識邊界條件 224

7.6.9 課程小結 226

7.7 推薦讀物 226

7.8 練習 227

第8章 對象設計:復用模式解決方法 228

8.1 導言:挫折 228

8.2 對象設計總論 230

8.3 復用的概念:解對象、繼承和設計模式 232

8.3.1 套用對象和解對象 232

8.3.2 定義繼承和實現繼承 233

8.3.3 授權 235

8.3.4 Liskov替換準則 235

8.3.5 設計模式中的授權和繼承 236

8.4 復用活動:選擇設計模式和構件 238

8.4.1 使用Bridge模式封裝數據存儲 239

8.4.2 通過Adapter模式封裝遺留構件 240

8.4.3 用Strategy模式封裝上下文 242

8.4.4 使用Abstract Factory模式封裝平台 244

8.4.5 使用Command模式封裝控制流 245

8.4.6 用Composite設計模式封裝層次 246

8.4.7 選擇設計模式的啟發式準則 248

8.4.8 標識和調整套用框架 248

8.5 管理復用 252

8.5.1 文檔編輯復用 253

8.5.2 分配責任 254

8.6 ARENA案例分析 254

8.6.1 使用Abstract Factory設計模式 255

8.6.2 使用Command設計模式 256

8.6.3 使用Observer設計模式 257

8.6.4 課程回顧 257

8.7 推薦讀物 258

8.8 習題 258

第9章 對象設計:說明接口 260

9.1 導言:一個鐵路的例子 260

9.2 接口規格說明概述 261

9.3 接口規格說明概念 262

9.3.1 類實現者、類擴展者和類用戶 263

9.3.2 類型、簽名和可見性 264

9.3.3 契約:不變式、前置條件和後置條件 265

9.3.4 對象約束語言 266

9.3.5 OCL集合:集合、袋以及序列 269

9.3.6 OCL量詞:全稱量詞forAll和存在量詞exists 272

9.4 接口規格說明活動 272

9.4.1 標識遺漏的屬性和操作 273

9.4.2 說明類型、簽名和可見性 274

9.4.3 說明前置條件和後置條件 275

9.4.4 說明不變式 277

9.4.5 繼承契約 278

9.5 對象設計管理 280

9.5.1 對象設計編檔 280

9.5.2 分配責任 285

9.5.3 在需求分析中使用契約 285

9.6 ARENA案例分析 286

9.6.1 標識在系列賽風格TournamentStyle和回合Round中遺漏的操作 286

9.6.2 定義說明系列賽風格TournamentStyle和回合Round中的契約 288

9.6.3 定義說明淘汰賽風格KnockOutStyle和淘汰回合KnockOutRound

??????契約 290

9.6.4 課程回顧 291

9.7 推薦讀物 291

9.8 練習 292

第10章 將模型映射到代碼 294

10.1 導言:一個關於書的例子 294

10.2 映射的概述 295

10.3 映射的概念 296

10.3.1 模型轉換 296

10.3.2 重構 297

10.3.3 正向工程 299

10.3.4 逆向工程 300

10.3.5 轉換原則 300

10.4 映射活動 301

10.4.1 最佳化對象設計模型 301

10.4.2 將關聯映射到集合 304

10.4.3 將契約映射到異常 308

10.4.4 將對象模型映射到持久存儲模式 312

10.5 管理實現 317

10.5.1 編檔過程轉換 317

10.5.2 指派職責 318

10.6 ARENA案例研究 318

10.6.1 競技場系統ARENA中的統計類Statistics 319

10.6.2 將關聯映射到集合 320

10.6.3 將契約映射到異常 322

10.6.4 將對象模型映射到資料庫模式 323

10.6.5 課程回顧 324

10.7 推薦讀物 324

10.8 練習 325

第11章 測試 327

11.1 導言:測試太空梭 327

11.2 測試概述 329

11.3 測試概念 332

11.3.1 故障、錯誤狀態和失效 333

11.3.2 測試用例 335

11.3.3 測試樁和測試驅動 337

11.3.4 更正 337

11.4 測試活動 338

11.4.1 構件檢查 338

11.4.2 可用性測試 339

11.4.3 單元測試 340

11.4.4 集成測試 348

11.4.5 系統測試 352

11.5 管理測試 356

11.5.1 制定測試計畫 356

11.5.2 編寫測試文檔 357

11.5.3 分配職責 359

11.5.4 回歸測試 360

11.5.5 使測試自動化 361

11.5.6 基於模型的測試 362

11.6 推薦讀物 364

11.7 練習 365

第3部分 變更管理

第12章 基本原理管理 369

12.1 引言:將火腿切成薄片 369

12.2 基本原理概述 370

12.3 基本原理概念 372

12.3.1 集中式的交通控制 373

12.3.2 定義問題:問題 374

12.3.3 探索問題空間:提議 375

12.3.4 評價求解空間:標準和討論 376

12.3.5 使求解空間崩潰:解決方案 377

12.3.6 執行解決方案:活動項 378

12.3.7 基於問題的模型和系統實例 379

12.4 基本原理的活動:從問題到決策 382

12.4.1 CTC系統設計 382

12.4.2 在會議中獲取基本原理 383

12.4.3 異步獲取基本原理 389

12.4.4 當討論變更的時獲取的基本原理 391

12.4.5 重新構造基本原理 393

12.5 管理基本原理 395

12.5.1 將基本原理文檔化 395

12.5.2 分配任務 396

12.5.3 關於基本原理交流的啟發式規則 397

12.5.4 問題模型和協商 397

12.5.5 衝突解決策略 399

12.6 推薦讀物 400

12.7 練習 400

第13章 配置管理 402

13.1 引言:一個飛機的實例 402

13.2 配置管理的概要 404

13.3 配置管理的概念 405

13.3.1 配置項和CM聚集 406

13.3.2 版本和配置 406

13.3.3 變化請求 407

13.3.4 升級和發布 407

13.3.5 倉庫和工作空間 407

13.3.6 版本標識方案 408

13.3.7 變化和變化集 409

13.3.8 配置管理工具 410

13.4 配置管理活動 411

13.4.1 配置項和CM聚集標識 413

13.4.2 升級管理 414

13.4.3 發布版本管理 415

13.4.4 分支管理 417

13.4.5 不同版本管理 419

13.4.6 變更管理 421

13.5 對配置管理的管理 422

13.5.1 配置管理的文檔化 422

13.5.2 分配配置管理責任 423

13.5.3 計畫配置管理活動 424

13.5.4 持續集成:測試活動和改進管理 424

13.6 推薦讀物 426

13.7 練習 426

第14章 項目管理 428

14.1 介紹:STS-51L發射決定 428

14.2 項目管理概述 430

14.3 項目管理概念 434

14.3.1 任務和活動 434

14.3.2 工作產品、工作包和角色 435

14.3.3 工作分解結構 436

14.3.4 任務模型 436

14.3.5 技能矩陣 437

14.3.6 組織 438

14.3.7 可視組織結構 440

14.3.8 組織結構圖譜 440

14.3.9 軟體項目管理計畫 441

14.4 項目管理活動 443

14.4.1 計畫項目 444

14.4.2 組織項目 448

14.4.3 控制項目 451

14.4.4 終結項目 455

14.5 Agile項目管理活動 456

14.5.1 項目計畫:創建產品和衝刺後備 457

14.5.2 組織項目 457

14.5.3 控制項目:每一天的衝刺和滅火表(burn down charts) 458

14.5.4 終止項目:對於衝刺的評論 459

14.6 推薦讀物 460

14.7 練習 460

第15章 軟體生命周期 462

15.1 導言:玻利尼西亞航行 462

15.2 IEEE 1074:開發軟體生命周期過程的標準 465

15.2.1 過程與活動 465

15.2.2 軟體生命周期建模 467

15.2.3 項目管理 467

15.2.4 前期開發 468

15.2.5 開發過程 468

15.2.6 後期開發 469

15.2.7 整體過程(交叉開發過程) 470

15.3 評價軟體生命周期模型的成熟度 471

15.4 生命周期模型 472

15.4.1 以順序活動為中心的模型 473

15.4.2 以疊代活動為中心的模型 475

15.4.3 以實體為中心的模型 479

15.5 推薦讀物 481

15.6 練習 481

第16章 方法學:綜合考慮各種因素 483

16.1 導言:首次攀登喬戈里峰(K2峰) 483

16.2 項目環境 486

16.3 方法學問題 488

16.3.1 需要做多少個計畫 488

16.3.2 需要在多大程度上考慮復用 489

16.3.3 需要建多少種模型 489

16.3.4 過程包含多少步驟 490

16.3.5 需要多大程度上的控制和監控 491

16.3.6 什麼時候重定義項目目標 492

16.4 方法學領域 492

16.4.1 Royce方法學 493

16.4.2 極限編程(XP) 496

16.4.3 Rugby方法學 500

16.5 案例學習 505

16.5.1 XP項目:ATRACT 506

16.5.2 局部主客戶:FRIEND 508

16.5.3 分散式項目:JAMES 513

16.5.4 案例學習總結 518

16.6 推薦讀物 521

16.7 練習 521

第4部分 附 錄

附錄A 設計模式 525

A.1 Abstract Factory:封裝平台 525

A.2 Adapter:對遺留代碼的包裝 526

A.3 Bridge:允許選擇性實現 527

A.4 Command:封裝控制流 527

A.5 Composite:表示遞歸的層次結構 528

A.6 Facade:封裝子系統 529

A.7 Observer:將實體從視圖中分離出來 529

A.8 Proxy:封裝開銷大的對象 530

A.9 Strategy:封裝算法 531

A.10 選擇設計模式的啟發式準則 532

附錄B 術語表 533

附錄C 參考文獻 557

相關詞條

熱門詞條

聯絡我們