人月神話讀書筆記
2. 必須明確定義體系結構中與先前定義不同的地方,重新定義的詳細程度應該與原先的說明一致。
3. 出于精確性的考慮,我們需要形式化的設計定義,同樣,我們需要記敘性定義來加深理解。
4. 允許體系結構師對實現人員的詢問做出電話應答解釋是非常重要的,并且必須進行日志記錄和整理發布。
5. 項目經理最好的朋友就是他每天要面對的敵人--獨立的產品測試機構/小組。 為什么巴比倫塔會失? 1. 巴比倫塔項目的失敗是因為缺乏交流,以及交流的結果的組織。
2. 因為左手不知道右手在做什么,從而進度災難、功能的不合理和系統缺陷紛紛出現。由于對其他人的各種假設,團隊成員之間的理解開始出現偏差。
3. 團隊應該以盡可能多的方式進行相互之間的交流:非正式、常規項目會議,會上進行簡要的技術陳述、共享的正式項目工作手冊。 胸有成竹 1. 僅僅通過對編碼部分的估計,然后乘以任務其他部分的相對系數,是無法得出對整項工作的精確估計的。
2. 構建獨立小型程序的數據不適用于編程系統項目。
3. 程序開發與程序規模成指數增長趨勢。
4. 當使用適當的高級語言時,程序編制的生產率可以提高5倍。 削足適履
這一章主要是要解決項目投資與磁盤空間和內存之間的矛盾,但是這個矛盾在電腦硬件發展到現在的層次已經可以忽略掉了。
提綱挈領 1. 軟件項目的要求:目標、用戶手冊、內部文檔、進度、預算、組織機構圖和工作空間分配。
2. 即使是小型項目,項目經理也應該在項目早期規范化上述的一系列文檔。 這一章強調文檔重要性,但并沒有將一些教條主義的道理讓你相信文檔的重要性,而是給項目經理給出了實實在在的操作步驟。
未雨綢繆 1. 對于大多數項目,第一個開發的系統并不合用。它可能太慢、太大,而且難以使用,或者三者兼而有之。系統的丟棄和重新設計可以一步完成,也可以一塊塊地實現。這是個必須完成的步驟,如果將開發的第一個系統丟棄原型發布給用戶,可以獲得時間,但是它的代價很高。對于用戶,使用極度痛苦;對于重新開發的人員,分散了精力;對于產品,影響了聲譽,即使最好的再設計也難以挽回名聲。
2. 用戶的實際需要和用戶感覺會隨著程序的構建、測試和使用而變化。
3. 軟件產品易于掌握的特性和不可見性,導致了它的構建人員面臨著永恒的需求變更。
4. 目標和開發策略上的一些正常變化無可避免,事先為它們做準備總比假設它們不會出現要好得多。
5. 對于一個廣泛使用的程序,其維護總成本通常是開發成本的40%或更多。
6. 維護成本受用戶數目的嚴重影響。用戶越多,所發現的錯誤也越多。
7. campbell指出了一個顯示產品生命期中每月bug數的有趣曲線,它先是下降,然后攀升。
8. 缺陷修復總會以(20-50)%的機率引入新的bug。
9. 在每次修復之后,必須重新運行先前所有的測試用例,從而確保系統不會以更隱蔽的方式被破壞。
10. 同樣,設計實現的人員越少、接口越少,產生的錯誤也就越少。
11. 所有修改都傾向于破壞系統的架構,增加了系統的混亂程度。即使是最熟練的軟件維護工作,也只是放緩了系統退化到不可修復混亂的進程。 干將莫邪
項目經理應該制訂一套策略,以及為通用工具的開發分配資源,與此同時,他還必須意識到專業工具的需求。
禍起蕭墻 1. 一天一天的進度落后比起重大災難,更難以識別,更不容易防范和更加難以彌補。
2. 根據一個嚴格的進度表來控制項目的第一個步驟是制訂進度表,進度表由里程碑和日期組成。
3. 里程碑必須是具體的、特定的、可度量的事件,能進行清晰能定義。
4. 如果里程碑定義得非常明確,以致于無法自欺欺人時,程序員很少會就里程碑的進展弄虛作假。 另外一面 1. 對于軟件編程產品來說,程序向用戶所呈現的面貌與提供給機器識別的內容同樣重要。
2. 即使對于完全開發給自己使用的程序,描述性文字也是必須的,因為它們會被用戶和作者所遺忘。
3. 文檔能在整個軟件開發的生命周期對程序員克服懶惰和進度的壓力起促進激勵作用,但向編程人員成功地灌輸對待文檔的積極態度是一件困難的事情。
4. 為了使文檔易于維護,將它們合并至源程序是至關重要的,而不是作為獨立文檔進行保存。 沒有銀彈
人狼的傳說可能有人聽過也可能沒聽過,人狼是一種具有人和狼兩種特征的恐怖生物,而銀彈是消滅它的一種最有效的子彈,如果看過《吸血鬼傳說》也許就能和容易的理解這一點。作者將軟件開發比作人狼,而將提高軟件開發效率的方法比作銀彈。作者預言未來十年,想要試圖通過尋找一種有效地銀彈將軟件開發效率提高一個甚至幾個數量級,這種銀彈不可能出現。
沒有銀彈這篇文章里作者列舉出了當時一些非常先進的技術或思想理念,例如ada和其他高級編程語言、面向對象編程、人工智能、專家系統、"自動"編程、圖形化編程、程序驗證、環境和工具、工作站等。雖然這些先進技術在一定程度上提高了軟件開發的效率,但是始終沒有達到銀彈的效果。距離作者的預言已經過去有20多年了,縱觀現在的軟件開發領域,雖然新技術層出不窮,但是還是沒有一種銀彈能夠讓軟件開發產生一次革命。
焦油坑依然存在
軟件工程的焦油坑在將來很長一段時間內會繼續困擾著人們。由于軟件系統多變性和錯綜復雜性,這個行業只能是一步一個臺階的往上爬,而出現銀彈的希望在我們可以想象的時間范圍內是非常渺茫的。我們將長期與焦油作斗爭。