軟體開發相關的讀書筆記 問題與方法

UDvoid發表於2014-11-13

軟體開發相關的讀書筆記 問題與方法

https://www.zybuluo.com/UDvoid/note/45720
標籤: 讀書筆記 軟體開發


關於銀彈的討論

[No Silver Bullet: Essence and Accidents of Software Engineering][1]

作者在全文主要討論了軟體開發過程中許多難以解決的問題和當下出現的一些致力於使軟體開發更加敏捷高效的方法;
用作者的話來說,當下的許多軟體專案具有人狼的特性,往往看似簡單的專案卻會在開發過程中出現許多難以預料的問題,人們渴求類似銀彈的大殺器可以對所有的問題給出一個通用的解決方案,但至今為止依舊沒有任何突破性的進展,可以說,這樣的銀彈是不存在的;
軟體工程中問題有兩個部分,一部分是在軟體固有的困難,如軟體的概念結構的設計、演算法、模組間的相互聯絡等;另一部分是在軟體生產過程中的一些問題,如語言本身侷限性導致的實現上的複雜度的升高、團隊見的合作問題導致的時間開銷的增大等;
對於固有困難,作者從複雜度、一致性、可變性和不可見性4個方面進行了分析,這些特性也是相互影響的;
軟體和硬體不同,硬體的很多部分是不斷重複的元件,而軟體卻是必須由一個個不同的模組構成,即使有重複的需求也可以通過模組呼叫的方式去除。因此,軟體本身就具有複雜性這一本質屬性。這是軟體的的優點也是其問題的源泉:軟體的複雜性導致了開發人員間溝通的問題、軟體的擴充也變得困難;
在很多情況下,軟體開發必須保證介面的一致,或者說一致性的維護就是開發的目標,而這樣的需求背後是複雜度的增大,這是任何再設計都沒有辦法簡化的;
隨著計算機平臺以及作業系統等的飛速發展,往往需要軟體開發者被動地去適應,不斷維護軟體與相應平臺的一致性;而人們對於軟體功能的不斷變化的需求也給軟體本身造成了不斷擴充的壓力;
除此之外,軟體概念結構的複雜性和內部各種相互依賴關係使得我們難以將其完整地視覺化,這限制了軟體結構的設計和理解;
以上問題都是軟體本質上的困難,而那些次要的、生產環節上的問題卻在優化解決方面有了許多進展;
高階語言簡化了實現功能和設計的難度,成倍提升了軟體開發的效率;統一的程式設計環境使得概念設計中的相互呼叫等變得相對易於實現;物件導向程式設計的方法,允許採用較高層次的方式表示設計;
現在我們所不斷探求的是針對固有困難的解決方案,比較可行的是增量開發的模式。增量開發模擬自然界中的逐步發育成長,採用自頂向下的開發方法,快速進行原型的開發,並不斷保證系統的可執行與有機成長,不斷地迭代需求使功能逐步發展成型。

[There Is a Silver Bullet][2]
本文討論了當前的一些先進的解決軟體行業本質性問題的方案,物件導向程式設計方法和增量開發的模式算是軟體行業的一次變革。
和從前過程式的設計方式不一樣,物件導向程式設計方法更好地把問題中的實體抽象成一個個類,把過程模組化,模組之間的聯絡變得易於描述,有效降低了軟體複雜度帶來的設計和理解的困難;
增量開發的方法,是物件導向思想的擴充,快速構建原型,成長式地根據需求不斷維護各個功能模組,有效分割了問題,開發者不用關心其他部分的具體功能。這樣使得開發更加高效敏捷,節省了開發的時間成本;

大泥球

[Big Ball of Mud][3]
大泥球,指雜亂無章、錯綜複雜、邋遢不堪、隨意拼貼的大堆程式碼。
大泥球往往會有程式碼資料的不當暴露、或者在執行過程中會進入其他模組的內部等等問題,導致模組間的混亂的呼叫關係以及大量的冗餘;

大泥球的成因主要有:

  1. 一次性程式碼
  2. 碎片式增長
  3. 為了簡單解決問題
  4. copy/paste導致問題程式碼擴散

一次性程式碼大多是沒有考慮設計的,程式碼本身就有一定的架構上問題,而由於大部分開發者的惰性或是為了降低開發成本,直接將這些實際已被放棄的程式碼進行復用,反而使得自己的程式碼更加臃腫和雜亂無章。
另一方面,當使用者的需求更新過快時,由於開發者的應對過晚和前期設計的不足,現有程式碼架構更新的成本相對難以接受,導致程式碼開始出現大泥球,並隨著碎片式增長擴大;
大部分大泥球的產生更多地來自開發迭代過程中遇到的問題,這就需要我們在設計的初期儘可能考慮到可能的變化並預留擴充的空間;同時,在軟體質量下降時,簡單的重構是必要的。在我看來,這是“好的設計”的重要部分。
[1]: http://www.cs.umd.edu/class/spring2003/cmsc838p/General/NoSilverBullet.html
[2]: http://www.drdobbs.com/there-is-a-silver-bullet/184407534/
[3]: http://www.laputan.org/mud/

相關文章