中國汽車技術(shù)研究中心 張亞楠 謝冬紅
在汽車電控系統(tǒng)嵌入式軟件開發(fā)方式上,隨著MBD(基于模型的開發(fā))模式的普及,傳統(tǒng)手工寫代碼開發(fā)模式已逐漸被取代,在ISO 26262中更是以MBD模式為嵌入式軟件功能安全開發(fā)為例子介紹了新型開發(fā)模式下的測試V流程。
基于上述背景,本文首先介紹嵌入式軟件測試的基本概念及方法;之后比較傳統(tǒng)嵌入式軟件開發(fā)與MBD開發(fā)模式的區(qū)別;進而著重分析MBD開發(fā)模式下的嵌入式軟件測試即模型在環(huán),并以相關(guān)電控系統(tǒng)模型為例,研究模型在環(huán)測試技術(shù);最后對全文進行總結(jié)。
嵌入式軟件測試分為靜態(tài)測試以及動態(tài)測試。靜態(tài)測試指靜態(tài)缺陷檢測,不需要運行被測程序是指不需運行被測程序,主要檢測代碼的邏輯、語法錯誤、是否符合編碼規(guī)則,常見的靜態(tài)檢測工具有PC-Lint、cppcheck、splint等等。動態(tài)檢測技術(shù)屬于黑盒測試,指在程序運行過程中進行數(shù)據(jù)注入,測試結(jié)果與預(yù)期是否相符合,從而達到尋找程序漏洞的目的。
單元測試對應(yīng)嵌入式軟件測試V流程前半部分的詳細設(shè)計,又稱為模塊測試,測試對象是最小可測單元,檢查每個單元是否按照詳細設(shè)計實現(xiàn)了預(yù)期的功能,為白盒測試范疇。
單元測試完成之后,進行的是集成測試。集成測試的主要目的為發(fā)現(xiàn)與接口有關(guān)的模塊之間的問題。集成測試包括兩種方法:非增式集成測試法和增式集成測試法,不斷地把待測模塊連接到已測模塊集(或其子集)上,對待測模塊進行測試,直到最后一個模塊測試完畢,增量式集成測試能夠?qū)Τ绦蜻M行循序漸進測試,容錯率小,能做到充分、完全的測試。
嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),軟、硬件可裁剪,具有功能穩(wěn)定、可靠性好、成本低、集成度高、功耗低、子系統(tǒng)能直接通信融合等特點,決定了它適用于汽車工業(yè)領(lǐng)域,近年來電子技術(shù)的發(fā)展日新月異,使得嵌入式系統(tǒng)在車載電子中的應(yīng)用更為廣泛。
汽車電控系統(tǒng)的復(fù)雜性和集成度不斷增高,意味著其可靠性要求也越來越高,早期汽車電控系統(tǒng)采用傳統(tǒng)開發(fā)模式,即手工寫代碼的方式,但隨著軟件的復(fù)雜性越來越高,功能越來越多,代碼量也隨之越來越多,并且進入快時代,開發(fā)周期需求沒有隨之延長,因此近幾年開始興起基于模型的設(shè)計(Model-Based Design,簡稱MBD)開發(fā)模式,并逐漸取代傳統(tǒng)開發(fā)模式。
隨著汽車電控系統(tǒng)越來越復(fù)雜,傳統(tǒng)開發(fā)方式已經(jīng)變得不再適用了,采用基于模型設(shè)計的方法,能夠大大加快產(chǎn)品開發(fā)周期,并同時提高軟件產(chǎn)品的質(zhì)量。基于模型開發(fā)模式的一個特征在于功能模型不僅詳述了所想要的功能,而且還提供了設(shè)計信息,并最終作為代碼生成方法的實施基礎(chǔ)。
相比較于前文提到的傳統(tǒng)開發(fā)模式幾方面的缺陷而言,基于模型的設(shè)計在四個過程中緊密聯(lián)系,互相驗證,有較高的耦合性,避免了某一流程的孤立性。基于模型的設(shè)計工作流程圖如圖一,可以看出,在整個流程中持續(xù)不斷地進行設(shè)計和驗證,從需求到設(shè)計到實現(xiàn),測試貫穿每一流程。這就保證了軟件缺陷能夠越早地被發(fā)現(xiàn),測試成本、維護成本大大降低,軟件的質(zhì)量得到有效保證。

