第Ⅰ部分 奠定基礎
第1 章 歡迎來到軟件構建的世界 003
1.1 什么是軟件構建 003
1.2 軟件構建為何如此重要 006
1.3 如何閱讀本書 008
第2 章 通過隱喻更充分地理解軟件開發(fā) 009
2.1 隱喻的重要性 009
2.2 如何使用軟件隱喻 012
2.3 常見的軟件隱喻 013
第3 章 謀定而后動:前期準備 023
3.1 前期準備的重要性 024
3.2 確定要開發(fā)什么類型的軟件 030
3.3 定義問題的先決條件 034
3.4 需求的先決條件 036
3.5 架構的先決條件 041
3.6 前期準備所花費的時間 052
第4 章 關鍵的構建決策 057
4.1 編程語言的選擇 057
4.2 編程約定 062
4.3 判斷個人處于技術浪潮中的哪個階段 062
4.4 選擇重要的構建實踐 065
第II 部分 高質量的代碼
第5 章 軟件構建的設計 069
5.1 設計挑戰(zhàn) 070
5.2 關鍵設計概念 073
5.3 設計構建基塊:啟發(fā)式方法 083
5.4 設計實踐 107
5.5 點評各種流行的方法論 115
第6 章 可以工作的類 121
6.1 類的基礎:抽象數據類型(ADT) 122
6.2 良好的類接口 129
6.3 設計和實現問題 139
6.4 創(chuàng)建類的理由 149
6.5 語言特定問題 153
6.6 超越類:包 153
第7 章 高質量的子程序 157
7.1 創(chuàng)建子程序的正當理由 160
7.2 子程序級別的設計 165
7.3 好的子程序名稱 169
7.4 一個子程序應該有多長 171
7.5 如何使用子程序參數 173
7.6 函數使用中的特別注意事項 180
7.7 宏子程序和內聯子程序 182
第8 章 防御式編程 187
8.1 保護程序,使其免受無效輸入的影響 188
8.2 斷言 189
8.3 錯誤處理技術 194
8.4 異常 198
8.5 隔離程序,使之包容由錯誤造成的損害 203
8.6 調試輔助代碼 205
8.7 確定在生產代碼中保留多少防御式代碼 209
8.8 對防御式編程采取防御的姿態(tài) 211
第9 章 偽代碼編程過程 215
9.1 類和子程序構建步驟總結 215
9.2 面向專家的偽代碼 218
9.3 使用PPP 構建子程序 220
9.4 PPP 的替代方案 233
第Ⅲ部分 變量
第10 章 變量使用中的常規(guī)問題 239
10.1 數據掃盲 240
10.2 簡化變量聲明 241
10.3 變量初始化指南 242
10.4 作用域 247
10.5 持久性 254
10.6 綁定時間 255
10.7 數據類型和控制結構之間的關系 257
10.8 每個變量只有一個用途 258
第11 章 變量名稱的威力 263
11.1 選擇好名稱的注意事項 263
11.2 特定數據類型的命名 269
11.3 命名規(guī)范的威力 275
11.4 非正式的命名規(guī)范 276
11.5 前綴的標準化 283
11.6 創(chuàng)建可讀的短名稱 286
11.7 變量名稱避坑指南 289
第12 章 基本數據類型 295
12.1 一般的數字 296
12.2 整型 297
12.3 浮點型 299
12.4 字符和字符串 302
12.5 布爾變量 305
12.6 枚舉類型 307
12.7 具名常量 312
12.8 數組 314
12.9 創(chuàng)建自定義類型( 類型別名) 316
第13 章 不常見的數據類型 323
13.1 結構體 323
13.2 指針 327
13.3 全局數據 340
第Ⅳ部分 語句
第14 章 直線型代碼的組織 353
14.1 順序攸關的語句 353
14.2 順序無關的語句 356
第15 章 使用條件語句 361
15.1 if 語句 361
15.2 case 語句 367
第16 章 控制循環(huán) 373
16.1 選擇循環(huán)類型 373
16.2 控制循環(huán) 379
16.3 輕松創(chuàng)建循環(huán):由內而外 391
16.4 循環(huán)和數組的對應關系 393
第17 章 不常見的控制結構 395
17.1 子程序中的多個返回點 395
17.2 遞歸 397
17.3 goto 語句 402
17.4 眾說紛紜,談談不常見的控制結構 413
第18 章 表驅動法 417
18.1 表驅動法使用總則 417
18.2 直接訪問表 419
18.3 索引訪問表 431
18.4 階梯訪問表 433
18.5 表查詢的其他示例 436
第Ⅴ部分 代碼改進
第20 章 軟件質量概述 469
20.1 軟件質量的特性 469
20.2 改進軟件質量的技術 472
20.3 質量保證技術的相對效能 475
20.4 何時進行質量保證 479
20.5 軟件質量的普遍原理 479
第21 章 協同構建 483
21.1 協同開發(fā)實踐概述 484
21.2 結對編程 487
21.3 正式審查 489
21.4 其他類型的協同開發(fā)實踐 496
第22 章 開發(fā)人員測試 503
22.1 開發(fā)者測試對軟件質量所起的作用 504
22.2 開發(fā)人員測試的推薦方法 507
22.3 一些測試技巧 509
22.4 典型錯誤 522
22.5 測試支持工具 528
22.6 改進測試 534
22.7 維護測試記錄 535
第23 章 調試 541
23.1 調試問題概述 541
23.2 發(fā)現缺陷 546
23.3 修復缺陷 557
23.4 調試中的心理因素 560
23.5 那些顯而易見和不太明顯的調試工具 563
第24 章 重構 569
24.1 軟件演變的類型 570
24.2 重構簡介 571
24.3 特定的重構 577
24.4 安全重構 585
24.5 重構策略 587
第25 章 代碼調優(yōu)策略 591
25.1 性能概述 592
25.2 代碼調優(yōu)簡介 595
25.3 各式各樣的臃腫和蜜糖 601
25.4 度量 607
25.5 迭代 608
25.6 代碼調優(yōu)方法總結 609
第26 章 代碼調優(yōu)技術 613
26.1 邏輯 614
26.2 循環(huán) 619
26.3 數據變換 628
26.4 表達式 633
26.5 子程序 642
26.6 用低級語言重新編碼 643
26.7 改得越多,越不會有大的改觀 646
第Ⅵ部分 系統化考慮
第27 章 程序規(guī)模對構建的影響 651
27.1 溝通和規(guī)模 651
27.2 項目規(guī)模的范圍 652
27.3 項目規(guī)模對錯誤的影響 653
27.4 項目規(guī)模對生產力的影響 655
27.5 項目規(guī)模對開發(fā)活動的影響 656
第19 章 常規(guī)控制問題 437
19.1 布爾表達式 437
19.2 復合語句( 語句塊) 448
19.3 空語句 449
19.4 駕馭深層嵌套 451
19.5 編程基礎:結構化編程 460
19.6 控制結構與復雜度 462
第28 章 管理構建 663
28.1 鼓勵良好的編碼實踐 664
28.2 配置管理 666
28.3 評估構建進度表 673
28.4 度量 679
28.5 以人為本,善待每一位程序員 683
28.6 向上管理 689
第29 章 集成 693
29.1 集成方法的重要性 693
29.2 集成的頻率,階段式還是增量式 695
29.3 增量式集成策略 698
29.4 每日構建和冒煙測試 707
第30 章 編程工具 715
30.1 設計工具 716
30.2 源代碼工具 716
30.3 可執(zhí)行碼工具 721
30.4 面向工具的環(huán)境 726
30.5 自己動手寫編程工具 726
30.6 工具的幻境 728
第Ⅶ部分 軟件匠藝
第31 章 代碼的布局和風格 733
31.1 基本理論 734
31.2 布局技術 741
31.3 布局風格 743
31.4 控制結構的布局 750
31.5 單條語句的布局 757
31.6 注釋的布局 768
31.7 子程序的布局 771
31.8 類的布局 772
第32 章 自文檔代碼 781
32.1 外部文檔 781
32.2 編程風格即文檔 782
32.3 注釋,還是不注釋 785
32.4 高效注釋的關鍵 788
32.5 注釋的技術 795
32.6 IEEE 標準 815
第33 章 個人性格 821
33.1 個人性格與本書主題有關 822
33.2 聰明與謙卑 823
33.3 好奇心 824
33.4 理性誠實 827
33.5 溝通與合作 830
33.6 創(chuàng)造力與規(guī)范 830
33.7 懶惰 831
33.8 沒有想象中那么重要的性格因素 832
33.9 習慣 833
第34 章 關于軟件匠藝 837
34.1 征服復雜性 837
34.2 優(yōu)選開發(fā)過程 839
34.3 編寫程序時,先考慮人,再考慮機器 840
34.4 深入語言去編程,而不是用語言來編程 842
34.5 借助于規(guī)范來保持專注 843
34.6 面向問題域編程 844
34.7 當心落石 846
34.8 迭代,迭代,迭代,重要的事情說三遍 848
34.9 警惕編程中的執(zhí)念 849
試驗 851
第35 章 更多信息來源 853
35.1 與軟件構建相關的信息 853
35.2 軟件構建之外的話題 854
35.3 出版物 856
35.4 軟件開發(fā)者的閱讀計劃 857
35.5 加入專業(yè)組織 859
參考文獻 861