张蕾
摘 要:如今,嵌入式软件在越来越多的场合应用,嵌入式软件测试工作是保证软件质量必不可少的重要一环,也必将会得到更多的重视。本文介绍了嵌入式软件的特点和测试方法,并针对不同的测试方法讨论了流行的测试工具。
关键词:嵌入式软件;软件测试;测试方法;测试工具
中图分类号:TP317 文献标识码:A
0.引言
由于嵌入式软件设计开发的方法、技术、过程以及工具都与通用计算机软件不同,所以需要使用更先进的测试方法和工具对嵌入式系统进行测试。随着越来越多的领域使用软件来控制各种嵌入式设备,如何对嵌入式软件进行测试和验证,如何保证软件能够满足系统要求,就显得尤为重要。
1.嵌入式软件测试特点
嵌入式软件测试与通用软件不同,它是一种特殊的软件测试,具备自身的一些特点(特别是对于没有操作系统的嵌入式应用软件而言):
(1)特定的硬件环境。
(2)更加关注可靠性、实时性。
(3)对进行性能测试和功能测试外,还需要对内存进行测试。
(4)在嵌入式软件和硬件集成测试完成之后,并不代表测试全部完成,需要对其进行产品测试。
2.嵌入式软件测试方法
本文重点介绍了针对嵌入式软件的几种测试方法:静态分析、软件质量度量、性能分析、内存分析、覆盖率分析、单元/集成测试、系统测试。
2.1静态分析
静态分析是一种利用测试工具对代码进行的机械性和程序化的分析方法。静态分析是直接对源代码进行代码走读、静态扫描和分析,不需要编译或运行代码,也不会受到其他缺陷和其他模块的影响。
工具举例:PolySpace工具是一种嵌入式软件的静态分析工具。它包括PolySpace Bug Finder和PolySpace Code Prover两个模块。PolySpace Bug Finder是静态代码分析软件,可以发现C/C++代码中的各类缺陷,包括运行时错误,数据流问题,编程问题等各类代码缺陷。PolySpace Code Prover使用抽象解释和静态分析方法来证明,识别和分析运行时错误,例如溢出,除零和指针的越界。
2.2软件质量度量
软件质量度量是衡量软件是否符合需求、标准的重要体现,它的目的在于利用度量来改进软件过程。要确保软件的整体质量,就需要在各个环节严格控制。
工具举例:很多嵌入式软件是用C或C++语言编写,但编程语言本身并不安全,QAC/QAC++是一种代码静态分析工具,它的静态分析能力包括:质量度量和软件结构分析。
2.3性能分析
近年来,嵌入式系统被广泛应用于汽车、家电、通信、制造等各个领域,领域间的竞争也激发了嵌入式技术的快速发展,对软件性能分析是嵌入式开发过程中至关重要的一部分,嵌入软件的性能分析是嵌入式环境下重要的测试方法。
工具举例:RapiTime是一种软件运行时间评估工具:它能够进行软件时间性能的测量,通过分析得出最差执行时间数据,并为代码优化提供指导。它的特点包括检查不同的函数对于最差、最优以及平均执行时间的影响;通过大量调用来查看执行时间的变化;对于函数自身的上下文、循环以及数据块进行分析等。
2.4内存分析
嵌入式系统的内存是有限的,但对实时性要求又很高。内存问题主要包括内存泄露、内存崩溃、内存碎片。其中内存泄露问题尤为严重,它会导致系统可用内存减少,甚至导致系统崩溃。
现在已经有许多工具来解决内存泄露问题,如Mtrace、 Memwatch、Purify等。这些工具使用库跟踪、动态检测、程序插桩等技术来发现和定位内存泄露的问题。
2.5覆盖率分析
覆盖率测试(也成逻辑测试)是度量测试完整性和查找软件问题的必要手段,是测试有效性的度量。覆盖率测试的目的是确保软件所有的程序至少被执行一次,尽可能全的覆盖软件程序的各个语句及其分支结构,以便发现软件中的错误和问题。
工具举例:RapiCover 是一款基于目标硬件的嵌入式软件的测试覆盖率分析工具, 针对所使用的测试用例给出对应的现场测试覆盖率信息,其插桩点的开销极小,并能针对目标板的实际情况提供灵活的支持方式。它的特点包括:支持C、C++、Ada编程语言;极小的时间开销;语句覆盖,变量定义、条件判断或循环等。
2.6单元/集成测试
嵌入式软件的单元测试大多是在宿主机环境下进行的,只有少数情况下需要在目标机环境下进行。单元测试主要是进行白盒测试,应尽可能地测试每一个函数,每一个条件分支、每一个程序语句,提高代码的测试覆盖率。
在单元测试完成后,接下来需要进行集成测试。集成测试又称为组装测试,是将各模块合成一个组件,并测试它们间的接口。
工具举例:Tessy软件是一款专门针对嵌入式软件动态测试的工具。它可以对C/C++代码进行单元测试和集成测试。
2.7 系统测试
嵌入式软件系统测试的目的与通用软件类似,都是通过与需求做比较来发现软件缺陷。嵌入式软件的系统测试应综合运行各种测试用例设计方法,并根据需求规格说明书来设计,在目标机环境下运行。
系统测试阶段除了功能测试外,还应该包括意外测试、破坏性测试、性能测试等。
在系统测试中,随机测试是比较经济有效的一种测试方法。将随机测试结果和操作规范的要求作比较,还可以得到软件可靠性的估计。有效地将随机抽样测试与其他测试技术结合可以产生更强大和更高效的测试策略。
结语
本文归纳总结了嵌入式软件的测试方法,并在不同的测试方法中列举了当前市场上的适用于嵌入式软件的测试工具,希望能够对广大从业者有所参考。
参考文献
[1]康一梅.嵌入式软件测试[M].北京:机械工业出版社,2010:39-40.
[2]MathWorks引入两款Polyspace代码验证新产品[J]. Microcontrollers & Embedded Systems,2013:86-87.
[3]梁倩.一种基于QAC和Klocwork软件的静态测试方法[J].计算机与网络,2012(10):58-60.
[4]張鹏.嵌入式软件内存泄露检测方法研究[J].计算机工程与应用, 2013(14):56-59.
[5]孙韬敏.基于隐马尔可夫模型的内存碎片检测机制[J].计算机应用,2014(S2):224-226.
[6]孙陇平.嵌入式软件覆盖率测试的研究与应用[J].现代电子技术,2014(18):67-69.endprint