根据测试时是否运行被测试的程序,软件测试技术还可分为静态测试方法和动态测试方法。

  静态测试方法的主要特征是不运行被测试的程序,主要采用检查、技术复审和代码静态分析来检查被测软件的错误,对于嵌入式软件来说该测试只需在主机上进行可以了。

  动态测试方法是使被测代码在相对真实环境下运行,从多角度观察程序运行时能体现的功能、行为、结构等,并从中发现错误。它又分为白盒测试方法和黑盒测试方法。对于嵌入式软件来说,为了保证测试的真实性,一般要求在目标环境中进行。

  从测试是否针对系统的内部结构和逻辑处理过程,通常可分为:白盒测试与黑盒测试。

  黑盒测试又称为功能测试、数据驱动测试或基于规格说明的测试。它必须依靠能够反映这一关系和程序功能的需求规格说明书来考虑测试用例和推断测试结果的正确性。即所依据的只能是程序的外部特性。因此黑盒测试是从用户观点出发的测试。黑盒测试方法包括等价类划分、边界值分析、因果图和正交设计等基于软件功能的测试技术。在进行嵌入式软件黑盒测试时,要把系统的预期用途作为重要依据,根据需求中对负载、定时、性能的要求,判断软件是否满足这些需求规范。为了保证正确地测试,还需要检验与硬件之间的接口。嵌入式软件黑盒测试的一个重要方面是极限测试。在使用环境中,通常要求嵌入式软件的失效过程要平稳,所以,黑盒测试不仅要检查软件工作过程,也要检查软件失效过程。

  白盒测试又称为结构测试、逻辑驱动测试或基于程序的测试。采用这一测试方法,测试者可以看到被测的源程序,用以分析程序的内部构造,并且根据其内部构造设计测试用例。这时测试者可以完全不顾程序的功能。白盒测试方法又包括逻辑覆盖、符号测试、路径分析、程序插桩和程序变异等基于软件内部结构的测试技术。白盒测试与代码覆盖率密切相关,可以在白盒测试的同时计算出测试的代码覆盖率,保证测试的充分性。由于严格的安全性和可靠性的要求,嵌入式软件测试同非嵌入式软件测试相比,通常要求有更高的代码覆盖率。在软件工程的测试中有一个颇为实用的覆盖准则,即当语句覆盖率,分支覆盖率≥85%时,认为测试是理想的,软件错误可查出近90%,且允许时间和空间的消耗。日本日立公司和美国空军均采用此标准。对于嵌入式软件,白盒测试一般不必在目标硬件上进行,更为实际的方式是在开发环境中通过硬件仿真进行,所以选取的测试工具应该支持在宿主环境中的测试。

  嵌入式软件测试强调的是白盒测试,一般的白盒测试包括语句覆盖、分支覆盖和条件覆盖。

  嵌入式系统软件的独特之处

  嵌入式系统由于自己本身的特点,如实时性强、内存不丰富、I/O通道少、开发工具昂贵并且与硬件紧密相关、CPU种类繁多等等,决定了不同的嵌入式系统必须有不同的测试方法,下面介绍几种不同的嵌入式产品在测试时应特别关注的问题。

  系统??“一次性”开发

  某些系统,比如人造卫星,一旦发射之后无法对其进行维护。这样的系统是“系统”,意味着其建造是一次性的。

  自治系统

  有些嵌入式系统可以在无限长的时间内自主运行,它们担负某种任务。一旦运行后,不再需要有人干预或与人交互。