摘要:本文介绍一种开发依据和测试依据完全一致的基于模型的V字开发流程,引入过程管理工具,对ISO 26262的汽车安全完整性等级概念进行了分析,并应用到已有的嵌入式系统开发流程中去,实现高可靠性的汽车嵌入式系统开发。
嵌入式系统是一种完全嵌入受控器件内部、为特定应用而设计的专用计算机系统,通常执行的是带有特定要求的预先定义的任务。在汽车上嵌入式系统的应用也是随处可见的:发动机控制、变速器控制、车身控制、ABS、车载导航、车载娱乐系统等,都是嵌入式系统的典型应用。但由于汽车是一种可移动的高速交通工具,是一种涉及到驾驶员、乘客、周边人员及环境的交互复杂系统,对于车上与人身安全相关的嵌入式系统,一旦发生失效或故障,就可能造成车毁人亡的严重后果,相关厂家也要承受巨大的车辆召回损失和商誉损失。因此,汽车上使用的与安全相关的嵌入式系统,比如发动机控制系统EMS、自动制动防抱死系统ABS、安全气囊控制系统等,与一般的嵌入式系统相比,对可靠性的要求更高。与此同时,随着各种新技术的使用,使得汽车嵌入式系统的功能也越来越复杂,采用怎样的流程和方法来高效地开发高复杂度同时又具备高可靠性的车用嵌入式系统,一直成为业内开发人员研究的热点。
1 基于模型的V字开发流程
随着计算机技术的发展,基于模型的V字开发流程,已经成为高可靠性汽车嵌入式系统开发方式的主流。这种方式以模型描述业务逻辑,通过自动代码生成工具,从描述业务逻辑的模型直接生成上层代码,再与底层手写代码及相关硬件集成,有效解决了开发高复杂度嵌入式系统的难题。典型的基于模型的V字开发流程如图1所示。
图1所述各个流程的活动、执行人员及交付物详述如下。
1)系统定义这个阶段的活动是明确所需要开发的系统的各项性能指标,包括可靠性、成本方面的要求。这些性能指标必须是可量化可验证的。本阶段的输入材料一般为客户合同、项目可行性分析报告、适用的法规标准等文档。本阶段的执行人员一般是项目组织人员及项目管理人员。本阶段的输出交付物为系统定义文档。
2)需求分析这个阶段的活动是根据系统定义的要求,从系统使用者的角度制定详细的系统开发需求。为便于需求的管理,此处编写的需求以条目的形式呈现,要求制定的每一条需求不重复、不遗漏、可测试。本阶段的输入材料为1)的输出交付物系统定义文档。本阶段的执行人员一般是系统开发方的资深工程师、整体架构设计师等人员。本阶段的输出交付物为需求定义文档。
3)架构设计这个阶段的活动是根据需求定义,对整体需求划分模块,并制定各模块之间的接口文档。一般可以划分为上层业务逻辑模块、底层手写代码模块、硬件模块,当系统比较复杂的时候,还可以将这3个大模块进一步划分。本阶段的输入材料为2)的输出交付物需求定义文档。本阶段的执行人员一般为系统开发方的架构设计师或总体工程师。本阶段的输出交付物为模块接口文档。
4)模块开发这个阶段的活动是各模块的开发人员根据划分后的模块需求和接口文档,各自进行所负责模块的开发。一般包括上层业务逻辑模块、底层手写代码模块、硬件模块的开发。上层业务逻辑模块通过建模工具来实现业务逻辑模型,再利用自动代码生成工具,将此业务逻辑模型直接转换为C代码。底层手写代码模块一般是底层硬件驱动及软件服务,根据接口文档开发。硬件模块则是嵌入式系统的硬件实体。本阶段的输入材料为2)的输出交付物需求定义文档和3)的输出交付物模块接口文档。本阶段的执行人员为各模块的责任开发工程师。本阶段的输出交付物为策略模型及自动生成代码、底层软件手写代码、控制器硬件样件及各模块的设计文档。
5)系统集成这个阶段的活动是将上层业务逻辑模型自动生成的代码和底层软件手写代码集成编译,形成可执行文件,并刷入相应的控制器硬件中,形成一个可运行的控制器样件。本阶段的输入材料为4)的输出交付物策略模型及自动生成代码、底层软件手写代码、控制器硬件样件。本阶段的执行人员为系统集成工程师。本阶段的输出交付物为可运行的控制器样件。
6)单元测试这个阶段的活动是以各个模块为单元,按各模块的设计文档编写单元测试用例,测试各模块的所有功能是否实现,并对软件模块的代码覆盖率进行评估;对硬件模块的设计性能进行测试,评估硬件各项指标是否达到设计要求。此阶段测试主要为白盒测试。本阶段的输入材料为4)的输出交付物各模块的设计文档。本阶段的执行人员为各模块的责任开发工程师。本阶段的输出交付物为各模块的单元测试报告文档。
7)集成测试这个阶段的活动是将对集成后的控制系统进行集成测试,重点测试各模块的接口功能。根据模块接口文档编写测试用例和测试计划,对各模块接口进行测试,并测试各模块集成后是否能够正常工作,编写集成测试结果并跟踪反馈,此阶段测试为黑盒测试。本阶段的输入材料为3)的输出交付物模块接口文档及5)的交付物可运行的控制器样件。本阶段的执行人员为集成测试工程师。本阶段的输出交付物为集成测试用例、集成测试计划和集成测试报告。
8)系统测试这个阶段的活动是根据需求定义文档,编写系统测试用例和系统测试计划,将控制器样件接入硬件在环测试设备进行全面的系统功能和性能测试,最后编写系统测试结果报告并跟踪反馈。本阶段的输入材料为2)的交付物需求定义文档及5)的交付物可运行的控制器样件。本阶段的执行人员为系统测试人员。本阶段的输出交付物为系统测试用例、系统测试计划及系统测试报告。
9)标定验证这个阶段的活动是根据系统定义文档,在控制器的具体应用环境下,调整控制参数,验证各项性能指标达到要求。本阶段的输入材料为1)的交付物系统定义文档及5)的交付物可运行的控制器样件。本阶段的执行人员为标定验证工程师。本阶段的输出交付物为最终软件参数数据及验收报告。
这种基于模型的V字开发流程,对于多变复杂的业务逻辑,采用图形化的建模方式来实现,图形化的模型可以直接对应需求,便于沟通理解,也能够通过模型仿真等手段验证模型的正确性。验证正确后的模型通过自动代码生成工具直接生成代码,效率极高的同时避免了手工编写业务逻辑代码引入的人工编码错误。底层软件手写代码一般是涉及硬件驱动及标准化的底层软件服务,其代码相对比较固定,可重用度高,往往可以选择以往项目中已经过充分测试和验证的底层手写软件代码,略加修改甚至无需修改来实现。因此可以大大提高整个软件开发的效率及可靠性。对于硬件平台,可以选择业内成熟主流且集成度高的方案,可以保证硬件平台的可靠性。因此这种开发技术和方案,可以保证开发者“正确地做事”
在开发流程的这9个阶段中,1~5阶段为开发阶段,遵循自顶向下,逐层细化的原则,下一个阶段的开发依据直接来自上一个阶段,保证了从需求到设计到实现的一致性和可追溯性;6~9阶段为测试验证阶段,遵循自底向上,逐步整合的原则。每一个阶段的测试依据直接来自相应开发阶段的设计输入,即对于每一个被测试的开发阶段,其测试依据和开发依据完全一致,因此可以在流程上保证能通过测试的开发结果一定会符合原来设计时的需求。因此这种流程设计和要求可以保证开发者“做正确的事”。
此外,对于第6阶段的单元测试,由于属于白盒测试,涉及到代码的具体实现,一般建议由此模块的开发工程师来完成,以保证开发效率。第7、8、9阶段的集成测试、系统测试及标定验证,一般应该由一个独立于开发团队的测试验证团队人员来完成,以保证测试的客观性和有效性。