圖一 MBD模式的工作流程
模型生成之后,需對模型進行檢查與驗證。針對以上情況將MBD模式下的嵌入式軟件測試流程大致分為以下幾點:模型規(guī)范性驗證、模型結(jié)構(gòu)分析、單元測試、集成測試、MIL測試(模型在環(huán)測試)、靜態(tài)代碼測試、SIL測試(軟件在環(huán)測試)、PIL測試(處理器在環(huán)測試)等。
該步驟主要對設(shè)計的模型進行規(guī)范性檢查,驗證模型是否符合需求規(guī)定的若干標準規(guī)則,在matlab中通過Model Advisor進行,用戶在Model Advisor中能夠自定義標準規(guī)則集進行校驗,這一過程一般都在早期進行,能夠有效識別出模型中隱含的問題,找出模型設(shè)置是否會導(dǎo)致生成后期代碼的無效或不符合某安全標準。
在模型通過規(guī)范性檢驗之后,可以利用matlab中提供的Simulink Design Veri fier模塊自動生成測試用例,去檢查結(jié)構(gòu)是否存在問題,是否存在不合理的邏輯設(shè)計,例如除零等異常問題,能夠利用該模塊去測試這些異常,覆蓋一些運行不到的分支路徑。
接下來就可以利用matlab提供的System Test模塊進行單元級別的功能測試,為模型的測試用例設(shè)計提供一個框架,創(chuàng)建測試程序,并能直接運行被測模型,分析測試結(jié)果。在單元測試通過后,需進行集成測試,這時候更多的是關(guān)注模塊間的接口關(guān)系、參數(shù)傳遞等,與單元測試相輔相成,保證測試的完整、全面。
某些電控系統(tǒng)在測試過程中,需要對其建立被控對象模型,形成閉環(huán)進行測試,是在模型層面上實現(xiàn)的閉環(huán)測試,這種測試通常發(fā)生在兩種場景之下,一是系統(tǒng)工程師為了驗證算法,使用控制算法模型控制被控對象模型;另外一種是軟件工程師做模型級別的集成測試。
在模型階段充分驗證完成之后就可以對模型進行自動代碼生成,自動生成的代碼也不一定就是準確無誤的,因此在軟件代碼層面上首先需要對代碼質(zhì)量做到保證,就需要做靜態(tài)代碼測試,matlab提供的工具為Polyspace能夠進行靜態(tài)分析,其中包含若干條默認代碼規(guī)則供用戶進行選擇組合。
同時還需要對代碼進行模型-代碼的一致性檢查,SIL的目的其實就是為了驗證自動生成的代碼和模型在功能需求上是一致的。
這一階段的測試過程主要內(nèi)容是進行等效性驗證,并得到測試模型生成的代碼在目標處理器上的運行時間。
本文首先介紹了簡單介紹了嵌入式軟件測試發(fā)展的背景,并引出汽車電控系統(tǒng)嵌入式軟件測試;之后對傳統(tǒng)的嵌入式軟件開發(fā)模式與基于模型設(shè)計的開發(fā)模式進行了對比;并對基于模型的設(shè)計下的嵌入式軟件測試流程進行了詳細的介紹和實驗說明,并著重分析了新型開發(fā)模式下基于模型的設(shè)計,其測試流程、測試工具及測試要點等;最后對全文進行了總結(jié),在新型開發(fā)模式的來臨之時,同時也要對測試技術(shù)加以提升,保證軟件產(chǎn)品的質(zhì)量及功能安全性。
[1]解志君.嵌入式軟件測試技術(shù)分析研究[J].自動化與儀器儀表,2016(12):3-4.
[2]呂金和.嵌入式軟件測試[J].軟件導(dǎo)刊,2010,(9):40-41.