軟件工程實踐的八大常識

   --- 本文摘選自《軟件工程核心知識》下卷第1093頁,文中所提頁碼都出自該著作。


  “常識” (Commonsense), 即多數人信以爲真並自覺應用的知識, 受社會的普遍認同,反映當時社會的最一般觀念。常識有“內心感官” 之稱, 它如同外部感官(視、聽、嗅、味和觸) 一樣, 能近乎“直覺” 和“本能” 地指導個體實踐。概言之, 常識既是個體學習和實踐的結晶, 又是個體學習和實踐的法寶。


    軟件工程常識是軟件實踐者的法寶, 既包括一些已成功遷移至專業實踐的生活常識, 又包括一些屬於本領域獨有的專業常識。本書一共闡述了55 項常識, 這些都是實踐者最應掌握並自覺應用的核心知識。筆者從中歸納出最基本的八大常識, 列述如下。筆者認爲, 這八大常識應當成爲每一名專業實踐者的“直覺” 或“本能”。

 

常識一:軟件是一類人力、智力、知識和創造力密集的、充滿“人性”的高複雜產品。

  • 大師FrederickBrooks (布魯克斯) 就說過, 軟件是一類創造性的知識密集型產品, 是人類迄今爲止最複雜的製品[Bro86]。
  • 工程師的知識、創造力、技能和情感等因素共同造就了軟件產品的“人性特徵”, 表現爲 產品具有強烈的“唯一性”, 而過程則表現出強烈的“不可重複性”。

常識二:沒有普適的“萬能”模型。(頁162)

  • 軟件工程法則、定律、技術和過程等都僅針對特定應用場景, 無法同等有效地應用於不同團隊和項目。經實踐和研究凝聚而成的行業相關標準也明顯不具有普適性。

常識三:不存在“完美的”軟件產品。

  • 業界著名專家NicholasZvegintzov 就說過, “軟件永不完美, 也永不完整。”
  • 軟件開發團隊永遠得不到準確而完整的需求(頁192), 也永遠得不到所謂最佳的設計方案(頁322), 最終也得不到完美的軟件產品。

常識四:軟件產品必須滿足用戶的現實需要, 進而實現價值/成本比的最大化。

  • 軟件是商品, 一切軟件實踐理所當然地應當考慮成本和價值Ê, 力求最大化價值/成本比(頁24)。軟件的價值主要體現爲功能和質量, 即滿足用戶的現實功能和質量需求的程度。軟件的成本主要是指開發和維護成本。
  • 用戶是軟件產品的直接服務對象; 軟件開發必須儘可能地滿足用戶的現實需要(頁294)。注意, 並不是用戶的所有需要都應得到滿足。典型的, 所有不能爲產品客戶帶來實質價值反饋的用戶需要就不應得到滿足。

常識五:人是軟件實踐的最重要因素。

  • 軟件是人力、智力和知識密集型產品, 實踐者不要幻想能夠全自動地開發出軟件產品。
  • 大型軟件開發超出了單個工程師的腦力和能力範圍, 必須依靠團隊合力(頁964)。誠如Tom DeMarco所言 “團隊協作是推動平凡個體取得非凡成就的燃料” [DL99, 頁178]。

常識六:以一種“足夠簡單”的方式, 完成軟件實踐。

  • 軟件產品本身已然具有高複雜度, 切勿再在開發過程中增添不必要的過程複雜度。爲此, 軟件管理者和工程師都應當選用最簡單而又有效的策略和技術。
  • 在保證設計方案適合於目標軟件及其開發項目的前提之下, 儘可能地簡化, 使之足夠簡單直接(頁439)。類似的, 代碼編寫也應當簡單明瞭(頁513)。同時, 軟件管理者應追求簡單而有效的管理, 不要過度簡化, 更不要複雜化(頁769)。

常識七:階段化開發。

  • 階段化反映出“分而治之” 的傳統智慧。
  • 軟件生命期階段化爲三大主要階段 開發、維護、演化(頁88)。軟件開發過程階段化爲四大主要階段 需求工程、軟件設計、構造和質量控制(包括測試和審查)(頁94)。軟件測試過程又階段化爲四大階段 單元測試、集成測試、系統測試和驗收測試(頁591)。

常識八:將軟件描述成文, 並存檔。

  • 著名軟件工程學者MichaelJackson 就說過, “描述是軟件開發之核。”
  • 軟件需求和設計方案都應當編寫成具有合理結構的技術文檔(頁246)。同時, 軟件過程必須成文, 並共享於團隊(頁891)。
  • 文檔編寫必須講究文風, 合理安排文檔組織結構, 幫助讀者快速而有效地閱讀(頁1007)。以敷衍態度匆忙編寫的技術文檔必定是低質量的(頁1006)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章