近年来,智能网联汽车行业已经进入飞速发展的轨道,“软件定义汽车”已经成为业内人士的共识,同时也将面临着功能安全、网络安全等多重挑战。本文通过对相关标准中测试要求的介绍,探讨汽车功能安全测试的测试方法。 软件安全测试内容及方法 根据软件开发V模型,软件安全详细设计完成之后,需要进行相应的软件验证,集成及测试等内容,即V模型右边内容,具体包括:软件单元测试,软件集成和测试,软件安全要求验证。具体如下图所示: 软件安全验证方法 ISO 26262-6:2018针对软件单元验证、集成验证、嵌入式软件验证这三部分内容分别进行了阐述,并根据不同的ASIL等级对其验证方法进行推荐: 上面列举的三类测试,虽然它们属于软件开发V模型不同测试层级,但很多测试方法是共通的,例如基于需求的测试、接口测试、故障注入测试等等。 为更好地理解,我们可以从测试类型的角度,将以上测试方法分为: • 静态分析(Static Analysis) • 动态分析(Dynamic Analysis) 对于功能安全软件安全测试、软件单元验证、集成验证、嵌入式软件验证对应测试类型如下: •单元验证:静态分析 + 动态分析,静态为主 • 集成验证:静态分析 + 动态分析,动态为主 •嵌入式软件验证:动态分析 下面,对于静态分析和动态分析进行详细说明: ● 静态分析 静态测试属于最基本的测试,是指不用执行程序的测试,它主要采取代码走查、技术评审、代码审查等方法对软件产品进行测试,主要包括以下内容: 软件/代码是否满足相关质量标准? ─ 走查,结对编程,检查 ─ 控制流分析 ─ 数据流分析 ─ 静态代码分析 除不同类型的人为分析检查外,静态分析最重要内容为静态代码分析,主要目的是检查代码编写是否符合特定的编程规则。对于大部分车辆控制器代码而言,静态代码分析,即C代码静态分析(如果基于模型开发,则是自动生成的代码),主要是保证代码满足MISRA C(Motor Industry Software Reliability Association, 汽车工业软件可靠性协会)相关的要求。 静态代码分析一般可以直接采用自动化检测软件,例如SIMULINK、 Model Advisor; Vector、 VectorCAST; Perforce、Helix QAC等,通过配置代码检测规则,然后导入源文件进行自动化分析,如果不满足相关要求,则需要对代码进行修改,直至满足为止。 ● 动态分析 动态分析是指实际运行程序,并通过观察程序运行的实际结果来发现错误的软件测试技术,它包括了以下几个方面: ①软件/代码是否做了它应该做的? ─ 基于需求测试─ 接口测试─ 背靠背测试 ②软件/代码是否做了它不应该做的? ─ 鲁棒性测试 ③软件/代码是否足够? ─ 结构覆盖性测试 重要的动态测试包括: 【基于需求测试】 基于分配的安全需求和测试环境,制定安全测试用例,测试用例一般包括5个关键参数,即: 初始状态或前提条件,数据设置、输入、预期输出、实际输出。 【接口测试】 不同软件层次接口,包括信号名称、数目、数据类型、范围测试。 【故障注入测试】 即鲁棒性测试,故障注入测试主要目的是验证系统设计、软件设计过程所提出安全机制或安全措施的有效性,通过在特定位置注入错误,包括错误的数值、方向、频率等,对系统功能安全机制响应时间、诊断覆盖等内容进行验证。 【背靠背测试】 基于模型设计的测试,验证模型和生成的代码的一致性,即采用相同的测试用例,同时输入模型和生成的代码进行执行,对二者输出结果进行比较,一致则通过,否则存在不一致。 除基本测试方法外,ISO 26262-6:2018对不同阶段的软件安全测试环境也有相应的要求: 单元验证及集成验证:基于开发环境的软件测试,包括模型在环、软件在环、处理器在环、硬件在环。 嵌入式软件验证:硬件在环或车辆 我们的服务 广电计量信息化服务事业部在汽车功能安全服务方面可提供相应的培训、咨询、认证辅导服务。并且,可以基于汽车功能安全要求向整车企业及相关零部件企业提供完整的软件评测服务。具体服务包括: