中國(guó)汽車技術(shù)研究中心 張亞楠 謝冬紅
在汽車電控系統(tǒng)嵌入式軟件開發(fā)方式上,隨著MBD(基于模型的開發(fā))模式的普及,傳統(tǒng)手工寫代碼開發(fā)模式已逐漸被取代,在ISO 26262中更是以MBD模式為嵌入式軟件功能安全開發(fā)為例子介紹了新型開發(fā)模式下的測(cè)試V流程。
基于上述背景,本文首先介紹嵌入式軟件測(cè)試的基本概念及方法;之后比較傳統(tǒng)嵌入式軟件開發(fā)與MBD開發(fā)模式的區(qū)別;進(jìn)而著重分析MBD開發(fā)模式下的嵌入式軟件測(cè)試即模型在環(huán),并以相關(guān)電控系統(tǒng)模型為例,研究模型在環(huán)測(cè)試技術(shù);最后對(duì)全文進(jìn)行總結(jié)。
嵌入式軟件測(cè)試分為靜態(tài)測(cè)試以及動(dòng)態(tài)測(cè)試。靜態(tài)測(cè)試指靜態(tài)缺陷檢測(cè),不需要運(yùn)行被測(cè)程序是指不需運(yùn)行被測(cè)程序,主要檢測(cè)代碼的邏輯、語法錯(cuò)誤、是否符合編碼規(guī)則,常見的靜態(tài)檢測(cè)工具有PC-Lint、cppcheck、splint等等。動(dòng)態(tài)檢測(cè)技術(shù)屬于黑盒測(cè)試,指在程序運(yùn)行過程中進(jìn)行數(shù)據(jù)注入,測(cè)試結(jié)果與預(yù)期是否相符合,從而達(dá)到尋找程序漏洞的目的。
單元測(cè)試對(duì)應(yīng)嵌入式軟件測(cè)試V流程前半部分的詳細(xì)設(shè)計(jì),又稱為模塊測(cè)試,測(cè)試對(duì)象是最小可測(cè)單元,檢查每個(gè)單元是否按照詳細(xì)設(shè)計(jì)實(shí)現(xiàn)了預(yù)期的功能,為白盒測(cè)試范疇。
單元測(cè)試完成之后,進(jìn)行的是集成測(cè)試。集成測(cè)試的主要目的為發(fā)現(xiàn)與接口有關(guān)的模塊之間的問題。集成測(cè)試包括兩種方法:非增式集成測(cè)試法和增式集成測(cè)試法,不斷地把待測(cè)模塊連接到已測(cè)模塊集(或其子集)上,對(duì)待測(cè)模塊進(jìn)行測(cè)試,直到最后一個(gè)模塊測(cè)試完畢,增量式集成測(cè)試能夠?qū)Τ绦蜻M(jìn)行循序漸進(jìn)測(cè)試,容錯(cuò)率小,能做到充分、完全的測(cè)試。
嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟、硬件可裁剪,具有功能穩(wěn)定、可靠性好、成本低、集成度高、功耗低、子系統(tǒng)能直接通信融合等特點(diǎn),決定了它適用于汽車工業(yè)領(lǐng)域,近年來電子技術(shù)的發(fā)展日新月異,使得嵌入式系統(tǒng)在車載電子中的應(yīng)用更為廣泛。
汽車電控系統(tǒng)的復(fù)雜性和集成度不斷增高,意味著其可靠性要求也越來越高,早期汽車電控系統(tǒng)采用傳統(tǒng)開發(fā)模式,即手工寫代碼的方式,但隨著軟件的復(fù)雜性越來越高,功能越來越多,代碼量也隨之越來越多,并且進(jìn)入快時(shí)代,開發(fā)周期需求沒有隨之延長(zhǎng),因此近幾年開始興起基于模型的設(shè)計(jì)(Model-Based Design,簡(jiǎn)稱MBD)開發(fā)模式,并逐漸取代傳統(tǒng)開發(fā)模式。
隨著汽車電控系統(tǒng)越來越復(fù)雜,傳統(tǒng)開發(fā)方式已經(jīng)變得不再適用了,采用基于模型設(shè)計(jì)的方法,能夠大大加快產(chǎn)品開發(fā)周期,并同時(shí)提高軟件產(chǎn)品的質(zhì)量?;谀P烷_發(fā)模式的一個(gè)特征在于功能模型不僅詳述了所想要的功能,而且還提供了設(shè)計(jì)信息,并最終作為代碼生成方法的實(shí)施基礎(chǔ)。
相比較于前文提到的傳統(tǒng)開發(fā)模式幾方面的缺陷而言,基于模型的設(shè)計(jì)在四個(gè)過程中緊密聯(lián)系,互相驗(yàn)證,有較高的耦合性,避免了某一流程的孤立性?;谀P偷脑O(shè)計(jì)工作流程圖如圖一,可以看出,在整個(gè)流程中持續(xù)不斷地進(jìn)行設(shè)計(jì)和驗(yàn)證,從需求到設(shè)計(jì)到實(shí)現(xiàn),測(cè)試貫穿每一流程。這就保證了軟件缺陷能夠越早地被發(fā)現(xiàn),測(cè)試成本、維護(hù)成本大大降低,軟件的質(zhì)量得到有效保證。
圖一 MBD模式的工作流程
模型生成之后,需對(duì)模型進(jìn)行檢查與驗(yàn)證。針對(duì)以上情況將MBD模式下的嵌入式軟件測(cè)試流程大致分為以下幾點(diǎn):模型規(guī)范性驗(yàn)證、模型結(jié)構(gòu)分析、單元測(cè)試、集成測(cè)試、MIL測(cè)試(模型在環(huán)測(cè)試)、靜態(tài)代碼測(cè)試、SIL測(cè)試(軟件在環(huán)測(cè)試)、PIL測(cè)試(處理器在環(huán)測(cè)試)等。
該步驟主要對(duì)設(shè)計(jì)的模型進(jìn)行規(guī)范性檢查,驗(yàn)證模型是否符合需求規(guī)定的若干標(biāo)準(zhǔn)規(guī)則,在matlab中通過Model Advisor進(jìn)行,用戶在Model Advisor中能夠自定義標(biāo)準(zhǔn)規(guī)則集進(jìn)行校驗(yàn),這一過程一般都在早期進(jìn)行,能夠有效識(shí)別出模型中隱含的問題,找出模型設(shè)置是否會(huì)導(dǎo)致生成后期代碼的無效或不符合某安全標(biāo)準(zhǔn)。
在模型通過規(guī)范性檢驗(yàn)之后,可以利用matlab中提供的Simulink Design Veri fier模塊自動(dòng)生成測(cè)試用例,去檢查結(jié)構(gòu)是否存在問題,是否存在不合理的邏輯設(shè)計(jì),例如除零等異常問題,能夠利用該模塊去測(cè)試這些異常,覆蓋一些運(yùn)行不到的分支路徑。
接下來就可以利用matlab提供的System Test模塊進(jìn)行單元級(jí)別的功能測(cè)試,為模型的測(cè)試用例設(shè)計(jì)提供一個(gè)框架,創(chuàng)建測(cè)試程序,并能直接運(yùn)行被測(cè)模型,分析測(cè)試結(jié)果。在單元測(cè)試通過后,需進(jìn)行集成測(cè)試,這時(shí)候更多的是關(guān)注模塊間的接口關(guān)系、參數(shù)傳遞等,與單元測(cè)試相輔相成,保證測(cè)試的完整、全面。
某些電控系統(tǒng)在測(cè)試過程中,需要對(duì)其建立被控對(duì)象模型,形成閉環(huán)進(jìn)行測(cè)試,是在模型層面上實(shí)現(xiàn)的閉環(huán)測(cè)試,這種測(cè)試通常發(fā)生在兩種場(chǎng)景之下,一是系統(tǒng)工程師為了驗(yàn)證算法,使用控制算法模型控制被控對(duì)象模型;另外一種是軟件工程師做模型級(jí)別的集成測(cè)試。
在模型階段充分驗(yàn)證完成之后就可以對(duì)模型進(jìn)行自動(dòng)代碼生成,自動(dòng)生成的代碼也不一定就是準(zhǔn)確無誤的,因此在軟件代碼層面上首先需要對(duì)代碼質(zhì)量做到保證,就需要做靜態(tài)代碼測(cè)試,matlab提供的工具為Polyspace能夠進(jìn)行靜態(tài)分析,其中包含若干條默認(rèn)代碼規(guī)則供用戶進(jìn)行選擇組合。
同時(shí)還需要對(duì)代碼進(jìn)行模型-代碼的一致性檢查,SIL的目的其實(shí)就是為了驗(yàn)證自動(dòng)生成的代碼和模型在功能需求上是一致的。
這一階段的測(cè)試過程主要內(nèi)容是進(jìn)行等效性驗(yàn)證,并得到測(cè)試模型生成的代碼在目標(biāo)處理器上的運(yùn)行時(shí)間。
本文首先介紹了簡(jiǎn)單介紹了嵌入式軟件測(cè)試發(fā)展的背景,并引出汽車電控系統(tǒng)嵌入式軟件測(cè)試;之后對(duì)傳統(tǒng)的嵌入式軟件開發(fā)模式與基于模型設(shè)計(jì)的開發(fā)模式進(jìn)行了對(duì)比;并對(duì)基于模型的設(shè)計(jì)下的嵌入式軟件測(cè)試流程進(jìn)行了詳細(xì)的介紹和實(shí)驗(yàn)說明,并著重分析了新型開發(fā)模式下基于模型的設(shè)計(jì),其測(cè)試流程、測(cè)試工具及測(cè)試要點(diǎn)等;最后對(duì)全文進(jìn)行了總結(jié),在新型開發(fā)模式的來臨之時(shí),同時(shí)也要對(duì)測(cè)試技術(shù)加以提升,保證軟件產(chǎn)品的質(zhì)量及功能安全性。
[1]解志君.嵌入式軟件測(cè)試技術(shù)分析研究[J].自動(dòng)化與儀器儀表,2016(12):3-4.
[2]呂金和.嵌入式軟件測(cè)試[J].軟件導(dǎo)刊,2010,(9):40-41.