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