基于IS0 26262的嵌入式软件测试研究

2020-06-19 08:45吴玲玉张宗哲马凯
软件导刊 2020年4期
关键词:嵌入式软件软件测试用法

吴玲玉 张宗哲 马凯

摘 要:当前,嵌入式系统已发展成为汽车电子行业的焦点,鉴于其自身设计特性,为保证软件质量可靠性,软件测试必不可少。在介绍软件测试基本概念的基础上,针对IS0 26262功能安全标准,从静态测试和动态测试解决方案上介绍了相关嵌入式软件测试工具,并根据测试结果分析工具的有效性。结果表明,软件测试工具可以将代码质量讲行量化.古观得到修改意见.极大提高款件开发效率.同时减少产品开发后期问题出现率、

关键词:嵌入式系统;IS0 26262;MISRA;软件测试

DOI: 10. 11907/rjdk.191548

开放科学(资源服务)标识码(OSID):

中图分类号:TP319

文献标识码:A

文章编号: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 引言

隨着嵌入式技术的快速发展,嵌入式系统复杂性不断提高,同时嵌入式软件测试难度也相应增加。一些不可靠的嵌入式软件在投入使用后会由于软件质量问题造成人类生命与财产的重大损失[1]。对于软件测试研究,国外起步于20世纪70年代,1980年,RobertL2发表了著名文章——“调试和测试的失落世界”,总结了嵌入式软件现状。此后,许多研究机构针对嵌入式软件进行了大量研究,美国和欧洲在技术上处于领先地位,以NASA、Boeing、ESA,Airbus为代表的机构带动了整个嵌入式系统的发展[3]。国内起步相对较晚,最先用于国防电子领域,并逐渐拓展到其它行业,如汽车电子、铁路、医疗等。我国目前缺少商业化的嵌入式系统测试平台,但开展了一定研究[4-7],有基于研究目的开发的测试系统,如EASTT、图形化测试用例生成系统等。笔者根据我国软件测试现状,结合软件测工作经验,对目前国际上较为流行的符合标准的测试工具进行研究,为国内软件测试T具开发提供一定参考。

1汽车电子软件验证标准

在汽车电子领域,IS0 26262和MISRA是通用的用于验证和确认车载软件的两大标准。

IS0 26262是《道路车辆一功能安全》标准[8],采用完整的安全等级(ASII)判断系统功能安全程度。ASIL由4个等级组成,其中ASIL A最低,ASIL D最高,等级越高表明系统功能安全评估越严格,即系统可靠性越高[9]。ISO26262-6提出将软件测试和验证作为软件开发标准的一部分,并将软件生命周期划分为5个阶段[10],基于V模式的软件生命周期如图l所示。

MISRA(The Motor Industrv Software Reliahilitv Associa-tlnn,汽车T业软件可靠性联会)组织发布的一套汽车-业软件安全性的C语言编程规范《汽车专业软件的C语言编程指南》(Guidelines for the Use of the C Language in VehicleBased Software),称为MISRA C[11-13]。嵌入式开发者以MISRA C衡量白己的代码质量,比如著名的uC/OS-II,宣传白己的代码99%遵守了MISRA标准[14]。

2软件测试技术

软件测试是以评价一个程序或者系统属性为目标的活动[15]。根据测试时的软件运行状态,将软件测试分为静态测试和动态测试。

2.1静态测试解决方案

静态测试指在不需要运行被测代码的情况下,借助软件测试工具对软件文档或程序进行评审,度量复杂度,检查软件与编程规范的一致性,减少错误出现概率[16]。

2.1.1

IS0 26262编码规约

IS0 26262的Part6中,对编码规约确保品质的方法和妥当性证明有着严格要求:①遵守组织所规定的设计准则(Part6-5);②防止混入危险(Part6-8)。本文针对表1给出具体案例描述[17].

(1)低复杂度强制执行。为了降低代码复杂度,尽量使用逻辑比较简单的编码方式,例如:

代码1:不当用法

for( i=0;循环条件l;i++)

{

循环处理1;

if(条件2)

{

continue:

}

循环体内处理2;

}

代码2:正确用法

for( i=0;循环条件l;i++)

{

循环处理1;

if(条件2)

{

循环体内处理2;

}

}

经过总结,发现当代码中存在以下代码时,可维护性会降低:①分支语句( goto/continue/break)的使用[18];②复合运算处理(一条语句中多个赋值处理);③复杂指针运算(3层及3层以上的指针)。

(2)语言子集使用。

代码1:不当用法

char c=-l;

if(c>O){…}

enum num

{

NUM_MAX= INT_MAX+l;

}

代码2:正确用法

char c=‘a:

Int8~t i8=一l;

enum num

{

NUM_MAX= INT_MAX;

}

在代码1中定义字符c值为一l,不符合编码规范,正确用法可参考代码2。

在进行C语言编程时,其编程描述的白由度高,导致编译检查过程变缓,编译器或机器变更时可能出现故障。建议使用C语言子集的编码标准,例如MISRA-C等。

(3)强类型强制执行。编译器不同时,基本类型大小可能不同。使用基本类型时,如果不区分类型大小,可能导致变量间赋值错误或比较错误等。例如下面两个代码:

代码1:不当用法

unsigned int flag32;

代码2:正确用法

typedef unsigned int uint32_t;

uint32_t flag32;

(4)防守性编码实装方法。使用合适的编码,将错误降至最低程度。

