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

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

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

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

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

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

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

  嵌入式软件测试或叫交叉测试(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。