当前位置: 首页>后端>正文

汽车 嵌入式系统 软件架构 车载嵌入式软件

1 软件缺陷的影响

  随着经济发展和科技进步,嵌入式系统作为提高经济和生产力的有效手段被广泛应用于国防、工控、医疗等领域。目前嵌入式系统中软件所占比重越来越大,由软件失效引起的故障造成的危害也愈发严峻。在航空航天领域,美国金星探测器因程序中一个极小的错误,将逗号误写为小数点,造成了飞行失败,直接经济损失达一千万美元;在汽车行业,随着汽车智能化加速发展,软件故障频发,成为召回的重灾区,给企业带来了巨大的经济损失和品牌影响。

  以下是由于软件故障,造成的车辆召回:

  因此,如何提高嵌入式软件的质量成为目前迫切需要解决的问题。

2 什么是嵌入式软件?

  嵌入式系统(Embedded System, ES),根据IEEE(国际电气和电子工程师协会)的定义,嵌入式系统是“用于控制、监视或辅助操作机器和设备的装置”,嵌入式软件就是基于嵌入式系统设计的软件。

  因工作环境等因素,对比普通软件,嵌入式软件不仅要求其准确性、安全性和稳定性方面能满足实际应用的需要,而且还需要尽可能进行优化,减少对系统资源的消耗,降低硬件成本。

嵌入式软件分类

3 如何提高嵌入式软件质量?

实践证明,在软件开发过程中,通过软件测试来发现其中的缺陷是提高软件质量和可靠性的一种非常有效的方法。

3.1 软件测试需求分析

软件生存周期的各个阶段都可能产生错误,而软件需求分析、设计和实现是软件缺陷的重要来源。因此一旦确定软件需求,即可开始进行测试需求分析。

测试需求就是在项目中要测试什么。测试需求并不等同于软件需求,它从测试的角度出发并根据软件需求整理出一个测试列表,作为软件的主要测试内容。测试软件需求分析包括原始需求采集、质量特性分解、分析可测功能点、生成测试原始需求、测试类型分析、测试准备,最终生成软件代码可靠性测试需求说明。

  根据测试阶段和重点不同,嵌入式软件测试需求需要考虑几个层面的问题:

3.2 嵌入式软件测试方法

常用的两类测试方法:静态测试和动态测试。

3.2.1 静态测试

静态测试方法包括静态分析、代码分析、代码审查、质量度量等,不运行被测代码,借助专用的软件工具对源程序的语法、结构、过程、接口等进行各种分析,如编码规则检查、变量定义分析、数据流分析、圈复杂度分析、代码安全性分析等,试图在软件设计早期就能发现程序尽可能多的潜在缺陷或错误。

在嵌入式系统中大多数软件采用C或C++语言编写,特别是C语言,由于它的使用比较灵活,容易上手,且代码效率较高,被广泛地应用于嵌入式软件开发。但是C/C++语言是弱类型语言,编写的程序最大的问题是可靠性很难保证。为了避免C/C++语言中的不安全因素的普遍做法是遵照已制定的编程标准(规范)或者从中选定的安全子集来编写程序,其中MISRA C和MISRA C++是欧洲汽车工业针对嵌入式C和C++语言的应用所编写的安全子集,GJB 8114C/C++语言编程安全子集作为我国的国军标为军用嵌入式C/C++语言编程确定了安全子集。

3.2.2 动态测试

动态测试是使被测代码在真实环境或仿真环境下有控制地运行,针对代码在运行情况下能体现的功能、逻辑、行为、结构等,多角度观察程序运行时的行为,检查运行结果与预期结果的差异,以发现其中的错误,并分析运行效率和健壮性等性能。

按软件检测技术,动态测试可以分为两种,白盒测试与黑盒测试。

白盒测试是检查程序的内部设计。该方法把测试对象看成一个打开的盒子,测试人员必须了解程序的内部结构和处理过程,根据源代码的组织结构查找软件缺陷。白盒测试主要考虑程序的控制流测试和数据流测试,与代码的覆盖率密切相关,如语句覆盖、分支覆盖、路径覆盖以及内存数据异常等测试。代码覆盖率越高,其测试越充分。

黑盒测试在某些情况下也称为功能测试。这类测试方法根据软件的用途和外部特征查找软件的缺陷,不需要了解程序的内部结构。黑盒测试的最大优势在于不依赖代码,测试者不必顾及程序内部结构、语句、分支、路径等情况,只需要根据需求,设计相应的测试用例,根据输出结果判断程序功能以及性能的正确性。

在嵌入式软件的测试过程中,如果只进行黑盒测试,限于测试用例的有限性,总会有一部分代码分支的运行结果难以被检测到,即使软件需求中的功能都检测到了,仍无法对测试进行充分性判别。因此要确保嵌入式软件,特别是高可靠高安全的嵌入式软件测试质量,在开始黑盒测试之前必须进行足够的白盒测试。

3.3 嵌入式软件测试级别


嵌入式软件测试级别包括单元测试,集成测试、配置测试与系统测试。 单元测试

。检查每个软件单元能否正确地实现设计说明中的功能、性能、接口和其他设计约束等要求,发现单元内可能存在的各种错误。主要采用静态测试和动态测试方法。单元测试应优先于其他内容的测试,一般在宿主机环境中进行。 集成测试

。检验嵌入式软件单元和(或)软件部件间的接口关系,并验证软件部件是否符合设计要求。主要采用静态测试和动态测试方法,可在宿主机或目标机环境中进行。 配置项测试

。检验软件配置项与软件需求规格说明的一致。 系统测试

。在真实的系统工作环境下检验完整嵌入式软件配置项是否能和系统正确连接,并满足软件研制任务书的功能和性能要求。系统测试采用黑盒测试技术,且要求与系统其余部件综合起来作为整体在目标机环境中进行。

4 结语


本文主要介绍了嵌入式系统的特点,嵌入式软件的测试需求及测试方法。汽车控制器是嵌入式系统的一个分支,后续专题讨论的重点将会围绕汽车嵌入式软件测试相关展开。


https://www.xamrdz.com/backend/3wn1937735.html

相关文章: