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