嵌入式软件单元测试的必要性和心得

随着科技飞速发展,国内发生了翻天覆地的变化。但是中国虽然是大国,却还不是强国,在汽车方面,还是日系德系天下。为什么提到国产汽车,想到的是汽车质量问题?虽然国内汽车发展很快,但是各方面还不成熟,为了节约成本,或者为了赶进度,选择了最新的芯片,却忽略了各种配套的测试。汽车是一个系统工程,更是关乎生命安全的国家支柱产业。没有必要为了突出某方面的新奇,而忽略了整体的稳定性,安全性。突破了消费者的底线后,将再难得到他们的信任。

在汽车的设计中,安全性是摆在首位的。为了保证汽车的安全性,必须要做各种各样的测试。除了硬件的测试,更重要的是软件测试。将来是智能化时代,软件工程必将越来越复杂,嵌入式软件更是如此。

单元测试是软件开发的重要一环,尤其对嵌入式开发。因为嵌入式开发受限于开发环境、调试工具等因素,不能和纯 PC 软件开发一样使用很多先进的工具。这就需要开发者在开发过程中,进行更细的模块划分,更明确的接口,更详尽的测试。

传统的开发先出设计方案,然后跟着写出代码,最后再做测试---常被叫做 bug 调试,所以在代码“写完”之后,还有一半左右的开发量。人都会犯错,在设计和编码中也会犯错,如果后期调试编程去解决设计和编码中引入的错误,那么可能已经过了几天几周几个月,反馈如此只晚,已经不能从错误中吸取经验了,下次还会犯同样的错误。此外根据软件工程理论,1 个 bug 越是在后期越是花费巨大的成本去修复,并且随着系统复杂度的增长,在一个大的系统中去查找某一个细节具体的问题,相比于在小的模块中去查找问题会花费多倍的时间成本和经济成本。

3.JPG
ISO26262 是国际标准化组织文件第 26262 号(ISO 26262)为机动车辆开发和测试紧急安全电子系统提供了一个过程框架和程序模型。从电子、电气及可编程器件功能安全基本标准 IEC61508 派生出来的,主要定位在汽车行业中特定的电气器件、电子设备、可编程电子器件等专门用于汽车领域的部件,旨在提高汽车电子、电气产品功能安全的国际标准。4.JPG

现在的单元测试已不是过去的 bug 调试,而是更加系统化,便利化的工具自动化测试。在嵌入式软件领域,必须使用经 ISO26262 认证的工具。工具必须考虑它的易用性、成熟性和是否与实际需求相符。

1.JPG
覆盖率专家 WinAMS 源自日本 gaio 公司,gaio 公司创始于 1980 年,公司早期开发编译器,随后开发了基于源代码分析和模拟技术的嵌入式软件测试工具。嵌入式软件测试工具“覆盖率专家 WinAMS”、“CasePlayer2”拥有全球众多客户。工具针对实装代码进行测试,无需对原代码改动,搭建测试框架。工具取得了汽车功能安全(ISO26262)的工具认证,服务于日本所有汽车生产商及汽车供应商。

V.jpg
在 V 模型开发中,WinAMS 主要应用在单元测试和集成测试阶段。单元测试通过运行实装代码,检测出函数中错误,比如算法错误、逻辑错误、接口问题等;集成测试则在单元测试的基础上验证单元之间接口的正确性。基于越早发现 bug 开发成本越低的原则,在进行代码功能验证的过程中,先完成单元测试再进行集成测试。

单元测试为何备受追捧呢?在 How Google Tests Software 中,三位谷歌的专家介绍了谷歌的软件测试之道,简言之就是谷歌会在开发之初设计好单元测试(其实是用代码表达需求),在开发中不断迭代以通过全部的测试(其实是完成全部需求),最终交付给测试人员的软件已经经过一轮测试,如果还有集成后的 Bug,就可以交给专业的测试人员发现了。这是一种典型的敏捷开发,可以看到单元测试扮演更多的是驱动开发的角色。

有很多公司非常准确地把单元测试叫做“开发自测”,并且非常准确地认识到了这个活动的重要性:程序员只要认真测一测自己写的代码,bug 就能减少 90%。所以说,虽然很麻烦!但是单元测试还是很有必要的!

回帖
请输入回帖内容 ...