詳細設計是v模型或者瀑布開發中的乙個重要的環節。這個階段負責把概要設計進行細化,並為**書寫作出指導。可以說是乙個承上啟下的重要環節。
但是現實的情況真的如此嗎?我們來反思一下:
(1)詳細設計和**的吻合程度有多高?
假設在專案中,**在測試後修改完畢提交後,並不修改詳細設計,則詳細設計和**之間並不吻合,並且很大程度上,吻合度會非常低。
如果詳細設計和最終的**並不吻合,那麼這樣的詳細設計並不能給將來的維護帶來任何幫助。
如果詳細設計並不能給後續帶來幫助,為什麼要書寫它呢?
因為——詳細設計是用來指導**書寫的。
(2)詳細設計對**的指導意義有多大?
詳細設計的類圖是用來定義類框架之間的關係的;其中的時序圖(有時也用流程圖)是用來定義方法之間的呼叫關係的。
如果說詳細設計是這麼定義的,那麼為什麼不直接用ide寫成**形式?
因為——詳細設計的過程是需要記錄文件以備後查的。
(3)詳細設計是怎麼複查和修改的?
詳細設計的複查是通過對書寫完成的詳細設計文件進行閱讀和審查,並指出其中可能出現的錯誤和遺漏。
然後針對提出的問題進行修改,直到修改完成為止。
為什麼要這樣複查和修改呢?因為詳細設計的質量提高有助於早期發現問題。
(4)既然詳細設計是用來指導**書寫的,為什麼還需要後續的測試?
換句話說,為什麼詳細設計不能夠100%正確。
這麼問並不是要求把詳細設計100%書寫正確——因為這是個不可能的任務。
詳細設計是乙個猜想的過程,其複查和修改也都是在猜測中完成的。
詳細設計到底做成什麼樣才能夠更有效地指導**書寫呢?
(5)詳細設計的完成是怎麼定義的?
詳細設計的完成指標是:詳細設計的頁數達到若干頁,每頁複查發現的問題達到多少個。
詳細設計是用來指導**書寫的。為什麼不從指導**書寫的方面進行指標定義?
詳細設計還有問題殘留的時候怎麼就開始**書寫了?
現實情況是:詳細設計的完成是以專案經理的喜好決定的——往往是時間壓力決定的,還有時間就繼續寫;沒有時間就算完成了。
(6)為什麼覺得詳細設計是必要的過程?
因為是規定的。因為別人都這麼做。這應該不是答案吧?
那麼到底應該怎麼書寫詳細設計呢?答案是:不寫!理由如下:
(1) 詳細設計的職責不明確
詳細設計名將概要設計細化,並指導**書寫。但是反觀其階段結束時間不明確,並且階段結束的判定標準也沒有對如何指導**書寫進行定義,很難說詳細設計真的是用來指導**書寫還是將概要設計細化的。
(2) 詳細設計沒有生產有價值的產物。
據統計,詳細設計在專案開發過程中所消耗的工時基本上佔編碼和單元測試的一半。但是它的產物——uml圖可以通過直接書寫**,然後從ide匯出生成,這個過程只需要幾秒鐘。
但是詳細設計還是要做的。這不是和前面矛盾嗎?不!
上面說的是寫,這裡說的是做。
有些處理的條件很多,不是三言兩語能夠說清楚的,這時候就需要詳細設計。
比如:乙個由兩組條件決定的處理。從需求角度山來說,通過畫成二維表可以描述清楚其各個條件組合下的行為
a b c
1 a1 b1 c1
2 a2 b2 c2
3 a3 b3 c3
而這個過程並不需要留下文件。
同樣大多數情況來說,根據需求可以直接生成**。
而詳細設計是乙個可以簡化到只要幾分鐘就可以完成的過程。並且,從質量的角度來說,並沒有損失。
設想一下,如果乙個專案可以略掉詳細設計過程,其可以帶來的節省有多大。
如果客戶非要要求詳細設計怎麼辦?
僱傭比軟體工程師便宜的文件人員來根據**反寫詳細設計——因為類圖都可以通過工具生成——所以,所需要的文件人員也很少,工時也很少。
軟體開發過程中的過度設計
在軟體設計過程中,總有以下感慨 1.總以為自己了解了使用者的細節需求 2.在設計階段,花很多時間針對需求中的某些小功能做設計 3.使用者在實際使用中很少使用問題2的 某些小功能 總之,在設計過程中,使用80 的時間處理了20 的不常用的功能,而80 的主要功能,由於在設計階段考慮不周,導致問題百出。...
軟體開發過程中的7大浪費(譯)
1.額外的功能特性 根據standish group 的調查報告,傳統的軟體開發過程製造了大量人們不需要的功能特性 7 always used 13 often used 16 sometimes used 19 rarely used 45 never used 每個功能的實現,都要經歷軟體開發的...
軟體開發過程
1.程式設計師寫出自認為沒有bug的 2.軟體測試,發現了20個bug。3.程式設計師修改了10個bug,並告訴測試組另外10個不是bug。4.測試組發現其中5個改動根本無法工作,同時又發現了15個新bug。5.重複3次步驟3和步驟4。6.鑑於市場方面的壓力,為了配合當初制定的過分樂觀的發布時間表,...