時間限制給嵌入式開發人員帶來了在嚴格的時間表內完成項目需求的壓力,在許多情況下,時間表是不夠的。此外,人們對嵌入式軟件的可靠性、準確性和性能的期望高于實時計算。我們還需要考慮嵌入式軟件在其上運行的實際目標硬件的約束。軟件符合性和認證要求通常是由工業強加的,以解決安全和保障問題。嵌入式系統的軟件開發項目面臨著各種各樣的挑戰。
過程標準提供了過程、驗證方法和最佳實踐,以確保軟件安全、安全和高質量。其中包括:
DO-178B/C(航空電子設備)
ISO 26262(汽車)
IEC 62304(醫療)
IEC 61508(工業)
EN 50128(軌道)
軟件驗證和確認是遵守過程標準的重要組成部分。這是一個涉及不同軟件測試技術的過程,可能是嚴格的、昂貴的和耗時的。
采用一兩種軟件測試技術不會解決問題。在開發生命周期中使用各種自動化方法將會節省你的時間和金錢。這也將有助于建立一個可靠的聲譽,這是無價的。
嵌入式軟件開發的自動化測試方法
自動化對于測試嵌入式軟件至關重要,因為手動方法容易出錯且耗時。讓我們來討論一下對嵌入式開發團隊有幫助的重要的自動化測試方法。
1.靜態代碼分析
首先,建議總是將靜態代碼分析作為第一種測試方法。執行靜態分析的一個極好的優點是,你可以在項目的任何階段引入和使用它。即使項目是不完整的和部分編碼的,靜態代碼分析也是有效的,因為不需要代碼執行。
引入靜態分析的最大挑戰是大量的代碼會產生大量的警告,將靜態分析集成到項目中時,建議關注以下幾點:
盡快提高團隊效率。
盡量減少團隊被所有靜態分析警告淹沒的機會。
這并不是為了降低這些警告的重要性,然而,大多數嵌入式開發人員沒有修復現有或遺留代碼的特權。
因為有各種編碼符合性標準(MISRA C:2012、AUTOSAR C++14、SEI CERT、CWE等),所以從目標開始。如果安全是關鍵目標,那么啟用所有與安全相關的規則,禁用不太重要的規則,并啟用內置安全編碼標準之一(如CERT C/C++)是有意義的。
2.動態分析方法或運行時錯誤檢測
如前所述,一種測試方法是不夠的。僅通過靜態分析不可能識別所有錯誤或缺陷。動態分析方法或運行時錯誤檢測也是一種測試實踐。
這個測試應該與需求相聯系。它檢查運行的代碼,暴露架構和行為缺陷、其他弱點和/或安全漏洞,包括內存泄漏等等。
嵌入式開發團隊可以在不同層次的軟件抽象中應用這種類型的測試。從測試每個單獨的單元或功能開始,然后集成額外的軟件部分。最終軟件測試系統作為一個整體或黑盒。這通常表現在眾所周知的V-model軟件生命周期中。
3.結構化代碼覆蓋率
在動態分析方法中,覆蓋了其他可以應用的技術,比如結構化代碼覆蓋。
簡而言之,結構覆蓋是為了確定系統是否經過充分測試而對已經執行和記錄的代碼的識別。如果你可以通過測試用例的執行來確定已經被執行的代碼,那么未被覆蓋或未被執行的代碼暴露了對額外測試的需求。
如果你的符合性需求是獲得100%的代碼覆蓋率,那么你將需要至少通過單元測試和手動測試的方式來執行覆蓋率。雖然我們可以繼續揭示其他測試方法,如回歸、性能、壓力、API、UI、驗收等等,但是讓我們深入到嵌入式系統測試的現代部署中。
4.持續集成和持續交付
在過去的幾年中,一個越來越受歡迎的話題是持續集成和持續交付(CI/CD)。CI/CD是每夜集成的軟件開發實踐(將較小的構建單元組合成應用程序、庫或組件),目的是構建可測試的軟件,用于持續交付和早期檢測構建/集成問題和錯誤。
嵌入式開發開發中的CI/CD通常受到應用程序開發所沒有的約束。除了目標硬件平臺的物理和計算約束之外,還有合規性約束。嵌入式軟件市場對極長生命周期的安全性有著獨特的要求。產品可以在市場上保留幾十年。
今天,一些組織將靜態分析合并到他們的CI/CD現代開發工作流程中。自適應通常圍繞基于Git的開發環境,采用動態方法進行分支和合并,其中開發人員可以指定一個父/引用分支來與他們當前的開發分支進行比較,并自動比較和計算用于分析的增量。
因此,不需要在整個項目上運行分析,這可能需要相當長的時間,甚至幾個小時,它可以在最少的文件集上運行。這縮短了評估會議和聚焦的持續時間。然后,可以解決編碼違規問題并進行補救,以獲得干凈、安全和可靠的構建。
5.集裝箱化的開發環境
另一種類型的現代化來自于集裝箱化的開發環境。開發工具的容器化部署正在成為嵌入式開發團隊的有力工具。
盡管最初開發容器是為了解決微服務和基于web的應用程序的部署問題,但最近它們在嵌入式團隊中受到了歡迎。尤其是對于使用容器來管理復雜工具鏈的大型團隊。
當涉及到管理復雜的開發環境時,尤其是在安全關鍵領域,團隊通常會面臨以下挑戰,這些挑戰使用容器很容易解決:
將整個團隊的升級同步到工具的最新版本,比如編譯器、構建工具鏈等等。
對庫或軟件開發工具包(SDK)的新安全補丁作出動態反應,等等。
確保所有團隊成員的工具鏈和自動化基礎設施(CI/CD)的一致性。
能夠對開發環境進行版本控制,并恢復它以服務于通過特定工具鏈認證的產品的舊版本。
總結
如果你希望簡化嵌入式開發團隊工作流程、削減成本并縮短上市時間,那么了解嵌入式安全和安全關鍵系統開發中的挑戰、解決方案和現代方法對你非常重要。