1、引言
  随着数字化时代的到来,大量系统架构复杂、功能日益强大的嵌入式系统正不断进入市场,应用也日趋复杂,这对嵌人式软件的开发技术和测试技术提出了更高的要求。嵌人式系统的复杂性和集成度越来越高,其中的软件部分也开始在整个嵌入式系统中占有越来越多的比例,并经常实现硬件的功能。嵌入式系统的专用程度较高,所以对其可靠性的要求也比较高,为了保证系统的稳定性,避免由于其可能出现的失效而导致灾难性的后果,要求对嵌人式系统,包括嵌入式软件进行严格的测试、确认和验证。基于嵌入式软件自身的特点,如实时性(Real-timing),内存不丰富,I/O通道少,开发工具昂贵,并且与硬件紧密相关,CPU种类繁多,其缺陷不像PC软件的缺陷容易修补等等。传统的软件测试理论不能直接用于嵌入式软件测试,因此,研究嵌入式软件的测试方法和策略,对于提高和改善嵌入式软件的质量有重要意义。

2、嵌入式软件测试的基本方法

  嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可剪裁,适应应用系统对功能、可靠性、成本、体积及功耗严格要求的专用计算机系统。嵌入式系统的软硬件功能界限模糊,测试比PC系统软件测试要困难得多,嵌入式软件系统测试具有如下特点:

  (1)测试软件功能依赖不需编码的硬件功能,快速定位软硬件错误困难;

  (2)强壮性测试、可知性测试很难编码实现;

  (3)交叉测试平台的测试用例、测试结果上载困难;

  (4)基于消息系统测试的复杂性,包括线程、任务、子系统之间的交互,并发、容错和对时间的要求;

  (5)性能测试、确定性能瓶颈困难;

  (6)实施测试自动化技术困难。大量统计资料表明,软件测试的工作量往往占软件开发总工作量的40%以上,在极端情况,测试那种关系人的生命安全的重要的行业中的嵌入式软件所花费的成本,可能相当于软件工程其他开发步骤总成本的三倍到五倍。

  在嵌入式软件测试中,既要考虑软件本身,还要考虑软件同硬件平台和操作系统的集成,同时还有条件苛刻的时间约束和实时要求,以及其他合性能相关的要求。

2.1 全数字模拟测试

  全数字模拟测试是指采用数学平台的方法,将嵌入式软件从系统中剥离出来,通过开发CPU指令、常用芯片、I/O、中断、时钟等模拟器在开发主机平台(Host)上实现嵌入式软件的测试。该方法操作简单,适用于功能测试,是一种可以借鉴的常规软件测试方法。但是全数字模拟测试有较大的局限性,使用不同语言编写的嵌入式软件需要不同的仿真程序来执行,通用性差,实时性与准确性难以反映出嵌入式软件的真实情况,当并发事件要求一定的同步关系时,维护统一、精确地系统时钟,理顺时序关系相当困难。因此,设计一个能进行系统测试的环境代价太大,全数字模拟测试只能作为嵌入式软件测试的辅助手段。

2.2 交叉测试(Host/Target测试)

  自从出现高级语言,嵌入式系统的开发环境和运行环境通常是存在差异的,开发环境被认为是主机平台(Host),软件运行环境为目标平台(Target),相应的测试为Host Target测试(交叉测试)。测试过程中,充分利用高级语言的可移植性,将系统中与目标环境无关的部分工作转移到PC平台上完成,在硬件环境未建好或调试工具缺乏时就可以开展,这时可以借鉴常规的软件测试方法。系统中与硬件密切相关的部分在Target上完成,用到的测试工具需要支持目标环境。最后,在目标环境中进行验证确认。交叉测试适用于高级语言,操作方便,测试成本较低,但是实时性受调试环境的制约,在目标环境中测试时要占用一定的目标资源。

2.3嵌入式软件测试方法分类 

