嵌入式軟件開發人員經常面臨開發“好軟件”或“好代碼”的壓力,問題是好代碼的想法通常是主觀的。我認為的好代碼可能與你認為的好代碼不同。開發人員經常考慮代碼美學和代碼風格,這可能會也可能不會產生好的代碼。在這篇文章中,我們分享好的代碼是什么樣子的,以及它通常表現出來的特征。
好的代碼是可讀的
好的代碼是人類可讀的。作為一名開發人員,你應該能夠閱讀你的代碼和你同事的代碼并理解它們!雖然可讀的代碼看似顯而易見,但是對于嵌入式軟件開發人員來說,編寫代碼的難度令人難以置信。編寫可讀代碼的關鍵是利用空白。
空白是代碼周圍的空白,如空格、制表符和換行符。開發人員通常認為空白是邪惡的,因為他們覺得聰明的開發人員盡可能使用最少的行。這是不正確的!優秀的開發人員使用盡可能多的空白來使他們的代碼可讀!
好的代碼很簡單
當代碼簡單時,它是可讀的,并且不太可能有錯誤。當一個函數被編寫或者被修改和維護時,bug可以被注入到這個函數中。函數越復雜,出錯的可能性就越高。開發人員應該努力編寫許多簡單的功能,這些功能共同完成一個更突出、更復雜的功能。一個函數應該做一件事。
雖然保持代碼簡單很有意義,但在實踐中很難做到。比如測量代碼中每個函數的循環復雜度。循環復雜度是一種度量,它告訴開發者通過一個函數的路徑數。已經證明十條或更少的路徑被認為是簡單的函數。除此之外,在維護期間存在或注入bug的統計概率會顯著增加。
好的代碼是可測試的
你通常可以識別出好的代碼,因為它是可測試的代碼!你經常會發現一系列的測試被自動執行來驗證代碼是否滿足它的需求。可測試代碼將表現出如下特征:
l 解耦硬件并利用依賴注入的托管依賴關系。
l 定義良好的接口,為程序的其余部分提供清晰的交互點。
l 它們很容易在主機上的自動化測試工具中執行。
開發人員可以用來確保他們擁有正確數量的測試用例的一種機制是利用循環復雜度測量!它們可以用來確保你開發了簡單的功能,并且具有所需的最小數量的測試用例!由于循環復雜度測量通過一個函數的獨立路徑的數量,該數量也提供了測試該函數并覆蓋所有路徑所需的最小測試用例數量。可能仍然需要額外的測試用例來涵蓋邊界條件,但至少涵蓋了所有路徑!
測試并不能保證你的軟件是高質量的,但是它可以提升軟件的可靠性和質量。好的代碼總是與一組好的測試相關聯,這些測試有助于開發人員確保代碼按照應有的方式運行。你很難找到不包含一套自動化測試用例的好代碼。
結論
好的代碼是可讀的、簡單的和可測試的。雖然可讀確實需要定義或樣式來確保開發人員在同一頁面上,但簡單和可測試則不需要。你可以度量你的代碼以確定它是否簡單和可測試。一旦你定義了可讀的含義,你就可以使用靜態分析或人工智能工具來確定它是否可讀。
你可能會發現可以用來定義好代碼的其他特征,例如模塊化、可伸縮性等等;如果你可以調整你的過程來定義和度量它們,你會發現你可以始終如一地交付“好代碼”。