这里讨论的嵌入式软件测试是一个系统测试的概念。即将开发的软件系统(包括嵌入式操作系统和嵌入式应用软件)、硬件系统和其它相关因素(如人员的操作、数据的获取等)综合起来,对整个产品进行的全面测试。嵌入式系统的系统测试比PC系统软件测试要困难得多,主要体现如下:

  1、测试软件功能依赖不需编码的硬件功能,快速定位软硬件错误困难;

  2、强壮性测试、可知性测试很难编码实现;

  3、交叉测试平台的测试用例、测试结果上载困难;

  4、基于消息系统测试的复杂性,包括线程、任务、子系统之间的交互,并发、容错和对时间的要求;

  5、性能测试、确定性能瓶颈困难;

  6、实施测试自动化技术困难。

  嵌入式软件测试和传统软件测试异同点

  嵌入式软件与别的软件相比,它具有专用性,它只能在需求所指定的硬件平台上执行,并且嵌入式软件的开发环境和运行环境是不一致的,因此即使宿主机环境下测试再充分,也不能说明在目标机环境下运行该软件不出问题。因而,嵌入式软件还面临着目标环境的测试。这不仅增加了测试的代价,而且还带来了嵌入式软件的测试策略问题,即哪些测试分配在宿主环境进行,哪些测试分配到目标环境下进行(户军茹,2007)。

  所以嵌入式软件测试更有它的必要性,而且比一般的软件测试存在更多的困难。

  嵌入式软件测试与普通软件测试的相同之处

  传统的软件测试是将软件分在不同的层面上进行测试,包括模块测试(或单元测试),集成测试,系统测试等。

  嵌入式软件测试和一般的软件测试存在着许多相似的问题和相似的解决方法。这是我们寻找的嵌入式软件的通用的测试方法。

  按阶段可分为单元测试、集成测试、系统测试和确认测试。

  单元测试(Unit testing):完成对小的软件设计单元的验证工作,只有在该基础之上才能保证后续的测试工作。主要采用白盒测试技术,用来保证单元的大覆盖率和发现编码和详细设计中的错误。单元测试一般可以在宿主环境上运行。嵌入式测试系统一般分为以下几个单元:预处理和词法语法分析单元、插桩单元和测试信息分析和显示单元以及测试用例单元。

  集成测试(Integration testing):是把经过单元测试的模块按软件的结构组合在一起作为一个系统或一个子系统来综合测试。主要是用来发现程序的架构和体系结构设计方面的错误。虽然白盒测试用来保证大部分的路径覆盖率,但黑盒测试在集成测试中还是比较广泛。集成测试一般是在宿主环境中进行。

  系统测试(System Testing):将系统的测试软件系统和其他资源(硬件、人机交互信息资源和数据库等)都综合起来构成完整的计算机应用系统进行测试的。是用来确保整个系统的性能、执行强度、安全性和功能都达到了我们的要求。所以在这个阶段是要和硬件结合,即和目标板一起进行测试,在目标环境中进行。

  确认测试(Validation testing):是把软件系统作为一个单一的执行实体而进行的需求有效性测试。其目的是验证我们的软件是否满足所有的功能、行为和执行要求,这部分主要是用黑盒测试。