嵌入式软件测试或叫交叉测试(Cross-test),测试内容包括:1.单元测试;2.集成测试;3.确认测试;4.系统测试。

  使用有效的交叉测试策略可极大地提高嵌入式软件开发测试的水平和效率,下文给出各个阶段的嵌入式软件测试方案。

  静态测试

  静态测试不利用计算机运行被测程序,目的是度量程序静态复杂度,检查软件是否符合编程标准。

  1)静态测试工具McCabeQA

  McCabeQA是美国McCabe&Association公司的产品。它利用着名学者McCabe的软件结构化测试理论,即使用V(G)圈复杂度=模块内部独立线性路径数来度量软件的复杂度。

  McCabe最大的特点就是可视化,以独特的图形技术表示代码。软件通过分析源码,得到整个软件系统的结构图,同时得到了各种基于工业标准评估代码复杂性,包括V(g)、EV(g)、DV(g)、Halstead等数十种静态复杂度度量。用不同的颜色表示软件模块的复杂性,测试人员的测试重点放在质量差的模块上;提供各种质量模型深入评价软件质量,纪录软件质量波动曲线和版本变化趋势分析,从而控制软件修改不同阶段的质量。在单元级McCabe显示模块的流程图,并且相对应地标出代码的位置,视图与代码相互对应,可很快找出问题所在。分析最终得到可定制的符合工业标准的综合报告。

  2)代码规则检查工具QAC/C++

  QAC/QAC++是用于代码规则检查的自动化工具。代码审查主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面。发现违背程序编写标准的问题,程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和程序结构检查等内容。

  动态测试

  动态测试时软件必须运行。动态测试方法分为黑盒法和白盒法。为了较快得到测试效果,通常先进行功能测试,达到所有功能后,为确定软件的可靠性进行必要的覆盖测试。

  在软件开发的不同时期进行动态测试,测试又分为单元测试、集成测试、确认测试、系统测试。

  单元测试

  单元测试方案之一采用IPL公司的Cantata++测试工具,它能够满足开发者进行高效的单元测试和集成测试要求,能够提高测试效率,具有一整套包含测试、覆盖率分析和静态分析的功能。Cantata++含有以下几个主要部分:

  CTH测试功能库,Cantata++通过CTH提供的测试函数执行测试,提供测试所需用例的输入输出,并检查输出结果是否符合要求,给出合格/不合格的确切结果。打桩、封装和动态分析的执行也是利用CTH。

3.为什么不把所有测试都放在目标上?

目前在嵌入式领域,目标系统的应用系统日趋复杂,而由于竞争要求产品快速上市,开发技术日新月异,同时硬件发展的日益稳定,造成了软件故障日益突出。由此,软件的重要性越来越引起人们的重视,人们认识到嵌入式系统的测试势在必行。

  由于嵌入式系统的自身特点,如实时性、内存不丰富、I/O通道少、开发工具昂贵、并且与硬件紧密相关,CPU种类繁多等等。嵌入式软件的开发和测试也就与一般商用软件的开发和测试策略有了很大的不同,可以说嵌入式软件是最难测试的一种软件。

  嵌入式软件测试使用有效的测试策略是唯一的出路,它可以使开发的效率最大化,避免目标系统的瓶颈。自从出现高级语言,开发环境与最终运行环境通常都是存在差异的,嵌入式系统更是如此。开发环境被认为是主机平台,软件运行环境为目标平台。相应的测试为主机-目标测试或交叉测试。

  讨论嵌入式软件测试首先就会遇到一个问题:为什么不把所有测试都放在目标上进行呢?因为若所有测试都放在目标平台上有很多不利的因素:例如测试软件可能会造成与开发者争夺时间的瓶颈;目标环境还不具备;比起主机平台环境,目标环境通常是不精密的和不方便的等等。

  从经济上和开发效率上考虑,在开发周期中软件应该尽可能多地工作在主机系统环境中,其中包括测试。

  确定主机-目标(Host-target)测试环境后,开发测试人员又会遇到以下的问题:例如多少开发人员会卷入测试工作;多少软件应该测试,花费多长时间测试;在主机环境和目标环境有哪些软件工具,价格如何等等。

  任何人或组织在测试嵌入式软件时都应深入考虑以上问题,结合自身实际情况选定合理测试策略和方案。

4.嵌入式软件测试资料

基础篇

静态篇:软件质量分析,代码规则检查篇

动态篇

