吳玲玉 張宗哲 馬凱
摘 要:當(dāng)前,嵌入式系統(tǒng)已發(fā)展成為汽車電子行業(yè)的焦點(diǎn),鑒于其自身設(shè)計(jì)特性,為保證軟件質(zhì)量可靠性,軟件測(cè)試必不可少。在介紹軟件測(cè)試基本概念的基礎(chǔ)上,針對(duì)IS0 26262功能安全標(biāo)準(zhǔn),從靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試解決方案上介紹了相關(guān)嵌入式軟件測(cè)試工具,并根據(jù)測(cè)試結(jié)果分析工具的有效性。結(jié)果表明,軟件測(cè)試工具可以將代碼質(zhì)量講行量化.古觀得到修改意見(jiàn).極大提高款件開(kāi)發(fā)效率.同時(shí)減少產(chǎn)品開(kāi)發(fā)后期問(wèn)題出現(xiàn)率、
關(guān)鍵詞:嵌入式系統(tǒng);IS0 26262;MISRA;軟件測(cè)試
DOI: 10. 11907/rjdk.191548
開(kāi)放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1672-7800(2020)004-0152-07
Research on Embedded Software Testing Based on IS0 26262
WU Ling-yu, ZHANG Zong-zhe, MA Kai
(DIAS Automotive Ele.ctronic.s SYstem Co.Ltd.Shanghai 200000.China )
Abstract: At present, embedded sy stem has developed into the focus of' automotive electronics industry. At the same time. due to thecharacteristics of its own design, in order to ensure the quality and reliability of sof'tware . software testing is obviously necessary . Thispaper briefly introduces the basic concept of' software testing, introduces the relevant embedded software testing tools from static test-ing and dynamic testing solutions according to IS0 26262 functional safety standard. and analy zes the effectiveness of the tools accord-ing to the test results. The results sho,,-, that the soft,,-are testing tools can quantif'y the code quality and obtain the modification opinionsintuitively, which can greatly improve the efficiency of' sof'tu-are development and reduce the occurrence rate of problerus in the laterstage of product developruent.Key Words: eiubedded system; IS0 26262; MISRA; software testing
O 引言
隨著嵌入式技術(shù)的快速發(fā)展,嵌入式系統(tǒng)復(fù)雜性不斷提高,同時(shí)嵌入式軟件測(cè)試難度也相應(yīng)增加。一些不可靠的嵌入式軟件在投入使用后會(huì)由于軟件質(zhì)量問(wèn)題造成人類生命與財(cái)產(chǎn)的重大損失[1]。對(duì)于軟件測(cè)試研究,國(guó)外起步于20世紀(jì)70年代,1980年,RobertL2發(fā)表了著名文章——“調(diào)試和測(cè)試的失落世界”,總結(jié)了嵌入式軟件現(xiàn)狀。此后,許多研究機(jī)構(gòu)針對(duì)嵌入式軟件進(jìn)行了大量研究,美國(guó)和歐洲在技術(shù)上處于領(lǐng)先地位,以NASA、Boeing、ESA,Airbus為代表的機(jī)構(gòu)帶動(dòng)了整個(gè)嵌入式系統(tǒng)的發(fā)展[3]。國(guó)內(nèi)起步相對(duì)較晚,最先用于國(guó)防電子領(lǐng)域,并逐漸拓展到其它行業(yè),如汽車電子、鐵路、醫(yī)療等。我國(guó)目前缺少商業(yè)化的嵌入式系統(tǒng)測(cè)試平臺(tái),但開(kāi)展了一定研究[4-7],有基于研究目的開(kāi)發(fā)的測(cè)試系統(tǒng),如EASTT、圖形化測(cè)試用例生成系統(tǒng)等。筆者根據(jù)我國(guó)軟件測(cè)試現(xiàn)狀,結(jié)合軟件測(cè)工作經(jīng)驗(yàn),對(duì)目前國(guó)際上較為流行的符合標(biāo)準(zhǔn)的測(cè)試工具進(jìn)行研究,為國(guó)內(nèi)軟件測(cè)試T具開(kāi)發(fā)提供一定參考。
1汽車電子軟件驗(yàn)證標(biāo)準(zhǔn)
在汽車電子領(lǐng)域,IS0 26262和MISRA是通用的用于驗(yàn)證和確認(rèn)車載軟件的兩大標(biāo)準(zhǔn)。
IS0 26262是《道路車輛一功能安全》標(biāo)準(zhǔn)[8],采用完整的安全等級(jí)(ASII)判斷系統(tǒng)功能安全程度。ASIL由4個(gè)等級(jí)組成,其中ASIL A最低,ASIL D最高,等級(jí)越高表明系統(tǒng)功能安全評(píng)估越嚴(yán)格,即系統(tǒng)可靠性越高[9]。ISO26262-6提出將軟件測(cè)試和驗(yàn)證作為軟件開(kāi)發(fā)標(biāo)準(zhǔn)的一部分,并將軟件生命周期劃分為5個(gè)階段[10],基于V模式的軟件生命周期如圖l所示。
MISRA(The Motor Industrv Software Reliahilitv Associa-tlnn,汽車T業(yè)軟件可靠性聯(lián)會(huì))組織發(fā)布的一套汽車-業(yè)軟件安全性的C語(yǔ)言編程規(guī)范《汽車專業(yè)軟件的C語(yǔ)言編程指南》(Guidelines for the Use of the C Language in VehicleBased Software),稱為MISRA C[11-13]。嵌入式開(kāi)發(fā)者以MISRA C衡量白己的代碼質(zhì)量,比如著名的uC/OS-II,宣傳白己的代碼99%遵守了MISRA標(biāo)準(zhǔn)[14]。
2軟件測(cè)試技術(shù)
軟件測(cè)試是以評(píng)價(jià)一個(gè)程序或者系統(tǒng)屬性為目標(biāo)的活動(dòng)[15]。根據(jù)測(cè)試時(shí)的軟件運(yùn)行狀態(tài),將軟件測(cè)試分為靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試。
2.1靜態(tài)測(cè)試解決方案
靜態(tài)測(cè)試指在不需要運(yùn)行被測(cè)代碼的情況下,借助軟件測(cè)試工具對(duì)軟件文檔或程序進(jìn)行評(píng)審,度量復(fù)雜度,檢查軟件與編程規(guī)范的一致性,減少錯(cuò)誤出現(xiàn)概率[16]。
2.1.1
IS0 26262編碼規(guī)約
IS0 26262的Part6中,對(duì)編碼規(guī)約確保品質(zhì)的方法和妥當(dāng)性證明有著嚴(yán)格要求:①遵守組織所規(guī)定的設(shè)計(jì)準(zhǔn)則(Part6-5);②防止混入危險(xiǎn)(Part6-8)。本文針對(duì)表1給出具體案例描述[17].
(1)低復(fù)雜度強(qiáng)制執(zhí)行。為了降低代碼復(fù)雜度,盡量使用邏輯比較簡(jiǎn)單的編碼方式,例如:
代碼1:不當(dāng)用法
for( i=0;循環(huán)條件l;i++)
{
循環(huán)處理1;
if(條件2)
{
continue:
}
循環(huán)體內(nèi)處理2;
}
代碼2:正確用法
for( i=0;循環(huán)條件l;i++)
{
循環(huán)處理1;
if(條件2)
{
循環(huán)體內(nèi)處理2;
}
}
經(jīng)過(guò)總結(jié),發(fā)現(xiàn)當(dāng)代碼中存在以下代碼時(shí),可維護(hù)性會(huì)降低:①分支語(yǔ)句( goto/continue/break)的使用[18];②復(fù)合運(yùn)算處理(一條語(yǔ)句中多個(gè)賦值處理);③復(fù)雜指針運(yùn)算(3層及3層以上的指針)。
(2)語(yǔ)言子集使用。
代碼1:不當(dāng)用法
char c=-l;
if(c>O){…}
enum num
{
NUM_MAX= INT_MAX+l;
}
代碼2:正確用法
char c=‘a(chǎn):
Int8~t i8=一l;
enum num
{
NUM_MAX= INT_MAX;
}
在代碼1中定義字符c值為一l,不符合編碼規(guī)范,正確用法可參考代碼2。
在進(jìn)行C語(yǔ)言編程時(shí),其編程描述的白由度高,導(dǎo)致編譯檢查過(guò)程變緩,編譯器或機(jī)器變更時(shí)可能出現(xiàn)故障。建議使用C語(yǔ)言子集的編碼標(biāo)準(zhǔn),例如MISRA-C等。
(3)強(qiáng)類型強(qiáng)制執(zhí)行。編譯器不同時(shí),基本類型大小可能不同。使用基本類型時(shí),如果不區(qū)分類型大小,可能導(dǎo)致變量間賦值錯(cuò)誤或比較錯(cuò)誤等。例如下面兩個(gè)代碼:
代碼1:不當(dāng)用法
unsigned int flag32;
代碼2:正確用法
typedef unsigned int uint32_t;
uint32_t flag32;
(4)防守性編碼實(shí)裝方法。使用合適的編碼,將錯(cuò)誤降至最低程度。
代碼1:不當(dāng)用法
void func( int vall .int va12)
{
int ans:
ans= vall/va12:
}
代碼2:正確用法
void fune( int vall. int va12)
{
int ans:
if( va12==O)
ans=O:
else
ans= vall/va12:
}
C語(yǔ)言在執(zhí)行過(guò)程中,容易出現(xiàn)以下錯(cuò)誤:①運(yùn)算錯(cuò)誤(overflow、underflow、0除算等);②指針運(yùn)算(引用不當(dāng));③數(shù)組邊界錯(cuò)誤(越界訪問(wèn));④庫(kù)函數(shù)運(yùn)行錯(cuò)誤(范圍外的參數(shù));⑤指針的間接引用(引用空指針)。
(5)設(shè)計(jì)原理確立。根據(jù)已確立的設(shè)計(jì)原則進(jìn)行編碼。
代碼1:不當(dāng)用法
unsigned int calc( unsigned int n)
{
if(n<=1)
{
return l:
}
else
{
return n*calc( n-l):
}
}
代碼2:正確用法
unsigned int calc( unsigned int n)
{
unsigned inti,ans=l;
for(i=2:i<=n:i++)
{
ans= ans*i:
}
retu rn ans:
}
(6)格式指南使用。
代碼1:不當(dāng)用法
if(x==O)
x=l:
代碼2:正確用法
if(x==O)
{
x=1:
}
統(tǒng)一編碼形式的程序,可以提高代碼可讀性和再利用性,避免簡(jiǎn)單錯(cuò)誤。建議使用以下統(tǒng)一編碼形式:①花括號(hào)位置;②縮進(jìn);③空格使用;④換行位置等。
(7)命名規(guī)則。
代碼1:不當(dāng)用法
#define buffsize l 6
PG Relief 2016版提供9種指摘類別,共計(jì)650個(gè)指摘信息。靜態(tài)測(cè)試后,可根據(jù)得到的指摘信息進(jìn)行檢查和處理,并且可根據(jù)需要選擇和屏蔽不需要的指摘。
同時(shí),PG Relief提供10余種軟件度量值計(jì)算,可將各值設(shè)定在合理范圍內(nèi),包括代碼行數(shù)、最大嵌套層數(shù)等。通過(guò)查看度量值,可及時(shí)避免引入太過(guò)復(fù)雜的代碼,有效降低程序整體復(fù)雜度。
2.2動(dòng)態(tài)測(cè)試解決方案
軟件在準(zhǔn)備及設(shè)計(jì)階段,主要進(jìn)行靜態(tài)測(cè)試,其可以高效找出設(shè)計(jì)和實(shí)現(xiàn)的不足,但對(duì)于功能正確的證明需要?jiǎng)討B(tài)測(cè)試實(shí)現(xiàn)。軟件測(cè)試應(yīng)該先進(jìn)行靜態(tài)測(cè)試,然后進(jìn)行動(dòng)態(tài)測(cè)試[21]。
動(dòng)態(tài)測(cè)試指在程序運(yùn)行過(guò)程中對(duì)軟件整體或部分內(nèi)容的執(zhí)行行為和執(zhí)行結(jié)果進(jìn)行測(cè)試與分析[22]。。
由于動(dòng)態(tài)測(cè)試T作量大,測(cè)試用例無(wú)法重用,覆蓋率計(jì)算困難,人T實(shí)現(xiàn)方式顯然無(wú)法滿足。同時(shí),IS0 26262中提出對(duì)需求和測(cè)試的可追溯性要求,需要測(cè)試T具介入。
Tessv軟件源白戴姆勒一奔馳公司的軟件技術(shù)實(shí)驗(yàn)室,是一款能滿足IS0 26262標(biāo)準(zhǔn)的嵌入式動(dòng)態(tài)測(cè)試工具,符合該標(biāo)準(zhǔn)第6部分關(guān)于軟件開(kāi)發(fā)測(cè)試和驗(yàn)證擬議,支持IS0 26262所要求的各級(jí)別代碼覆蓋率。
在動(dòng)態(tài)測(cè)試中,主要關(guān)注接口測(cè)試及覆蓋率問(wèn)題。測(cè)試用例運(yùn)行后,在Test Data Edit界面可以得到數(shù)據(jù)結(jié)果。
同時(shí),Tessy提供C1(hranch coverage).MCC覆蓋(Mul-tiple Condition Coverage) .MC/DC Modified Condition/Deci-sion Coverage)。
3 結(jié)語(yǔ)
軟件測(cè)試是嵌入式軟件開(kāi)發(fā)的一個(gè)重要環(huán)節(jié)。本文分析了國(guó)內(nèi)外嵌入式軟件測(cè)試發(fā)展現(xiàn)狀,并基于ISO26262標(biāo)準(zhǔn)給出了靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試兩種測(cè)試工具??梢钥闯觯@兩種T具可以快速幫助測(cè)試人員找到軟件問(wèn)題,縮短軟件開(kāi)發(fā)周期,節(jié)約開(kāi)發(fā)成本。未來(lái)需要借鑒國(guó)
參考文獻(xiàn):
[1]廖丹基于MISRA標(biāo)準(zhǔn)的通用C語(yǔ)言自動(dòng)化檢測(cè)工具[D].成都:電子科技大學(xué),2014
[2]ROBERT L.Real-time: thelost worldof software debugging andtestingEJl. Communication of the ACM, 1980, 23(5):264-271.
[3]張建偉,葉東升.嵌入式系統(tǒng)測(cè)試的發(fā)展[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2011,11(2):5-7.
[4]劉芳.嵌入式軟件測(cè)試技術(shù)的研究[D]北京:北京郵電大學(xué),2009.
[5]鄒炳松嵌入式軟件的圖形化測(cè)試用例生成系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2015.
[6]王薇.嵌入式軟件自動(dòng)回歸測(cè)試方法的研究[D]內(nèi)蒙古:內(nèi)蒙古大學(xué),2011.
[7]盛曉彥.嵌入式軟件測(cè)試技術(shù)的研究[D].貴陽(yáng):貴州大學(xué),2016.
[8]胡航航.基于IS0 26262的軟件測(cè)試[C].第十四屆河南省汽車工程科技學(xué)術(shù)研討會(huì)論文集,2017:2
[9]Road vehiCles-functinnal safeW[S].ISO C D.26262, 2011.
[10]喬慧敏基于IS0 26262標(biāo)準(zhǔn)的純電動(dòng)汽車軟件安全技術(shù)的研究[C].第十一屆河南省汽車工程科技學(xué)術(shù)研討會(huì)論文集,2014:2.
[11]HATTON L. Language subsetting in an industrial context:a compari-son of MISRA C: 1998 and MISRA C: 2004[J].Information andSoftware Technology, 2007.49(5):319-322.
[12]The Motor Industrv Software Reliahiliw Assnciation. Cuidelines forthe use of the C language in critical svstems[S]. MISRA-C: 2004.British: Motor Industrv Research Association. 2004.
[13]LARSON E.Program analysis ton loopy'l Set the loops aside[ Cl.1 lthIEEE International Working Conference on Source Code Anah-sisand Manipulation. 2011: 15-24.
[14]劉春燕基于規(guī)則的C/C++代碼靜態(tài)檢測(cè)研究[D].大連:大連理 工大學(xué),2010.
[15]徐海飛,趙凱旋.軟件測(cè)試與質(zhì)量保證[J]現(xiàn)代雷達(dá),2006(10):98-100.
[16]陳偉.測(cè)試用例集極小化算法的研究[D].長(zhǎng)沙:國(guó)防科學(xué)技術(shù)大學(xué),2016.
[17]The Motor Industrv Software Reliahiliw Association.Guidelines forthe use of the c language in critical systems [S]. MISRA-C: 2012.British: Motnr Industrv Research Association, 2012.
[18]譚浩強(qiáng)C程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2003.
[19]張煥琪.軟件測(cè)試策略和測(cè)試方法的應(yīng)用[J].電子商務(wù),2011(2):55-56,64.
[20]戴麗云嵌入式軟件測(cè)試方法研究[D]長(zhǎng)春:長(zhǎng)春大學(xué),2015.
[21]殷靜,羅西,杭佳祺.如何做好嵌入式軟件開(kāi)發(fā)測(cè)試[J].數(shù)字技術(shù)與應(yīng)用,2017(8):214-215.
[22]吳少君.軟件測(cè)試策略和測(cè)試方法的應(yīng)用[J]硅谷,2013,6(15):63-64.
(責(zé)任編輯:孫娟)
收稿日期:2019-05-25
作者簡(jiǎn)介:吳玲玉(1993-),女,碩士,聯(lián)創(chuàng)汽車電子有限公司職員,研究方向?yàn)殡妱?dòng)助力轉(zhuǎn)向系統(tǒng)開(kāi)發(fā)與軟件測(cè)試;張宗哲(1986-),
男,碩士,聯(lián)創(chuàng)汽車電子有限公司職員,研究方向?yàn)殡妱?dòng)助力轉(zhuǎn)向系統(tǒng)開(kāi)發(fā)與軟件測(cè)試;馬凱(1989-),男,碩士,聯(lián)創(chuàng)汽車電
子有限公司職員,研究方向?yàn)殡妱?dòng)助力轉(zhuǎn)向系統(tǒng)開(kāi)發(fā)與軟件測(cè)試。