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

嵌入式適合自學(xué)嗎?
高可靠性嵌入式主板設(shè)計(jì)

評(píng)論