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 结语

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

单元覆盖测试排除某些类烧苗_汽车嵌入式软件测试——嵌入式软件测试概述相关推荐

  1. 单元覆盖测试排除某些类烧苗_智慧树人体生理学第一单元章节测试网课答案选修课慕课答案...

    [填空题(主观)]PCM30/32的每一帧占用的时间是[ ]μs,每帧的频率为[ ]帧/秒,一帧包含[]时隙,每个时隙[]bit,帧长是[ ]bit. A. 125 B. 8000 C. 32 D. ...

  2. 详细图文演示——排除启动类故障以及Linux操作系统引导、运行级别和优化启动等相关知识

    详细图文演示--排除启动类故障以及Linux操作系统引导.运行级别和优化启动等相关知识 一.Linux操作系统引导过程 1.开机自检 2.MBR 引导 3.GRUB菜单 4.加载Linux内核 5.i ...

  3. c++编码规范_汽车嵌入式软件测试——嵌入式软件标准及规范简介

    以前接手过一个软件项目,翻开模型和代码之后的几天,把模型开发人员问候了一个遍.此处略过若干字......不禁要问,建模规范.编码规范不是很好吗?为什么不用?制定相关规范的出发点就在于保证每个人能在短时 ...

  4. 车仪表台上的装饰_45汽车仪表盘装饰_汽车仪表盘种类

    课 题 汽车仪表盘装饰 _ 汽车仪表盘种类 教 学 目 标 知识目标 能力目标 德育渗透 1. 认识汽车仪表盘装饰的. 2. 掌握汽车仪表盘装饰的方法. 3. 形成良好的汽车内装饰理念 教学重点.难点 ...

  5. 网页作业HTML+CSS+JS大作业——汽车租赁(47页) 加特效 web期末作业设计网页_汽车大学生网页设计作业成品

    HTML+CSS+JS大作业--汽车租赁(47页) 加特效 web期末作业设计网页_汽车大学生网页设计作业成品 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. ...

  6. Java---先设计一个Moveable可移动接口,然后分别设计 3 个类,即汽车Car、轮船Ship、飞机Aircraft来实现该接口,最后设计一个应用程序来使用它们。

    要求如下: 设计一个Moveable可移动接口: 分别设计 3 个类,即汽车Car.轮船Ship.飞机Aircraft来实现该接口: 设计一个应用程序来使用它们. 源代码如下: import java ...

  7. find排除文件 linux_Linux下find一次查找多个指定类型文件,指定文件或者排除某类文件,在 GREP 中匹配多个关键...

    Linux下find一次查找多个指定文件或者排除某类文件,在 GREP 中匹配多个关键字的方法 (1)Linux下find一次查找多个指定文件: 查找a.html和b.html find . -nam ...

  8. 怎样查看电脑系统版本_用什么软件查维修记录 思域HATCHBACK怎样查询维保记录_汽车事故车查询...

    请点击上方快速关注 思域HATCHBACK很火.这款被誉为"国产Type R"的思域HATCHBACK版本在三厢车的基础上,集成了更运动化乃至更具战斗感的套件包围.中置排气和手动变 ...

  9. HTML+CSS+JS大作业——汽车租赁(47页) 加特效 web期末作业设计网页_汽车大学生网页设计作业成品

    HTML+CSS+JS大作业--汽车租赁(47页) 加特效 web期末作业设计网页_汽车大学生网页设计作业成品 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. ...

  10. 平局决胜制(抢七)交换场地是_中国大学MOOC慕课_汽车文化_章节测试答案

    中国大学MOOC慕课_汽车文化_章节测试答案 更多相关问题 为武昌起义的发生提供了契机,成为武昌起义的导火索 [单选题]本文塑造了鲜明的人物形象,其主要手段是运用了典型的描写,下面分析正确的一项是( ...

最新文章

  1. mac OneNote恢复历史记录
  2. 你能用大数据创造一个新的商业模型吗?
  3. 程序员你为什么这么累【续】:如何应对需求变更
  4. 利用XML实现通用WEB报表打印(转载)
  5. xs_run加密还原
  6. 前后端分离与前后端不分离的区别
  7. artTemplate的空白输出坑
  8. zhajinhua2012邮件等网络服务的广泛应用
  9. OpenCV2:幼儿园篇 第七章 界面事件
  10. 对C#中事件的简单理解
  11. PaddlePaddle:CNN对Cifar10图像分类(1)
  12. ROS与VREP通信
  13. Flash 芯片类型介绍
  14. docker 常用命令
  15. python整数反转
  16. 【分享】凡是不以风控为核心的创新都是在耍流氓
  17. UCOS III 任务堆栈理解
  18. android 小球曲线运动,如图所示,将一小球向斜向上抛出,小球做复杂的曲线运动.实际分析处理...
  19. 计算机应用基础统试题及答案,计算机应用基础统试题及答案
  20. hdu3182 状态压缩水题

热门文章

  1. 微软Windows系统命令和Sysinternals系列工具
  2. 企业安全监控zabbix安装部署方案—二进制安装
  3. 64-bit and iOS 8 Requirements for New Apps
  4. jquery 插件解决IE6 PNG不透明
  5. Android应用开发初印象
  6. [转]SQL Server 2000执行计划成本(2/5)
  7. python float转int_Python 常见内置数据类型及其转换方法
  8. python 汽车行业数据库_python3+Neo4j+flask,汽车行业知识图谱项目实战
  9. Redisson 配置
  10. 常用类字符串详解大全String