做軟件以來,這個話題一直是自己很郁悶的一個地方,我們來看看軟件開發的過程,軟件開發的過程無論是采用傳統的瀑布、如今的迭代等方式都是一個需求-->設計-->實現的過程,在這整個過程當中,每個環節都要有個完成的標識,并且需要成為下一環節的前置條件、參考依據,這個時候通常的做法都是通過提供文檔的方式,但是在我所經歷的開發當中,我最郁悶的也是這點,需求這部我沒什么疑問,我覺得產生需求文檔是必須的,但其實就我所經歷的開發來看,我認為需求文檔對于用例最好不是僅僅依賴于描述,描述是沒人會仔細去看的,而最好是UI原型圖,這樣對于用例的表達會清晰些,當然,有些復雜的部分仍然需要通過描述的方式。
來看設計部分,在這個部分我一直就覺得有些疑問,一直以來都不是很認同在設計的輸出就是要提供一份詳細、規范的設計文檔,在我看來,設計確實是進行實現的前提條件,這毫無疑問,但真的就一定要通過一份詳細的設計文檔來做到這點嗎?我覺得設計中最重要的設計理念的表達,而對于設計理念我覺得最佳的表達方式仍然是圖形,而這個圖形一定要采用規范的象UML這些來表示嗎?我并不是那么的認同,我覺得設計圖最重要的就是要表現出自己的意思,至于你用什么圖形來表示我不覺得有什么重要,只要設計人員認為那是他最擅長表達自己設計意圖的工具就行,沒必要在工具這件事上浪費設計人員太多的時間,并且造成了限制,設計的評審我覺得是有必要做的,這時我覺得大家可能會問,沒有文檔怎么辦,怎么評審?我覺得評審的人是為了讓同行的設計人員能夠根據目前設計人員對圖形的一個解釋來準備的了解設計人員的設計意圖,并且根據自己的經驗相應的給設計人員一些建議;其次,從簡單設計角度上來講,我覺得設計是一個不斷充實和完善的過程,設計是一個典型的求解過程,就象一道數學題,通常來說,也許會有N中解法,每個不同程度的人看到的解法也許是不一樣的,但首先能解出來這就是一個成功,其次才是看這個解法有什么可以改進的地方,我現在做設計的時候就是首先采用自己目前能想到的最簡單的解決方案,在做同行評審的時候也許有些同行能給出些建議,如果沒有的話,通常來說我會先按照這個簡單的解決方案先做,在實現后其實就會發現目前這個實現方案的一些問題,即使當時沒發現,在添加新功能的時候也會發現,這個時候依賴重構開始進行調整,其實我覺得只有這樣一個設計才能慢慢的被完善、被誕生,應該說,不同程度的設計師的區別就在于設計出來的東西所被完善時投入的精力和造成的影響,我相信沒有哪個設計出來就是那么好的,在這種情況下,通常就會出現一個問題,就是最后實現形成的設計和最初的設計有很多的不同,這個時候是不是意味著在開發的過程中應該一直去更新、維護設計文檔呢?所以我覺得最初的設計文檔不需要為了規范投入那么大的精力, 但不意味著不要,需要的是一份能夠表達設計意圖的文檔,最重要的是圖形化的表達,大家認為呢?或者說大家都是怎么做的呢?還有就是這種時候正規的設計文檔什么時候出呢?^_^,缺少文檔時有的一個問題是怎么樣將設計意圖準確的表達給開發人員,這部的做法在XP中通常不存在,因為XP中設計是大家一起做的,在傳統的情況下我覺得更多的是依賴設計人員和開發人員的頻繁交流以及對于代碼的code review。
但缺少設計文檔在公司的運作中通常會出現一個問題,就是領導們的不放心,領導們會覺得怎么經過了這個階段沒啥正式的產物,領導們會認為設計圖這些是不足以證明這個階段的完善的,郁悶,造成總是和領導形成矛盾,這也怪自己在安排任務時通常缺少這個正規的設計文檔的編寫過程,這個過程真的有這么必要嗎?疑問中......
ps:順便說下現在自己從設計到實現的一個步驟,在設計時首先我會根據目前的需求得出問題域,這個時候開始進行設計,對問題域進行求解,這個時候會給一個自己能想到的最簡單的解決方案,注意,既然是解決方案就以為著首先要能解決問題,簡單的解決方案不等于簡陋的解決方案,在提供這個解決方案后開發人員實現后我會對code進行review,而這個時候review經常會發現設計中值得改善的地方,這個時候開始對設計進行重構,詳細設計一般要在迭代完成時才能最終形成.....覺得這樣的方法挺好的,^_^,自己在做實現的時候現在的做法都是先把測試代碼寫完后,寫設計的時候會先隨意的寫,寫完在通過測試后開始對代碼進行重構,這個時候開始把之初的長方法首先進行重構為小方法,重構完后開始做封裝的考慮,形成對象模型,在對象模型形成后開始考慮繼承、多態的引入,最后開始考慮設計模式的引入,一般這個時候最終的詳細設計才得以形成,我覺得這個時候是體現一個設計師水平的時候,一個優秀的設計師在設計之初就能想到很多,預見的很遠,使得設計在設計之初就能足夠的完善,而不需要通過太多的重構形成最終的設計,而一個普通的設計師也許最初只是能給出一個解決方案,但畢竟是可行的解決方案,在設計實現的過程時才逐漸的發現設計的不足,這個時候通過重構進行的完善,對設計師來講也是一種很好的積累,所以來說,在完成設計后最好是能多找人交流交流,^_^,喜歡這個方法.......