開始一個新的開發(fā)項目總是令人興奮的,但在嵌入式開發(fā)中,一些最有趣和最具挑戰(zhàn)性的項目往往是如何更新遺留代碼庫。目前市場上有很多產(chǎn)品已經(jīng)生產(chǎn)多年,如果不是十年或更長時間。這些代碼庫雖然功能強大且功能豐富,但通常使用不太適合現(xiàn)代軟件開發(fā)的技術(shù)編寫。
團隊經(jīng)常因遺留代碼庫而苦苦掙扎,原因如下:
功能和代碼大小的絕對數(shù)量(如果不是數(shù)百萬行代碼,則為 100,000 行)
應(yīng)用程序代碼和硬件之間的緊密耦合
過時的工具和開發(fā)流程
無法有效地部署新開發(fā)人員來處理代碼庫
雖然可能很容易從頭開始,但完全從頭開始的時間和金錢投資可能是不現(xiàn)實的。在這篇文章中,我們將研究團隊可以遵循的幾個技巧來更新他們的遺留代碼項目。
技巧1 – 審核你的應(yīng)用程序代碼
在嘗試對任何遺留代碼庫進行現(xiàn)代化改造之前,團隊?wèi)?yīng)該審核代碼庫。審計可以由公司團隊成員執(zhí)行,審計可以幫助團隊準(zhǔn)確了解他們的代碼當(dāng)前所處的位置以及他們必須使用的內(nèi)容。
審計的輸出應(yīng)該是多倍的。首先,嵌入式開發(fā)團隊?wèi)?yīng)該了解代碼庫當(dāng)前的位置。這應(yīng)該包括了解當(dāng)前架構(gòu)(或缺乏架構(gòu))、特性、功能目的和復(fù)雜性。其次,應(yīng)制定代碼庫現(xiàn)代化的主要挑戰(zhàn)清單。可能存在需要仔細(xì)考慮和努力進行現(xiàn)代化的關(guān)鍵代碼區(qū)域、功能等。這些應(yīng)該提前調(diào)用。最后,輸出應(yīng)該足以為如何使代碼庫現(xiàn)代化提供建議。這些建議應(yīng)該很容易被制作成一個軟件現(xiàn)代化計劃,該計劃可以與未來的功能開發(fā)集成,以使代碼與產(chǎn)品開發(fā)工作保持同步。
技巧2 – 生成函數(shù)列表和依賴圖
至少有兩個有用的函數(shù)相關(guān)資源對于代碼庫的現(xiàn)代化非常有用;函數(shù)列表和依賴圖。
可以通過自動化工具生成功能列表并列出所有功能。它們位于代碼庫中,并根據(jù)它們所在的模塊進行組織。單個文件應(yīng)用程序?qū)⒅挥幸粋€列表,其中分解為 5 個模塊的應(yīng)用程序?qū)?5 個列表。函數(shù)列表對于需要模塊化的單片應(yīng)用程序很有幫助,因為函數(shù)列表可用于確定哪些函數(shù)組合在一起并應(yīng)分組到單獨的模塊中。
函數(shù)依賴圖也可以自動生成,它可以幫助團隊了解哪些函數(shù)正在調(diào)用哪些函數(shù)以及它們之間的關(guān)系。依賴圖對于理解函數(shù)耦合非常有用,并且對于識別彼此相關(guān)的函數(shù)也非常有幫助。它們還可用于嘗試確定代碼中的自然邊界存在于何處,以便軟件可以開始分層。他們還可以展示糟糕的架構(gòu)設(shè)計,并幫助指導(dǎo)重新編寫代碼,以便在硬件驅(qū)動程序、應(yīng)用程序業(yè)務(wù)規(guī)則等類似問題的領(lǐng)域之間存在清晰的界限。
技巧3 – 模塊化應(yīng)用程序
今天有很多代碼仍然是作為一個單一的、單模塊的代碼庫編寫的,嵌入式開發(fā)團隊對代碼庫等進行現(xiàn)代化改造的第一步是模塊化應(yīng)用程序。拆分應(yīng)用程序可以:
開始創(chuàng)建關(guān)注點分離
簡化代碼合并過程,允許多個開發(fā)人員輕松地在項目上工作
允許開發(fā)人員對模塊擁有所有權(quán)
加快發(fā)展
當(dāng)然還有更多優(yōu)勢,但是將應(yīng)用程序分解為包含類似功能的內(nèi)聚模塊將大大有助于代碼現(xiàn)代化。
模塊化也不需要從嚴(yán)格的、封裝的、現(xiàn)代的實現(xiàn)開始。相同的概念可以應(yīng)用于大型遺留項目,只是沒有一個單獨的功能可以分開,而是十年的特性和功能。
技巧4 – 通過增量改進實現(xiàn)現(xiàn)代化
使代碼庫現(xiàn)代化的一種方法是逐步進行改進。很多團隊試圖對其遺留代碼進行重大更改以使其現(xiàn)代化。不幸的是,戲劇性的變化往往會導(dǎo)致戲劇性的錯誤和努力。與其試圖一次性進行巨大的結(jié)構(gòu)更改,或者從頭開始重寫所有內(nèi)容,不如團隊可以制定一個產(chǎn)品現(xiàn)代化計劃,概述將在多個軟件版本上進行的改進。
建議團隊從容易實現(xiàn)的目標(biāo)開始。很多小的變化,可以立即有明顯的改善,這些變化可能是這樣的:
降低功能復(fù)雜度
模塊化關(guān)鍵任務(wù)代碼
分離和隔離應(yīng)用程序和硬件相關(guān)代碼
每個版本或每個 sprint 的微小增量更改都可以顯著改進代碼,而不會對產(chǎn)品功能開發(fā)產(chǎn)生不利影響。
結(jié)論
在今天的文章中,我們剛剛介紹了如何開始對遺留代碼庫進行現(xiàn)代化改造。重要的是要認(rèn)識到,如果要正確完成,更新不會很快或一夜之間完成。成功的更新工作將是漸進式的,但如果嵌入式開發(fā)團隊專注于代碼審計中確定的低風(fēng)險、高價值領(lǐng)域,收益幾乎是立竿見影的。