嵌入式软件测试的基本方法相关推荐

  1. 嵌入式软件测试与一般软件测试之异同研究

    嵌入式软件测试与一般软件测试之异同研究https://yq.aliyun.com/articles/130556 嵌入式软件测试与一般软件测试之异同研究http://www.51testing.com ...

  2. 嵌入式 html 解析文件,嵌入式软件测试——方法、案例与模板详解.html.pdf

    前言 近几年 ,我国的软件测试行业进入 了飞速发展 阶段 ,在一个新兴行业刚刚发展 的时期 ,给 们带来的误 区也是最多的,例 如 :很 多 认为测试工作 简单 ,技术 门槛低 ,容易上手,也有 担心 ...

  3. 嵌入式软件测试——1.简介

    #百科介绍 一般来说,软件测试有7个基本阶段,即单元或模块测试.集成测试.外部功能测试.回归测试.系统测试.验收测试.安装测试.嵌入式软件测试在4个阶段上进行,即模块测试.集成测试.系统测试.硬件/软 ...

  4. 嵌入式软件测试的十大秘诀

    嵌入式软件测试的十大秘诀 <script type="text/javascript"> </script><script language=&quo ...

  5. python软件测试脚本_基于Python的实时嵌入式软件测试脚本

    摘 要:计算机技术应用的不断普及,使得实时嵌入式软件在航空.航天.工业控制.交通.医疗和军事安全等诸多领域发挥着愈来愈重要的作用.不难看出,这些领域对软件的可靠性有很严格的要求,因为该领域的软件一旦失 ...

  6. 嵌入式软件测试研究意义,嵌入式软件测试的研究

    摘要: 嵌入式系统在人类生活中发挥着重要的作用,包括飞行控制器这样的控制系统,以及洗衣机这样的家用电器.日前,嵌入式系统中软件的比重越来越大,也越来越复杂,保证嵌入式软件的可靠性正面临严峻的挑战.大多 ...

  7. 对话ChatGPT:嵌入式软件测试路在何方

    21世纪最具颠覆性的技术无疑是人工智能.2023年春节前,人工智能组织OpenAI对话式聊天机器人工具ChatGPT以其强大的信息整合和对话能力惊艳了全球,相关概念股一度猛涨.只需在对话框内输入指令, ...

  8. 这几款嵌入式软件测试工具,好用到起飞~

    也许你陌生,但在智能物联网时代,人们会越来越关注嵌入式软件测试. 说起嵌入式软件测试,我们先快速了解一下嵌入式软件自身的特点.嵌入式软件具有实时性.内存空间有限.I/O通道少,而且要求功耗低.高可靠性 ...

  9. linux 嵌入式 远程升级,嵌入式设备远程固件升级方法与流程

    本发明属于远程固件更新 技术领域: ,特别是一种基于STM32F407单片机的靶场测试数据采集设备的远程固件升级方法. 背景技术: :固件(firmware)一般存储于设备中的电可擦除只读存储器EEP ...

最新文章

  1. linux程序已经在后台运行冻结了_linux 让程序在后台运行的几种可靠方法
  2. M| SQL 导入导出的时候数据库表的主键和自动编号丢失 怎么办
  3. php fckeditor demo,如何使用PHP添加fckeditor
  4. 马冬晗学习计划表_一年时间提升学习和工作能力,我做对了这3点
  5. openfire过滤脏话插件,控制消息是否发送
  6. mysql 双向热备份_MySQL双机热备份
  7. Linux下软件安装和删除的命令
  8. mysql string agg_postgresql – 如何使array_agg()像mySQL中的group_concat()一样工作
  9. 数据结构 课程设计报告 :校园导航系统
  10. 闪灵CMS插件自动采集文章主动推送给搜索引擎
  11. android基于xposed框架,基于Xposed框架的模块:Android EagleEye
  12. 华为员工离职心声:菊厂15年退休,感恩公司,让我实现了财务自由!
  13. python网络爬虫-淘宝商品比价定向爬虫
  14. colojure语言基础入门
  15. java学习笔记第三部分
  16. 小程序生成二维码海报
  17. C++我记得应该是当初笔试面试常考的
  18. redis windows版下载教程,及双系统百度网盘资源分享
  19. In-memory Computing with SAP HANA读书笔记 - 第七章:Business continuity and resiliency for SAP HANA
  20. 基于python的web框架Flask实现SDEAM游戏商城设计 文档+前后台源码

热门文章

  1. 玩转OpenCV之一:关于OpenCV学习版本的选择
  2. mysql 唯一序列号_利用mysql生成唯一序号
  3. SDSoC和SDAccel和SDNet和HLS工具介绍
  4. IOS 图片拉伸不变形
  5. corosync+pacemaker高可用
  6. 如何使用 OpenTracing 和 Jaeger 追踪 Pulsar 消息
  7. RSA der加密 p12解密以及配合AES使用详解
  8. Github使用秘籍
  9. 类和对象:类与对象定义
  10. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1060:均值