Saturday, March 12, 2011

軟體設計:設計是什麼?從自身經驗說起

在1992年,Jack W. Reeves發表了一篇"What is Software Design"。主要的論述就是表達"Source code is the design."的看法。

這點也和我自己的經驗不謀而合。在專案的規劃中,我們都把需求(Requirement), 設計(Design)和建構(Construction)分開成為一個循序的過程。設計過程是確保你可以建構出符合需求的working software/component。但是在真實的情況下,我所經歷的設計過程其實是一些不同的Activities不停的來回,而且沒有一定的順序。譬如說:


  • 首先要了解需求,開始設計。
  • 如果設計發現有定義模糊的需求,要進一步和stakeholder釐清。
  • 為了要確保設計是可行的,也須需要做POC(Proof of Concept)。
  • 魔鬼都在細節中。所以POC也不能馬虎,幾乎就是要做到Production品質的Code。
  • 如果POC發現問題,要回頭修正設計。
  • 如果POC發現其他Dependency的元件的問題,也要回頭在設計中考慮workaround。
  • 如果設計怎麼調整都沒有辦法解決,又要回頭修正需求/規格。
  • 甚至設計也有可能會發現需求/規格從未考慮過的事情,必須回頭和stakeholder反應。
  • 需求會中途改變,要重新修正設計,同時又要做POC。
  • ...


這一切的活動幾乎不會有停下來的一天,不過這個過程會逐漸收斂(當然也有可能不會收斂,那可能是某種大災難的指標。)。最終確保我可以建構出符合需求的程式碼,這個過程中也有個副產品,就是程式碼本身。

就譬如設計一台太空梭,為了要驗證太空梭的設計藍圖,團隊就必須打造出一台太空梭來通過各式各樣的測試。團隊可能先做出第一版的太空梭,發現一些問題,在重頭修正,打造第二版的太空梭,不停的重複這個過程,直到打造出大家都有信心把太空人送上天的太空梭。

這真的很難區分工程師到底是在建造還是在設計。很有可能在動手做的過程中,卻啟發了他可以改善設計元素。這就是真實世界的情況。

回到Jack的文章,對我來說Jack就只是希望軟體業界能夠承認這個事實,"Source code is the design."。基於這個事實,我們可能需要一些討論來看"需求, 設計, 建構"這樣的模型,到底適不適合用來詮釋軟體開發的過程。

P.S. 其實軟體專案開發過程中還有品質控管(Quality Control)的階段,為了方便說明,在此簡化了這個部分。

No comments: