軟件分析 Vs. 架構設計 (原文最終修訂於 2006-05-29 下午06:44:14)

何謂軟件分析(analyse)?它有沒有一個成文的定義?如果你曾讀過軟件教科書或是著作,就會發現有多少個作者,就有多少種分析的定義。具有諷刺意味的是,我們知道軟件分析是必不可缺的,但卻沒有其真正的定義。

一個用來區分軟件分析與設計(design)的普遍方法是認爲分析指“做什麼” ,而設計指“怎麼做”。乍聽起來很有信服力,很顯然,如果能在一開始就知道想要系統“做什麼”,那至於系統應該“怎麼做”就會更容易。實際上,過去在嘗試區分“做什麼”與“怎麼做”上花費了大量的人力。在一間會議室裏,與會人員都在不停的爭論着到底他們現在做的是分析還是設計。像上述情形其實屢見不鮮。

這樣的爭論比比皆是的原因是,對於這樣一個特定的情形來說,每一個“做什麼”也是“怎麼做”,而每一個“怎麼做”也是“做什麼”。討論是不會有結果的,那是因爲其實雙方都是對的。如果用“做什麼”和“怎麼做”來定義分析和設計的話,那麼任何一個分析的概念也是設計的概念,反之亦然。

下面來示範一下任何一個“做什麼”也是“怎麼做”與反之的情況,仔細考慮一下我現在所做的。

我現在在做什麼呢?我在寫一篇blog。

我現在在怎麼做呢?我在筆記本上打字;

我現在在做什麼呢?我在筆記本上打字。

我現在在怎麼做呢?我在移動手指去敲擊鍵盤,隨之,這些所敲擊的字母就組成了單詞;

我現在在做什麼呢?我在移動手指去敲擊鍵盤,隨之,這些所敲擊的字母就組成了單詞。

我現在在怎麼做呢?我大腦中的感知部分正把一些單詞組織在一起,接着指導大腦的行動部分就發送信號到了肌肉,然後就控制了手指。

我可以一直這樣做下去。實際上,我可以一直做下去的意思是,“做什麼”和“怎麼做”是相輔相成的,它們共同引導着朝向細節的遞歸過程。任何一個“怎麼做”都是下一個階段遞歸裏的“做什麼”;任何一個“做什麼”都是上一個階段中的“怎麼做”。遞歸的階段數目非常巨大,甚至可能是無窮大。這就意味着,“做什麼”與“怎麼做”的區別僅僅相差一個無窮小,所以實質上是相同的。

所以,對於所有的實際情況來說,如果我們視分析爲“做什麼”而設計爲“怎麼做”的話,它們就是互不分離的同等過程。所有的分析都是設計,所有的設計也都是分析。

 

 (原文鏈接網址:http://www.butunclebob.com/ArticleS.UncleBob.AnalysisVsDesign; Robert C. Martin的英文blog網址: http://www.butunclebob.com/ArticleS.UncleBob 

作者簡介:Robert C. MartinObject Mentor公司總裁,面向對象設計、模式、UML、敏捷方法學和極限編程領域內的資深顧問。他不僅是Jolt獲獎圖書《敏捷軟件開發:原則、模式與實踐》(中文版)(《敏捷軟件開發》(英文影印版))的作者,還是暢銷書Designing Object-Oriented C++ Applications Using the Booch Method的作者。MartinPattern Languages of Program Design 3More C++ Gems的主編,並與James Newkirk合著了XP in Practice。他是國際程序員大會上著名的發言人,並在C++ Report雜誌擔任過4年的編輯。

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