模組設計與實現經驗總結(一)
作者: 朱賽凡 楊雷
當開始進行模組開發時,系統負責人會給模組開發負責人描述模組功能與要求,但是此時模組功能與需求一般是比較粗線條和不完備的,例如很多細粒度異常情況處理需求一般系統負責人可能會考慮不到。
模組負責人通過詳細設計完成:細化和確定模組的功能(包括異常處理需求)、識別關鍵問題和實現策略與流程、以及主要靜態類和執行緒結構設計等。
詳細設計完成並通過評審之後,模組負責人根據詳細設計指導,進行編碼並實現模組。
需要指出的是即使詳細設計,但一般只是初步設計了主要的類和執行緒結構,以及一些比較大方面的異常情況處理。雖然可能不同的人完成的詳細設計的細緻粒度存在差別,即使是設計比較細緻的詳細設計一般不能到達可以直接根據詳細設計自動生成程式碼的粒度,當然個人認為
雖然個人認為在詳細設計階段類和執行緒結構等實現方面的設計不必要太過細緻,但是對模組功能規格(包括異常處理需求)的確認和細化一定要儘可能細緻和想全。對關鍵問題和實現策略也一定要儘可能的細緻和想全。對實現方面的類和執行緒結構設計能夠想細還是細的為好,即儘量想細一點為好。所謂“謀定而後動”,只有先設計好了,想好了後面才能少出錯。
根據上面論述,我們可以得出不管是詳細設計還是編碼實現都包括
而導致模組質量不高的主要原因是整個開發過程,沒有明確地區分“確認和細化功能規格”和“實現功能規格”兩個階段,很多開發者的開發過程是兩個過程混在一起,整個過程屬於沒有明確方向和不斷變化的狀態,惡果是導致很多例外情況沒有考慮到並進行妥當處理,最終導致大量BUG的出現。具體表現如下:
ü詳細設計時,模組功能需求確認不夠細緻,甚至是一直到編碼實現階段都是處於模糊狀態,導致很多情況沒有想到。例如各個對外提供介面的功能細節,特別是在一些異常情況下的返回值細節或者響應細節都不是很明確。
ü詳細設計時,不仔細考慮會存在哪些異常情況,以及設計相應異常處理措施,導致在設計階段很多異常根本沒有考慮。
ü詳細設計時,不識別模組實現中關鍵問題,導致很多關鍵實現策略要到編碼時才確定,但是由於編碼時一般思維焦點是當前類,導致確定實現策略時缺乏全域性考慮,同時加上還要考慮如何實現,因此會導致採用不是最優的或者是錯誤的實現策略。
ü詳細設計時,類、類狀態變化、執行緒結構設計等考慮太粗。由於詳細設計時能不考慮具體實現,會忽略一些細節,這樣更能集中精力從整體和全域性來考慮一些關鍵的實現策略和以及類和執行緒結構設計。而實現階段一般更加關注細節,但只關注當前類細節和區域性細節,因此詳細設計時類、類狀態變化、執行緒結構設計等考慮太粗會導致這些問題遺留到開發階段,使得整個編碼過程混亂,最終很多例外情況想不到。至少要保證詳細設計完成後,模組開發者能在自己大腦裡面把模組跑起來。
ü編碼實現階段,還沒有制定清楚每個類、類方法的詳細功能規格說明(即要處理哪些情況,異常情況下如何處理等)的情況下,就開始編碼實現。
明確區分兩個階段的好處是每次大腦只需要集中精力考慮一個方面問題,這樣大腦考慮問題會比較輕鬆,使得問題能夠容易想全,出現紕漏的概率要小一些。