隨著汽車行業(yè)的迅速發(fā)展,汽車電子電器E/E系統(tǒng)在汽車中的作用不斷提高,ECU開發(fā)所占用的時間和成本也越來越高。與此同時,越來越多的電子控制系統(tǒng)(例如車身穩(wěn)定控制系統(tǒng)ESP,防抱死制動系統(tǒng)ABS,自適應(yīng)前照明系統(tǒng)AFS等)具有與安全相關(guān)的功能,因此對ECU的安全要求也越來越高。
為了減少產(chǎn)品的開發(fā)時間和成本,降低由于安全問題而導(dǎo)致的維護(hù)甚至召回的風(fēng)險,越來越多的整車廠和供應(yīng)商開始重視汽車領(lǐng)域的功能安全問題,ECU軟件功能安全的問題也成為汽車行業(yè)迫切需要解決的問題,車輛功能安全標(biāo)準(zhǔn)ISO 26262就在這樣的環(huán)境和需求下應(yīng)運(yùn)而生,并于2011年11月正式發(fā)布第一版本,該標(biāo)準(zhǔn)是當(dāng)前汽車業(yè)中最流行、最復(fù)雜、也是最重要的一份標(biāo)準(zhǔn)。
ISO 26262的目標(biāo)是通過避免汽車E/E 系統(tǒng)故障行為可能導(dǎo)致的危害來提高E/E系統(tǒng)的功能安全。ISO 26262采用車輛安全完整性等級(ASIL)來判斷系統(tǒng)的功能安全程度,ASIL由ASIL A(最低)、ASILB、ASIL C及ASIL D(最高)四個等級組成,ASIL等級越高表示系統(tǒng)的功能安全評估越嚴(yán)格,相應(yīng)的表示系統(tǒng)正確執(zhí)行安全功能,或者說的避免該功能出錯的概率越高,即系統(tǒng)的安全可靠性越高。
ISO 26262標(biāo)準(zhǔn)的組成架構(gòu)由十個規(guī)范和信息指導(dǎo)文件組成,其中ISO 26262—4/5/6闡述的是系統(tǒng)級/硬件級/軟件級的產(chǎn)品開發(fā),使用嵌套的V模型定義了每個開發(fā)階段的過程以及相應(yīng)的工作產(chǎn)品。本解決方案主要闡明了在軟件級產(chǎn)品開發(fā)階段如何去理解ISO 26262的要求,并且指出了在實(shí)際的軟件開發(fā)過程中如何結(jié)合ISO 26262的軟件測試生命周期,通過包括軟件測試工作的執(zhí)行以及過程控制等方面來確保ECU軟件質(zhì)量滿足ISO 26262軟件級功能安全相應(yīng)等級的要求。
基于V模式的ISO26262軟件測試生命周期
如圖所示,基于V模式的ISO 26262-6軟件測試生命周期可以劃分為五個階段:
靜態(tài)分析需求和功能需求:在軟件級產(chǎn)品開發(fā)初始化階段和軟件安全需求規(guī)范制定階段確定了一些基本的嵌入式軟件靜態(tài)分析需求和功能需求,這部分內(nèi)容是以后設(shè)計和測試的基礎(chǔ);
架構(gòu)驗(yàn)證:在軟件架構(gòu)設(shè)計階段,我們可以使用人工分析的方式來驗(yàn)證和測試軟件架構(gòu)層的內(nèi)容,但是有條件的話最好使用合適的架構(gòu)設(shè)計工具,在設(shè)計的過程中同時進(jìn)行架構(gòu)驗(yàn)證;
靜態(tài)測試:在軟件單元設(shè)計和實(shí)現(xiàn)階段同時進(jìn)行靜態(tài)測試,可以使用開發(fā)輔助工具來進(jìn)行靜態(tài)測試,這樣不必因?yàn)殪o態(tài)測試的活動而改變開發(fā)流程。
動態(tài)測試:在軟件單元測試階段以及軟件集成和測試階段,使用合適的動態(tài)測試工具進(jìn)行動態(tài)單元和集成測試。
功能驗(yàn)證:在軟件安全需求驗(yàn)證階段,要根據(jù)ISO26262-6的要求進(jìn)行功能驗(yàn)證,包括進(jìn)行ECU網(wǎng)絡(luò)環(huán)境測試和實(shí)車測試,必要的時候進(jìn)行HIL測試。
因?yàn)樵陟o態(tài)分析需求中所需要滿足的方法基本上都是屬于靜態(tài)測試的范疇的,因此我們以ASIL A為例,將軟件測試內(nèi)容分為靜態(tài)測試、動態(tài)測試和功能驗(yàn)證三部分(注:架構(gòu)驗(yàn)證暫時未包含在內(nèi)),見下表。
表中所列舉的靜態(tài)測試內(nèi)容里面要求采取多種的測試方法,例如‘低復(fù)雜度的強(qiáng)制要求’一般需要通過滿足一定的度量指標(biāo)來實(shí)現(xiàn),度量指標(biāo)包括圈復(fù)雜度、嵌套深度等等,而‘使用語言的子集’在汽車行業(yè)一般選擇MISRA-C,通過強(qiáng)制使用編碼規(guī)范來排除未定義行為或者實(shí)現(xiàn)定義行為等危險用法,除此之外靜態(tài)測試還要求一些其他的測試方法,例如如果要滿足更高的安全完整性等級的話,靜態(tài)測試內(nèi)容還需要包括運(yùn)行時錯誤檢測等,一般需要使用可靠性測試性的測試。
ASIL A所要求的動態(tài)測試要求能夠基于需求分析和設(shè)計測試用例,因此需要在開發(fā)過程中提供對需求管理的支持,同時要求能夠針對函數(shù)或模塊提供覆蓋度分析等。如果是更高等級的ASIL的話可能還需要進(jìn)行不同環(huán)境的測試,例如模型在環(huán)測試(MIL)和軟件在環(huán)測試(SIL),并在必要的情況下進(jìn)行MIL和SIL的對比測試。
軟件安全需求的測試環(huán)境需要根據(jù)ASIL等級來進(jìn)行選取,并且至少要在一個以上不同環(huán)境內(nèi)執(zhí)行測試。ASIL A所要求的ECU網(wǎng)絡(luò)測試包括了網(wǎng)絡(luò)中各ECU之間的相互作用,目的是確保ECU之間沒有引起功能故障的相互干擾,而實(shí)車測試則是在真正的ECU軟件運(yùn)行環(huán)境中進(jìn)行測試的方式,根據(jù)功能安全需求規(guī)范來進(jìn)行,可以最直觀地反映出ECU軟件是否能夠滿足定義的功能安全需求。當(dāng)然在必要的時候還需要進(jìn)行硬件在環(huán)測試(HIL),通過仿真控制系統(tǒng)中傳感器和執(zhí)行器的硬件(Hardware)電氣特性,為嵌入式控制器構(gòu)建起一個控制回路 (Loop),從而可以方便的在其中模擬被控對象的工作環(huán)境,對ECU的算法進(jìn)行功能驗(yàn)證和測試。
針對前面劃分的ISO 26262所關(guān)注的靜態(tài)測試、動態(tài)測試和功能驗(yàn)證的要求,下面我們就來看一下解決方案中如何來滿足這些需求。
符合ISO26262標(biāo)準(zhǔn)的靜態(tài)測試
在靜態(tài)測試中,靜態(tài)分析主要包括規(guī)則檢測和質(zhì)量度量;可靠性測試主要進(jìn)行運(yùn)行時錯誤的檢測。
上面提到ASIL A中針對編碼準(zhǔn)則的需求以及其他ASIL等級所強(qiáng)烈推薦的例如使用風(fēng)格指南等需求都是不需要運(yùn)行源程序來檢測,因此都屬于靜態(tài)分析的范疇,雖然這些需求也可以通過人工檢查的方式實(shí)現(xiàn),但一個好的靜態(tài)分析工具幾乎可以自動化地執(zhí)行表1中所有的要求,通過靜態(tài)分析工具來幫助我們檢查和滿足這些規(guī)定可以明顯地幫助組織更有效率地實(shí)現(xiàn)ISO 26262靜態(tài)分析的相關(guān)需求。
針對靜態(tài)分析的需求,我們提供DAC這樣一個工具,它的主要功能包括:可以自動化地地執(zhí)行C代碼及匯編代碼的靜態(tài)分析,支持包括MISRA-C1998和2004的規(guī)則檢測;提供項(xiàng)目、文件和函數(shù)質(zhì)量度量;
提供方便快捷的代碼結(jié)構(gòu)生成,高亮顯示代碼結(jié)構(gòu)并生成報告文檔等。
在靜態(tài)測試中,除了規(guī)則檢測和質(zhì)量度量以外,還有一類錯誤我們稱之為運(yùn)行時錯誤,例如數(shù)組越界、標(biāo)量溢出等。運(yùn)行時錯誤顧名思義是程序運(yùn)行的時候才會出現(xiàn)的錯誤,針對這樣的錯誤,使用傳統(tǒng)的測試方式只有在動態(tài)地運(yùn)行測試用例的時候才有可能發(fā)現(xiàn),但是現(xiàn)在的測試工具可以使用先進(jìn)的代碼分析技術(shù),不需要真正去執(zhí)行源代碼,而是使用數(shù)學(xué)方法分析源代碼,發(fā)現(xiàn)代碼中在運(yùn)行的時候可能會出現(xiàn)錯誤的地方,從而實(shí)現(xiàn)通過靜態(tài)測試的方式來達(dá)到一定的動態(tài)測試的效果。因?yàn)檫\(yùn)行時錯誤會直接影響的程序執(zhí)行的可靠性,所以針對這類錯誤的測試我們也可以稱之為可靠性測試。
針對可靠性測試的需求,我們提供澳大利亞的一個運(yùn)行時錯誤監(jiān)測工具Goanna。其模型檢測技術(shù)可以對所有函數(shù)提供高效的路徑覆蓋,檢查超過90種運(yùn)行時錯誤,包括空指針引用、危險的指針運(yùn)算、未初始化/未使用變量、冗余/不需要的代碼、除零、內(nèi)存泄露、緩沖區(qū)溢出、釋放后使用、不一致的釋放、濫用的虛擬成員調(diào)用、算術(shù)錯誤、32/64位兼容性等。
符合ISO26262標(biāo)準(zhǔn)的軟件代碼SIL測試
在準(zhǔn)備和設(shè)計階段,大部分都是屬于靜態(tài)測試的工作,它在確認(rèn)設(shè)計或?qū)崿F(xiàn)的不足時非常高效,但它不能證明功能正確。而依ISO 26262-6標(biāo)準(zhǔn)開發(fā)的軟件根據(jù)需達(dá)到的車輛安全完整性等級(ASIL)不同,還需要經(jīng)過各種動態(tài)測試,動態(tài)測試可以驗(yàn)證軟件功能,因此是對靜態(tài)測試的有效補(bǔ)充。
以前的動態(tài)測試大部分是通過人工的方式實(shí)現(xiàn),但是由于動態(tài)測試巨大的工作量,以及測試用例難以重用,測試覆蓋率無法計算的困難,因此在測試解決方案中還是需要選擇合適的動態(tài)測試工具來執(zhí)行軟件單元測試。又因?yàn)镮SO 26262對需求和測試有可追溯性的要求,所以最好測試工具可以和相關(guān)需求管理工具集成,例如能夠從需求管理工具中將需求導(dǎo)入,再將測試用例和需求鏈接起來,并且實(shí)現(xiàn)數(shù)據(jù)的雙向同步。
針對軟件代碼SIL測試,我們提供德國的代碼級動態(tài)測試工具Tessy。它的基本功能包括:全自動地測試執(zhí)行和評估;多種方式確定測試用例;基于需求的測試跟蹤;不需要用戶介入的回歸測試;代碼覆蓋率;自動生成測試報告等。
在Tessy中,測試用例的設(shè)計不僅可以基于需求覆蓋來進(jìn)行,包括進(jìn)行需求管理、需求跟蹤、需求覆蓋度統(tǒng)計等,也可以基于代碼覆蓋進(jìn)行測試用例設(shè)計,并且非常方便地達(dá)到MC/DC覆蓋的等級。
符合ISO26262標(biāo)準(zhǔn)的MIL測試
在汽車領(lǐng)域的嵌入式控制系統(tǒng)開發(fā)中,基于模型的開發(fā)(Model-based Development)的設(shè)計方法以其直觀、快速、高效等優(yōu)勢已經(jīng)得到廣泛的應(yīng)用。但是由于系統(tǒng)的復(fù)雜性,建立起來的仿真模型也越來越復(fù)雜,根據(jù)自動生成代碼的測試結(jié)果再來改進(jìn)模型的測試方式也變得越來越困難,并且根據(jù)ISO 26262標(biāo)準(zhǔn)ASIL C和D的要求,必須對模型和對應(yīng)的代碼分別進(jìn)行單元測試并且比較結(jié)果,因此,如果是使用模型自動生成代碼的設(shè)計方式的話,我們需要在建立了仿真模型之后就對模型進(jìn)行測試,在確保模型功能正確的基礎(chǔ)之上來自動生成代碼再進(jìn)行代碼測試。
針對MIL測試,我們提供德國的分時段測試工具TPT,實(shí)現(xiàn)對控制系統(tǒng)以及閉環(huán)控制系統(tǒng)模型的MIL測試。TPT軟件由于首創(chuàng)地使用分時段測試(Time Partition Testing),使得控制系統(tǒng)的軟件測試技術(shù)得以極大提升;同時由于TPT軟件支持眾多業(yè)內(nèi)主流的工具平臺和測試環(huán)境,能夠更好地利用客戶已有的投資,實(shí)現(xiàn)各種異構(gòu)環(huán)境下的自動化測試;針對MATLAB/Simulink/Stateflow以及Targetlink,TPT專門設(shè)計了完美的接口構(gòu)建功能模型,然后在TPT中創(chuàng)建測試用例模型,通過TPT的MATLAB接口保證測試的高效率執(zhí)行。提供了全方位的支持進(jìn)行模型測試。
同時,在TPT中可以滿足ISO26262基于功能設(shè)計測試用例的需求,包括分析建立場景、定義測試用例組件、確定場景組合、生成測試用例等。
符合ISO26262標(biāo)準(zhǔn)的網(wǎng)絡(luò)測試和HIL測試
不論是AUTOSAR還是OSEK,都把網(wǎng)絡(luò)作為整個軟件結(jié)構(gòu)的基礎(chǔ),因此對網(wǎng)絡(luò)的驗(yàn)證放在功能驗(yàn)證之前進(jìn)行,ISO 26262也在最低功能安全等級ASILA里面就提出了網(wǎng)絡(luò)環(huán)境測試的需求。
網(wǎng)絡(luò)測試是功能測試的基礎(chǔ),在上面有應(yīng)用層的時候,在做應(yīng)用層驗(yàn)證之前,先進(jìn)行網(wǎng)絡(luò)驗(yàn)證。
現(xiàn)在網(wǎng)絡(luò)已經(jīng)越來越復(fù)雜,CAN、LIN,一般都有三四十個節(jié)點(diǎn),汽車?yán)锩嬗泻芏嗫偩€的環(huán)境,最底下是物理層(CAN-驅(qū)動),在CAN的物理層之上有很多應(yīng)用層的協(xié)議棧,利用Vector的HIL測試系統(tǒng)——VT,再基于Vector另一個工具CANoe的優(yōu)勢可以很好的進(jìn)行協(xié)議棧的仿真,實(shí)現(xiàn)網(wǎng)絡(luò)測試的需求。
HIL測試一般可以分為兩種情況,一是基于真實(shí)負(fù)載的測試,另一種是在極端情況下或者說在自動化環(huán)境下更常用的是實(shí)用方針負(fù)載進(jìn)行測試。不論是真實(shí)負(fù)載還是仿真負(fù)載,最重要的一點(diǎn)就是構(gòu)建自動化的仿真環(huán)境出來,Vector的VT系統(tǒng)能夠提供模塊化的測試接口設(shè)備,為供電環(huán)境、總線接口、傳感器激勵和仿真負(fù)載等提供相應(yīng)的模塊來搭建測試環(huán)境。CANoe基于它先天的網(wǎng)路仿真的測試功能,再加上VT系統(tǒng)可以幫助我們簡化測試平臺的搭建以及測試執(zhí)行的過程,并將測試能力擴(kuò)展到HIL和功能測試。
符合ISO26262標(biāo)準(zhǔn)的實(shí)車測試
不論是代碼測試、模型測試還是網(wǎng)絡(luò)測試或者HIL測試,基本都是偏研發(fā)的測試,除此之外在研發(fā)后期還需要實(shí)車測試。傳統(tǒng)實(shí)車測試需要專門駕駛員和一些測試人員到現(xiàn)場進(jìn)行測試并采集數(shù)據(jù),而現(xiàn)在比較流行的遠(yuǎn)程測試則是通過在車上加裝一些遠(yuǎn)程監(jiān)控設(shè)備,將測試系統(tǒng)在測試過程中產(chǎn)生的數(shù)據(jù)通過遠(yuǎn)程傳輸?shù)姆绞桨l(fā)送到數(shù)據(jù)后臺,并且在測試過程中不僅可以記錄測試數(shù)據(jù),還能根據(jù)測試的要求遠(yuǎn)程下載測試任務(wù),例如更新需要采集的數(shù)據(jù)等,我們提供的德國CarMediaLab公司的產(chǎn)品Flea就可以實(shí)現(xiàn)這種功能。
車輛實(shí)時采集的數(shù)據(jù)主要是總線信息,需要在分析過程中和工況結(jié)合起來,而在進(jìn)行離線分析時還可以與TPT結(jié)合起來。