新的思想永遠是我們要追求的,可謂朝聞道,夕死可矣
培訓主要內容:
- 架構設計思路
- 模塊化、分層的設計思想
- 架構設計文檔
- 自動化測試
工作的改進:
模塊化分層設計
模塊設計
模塊化設計的目的就是提高移植性、複用性、可擴展……所以模塊內部遵循高內聚原則,模塊之間遵循低耦合原則。 模塊設計就是要對其他模塊高度隱藏內部數據和細節,即滿足最少知道原則(盡少的實體之間的信息交互)。模塊內用到的頭文件寫在private中,模塊外需要的寫在public中;
設計優良的模塊接口需要進行合理層次的抽象,並放在合理位置;通過ID參數留可擴展餘量。
少用全局變量,因爲全局變量的使用讓代碼閱讀難度加大,增加耦合性,可以通過static、指針、結構體、Get()、Set()、限制使用範圍(Private)等方式避免全局變量的使用。
分層設計
優良的嵌入式軟件分層設計是上層嚴格依賴底層,並消滅循環依賴。
工作改進
我們自己5116目前的模塊化分層設計有些地方還可以改進。比如card 驅動的文件組織可謂嚴重的重複設計,cardbase和norbase,慢速驅動、快速驅動文件混雜在了一起,應提取公共部分再放合理位置;上層任意調用寄存器及影響了可閱讀性,也不負責低耦合的要求;key驅動功能過於複雜,不符合一個包只做一類事情的原則,需要進行合理拆分;
設計文檔
開發視圖和邏輯視圖
架構設計中最重要的是開發視圖和邏輯視圖,這讓開發人員很快的熟悉架構與數據流,同時也較容易檢查我們的架構設計是否存在循環依賴,這兩個視圖需要補充
設計合理的文檔
能用代碼直接表達的不寫在文檔中,不能過度設計,否則文檔更新起來會很喫力
高度同步的文檔
保持代碼和文檔的一致,設計文檔需要主人,保證文檔一直有負責人,沒有負責人的文檔很難保證及時更新,會誤導研發人員,浪費人力。
標準化
標準的接口
許多接口在業界都已經有了標準化的實現,命名,傳參,返回值,例如C標準庫,而且這些標準都是經驗的精華,已經經過反覆驗證的優良接口;並且有利於提高可讀性和複用性
標準的錯誤碼
標準的錯誤碼、錯誤等級劃分、debug輸出有利於開發人員、維護人員迅速的定位問題,減少後期維護成本,提高現場可維護性;而且讓代碼複用性、兼容性得到良好的保障;不能因爲代碼空間限制屏蔽必要的錯誤輸出,這會增加問題定位的難度,浪費人力成本
標準的設計文檔
流程圖,數據流的設計也要符合已定製的標準,優良的設計文檔應該是符合標準的、高度可讀的
自動化測試
必要的白盒測試
首先自己的寫得模塊,要寫好經過設計測試代碼,並儘量做到不污染源碼;其次對於測試代碼要求儘量高的覆蓋率。再有就是文件位置劃分合理,不能打包到發佈代碼中。
負責的測試代碼
在沒有專職的白盒測試人員之前,這個測試任務是屬於研發人員的,所以測試代碼也是要根據模塊的設計優化持續的跟進優化
工具優化
行業中不時會出現一些優良的測試工具,需要時常關注,優良的測試工具能讓我們事半功倍
持續優化
架構設計責任
架構設計不是架構師一個人的責任,架構師不可能涉及到設計的細枝末節,這就需要研發人員自己對相關模塊設計負責,要靠自己的能力設計好,這樣才能做好一個優良的項目架構。同時模塊設計應遵循一定的規範,不能根據自己的意願想當然的設計
持續優化
沒有完美的代碼,也沒有完美的架構,我們需要根據當前的需求持續的進行優化,同時保證設計文檔的持續更新(高度一致性)
乾淨的代碼
應該先讓自己的代碼變得乾淨,再去進行持續的優化
總體補充
優秀的軟件工程師
要成爲一名優秀的軟件工程師,必須保證持續的學習,比如閱讀優秀的開源代碼、優秀的業界書籍;能力和眼界的提升永遠值得花大氣力去追求;能夠進行優良的設計需要大量的理論和實踐,比如進行高度抽象的設計,比如進行合理的模型設計(張雲龍老師提到的倉庫搬運設備的高度可擴展模型設計)
優良的思想
比學習具體的答案更加聰明和智慧的是學習思路,參悟思想。所以張雲龍老師多次提到UCOS II的設計思想對其的深遠影響。比如王金平提到的面向對象的編程思想對其工作的影響
良好的態度
如同巴普洛夫在《致青年們的一封信》中說到的,青年科學工作者應該具有的態度:
循序漸進->謙虛->熱情