符合ISO26262标准的软件测试解决方案
随着汽车行业的迅速发展,汽车电子电器E/E系统在汽车中的作用不断提高,ECU开发所占用的时间和成本也越来越高。与此同时,越来越多的电子控制系统(例如车身稳定控制系统ESP,防抱死制动系统ABS,自适应前照明系统AFS等)具有与安全相关的功能,因此对ECU的安全要求也越来越高。为了减少产品的开发时间和成本,降低由于安全问题而导致的维护甚至召回的风险,越来越多的整车厂和供应商开始重视汽车领域的功能安全问题,ECU软件功能安全的问题也成为汽车行业迫切需要解决的问题,车辆功能安全标准ISO 26262就在这样的环境和需求下应运而生,并于2011年11月正式发布第一版本,该标准是当前汽车业中最流行、最复杂、也是最重要的一份标准。
ISO 26262的目标是通过避免汽车E/E 系统故障行为可能导致的危害来提高E/E系统的功能安全。ISO 26262采用车辆安全完整性等级(ASIL)来判断系统的功能安全程度,ASIL由ASIL A(最低)、ASILB、ASIL C及ASIL D(最高)四个等级组成,ASIL等级越高表示系统的功能安全评估越严格,相应的表示系统正确执行安全功能,或者说的避免该功能出错的概率越高,即系统的安全可靠性越高。
ISO 26262标准的组成架构由十个规范和信息指导文件组成,其中ISO 26262—4/5/6阐述的是系统级/硬件级/软件级的产品开发,使用嵌套的V模型定义了每个开发阶段的过程以及相应的工作产品。本解决方案主要阐明了在软件级产品开发阶段如何去理解ISO 26262的要求,并且指出了在实际的软件开发过程中如何结合ISO 26262的软件测试生命周期,通过包括软件测试工作的执行以及过程控制等方面来确保ECU软件质量满足ISO 26262软件级功能安全相应等级的要求。
基于V模式的ISO26262软件测试生命周期
如图所示,基于V模式的ISO 26262-6软件测试生命周期可以划分为五个阶段:
静态分析需求和功能需求:在软件级产品开发初始化阶段和软件安全需求规范制定阶段确定了一些基本的嵌入式软件静态分析需求和功能需求,这部分内容是以后设计和测试的基础;
架构验证:在软件架构设计阶段,我们可以使用人工分析的方式来验证和测试软件架构层的内容,但是有条件的话最好使用合适的架构设计工具,在设计的过程中同时进行架构验证;
静态测试:在软件单元设计和实现阶段同时进行静态测试,可以使用开发辅助工具来进行静态测试,这样不必因为静态测试的活动而改变开发流程。
动态测试:在软件单元测试阶段以及软件集成和测试阶段,使用合适的动态测试工具进行动态单元和集成测试。
功能验证:在软件安全需求验证阶段,要根据ISO26262-6的要求进行功能验证,包括进行ECU网络环境测试和实车测试,必要的时候进行HIL测试。
因为在静态分析需求中所需要满足的方法基本上都是属于静态测试的范畴的,因此我们以ASIL A为例,将软件测试内容分为静态测试、动态测试和功能验证三部分(注:架构验证暂时未包含在内),见下表。
表中所列举的静态测试内容里面要求采取多种的测试方法,例如‘低复杂度的强制要求’一般需要通过满足一定的度量指标来实现,度量指标包括圈复杂度、嵌套深度等等,而‘使用语言的子集’在汽车行业一般选择MISRA-C,通过强制使用编码规范来排除未定义行为或者实现定义行为等危险用法,除此之外静态测试还要求一些其他的测试方法,例如如果要满足更高的安全完整性等级的话,静态测试内容还需要包括运行时错误检测等,一般需要使用可靠性测试性的测试。
ASIL A所要求的动态测试要求能够基于需求分析和设计测试用例,因此需要在开发过程中提供对需求管理的支持,同时要求能够针对函数或模块提供覆盖度分析等。如果是更高等级的ASIL的话可能还需要进行不同环境的测试,例如模型在环测试(MIL)和软件在环测试(SIL),并在必要的情况下进行MIL和SIL的对比测试。
软件安全需求的测试环境需要根据ASIL等级来进行选取,并且至少要在一个以上不同环境内执行测试。ASIL A所要求的ECU网络测试包括了网络中各ECU之间的相互作用,目的是确保ECU之间没有引起功能故障的相互干扰,而实车测试则是在真正的ECU软件运行环境中进行测试的方式,根据功能安全需求规范来进行,可以最直观地反映出ECU软件是否能够满足定义的功能安全需求。当然在必要的时候还需要进行硬件在环测试(HIL),通过仿真控制系统中传感器和执行器的硬件(Hardware)电气特性,为嵌入式控制器构建起一个控制回路 (Loop),从而可以方便的在其中模拟被控对象的工作环境,对ECU的算法进行功能验证和测试。
针对前面划分的ISO 26262所关注的静态测试、动态测试和功能验证的要求,下面我们就来看一下解决方案中如何来满足这些需求。
符合ISO26262标准的静态测试
在静态测试中,静态分析主要包括规则检测和质量度量;可靠性测试主要进行运行时错误的检测。
上面提到ASIL A中针对编码准则的需求以及其他ASIL等级所强烈推荐的例如使用风格指南等需求都是不需要运行源程序来检测,因此都属于静态分析的范畴,虽然这些需求也可以通过人工检查的方式实现,但一个好的静态分析工具几乎可以自动化地执行表1中所有的要求,通过静态分析工具来帮助我们检查和满足这些规定可以明显地帮助组织更有效率地实现ISO 26262静态分析的相关需求。
针对静态分析的需求,我们提供DAC这样一个工具,它的主要功能包括:可以自动化地地执行C代码及汇编代码的静态分析,支持包括MISRA-C1998和2004的规则检测;提供项目、文件和函数质量度量;
提供方便快捷的代码结构生成,高亮显示代码结构并生成报告文档等。
在静态测试中,除了规则检测和质量度量以外,还有一类错误我们称之为运行时错误,例如数组越界、标量溢出等。运行时错误顾名思义是程序运行的时候才会出现的错误,针对这样的错误,使用传统的测试方式只有在动态地运行测试用例的时候才有可能发现,但是现在的测试工具可以使用先进的代码分析技术,不需要真正去执行源代码,而是使用数学方法分析源代码,发现代码中在运行的时候可能会出现错误的地方,从而实现通过静态测试的方式来达到一定的动态测试的效果。因为运行时错误会直接影响的程序执行的可靠性,所以针对这类错误的测试我们也可以称之为可靠性测试。
针对可靠性测试的需求,我们提供澳大利亚的一个运行时错误监测工具Goanna。其模型检测技术可以对所有函数提供高效的路径覆盖,检查超过90种运行时错误,包括空指针引用、危险的指针运算、未初始化/未使用变量、冗余/不需要的代码、除零、内存泄露、缓冲区溢出、释放后使用、不一致的释放、滥用的虚拟成员调用、算术错误、32/64位兼容性等。
符合ISO26262标准的软件代码SIL测试
在准备和设计阶段,大部分都是属于静态测试的工作,它在确认设计或实现的不足时非常高效,但它不能证明功能正确。而依ISO 26262-6标准开发的软件根据需达到的车辆安全完整性等级(ASIL)不同,还需要经过各种动态测试,动态测试可以验证软件功能,因此是对静态测试的有效补充。
以前的动态测试大部分是通过人工的方式实现,但是由于动态测试巨大的工作量,以及测试用例难以重用,测试覆盖率无法计算的困难,因此在测试解决方案中还是需要选择合适的动态测试工具来执行软件单元测试。又因为ISO 26262对需求和测试有可追溯性的要求,所以最好测试工具可以和相关需求管理工具集成,例如能够从需求管理工具中将需求导入,再将测试用例和需求链接起来,并且实现数据的双向同步。
针对软件代码SIL测试,我们提供德国的代码级动态测试工具Tessy。它的基本功能包括:全自动地测试执行和评估;多种方式确定测试用例;基于需求的测试跟踪;不需要用户介入的回归测试;代码覆盖率;自动生成测试报告等。
在Tessy中,测试用例的设计不仅可以基于需求覆盖来进行,包括进行需求管理、需求跟踪、需求覆盖度统计等,也可以基于代码覆盖进行测试用例设计,并且非常方便地达到MC/DC覆盖的等级。
符合ISO26262标准的MIL测试
在汽车领域的嵌入式控制系统开发中,基于模型的开发(Model-Based Development)的设计方法以其直观、快速、高效等优势已经得到广泛的应用。但是由于系统的复杂性,建立起来的仿真模型也越来越复杂,根据自动生成代码的测试结果再来改进模型的测试方式也变得越来越困难,并且根据ISO 26262标准ASIL C和D的要求,必须对模型和对应的代码分别进行单元测试并且比较结果,因此,如果是使用模型自动生成代码的设计方式的话,我们需要在建立了仿真模型之后就对模型进行测试,在确保模型功能正确的基础之上来自动生成代码再进行代码测试。
针对MIL测试,我们提供德国的分时段测试工具TPT,实现对控制系统以及闭环控制系统模型的MIL测试。TPT软件由于首创地使用分时段测试(Time Partition Testing),使得控制系统的软件测试技术得以极大提升;同时由于TPT软件支持众多业内主流的工具平台和测试环境,能够更好地利用客户已有的投资,实现各种异构环境下的自动化测试;针对MATLAB/Simulink/Stateflow以及TargetLink,TPT专门设计了完美的接口构建功能模型,然后在TPT中创建测试用例模型,通过TPT的MATLAB接口保证测试的高效率执行。提供了全方位的支持进行模型测试。
同时,在TPT中可以满足ISO26262基于功能设计测试用例的需求,包括分析建立场景、定义测试用例组件、确定场景组合、生成测试用例等。
符合ISO26262标准的网络测试和HIL测试
不论是AUTOSAR还是OSEK,都把网络作为整个软件结构的基础,因此对网络的验证放在功能验证之前进行,ISO 26262也在最低功能安全等级ASILA里面就提出了网络环境测试的需求。
网络测试是功能测试的基础,在上面有应用层的时候,在做应用层验证之前,先进行网络验证。
现在网络已经越来越复杂,CAN、LIN,一般都有三四十个节点,汽车里面有很多总线的环境,最底下是物理层(CAN-驱动),在CAN的物理层之上有很多应用层的协议栈,利用Vector的HIL测试系统——VT,再基于Vector另一个工具CANoe的优势可以很好的进行协议栈的仿真,实现网络测试的需求。
HIL测试一般可以分为两种情况,一是基于真实负载的测试,另一种是在极端情况下或者说在自动化环境下更常用的是实用方针负载进行测试。不论是真实负载还是仿真负载,最重要的一点就是构建自动化的仿真环境出来,Vector的VT系统能够提供模块化的测试接口设备,为供电环境、总线接口、传感器激励和仿真负载等提供相应的模块来搭建测试环境。CANoe基于它先天的网路仿真的测试功能,再加上VT系统可以帮助我们简化测试平台的搭建以及测试执行的过程,并将测试能力扩展到HIL和功能测试。
符合ISO26262标准的实车测试
不论是代码测试、模型测试还是网络测试或者HIL测试,基本都是偏研发的测试,除此之外在研发后期还需要实车测试。传统实车测试需要专门驾驶员和一些测试人员到现场进行测试并采集数据,而现在比较流行的远程测试则是通过在车上加装一些远程监控设备,将测试系统在测试过程中产生的数据通过远程传输的方式发送到数据后台,并且在测试过程中不仅可以记录测试数据,还能根据测试的要求远程下载测试任务,例如更新需要采集的数据等,我们提供的德国CarMediaLab公司的产品Flea就可以实现这种功能。
车辆实时采集的数据主要是总线信息,需要在分析过程中和工况结合起来,而在进行离线分析时还可以与TPT结合起来。
![295130bf77d0e9e96e59d16eb8a583bf.png](https://i-blog.csdnimg.cn/blog_migrate/5639404e0b37acd89fb4d5cb98663f24.png)