第I 部分 奠定基礎
第1 章 歡迎來到軟件構建的世界 3
第2 章 有助于更充分理解軟件開發(fā)的隱喻 9
第3 章 謀定而后動:前期準備 23
第4 章 關鍵的“構建”決策 61
第II 部分 創(chuàng)建高質量的代碼
第5 章 軟件構建中的設計 73
第6 章 可以工作的類 125
第7 章 高質量的例程 161
第8 章 防御性編程 187
第9 章 偽代碼編程過程 215
第III 部分 變量
第10 章 變量中使用的一般性難題 237
第11 章 變量名的力量 259
第12 章 基本數(shù)據(jù)類型 291
第13 章 不常用的數(shù)據(jù)類型 319
第IV 部分 語句
第14 章 直線性代碼的組織 347
第15 章 條件語句的使用 355
第16 章 控制循環(huán) 367
第17 章 不太常見的控制結構 391
第18 章 表驅動的方法 411
第19 章 常見的控制難題 431
第V 部分 代碼改進
第20 章 軟件質量的全景觀 463
第21 章 協(xié)同構建代碼 479
第22 章 開發(fā)人員和測試 499
第23 章 調試 535
第24 章 重構 563
第25 章 代碼調優(yōu)策略 587
第26 章 代碼調優(yōu)技術 609
第VI 部分 系統(tǒng)級考量
第27 章 程序規(guī)模對構建的影響 649
第28 章 對軟件構建進行管理 661
第29 章 集成 689
第30 章 編程工具 709
第VII 部分 軟件匠藝
第31 章 布局和風格 729
第32 章 自帶文檔說明的代碼 777
第33 章 個性 819
第34 章 軟件工藝的話題 837
第35 章 更多信息來源 855
參考文獻 863
索引 883
詳細目錄
第I 部分 奠 定 基 礎
第1章 歡迎來到軟件構建的世界 3
1.1 什么是軟件構建? 3
1.2 軟件構建的重要性 6
1.3 如何閱讀本書 8
第2章 有助于更充分理解軟件開發(fā)的隱喻 9
2.1 隱喻的重要性 9
2.2 如何使用軟件隱喻 11
2.3 常見的軟件隱喻 13
第3章 謀定而后動,前期準備 23
3.1 先決條件的重要性 24
3.2 確定要開發(fā)什么類型的軟件 31
3.3 定義問題的先決條件 36
3.4 需求的先決條件 38
3.5 架構的先決條件 43
3.6 花在事前先決條件上的時間 55
第4章 關鍵的構建決策 61
4.1 編程語言的選擇 61
4.2 編程約定 66
4.3 評估自己在技術浪潮中的位置 66
4.4 選擇主流的構建實踐 69
第II 部分 創(chuàng)建高質量的代碼
第5章 軟件構建中的設計 73
5.1 設計挑戰(zhàn) 74
5.2 關鍵的設計概念 77
5.3 設計構建塊:啟發(fā)式 87
5.4 設計實踐 110
5.5 點評各種流行的方法論 118
第6章 可以工作的類 125
6.1 類的基礎知識 126
6.2 何為好的類的接口 133
6.3 設計和實現(xiàn)有哪些難題 143
6.4 創(chuàng)建類的理由 152
6.5 特定于語言的難題 156
6.6 超越類:軟件包 156
第7章 高質量的例程 161
7.1 基于合理緣由來創(chuàng)建例程 164
7.2 在例程層級的設計 168
7.3 何為好的例程名稱 171
7.4 一個例程多長為好? 173
7.5 如何使用例程的參數(shù) 174
7.6 使用函數(shù)時候的特殊考量 181
7.7 宏例程和內聯(lián)例程 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 關于防御性編程,要慎重 210
第9章 偽代碼編程過程 215
9.1 總結構建類和例程的步驟 216
9.2 Pro偽代碼 218
9.3 使用PPP構建例程 220
9.4 PPP的備選方案 232
第III 部分 變 量
第10章 變量使用中的一般性難題 237
10.1 數(shù)據(jù)的含義 238
10.2 讓變量聲明變得簡單一些 239
10.3 初始化變量指導方針 240
10.4 范圍 244
10.5 持久化 251
10.6 綁定時間 252
10.7 數(shù)據(jù)類型和控制結構的關系 254
10.8 變量名稱要精準體現(xiàn)其用途 255
第11章 變量名的力量 259
11.1 選擇好名稱時的注意事項 259
11.2 特定數(shù)據(jù)類型的命名 264
11.3 命名約定的力量 270
11.4 非正式化命名約定 272
11.5 標準化前綴 279
11.6 名稱要言簡意賅 282
11.7 要避免哪些類型的名稱 285
第12章 基礎數(shù)據(jù)類型 291
12.1 數(shù)字 292
12.2 整數(shù) 293
12.3 浮點數(shù) 295
12.4 字符和字符串 297
12.5 布爾變量 301
12.6 枚舉類型 303
12.7 命名常量 307
12.8 數(shù)組 310
12.9 創(chuàng)建自己的類型(類型別名) 311
第13章 不常用的數(shù)據(jù)類型 319
13.1 結構 319
13.2 指針 323
13.3 全局數(shù)據(jù) 335
第IV 部分 語 句
第14章 直線性代碼的組織 347
14.1 必須按特定順序組織的語句 347
14.2 順序無所謂的語句 351
第15章 條件語句的使用 355
15.1 if語句 355
15.2 case語句 361
第16章 控制循環(huán) 367
16.1 如何選擇循環(huán)的類型 367
16.2 對循環(huán)進行控制 373
16.3 輕松創(chuàng)建循環(huán)—由內而外 385
16.4 循環(huán)和數(shù)組之間的相關性 387
第17章 不太常見的控制結構 391
17.1 子例程的多種返回路徑 391
17.2 遞歸 393
17.3 goto語句 398
17.4 如何看待不同尋常的控制結構 408
第18章 表驅動的方法 411
18.1 常見考量 411
18.2 直接方案表 413
18.3 索引訪問表 425
18.4 單步訪問表 426
18.5 其他的表查找范例 429
第19章 常見的控制難題 431
19.1 布爾表達式 431
19.2 復合語句(塊) 443
19.3 Null語句 444
19.4 搞定危險的深度嵌套 445
19.5 編程基礎:結構化編程 454
19.6 控制結構與復雜性 456
第V 部分 代碼改進
第20章 軟件質量的全景觀 463
20.1 軟件質量具備哪些特征 463
20.2 軟件質量改進技巧 466
20.3 質量技術的相對有效性 469
20.4 質量保障何時做 473
20.5 軟件質量的一般性原則 474
第21章 協(xié)作構建代碼 479
21.1 協(xié)作開發(fā)實踐概覽 480
21.2 結對編程 483
21.3 正式檢查 485
21.4 其他類型的協(xié)作開發(fā)實踐 492
第22章 開發(fā)人員和測試 499
22.1 開發(fā)人員的測試角色 500
22.2 建議開發(fā)人員如何做測試 503
22.3 測試技巧匯總 505
22.4 典型錯誤 517
22.5 支持測試的工具 523
22.6 如何改進測試 528
22.7 保留測試記錄 529
第23章 調試 535
23.1 調試難題概覽 535
23.2 發(fā)現(xiàn)缺陷 540
23.3 修復缺陷 550
23.4 調試過程中的心理學考量 554
23.5 調試工具:明顯的和不太明顯的 556
第24章 重構 563
24.1 軟件演進的幾種類型 564
24.2 重構介紹 565
24.3 特定類型的重構 571
24.4 以安全的方式重構 579
24.5 重構策略 582
第25章 代碼調優(yōu)策略 587
25.1 性能概覽 588
25.2 代碼調優(yōu)簡介 591
25.3 蜜糖和哥斯拉 597
25.4 度量 603
25.5 迭代 605
25.6 總結代碼調優(yōu)的幾種方式 606
第26章 代碼調優(yōu)技術 609
26.1 邏輯 610
26.2 循環(huán) 616
26.3 數(shù)據(jù)轉換 624
26.4 表達式 630
26.5 子例程 639
26.6 用低級別的語言重寫代碼 640
26.7 變動越大,越要大部分一致 643
第VI 部分 系統(tǒng)級考量
第27章 程序規(guī)模對代碼構建的影響 649
27.1 通信和大小 650
27.2 項目大小的范圍 651
27.3 項目大小對錯誤的影響 651
27.4 項目大小對生產力的影響 653
27.5 項目大小對開發(fā)活動的影響 654
第28章 對軟件構建進行管理 661
28.1 鼓勵寫好代碼 662
28.2 配置管理 664
28.3 對構建日程表進行評估 671
28.4 度量 677
28.5 以人為本,程序員首先是人 680
28.6 向上管理 686
第29章 集成 689
29.1 集成方法的重要性不可小覷 689
29.2 集成的頻率,按階段還是按增量? 691
29.3 增量集成策略 694
29.4 每日構建和冒煙測試 702
第30章 編程工具 709
30.1 設計工具 710
30.2 源代碼工具 710
30.3 可執(zhí)行代碼工具 716
30.4 面向工具的編程環(huán)境 720
30.5 自己構建編程工具 721
30.6 工具魔境 722
第VII 部分 軟件匠藝
第31章 布局和風格 729
31.1 布局基礎 730
31.2 布局 736
31.3 布局風格 738
31.4 控制結構的布局 745
31.5 單條語句的布局 753
31.6 注釋的布局 763
31.7 子例程的布局 766
31.8 類的布局 768
第32章 自帶文檔說明的代碼 777
32.1 內部文檔 777
32.2 編程風格也是一種文檔 778
32.3 注釋,加還是不加,這是個問題 781
32.4 有效注釋的關鍵 785
32.5 加注釋的技術 792
32.6 IEEE標準 813
第33章 個性 819
33.1 個性和軟件構建主題有關系嗎 820
33.2 精明和謙遜 821
33.3 好奇心 822
33.4 睿智的真誠 826
33.5 交流與合作 828
33.6 創(chuàng)造性和規(guī)范性 829
33.7 懶有懶的道理 830
33.8 性格其實沒有太大關系 830
33.9 習慣 833
第34章 軟件匠藝的話題 837
34.1 征服復雜性 837
34.2 選擇適合自己的流程 839
34.3 寫程序的時候,首先考慮到人,
其次才考慮機器 841
34.4 寫程序的時候,思維優(yōu)先,不要受限于語言 843
34.5 專注于編程約定的幫助文檔 844
34.6 以問題域來考慮編程 845
34.7 注意落石 848
34.8 迭代、重復,反復練習 850
34.9 軟件與信仰,各自心生歡喜 851
第35章 更多信息來源 855
35.1 與軟件構建相關的信息 856
35.2 軟件構建之外的話題 857
35.3 期刊 859
35.4 軟件開發(fā)人員的閱讀計劃 860
35.5 加入專業(yè)組織 862