代码1:不当用法

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语言在执行过程中,容易出现以下错误:①运算错误(overflow、underflow、0除算等);②指针运算(引用不当);③数组边界错误(越界访问);④库函数运行错误(范围外的参数);⑤指针的间接引用(引用空指针)。

(5)设计原理确立。根据已确立的设计原则进行编码。

代码1:不当用法

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:不当用法

if(x==O)

x=l:

代码2:正确用法

if(x==O)

{

x=1:

}

统一编码形式的程序,可以提高代码可读性和再利用性,避免简单错误。建议使用以下统一编码形式:①花括号位置;②缩进;③空格使用;④换行位置等。

(7)命名规则。

代码1:不当用法

#define buffsize l 6

PG Relief 2016版提供9种指摘类别,共计650个指摘信息。静态测试后,可根据得到的指摘信息进行检查和处理,并且可根据需要选择和屏蔽不需要的指摘。

同时,PG Relief提供10余种软件度量值计算,可将各值设定在合理范围内,包括代码行数、最大嵌套层数等。通过查看度量值,可及时避免引入太过复杂的代码,有效降低程序整体复杂度。

2.2动态测试解决方案

软件在准备及设计阶段,主要进行静态测试,其可以高效找出设计和实现的不足,但对于功能正确的证明需要动态测试实现。软件测试应该先进行静态测试,然后进行动态测试[21]。

动态测试指在程序运行过程中对软件整体或部分内容的执行行为和执行结果进行测试与分析[22]。。

由于动态测试T作量大,测试用例无法重用,覆盖率计算困难,人T实现方式显然无法满足。同时,IS0 26262中提出对需求和测试的可追溯性要求,需要测试T具介入。

Tessv软件源白戴姆勒一奔驰公司的软件技术实验室,是一款能满足IS0 26262标准的嵌入式动态测试工具,符合该标准第6部分关于软件开发测试和验证拟议,支持IS0 26262所要求的各级别代码覆盖率。

在动态测试中,主要关注接口测试及覆盖率问题。测试用例运行后,在Test Data Edit界面可以得到数据结果。

同时,Tessy提供C1(hranch coverage).MCC覆盖(Mul-tiple Condition Coverage) .MC/DC Modified Condition/Deci-sion Coverage)。

3 結语

软件测试是嵌入式软件开发的一个重要环节。本文分析了国内外嵌入式软件测试发展现状,并基于ISO26262标准给出了静态测试和动态测试两种测试工具。可以看出,这两种T具可以快速帮助测试人员找到软件问题,缩短软件开发周期,节约开发成本。未来需要借鉴国

参考文献:

[1]廖丹基于MISRA标准的通用C语言自动化检测工具[D].成都:电子科技大学,2014

[2]ROBERT L.Real-time: thelost worldof software debugging andtestingEJl. Communication of the ACM, 1980, 23(5):264-271.

[3]张建伟,叶东升.嵌入式系统测试的发展[J].单片机与嵌入式系统应用,2011,11(2):5-7.

[4]刘芳.嵌入式软件测试技术的研究[D]北京:北京邮电大学,2009.

[5]邹炳松嵌入式软件的图形化测试用例生成系统设计与实现[D].哈尔滨:哈尔滨工业大学,2015.

[6]王薇.嵌入式软件自动回归测试方法的研究[D]内蒙古:内蒙古大学,2011.

[7]盛晓彦.嵌入式软件测试技术的研究[D].贵阳:贵州大学,2016.

[8]胡航航.基于IS0 26262的软件测试[C].第十四届河南省汽车工程科技学术研讨会论文集,2017:2

[9]Road vehiCles-functinnal safeW[S].ISO C D.26262, 2011.

[10]乔慧敏基于IS0 26262标准的纯电动汽车软件安全技术的研究[C].第十一届河南省汽车工程科技学术研讨会论文集,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]刘春燕基于规则的C/C++代码静态检测研究[D].大连:大连理 工大学,2010.

[15]徐海飞,赵凯旋.软件测试与质量保证[J]现代雷达,2006(10):98-100.

[16]陈伟.测试用例集极小化算法的研究[D].长沙:国防科学技术大学,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]谭浩强C程序设计[M].北京:清华大学出版社,2003.

[19]张焕琪.软件测试策略和测试方法的应用[J].电子商务,2011(2):55-56,64.

[20]戴丽云嵌入式软件测试方法研究[D]长春:长春大学,2015.

[21]殷静,罗西,杭佳祺.如何做好嵌入式软件开发测试[J].数字技术与应用,2017(8):214-215.

[22]吴少君.软件测试策略和测试方法的应用[J]硅谷,2013,6(15):63-64.

(责任编辑:孙娟)

收稿日期:2019-05-25

作者简介:吴玲玉(1993-),女,硕士,联创汽车电子有限公司职员,研究方向为电动助力转向系统开发与软件测试;张宗哲(1986-),

男,硕士,联创汽车电子有限公司职员,研究方向为电动助力转向系统开发与软件测试;马凯(1989-),男,硕士,联创汽车电

子有限公司职员,研究方向为电动助力转向系统开发与软件测试。

猜你喜欢
嵌入式软件软件测试用法
address的高级用法你知道吗?
基于OBE的软件测试课程教学改革探索
“作”与“做”的用法
EXCEL和VBA实现软件测试记录管理
实时嵌入式软件的测试技术
关于软件测试技术应用与发展趋势研究
全景相机遥控器嵌入式软件V1.0 相关操作分析
特殊用法
软件测试工程化模型及应用研究
基于Eclipse的航天嵌入式软件集成开发环境设计与实现