嵌入式系统如何进行测试?

首先,质量是设计出来的,而不是测试出来的

我先说一些我的一些经验,之后想扩展到“嵌入式系统如何保证软件质量?”的问题。因为测试只是方法,质量才是目的

解决问题的思路有如下几个

  • 很多情况下不可能完全实现自动化测试或者成本太高,那么就通过
    • 减少进行一次完整测试所用的时间和资源,提高人工测试的效率
    • 将可自动测试的部分从整体中分离出来独立测试,剩下的人工测试
  • 将整个系统分解为多个子系统进行独立的测试
  • 将系统分解为设备相关和设备无关分开测试
    • 设备无关的部分做自动化测试
    • 设备相关的部分人工测试,每次设备条件变化时再进行独立测试
  • 构建多个独立的测试程序在设备上逐个运行,每个这样的测试程序只需得出PASS或者FAIL的结果即可.
  • 利用高级语言及其丰富的库提高测试效率

一些嵌入式软件测试的个人经验

用高级语言实现自动化测试

很多时候当手工测试已经占用了很多时间的时候,需要将其转换为自动化脚本。我最常用的就是基于Python的unittest,配合pexpect等工具,在加上强大的各种Python库,来实现自动化测试。

(慢慢补充)

利用好各种工具

  • Wall - 永远开着Wall,提交前永远对Warning零容忍,别让他破窗。
  • Valgrind - 内存泄露以及各种测试
  • 如果你做的是开源项目,那么有以下互联网工具
    • GitHub这个还用说么?
    • travis-ci - 最有名的免费持续集成工具了,可以和GitHub绑定,每次提交都可以直接构建和测试,甚至交付
    • http://coveralls.io - 基于travis-ci,在测试之后可以将覆盖率报告上传到http://coveralls.io,将会生成覆盖率报告。
  • 对于公司内部,有
    • GitLab - 非常好的GitHub替代
    • 持续集成(CI)
      • Jenkins CI -
      • Gitlab CI


谈谈嵌入式软件的质量问题

在像IC设计这样的硬件设计中,对正确性的要求是非常高的,因为一次性的投产费用高达数万美元至百万美元。而软件因为错了可以修改,所以有不同的质量要求。互联网的兴起从一定程度上降低了软件质量的水平,因为只要是非关键系统,有bug你可以随时升级。但是对于嵌入式来说,大部分产品卖出去就很难在升级了,比如电饭煲和家用电器这样的产品。所以对于质量的要求高于互联网,而低于硬件产品。

说了一段废话,其实我想引入IC设计中的一个概念,叫做可测性设计(Design for Test)。意思很简单,设计的时候就要为测试考虑。而不要等编码完了之后在去想怎么去测,这个时候测试的成本就是不可预期的了。

嵌入式系统的持续集成

持续集成(Continuous Integration(CI))持续交付(Continuous Delivery(CD))是现代软件开发中两个非常重要的概念。集成是完成交付和部署的前置条件,实现持续交付最大的难点是如何配置正确的持续集成流程。目前,在服务器以及Web系统上的软件进行部署比较简单,但在嵌入式系统上持续集成则成为了较为棘手的问题。

1.嵌入式系统的持续集成

软件开发过程中,开发方式及开发工具是至关重要的。在嵌入式开发时,嵌入式系统的仿真往往在硬件开发中被忽略:开发人员在开发过程中不进行版本管理,直接将现有的源码作为下一轮迭代的基础;若未经过测试,当程序出现bug时,想要回退到之前的版本便较为复杂。开发嵌入式软件时构建持续集成流程的必要性显而易见。

持续集成流程如下图所示:创建一个单独的开发分支,用于在源码提交后进行集成;创建另一条分支用于异步执行主要持续集成流。

▲图 1:嵌入式仿真软件持续集成流程图

该流程的目的是将提交代码、集成代码以及构建的基本开发流与主要持续集成流分开,避免因长时间的持续集成而耽误开发进度。

2.解决硬件问题的工具

目前,嵌入式系统持续集成的核心是需要一个“类生产环境”,指需要在确保无限接近真实的环境中稳定运行软件。然而,实际操作中存在诸多问题:硬件的开发周期过长、软件不稳定等。

嵌入式仿真软件的出现解决了以上问题,该平台与真实环境足够接近,可以运行真实代码进行功能测试。

代码运行的问题解决后,嵌入式仿真软件持续集成的下一部分内容,就是确保代码获得合理的输入内容。嵌入式仿真软件不仅涉及与其他代码、计算机系统间的通信,还涉及通过接口和其他环境间的通信。测试时需要通过真实系统中使用的硬件接口向被测系统发送数据。因此,嵌入式系统的实际物理测试环境需要满足以下需求:

1.提供合适的硬件环境来进行测试;

2.将软件加载到硬件上——难度取决于软件堆栈的性质;

3.集成环境——搭建合理的硬件环境,并能够提供合理的激励,保证软件能像在真实环境中一样运行,并观察运行情况。

典型的集成环境如下所示:

 ▲图 2:典型集成环境

模拟硬件系统的仿真平台可将外部环境模拟和虚拟硬件系统的平台模型结合,方便开发人员将整个系统环境仿真成可以在任何服务器或者PC机上运行的软件工作。测试系统的可用性得到了提升,测试进度也得到了保障。

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值