第乙個階段是明確模組的需求,能夠以詳細的功能規格說明書的方式
,明確模組的功能需求,重點考慮模組要處理哪些例外和異常情況
,盡自己最大努力把情況想全。
例如對本模組對外提供的介面要詳細寫清楚,各種輸入引數情況下的行為是什麼,以及返回什麼值。對本模組要呼叫的外部介面,要寫明白本模組要求的響應是什麼,以及呼叫失敗情況下的處理策略等。
此階段同時要描述清楚本模組執行環境
包括:與周圍模組互動描述、對記憶體以及磁碟的要求等對外圍環境的需求、模組部署方式(
多機併發部署、還是單節點執行
)等。注意此時只集中精力考慮需求,不要考慮如何實現。
第二階段是設計中的實現階段。此階段要求必須包括有:關鍵問題與實現策略、主要靜態類圖設計和說明(
主要類、主要方法說明
)、執行緒結構說明
(包含哪幾類執行緒、每類執行緒個數、每類執行緒職責、每類執行緒會訪問到的類和物件等,如果比較複雜則要說清楚為什麼這些設計,設計目標是解決什麼問題)(
個人推薦更多使用泳道圖,能更直**到物件之間的職責劃分和互動過程
)。如果類物件的狀態比較多,則建議採用狀態機圖的方式描述清楚,並通過審查狀態機變化來檢查是否有情況沒有處理。
n 先想清楚,並寫出類和每個方法詳細功能規格說明(
可以先把類名和方法名寫好,然後以注釋的方式把類的職責、關鍵實現策略、以及每個方法的功能規格說明
<
重點是例外和異常情況的處理與返回值
>)。
n 根據規格說明中列舉情況,寫出相應測試**。 n
編寫實現**,並通過測試。
經過編碼階段之後,模組功能已經非常明確了,此時應該細緻、清楚地編寫模組功能規格說明書。原因如下:
1) 模組功能規格說明中描述的功能會比詳細設計中更為細緻和清楚。另外經過編碼階段,此時模組實現的功能可能與詳細設計時考慮的模組功能在細節方面可能會有些變化。專案描述本模組的功能說明,可以方便自己和其他人日後進行系統維護工作。
2) 通過編寫該功能規格說明可以彌補詳細設計萬一考慮不細情況下,一些例外和異常情況是否處沒有處理或者處理不周到。
由於在詳細設計階段,設計出模組的類和物件構成以及執行機制還是有一些模糊,因此很可能存在某些例外、特別分布式情況下某些狀態組合沒有考慮到的情況發生。但是在編碼階段,由於一般只會關注當前類和當前的方法的實現,因此考慮問題一般比較區域性。為此在完成整個模組編碼後,所有細節都已經明確(特別是在寫**過程中會發現存在一些新的異常情況需要處理<
詳細設計時沒考慮到
>
),此時必須再一次從整體來考慮模組執行起來後在處理邏輯是否有缺陷,這樣能更早發現以前設計中缺陷,避免上線後才發現缺陷。此時重點考慮是否還有情況沒有考慮到或者某些處理不到位。
很多bug
難以發現和定位原因是在不同類和物件之間的發生互動和聯絡後,組合排列後的情況非常多,從而想不到某些組合。這種
bug只有從整體考慮、考慮不同類和物件之間互動關聯後才可能想到。
系統設計經驗總結
極簡原則 夠用就好原則。設計世界上有兩類人,一種喜歡把事情越做越複雜 別人有的功能我要全有,也許是個賣點,單不一定被多數人接受 一種喜歡追求極致 如 喬幫主 蘋果產品持續有這麼多的粉絲,持續購買,對於大部分使用者來說外觀精緻,操作簡捷容易上手。商業成功原則 設計的好壞,最終其實只有乙個,市場是否認可...
EMC 設計經驗總結
整體布局 1 高速 中速 低速電路要分開 2 強電流 高電壓 強輻射元器件遠離弱電流 低電壓 敏感元器件 3 模擬 數字 電源 保護電路要分開 4 多層板設計,有單獨的電源和地平面 5 對熱敏感的元件 含液態介質電容 晶振 盡量遠離大功率的元器件 散熱器等熱源。介面與保護 1 一般電源防雷保護器件的...
表設計經驗總結
表設計的經驗總結 1 對於任意的狀態,都需要提供 xx中 的狀態,用於高併發場景使用,進行事務外阻塞使用。例如 提交審批 提交中,已提交 啟動 啟動中,已啟動 暫停 暫停中,已暫停 2 表設計的時候,對於列表查詢使用的表,資料盡量的冗餘,提公升查詢效能 例如一些基本不變的資料,冗餘到表中 3 對於列...