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