第一章 焦油坑
- 程式 ≠ 軟體系統產品:
- 程式(Program):寫程式的人在開發環境能夠執行的程式碼。
- 軟體產品(Programming Product):通過完整的測試案例(Test Case),讓任何人在多種環境下,用不同的資料都能執行、測試、修改和擴充的程式;並且具備完整的文件。所需時間至少為程式的三倍。
- 軟體系統(Programming System):遵循共同的資料格式與合作模式,彼此能夠順利交互作用的一組程式集合,包含需經過設計規劃整體資源限制:記憶體大小、輸出入裝置、執行速度等。完整一個組件(Component)的時間至少為一個程式的三倍。
- 軟體系統產品(Programming System Product):結合上述 2、3 點,是大部分軟體工程企圖要做出來的東西。
- 寫程式的美麗與哀愁:
美麗:
- 創造的樂趣,將憑空的想法化作實際功能。
- 能創造對別人有用的東西。
- 寫程式類似推理解謎的過程。
- 需持續學習,重複性低。
哀愁:
- 必須完美,而人類不習慣做到這麼完美。
- 擁有的權力不足以承擔扛下的責任。
- 需依賴團隊合作。
- Bug。
- 曠日廢時開發完成後已經落伍,不過通常只是對手的虛張聲勢,無論如何已經做出來的東西擺出來就是一種優勢。
第二章 人月神話
- 專案進行得不順利大都是缺乏良好的時程規劃
- 規劃時程過於樂觀,報出來的時間是以開發過程一切順利為前提估的。
- 增加人手等於推進專案速度,在軟體專案上未必成立。當工作可以被切分,而且投入工作的人彼此不用溝通,事情的推進速度才會跟工作人數成正相關,而像是軟體開發這樣系統性的工作溝通成本很高,這個成本容易蓋掉新增人力所省下的時間。
- 作者的經驗法則中,軟體專案的時間佔比:1/3 規劃 + 1/6 寫程式 + 1/4 組件及早期系統測試 + 1/4 系統測試,完成所有組件。
- 客戶的催促對工作的實際完成時間不會有什麼影響,像是廚師,菜還沒做好只能等,不然就得吃生的,或是廚師趕時間亂做的;然而在軟體界,用錯誤的時程配合顧客期望的現象,較其他工程領域還要普遍。