24小時(shí)聯(lián)系電話:18217114652、13661815404
中文
行業(yè)資訊
嵌入式系統(tǒng)中的軟件測試很重要
在嵌入式系統(tǒng)的世界中,不僅僅是繼續(xù)發(fā)展和發(fā)展的技術(shù)。用于開發(fā)該技術(shù)的工具和方法正在日趨成熟和改進(jìn)。
在八十年代初期,一家小型計(jì)量公司開發(fā)了軟件,將工程數(shù)學(xué)應(yīng)用于坐標(biāo)測量機(jī)(CMM)。但是開發(fā)生命周期實(shí)質(zhì)上將生產(chǎn)軟件視為沙盒。將從生產(chǎn)代碼開始,添加功能,執(zhí)行一些相當(dāng)基本的功能測試,然后進(jìn)行交付。
在這么小的公司中,工程團(tuán)隊(duì)自然會(huì)包括軟件和硬件專家。事后看來,令人驚訝的是,盡管開發(fā)的軟件確實(shí)需要廣泛的客戶支持,但對(duì)于所運(yùn)行的硬件,卻幾乎沒有相同的消防文化。
軟件開發(fā)是一門工程學(xué)科
軟硬件支持之間的部分差異是原始開發(fā)過程的結(jié)果。但是,軟件的可擴(kuò)展性和隨之而來的功能不斷增加的功能也起著重要作用。簡而言之,錯(cuò)誤的方法比正確的方法要多得多,而且該特性要求將其視為工程學(xué)科。
這沒有什么新的。多年來,領(lǐng)先的航空,汽車和工業(yè)功能安全標(biāo)準(zhǔn)(例如DO-178,ISO 26262和IEC 61508)都要求這種方法。但是,要想從當(dāng)今最先進(jìn)的開發(fā)和測試工具中受益,擁有工程學(xué)科的思維定勢是至關(guān)重要的,這些工具旨在為這種方法提供服務(wù)。
最近,ISO / IEC / IEEE 29119的開發(fā)表明了軟件測試的重要性,ISO / IEC / IEEE 29119是一套可以在任何軟件開發(fā)生命周期或組織中使用的國際軟件測試標(biāo)準(zhǔn)。
要求事項(xiàng)
電氣系統(tǒng)設(shè)計(jì)通常從狀態(tài)機(jī)開始,并且了解特定產(chǎn)品的不同操作模式。工程師通??梢苑浅?焖伲p松地將狀態(tài)機(jī)功能映射到邏輯。如果狀態(tài)機(jī)變得更加復(fù)雜,則通常將其轉(zhuǎn)換為軟件。
高水平的要求對(duì)于確保系統(tǒng)正常運(yùn)行至關(guān)重要。這樣的需求表征了業(yè)務(wù)邏輯和預(yù)期的功能,并能夠評(píng)估系統(tǒng)是否按照預(yù)期的方式工作。最佳實(shí)踐遵循從高層需求到分析再到覆蓋的流程,自然而然,需求可追溯性工具就是為此而設(shè)計(jì)的。
在狀態(tài)機(jī)模型中,表征每個(gè)狀態(tài)的需求是高級(jí)需求的示例。通過代碼跟蹤執(zhí)行路徑以確保正確解釋每個(gè)需求是檢查正確實(shí)現(xiàn)的一種很好的方法。
功能安全標(biāo)準(zhǔn)將其擴(kuò)展到需求可追溯性的概念。他們通常要求用戶根據(jù)高級(jí)要求來執(zhí)行所有代碼,并通過低級(jí)測試來解釋和測試所有未發(fā)現(xiàn)的案例。最近,網(wǎng)絡(luò)安全中的“向左移動(dòng)”范式呼應(yīng)了這一信息,如圖1所示的V模型。
在任何工程學(xué)科中,重要的是要確保組件在集成到系統(tǒng)中之前能夠獨(dú)立正常工作。要將這種思想應(yīng)用于軟件,工程師需要定義較低級(jí)別的要求,并確保每個(gè)功能和功能集都在發(fā)揮作用。工程師還需要確保為系統(tǒng)的其余部分提供適當(dāng)?shù)慕涌凇?a target="_blank">
單元測試涉及在功能和模塊級(jí)別對(duì)輸入和輸出進(jìn)行參數(shù)設(shè)置,進(jìn)行檢查以確保輸入和輸出之間的連接正確,并遵循覆蓋范圍內(nèi)的邏輯。單元測試工具可以提供經(jīng)過驗(yàn)證的測試工具和圖形表示,將各個(gè)輸入和輸出連接到執(zhí)行路徑,并可以驗(yàn)證其正確性。
了解功能和模塊級(jí)別的接口也很重要。靜態(tài)分析工具可以顯示這些接口,并在不同級(jí)別上連接邏輯。
任何學(xué)科的工程師都會(huì)告訴您,發(fā)現(xiàn)問題的時(shí)間越早,修復(fù)這些問題的費(fèi)用就越少。
靜態(tài)分析執(zhí)行源代碼分析,以在不實(shí)際運(yùn)行系統(tǒng)的情況下對(duì)系統(tǒng)的執(zhí)行進(jìn)行建模。編寫代碼后即可使用,靜態(tài)分析可幫助開發(fā)人員最大程度地提高代碼的清晰度,可維護(hù)性和可測試性。靜態(tài)分析工具的主要功能包括:
代碼復(fù)雜度分析:了解代碼不必要的復(fù)雜之處,以便工程師可以執(zhí)行適當(dāng)?shù)木徑饣顒?dòng)。
程序流分析:繪制程序執(zhí)行的設(shè)計(jì)-審查流程圖,以確保程序按預(yù)期流執(zhí)行。
預(yù)測性運(yùn)行時(shí)錯(cuò)誤檢測:通過盡可能多的可執(zhí)行路徑對(duì)代碼執(zhí)行進(jìn)行建模,并尋找潛在的錯(cuò)誤,例如數(shù)組邊界溢出和零除。
遵守編碼標(biāo)準(zhǔn):通常選擇編碼標(biāo)準(zhǔn)以確保對(duì)網(wǎng)絡(luò)安全性,功能安全性的關(guān)注,或者就MISRA標(biāo)準(zhǔn)而言,選擇一種或兩種。編碼標(biāo)準(zhǔn)有助于確保代碼遵循最佳編程實(shí)踐,這與應(yīng)用程序無關(guān),無疑是個(gè)好主意。
圖2諸如靜態(tài)分析之類的活動(dòng)是開發(fā)生命周期早期的開銷,但從長遠(yuǎn)來看,它們卻能帶來回報(bào)。
制定足夠質(zhì)量的代碼
高質(zhì)量的工程產(chǎn)品更昂貴也就不足為奇了。堅(jiān)持任何開發(fā)過程都需要付出一定的代價(jià),并且開發(fā)最好的產(chǎn)品可能并不總是在商業(yè)上可行。
在安全性很重要的地方,功能安全性標(biāo)準(zhǔn)通常需要分析成本和發(fā)生故障的可能性。每個(gè)系統(tǒng),子系統(tǒng)和組件都需要進(jìn)行此風(fēng)險(xiǎn)評(píng)估,以確保執(zhí)行相應(yīng)的緩解措施。無論系統(tǒng)對(duì)安全性至關(guān)重要還是對(duì)安全性至關(guān)重要,同樣的原理也是有意義的。如果您以相同的嚴(yán)格程度測試系統(tǒng)的每個(gè)部分,則會(huì)在風(fēng)險(xiǎn)較低的系統(tǒng)部分中過度投資,而在風(fēng)險(xiǎn)較高的情況下,將無法充分緩解故障。
軟件安全實(shí)踐首先要了解如果組件或系統(tǒng)出現(xiàn)故障會(huì)發(fā)生什么,然后將潛在的故障跟蹤到適當(dāng)?shù)幕顒?dòng)中以減輕這樣做的風(fēng)險(xiǎn)。例如,考慮一個(gè)控制飛機(jī)引導(dǎo)的系統(tǒng),該系統(tǒng)可能會(huì)導(dǎo)致災(zāi)難性事故。必須在子條件覆蓋范圍內(nèi)執(zhí)行嚴(yán)格的緩解活動(dòng),以確保正確生成代碼。
與機(jī)上娛樂系統(tǒng)進(jìn)行對(duì)比。如果該系統(tǒng)發(fā)生故障,飛機(jī)將不會(huì)墜毀,因此與可能立即造成生命損失的系統(tǒng)相比,測試機(jī)上娛樂系統(tǒng)的要求較低。
軟件的可塑性既是福也是禍。使系統(tǒng)幾乎可以在合理范圍內(nèi)執(zhí)行任何操作非常容易。但是,在確保軟件不會(huì)失敗時(shí),同樣的靈活性也可能成為致命弱點(diǎn)。
即使在商業(yè)世界中,雖然并非所有軟件故障都是災(zāi)難性的,但它們也不可取。許多開發(fā)人員在對(duì)安全至關(guān)重要的行業(yè)中工作,除了遵守最嚴(yán)格的標(biāo)準(zhǔn)外別無選擇。但是這些標(biāo)準(zhǔn)所倡導(dǎo)的原理之所以存在,是因?yàn)橐呀?jīng)證明它們可以使最終產(chǎn)品發(fā)揮更好的功能。因此,無論應(yīng)用程序有多重要,按比例采用這些原則是完全有意義的。
盡管適用于軟件開發(fā)的功能安全標(biāo)準(zhǔn)過多,令人困惑,但它們之間的相似之處遠(yuǎn)勝于區(qū)別。所有這些都是基于這樣一個(gè)事實(shí),即軟件開發(fā)是一門工程學(xué)科,要求我們建立需求,進(jìn)行設(shè)計(jì)和開發(fā)以實(shí)現(xiàn)它們,并盡早對(duì)需求進(jìn)行測試。