時間限制使開發人員面臨壓力,要求他們在嚴格且在許多情況下不適當的時間表內完成項目要求。此外,對嵌入式軟件的可靠性、準確性和性能的期望高于對實時計算的期望。我們還需要考慮運行嵌入式軟件的實際目標硬件的限制。軟件合規性和認證要求通常由行業實施,以解決安全問題。
流程標準提供流程、驗證方法和最佳實踐,以確保軟件具有足夠的信心,確保軟件的安全性和質量。其中包括:
DO-178B/C(航空電子設備)
ISO 26262 (汽車)
IEC 62304(醫療)
IEC 61508(工業)
EN 50128(導軌)
以及更多
軟件驗證和確認是遵守流程標準的關鍵組成部分。這是一個涉及不同軟件測試技術的過程,這些技術可能嚴格、昂貴且耗時。
采用一種或兩種軟件測試技術不會削減它。在開發生命周期中使用各種自動化方法將節省您的時間和金錢。它還將有助于建立無價的可靠性聲譽。
嵌入式軟件開發的自動化測試方法
自動化對于測試嵌入式軟件至關重要,因為手動方法容易出錯且耗時。讓我們討論一下對您的團隊有幫助的重要自動化測試方法。
靜態代碼分析
首先,我強烈建議始終使用靜態代碼分析作為第一種測試方法。執行靜態分析的一個奇妙優勢是,您可以在項目的任何階段引入和使用它。即使項目不完整且部分編碼,靜態代碼分析也是有效的,因為不需要執行代碼。
引入靜態分析的最大挑戰是大量代碼會產生大量警告。將靜態分析集成到項目中時,建議關注以下幾點:
盡快讓團隊富有成效。
最大限度地減少團隊被所有靜態分析警告淹沒的機會。
這并不是要貶低這些警告的重要性。但是,大多數開發人員無法修復現有或遺留代碼。至少不是立即。
因為有各種編碼合規性標準(MISRA C:2012、AUTOSAR C++14、SEI CERT、CWE 等)從目標開始。如果安全性是關鍵目標,則啟用所有與安全相關的規則、禁用不太重要的規則并啟用內置安全編碼標準之一(如 CERT C/C++)是有意義的。
Dynamic Analysis Methods or Runtime Error Detection
如前所述,一種測試方法是不夠的。僅通過靜態分析無法識別所有錯誤或缺陷。動態分析方法或運行時錯誤檢測也是要采用的測試實踐。
此測試應與要求相關聯。它檢查正在運行的代碼,暴露架構和行為缺陷、其他弱點和/或安全漏洞,包括內存泄漏等。
團隊可以在軟件抽象的各個級別應用這種類型的測試。從測試每個單獨的單元或功能開始,然后集成其他軟件部件。最終軟件測試整個系統或黑匣子。這通常表現在眾所周知的 V 模型軟件生命周期中。
結構代碼覆蓋范圍
在動態分析方法中,可以應用其他技術的疊加,例如結構代碼覆蓋率。
簡而言之,結構覆蓋是已執行和記錄的代碼的標識,目的是確定系統是否已經過充分測試。如果可以確定通過測試用例執行已執行的代碼,則未覆蓋或未執行的代碼將暴露對其他測試的需求。
如果您的合規性要求是獲得 100% 的代碼覆蓋率,則至少需要通過單元測試和手動測試來執行覆蓋率。雖然我們可以繼續揭示其他測試方法,如回歸、性能、壓力、API、UI、驗收等,但讓我們深入了解嵌入式系統測試的現代部署。
持續集成和持續交付
在過去幾年中,持續集成和持續交付 (CI/CD) 越來越受歡迎的主題。CI/CD 是夜間集成(將較小的構建單元組合到應用、庫或組件)的軟件開發實踐,目的是構建可測試的軟件,以便持續交付和早期檢測構建/集成問題和錯誤。
嵌入式軟件開發中的 CI/CD 通常受到應用程序開發所不然的約束。除了目標硬件平臺的物理和計算約束外,還存在合規性約束。嵌入式軟件市場對生命周期極長的安全性和安全性有獨特的要求。產品可以在市場上保留數十年。
如今,一些組織將靜態分析納入其 CI/CD 現代開發工作流。適應通常圍繞基于 Git 的開發環境進行,采用動態的分支和合并方法,開發人員可以指定父/引用分支以與其當前開發分支進行比較,并自動比較和計算增量以進行分析。
因此,無需對整個項目運行分析(這可能需要相當長的時間甚至數小時),而是可以在最少的文件集上運行。這減少了評估會話和焦點的持續時間。然后,可以解決和糾正編碼沖突,以實現干凈、安全和可靠的構建。
容器化開發環境
另一種類型的現代化來自容器化開發環境。開發工具的容器化部署正在成為嵌入式開發團隊的面包和黃油。
盡管容器最初是為了解決微服務和基于 Web 的應用程序的部署問題而開發的,但它們最近在嵌入式團隊中越來越受歡迎。特別是對于使用容器來管理復雜工具鏈的大型團隊。
在管理復雜的開發環境時,尤其是在安全關鍵領域,團隊通常會面臨以下挑戰,這些挑戰很容易通過容器解決:
將整個團隊的升級同步到最新版本的工具,如編譯器、構建工具鏈等。
動態響應庫或軟件開發工具包 (SDK) 等的新安全補丁。
確保所有團隊成員的工具鏈和自動化基礎架構 (CI/CD) 的一致性。
能夠對開發環境進行版本控制并將其還原,以便為經過特定工具鏈認證的舊版本產品提供服務。
入職和設置新開發人員。
在下面的示例中,您有 Parasoft C/C++test訪問容器化編譯器 (GNU GCC) 和運行時環境。有兩個獨立的 Docker 容器,一個用于編譯器和構建工具,另一個用于執行環境(例如,嵌入式 Linux 的剝離版本)。
在此示例中,Parasoft C/C++test 標準可用作基于命令行的工具,適用于容器內部署。它可以與編譯器和構建系統一起打包到一個容器映像中,用于 CI/CD,并部署到開發人員的桌面以進行本地命令行掃描。下圖顯示了此設置的高級概述。
以下示例可以通過自動化完成,或者每個團隊成員都可以拉取一致的開發環境,其中容器化提供以下內容:
開發環境版本控制
集中管理和部署
對安全漏洞的即時反應
降低入職成本
了解行業領導者如何提供安全可靠的軟件
如果您想簡化團隊工作流程、降低成本并縮短上市時間,那么了解嵌入式安全和安保關鍵系統開發中的挑戰、解決方案和現代方法對您來說非常重要。
審核編輯:郭婷
-
測試
+關注
關注
8文章
5692瀏覽量
128795 -
嵌入式
+關注
關注
5149文章
19655瀏覽量
317282
發布評論請先 登錄
評論