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

姓名:顾颖 17021223250

【嵌牛导读】:嵌入式系统如何进行测试?有几个困难:1. 目标系统没有开发PC上的虚拟机,不容易进行自动化测试。2. 好多问题属于人机操作,如何进行回归测试?3. 在没有较为完善的单元测试和集成测试之前,系统测试如何安排?4. 如何准备和实现自动化测试?5. 与别的行业进行自动化测试相比,有没什么特殊之处? 比如和 ATM 机相比等等。6. 没有跑操作系统或基于通用 OS,因此没有 shell 可用。

【嵌牛鼻子】:嵌入式系统如何进行测试

【嵌牛提问】:嵌入式的测试

【嵌牛正文】:

链接:https://www.zhihu.com/question/19755217/answer/38063955

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

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

很多情况下不可能完全实现自动化测试或者成本太高,那么就通过

减少进行一次完整测试所用的时间和资源,提高人工测试的效率

将可自动测试的部分从整体中分离出来独立测试,剩下的人工测试

将整个系统分解为多个子系统进行独立的测试

将系统分解为设备相关和设备无关分开测试

设备无关的部分做自动化测试

设备相关的部分人工测试,每次设备条件变化时再进行独立测试

构建多个独立的测试程序在设备上逐个运行,每个这样的测试程序只需得出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)。意思很简单,设计的时候就要为测试考虑。而不要等编码完了之后在去想怎么去测,这个时候测试的成本就是不可预期的了。

你可能感兴趣的:(嵌入式系统如何进行测试?)