時間限制使開發(fā)人員面臨壓力,需要在嚴格且在許多情況下不充分的時間表內(nèi)完成項目要求。此外,對嵌入式軟件的可靠性、準確性和性能的期望高于對實時計算的期望。我們還需要考慮運行嵌入式軟件的實際目標硬件的約束。軟件合規(guī)性和認證要求通常由行業(yè)強加,以解決安全性問題。
過程標準提供過程、驗證方法和最佳實踐,以確保軟件的安全、安全和質(zhì)量具有足夠的信心。這些包括:
DO-178B/C(航空電子設備)
ISO 26262(汽車)
IEC 62304(醫(yī)療)
IEC 61508(工業(yè))
EN 50128(導軌)
以及更多
軟件驗證和確認是遵守過程標準的關鍵組成部分。這是一個涉及不同軟件測試技術的過程,這些技術可能非常嚴格,昂貴且耗時。
采用一兩種軟件測試技術不會削減它。在開發(fā)生命周期中使用各種自動化方法將節(jié)省您的時間和金錢。它還將有助于建立可靠性聲譽,這是無價的。
嵌入式軟件開發(fā)的自動化測試方法
自動化對于測試嵌入式軟件至關重要,因為手動方法容易出錯且耗時。讓我們討論一下對您的團隊有幫助的重要自動化測試方法。
靜態(tài)代碼分析
首先,我強烈建議始終使用靜態(tài)代碼分析作為第一種測試方法。執(zhí)行靜態(tài)分析的一個絕妙優(yōu)勢是,您可以在項目的任何階段引入和使用它。即使項目不完整且部分編碼,靜態(tài)代碼分析也是有效的,因為不需要執(zhí)行代碼。
引入靜態(tài)分析的最大挑戰(zhàn)是,大量代碼可能會產(chǎn)生大量警告。將靜態(tài)分析集成到項目中時,建議關注以下幾點:
讓團隊盡快提高工作效率。
最大限度地減少團隊被所有靜態(tài)分析警告淹沒的機會。
這并不是要降低這些警告的重要性。但是,大多數(shù)開發(fā)人員都沒有修復現(xiàn)有或遺留代碼的奢侈。至少不是立即。
因為有各種編碼合規(guī)性標準(MISRA C:2012,自動sar C++14,SEI CERT,CWE等)從目標開始。如果安全性是關鍵目標,則啟用所有與安全相關的規(guī)則,禁用不太重要的規(guī)則并啟用內(nèi)置安全編碼標準之一(如 CERT C/C++)是有意義的。
動態(tài)分析方法或運行時錯誤檢測
如前所述,一種測試方法是不夠的。僅通過靜態(tài)分析無法識別所有錯誤或缺陷。動態(tài)分析方法或運行時錯誤檢測也是一種測試實踐。
此測試應與要求相關聯(lián)。它檢查正在運行的代碼,暴露架構和行為缺陷,其他弱點和/或安全漏洞,包括內(nèi)存泄漏等。
團隊可以在軟件抽象的各個級別應用這種類型的測試。從測試每個單獨的單元或功能開始,然后集成其他軟件部件。最終,軟件將系統(tǒng)作為一個整體或黑匣子進行測試。這通常表現(xiàn)在眾所周知的V模型軟件生命周期中。
結構代碼覆蓋率
在動態(tài)分析方法中,可以應用其他技術的疊加,例如結構代碼覆蓋率。
簡而言之,結構覆蓋是識別已執(zhí)行和記錄的代碼,以確定系統(tǒng)是否已經(jīng)過充分測試。如果可以通過測試用例執(zhí)行確定已執(zhí)行的代碼,則未發(fā)現(xiàn)或未執(zhí)行的代碼將公開對其他測試的需求。
如果您的合規(guī)性要求是獲得 100% 的代碼覆蓋率,則至少需要通過單元測試和手動測試來執(zhí)行覆蓋率。雖然我們可以繼續(xù)沿著揭示其他測試方法(如回歸、性能、壓力、API、UI、驗收等)的路徑前進,但讓我們深入研究用于測試嵌入式系統(tǒng)的現(xiàn)代部署。
持續(xù)集成和持續(xù)交付
在過去幾年中,一個越來越受歡迎的主題是持續(xù)集成和持續(xù)交付(CI / CD)。CI/CD 是夜間集成的軟件開發(fā)實踐(將較小的構建單元合并到應用程序、庫或組件中),目的是構建可測試的軟件以實現(xiàn)持續(xù)交付并及早發(fā)現(xiàn)構建/集成問題和錯誤。
嵌入式軟件開發(fā)中的 CI/CD 通常以應用程序開發(fā)不然的方式受到限制。除了目標硬件平臺的物理和計算約束外,還有合規(guī)性約束。嵌入式軟件市場對安全性和安全性有獨特的要求,并且具有極長的生命周期。產(chǎn)品可以在市場上保留數(shù)十年。
如今,一些組織將靜態(tài)分析納入其 CI/CD 現(xiàn)代開發(fā)工作流。適應通常圍繞基于Git的開發(fā)環(huán)境,采用動態(tài)的分支和合并方法,開發(fā)人員可以指定父/參考分支來與他們當前的開發(fā)分支進行比較,并自動比較和計算增量以進行分析。
因此,無需對整個項目運行分析(這可能需要相當長的時間,甚至數(shù)小時),而是可以在最小的文件集上運行。這減少了評估會話和重點的持續(xù)時間。然后,可以解決和糾正編碼違規(guī),以實現(xiàn)干凈、安全且可靠的構建。
容器化開發(fā)環(huán)境
另一種類型的現(xiàn)代化來自容器化開發(fā)環(huán)境。開發(fā)工具的容器化部署正在成為嵌入式開發(fā)團隊的面包和黃油。
盡管容器最初是為解決微服務和基于Web的應用程序的部署問題而開發(fā)的,但它們最近在嵌入式團隊中越來越受歡迎。特別是對于使用容器來管理復雜工具鏈的大型團隊。
在管理復雜的開發(fā)環(huán)境時,特別是在安全關鍵領域,團隊通常會面臨以下挑戰(zhàn),這些挑戰(zhàn)很容易用容器解決:
將整個團隊的升級同步到最新版本的工具(如編譯器、生成工具鏈等)。
動態(tài)響應庫或軟件開發(fā)工具包 (SDK) 等的新安全補丁。
確保所有團隊成員的工具鏈和自動化基礎結構 (CI/CD) 的一致性。
能夠?qū)﹂_發(fā)環(huán)境進行版本控制并對其進行還原,以便為使用特定工具鏈認證的舊版本產(chǎn)品提供服務。
入職和設置新的開發(fā)人員。
在下面的示例中,您讓 Parasoft C/C++測試訪問容器化編譯器 (GNU GCC) 和運行時環(huán)境。有兩個單獨的 Docker 容器,一個用于編譯器和構建工具,另一個用于執(zhí)行環(huán)境(例如,嵌入式 Linux 的剝離版本)。
在這個例子中,Parasoft C/C++測試標準可以用作基于命令行的工具,適用于容器內(nèi)部署。它可以與編譯器和構建系統(tǒng)打包到一個容器映像中,用于 CI/CD,并部署到開發(fā)人員的桌面上進行本地命令行掃描。
以下示例可以通過自動化完成,或者每個團隊成員都可以拉取一致的開發(fā)環(huán)境,其中容器化提供以下內(nèi)容:
開發(fā)環(huán)境版本控制
集中管理和部署
對安全漏洞的即時反應
更低的入職成本
了解行業(yè)領導者如何交付安全可靠的軟件
如果您想簡化團隊工作流程、削減成本并縮短上市時間,那么了解嵌入式安全和安保關鍵型系統(tǒng)開發(fā)中的挑戰(zhàn)、解決方案和現(xiàn)代方法對您來說非常重要。
審核編輯:郭婷
-
嵌入式
+關注
關注
5096文章
19199瀏覽量
308169 -
C++
+關注
關注
22文章
2114瀏覽量
73921
發(fā)布評論請先 登錄
相關推薦
如何提高嵌入式代碼質(zhì)量?
新手怎么學嵌入式?
什么是嵌入式操作系統(tǒng)?
嵌入式學習建議
什么是嵌入式?一文讀懂嵌入式主板
【「嵌入式Hypervisor:架構、原理與應用」閱讀體驗】+全文學習心得
【「嵌入式Hypervisor:架構、原理與應用」閱讀體驗】+第7-8章學習心得
嵌入式系統(tǒng)的原理和應用
嵌入式系統(tǒng)的未來趨勢有哪些?
嵌入式系統(tǒng)怎么學?
如何提升嵌入式編程能力?
再談嵌入式實時操作系統(tǒng)
![再談<b class='flag-5'>嵌入式</b>實時操作<b class='flag-5'>系統(tǒng)</b>](https://file1.elecfans.com/web2/M00/C8/81/wKgaomYVCTGAXoLNAAHKsmHXcPM241.png)
評論