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