基于模块化设计的嵌入式软件测试方法
阶段,可以用黑盒测试和白盒测试的方法分别进行动态测试。
值得一提的是,近年来软件测试中,测试代码的覆盖率逐渐成为软件测试的统一标准,因此不管采用何种测试方法,尽可能地提高软件测试中的代码覆盖率是必需的。软件测试代码覆盖率是基于白盒测试方法的,因此,为了提高软件测试的代码覆盖率,测试人员必须清楚源代码的结构,拥有程序设计文档,以便设计测试用例使测试尽可能地覆盖程序内部结构的每条语句,提高代码的覆盖率。
2 基于模块化设计的嵌入式软件四级测试流程
根据嵌入式系统的开发流程,为了最经济地实现系统的功能,采用自顶向下、层层推进的方法对嵌入式系统进行测试,提出了如图4所示的基于模块化设计的嵌入式软件四级测试流程。在四级测试中,本测试阶段以前的测试完成后,当发现错误时,可排队此测试阶段以前的错误,在本测试阶段内查找错误。这并不是一个绝对准确的方法,但最大限度地节了错误定位的时间。
2.1 系统平台测试
这部分包括硬件电路测试、操作系统及底层驱动程序的测试等。硬件电路的测试需要用专门的测试工具进行测试。这里不再多述。操作系统和底层驱动程序的测试主要包括测试操作系统的任务调度、实时性能、通信端口的数据传输率。该阶段测试完成后,系统应为一个完整的嵌入式系统平台,用户只需添加应用程序即可完成特定的任务。
2.2 模块测试
把大型的嵌入式软件系统划分为若干个相对较小的任务模块,由不同的程序员分别同时对其进行编码。编码完成后,把各个模块集成起来前,必须对单个模块进行测试。由于没有其它数据模块进行数据传递的支持,该阶段测试一段是在宿主机上进行的(宿主机有丰富的资源和方便的调试环境)。此阶段主要是进行白盒测试,尽可能地测试每一个函数、每一个条件分支、每一个程序语句,提高代码测试的覆盖率。由于只有单个模块正确才有整体集成的必要性,因此,单个模块测试时测试一定要充分、完整。模块测试阶段,测试用例的构造不但要测试系统正常的运行情况,还要进行边界测试。边界测试就是进行某一数据变量的最大值和最小值的测试,同时进行越界测试,即输入不该输入的数据变量测试系统的运行情况。理想的嵌入式系统是不应该由用户的信息交互导致死机的,这也是嵌入式设计的一个基本要求。因此,不论进行何种测试,系统死机都该被作为测试错误处理。在模块测试阶段,由模块化编程的基本思想,根据模块内部的紧凑程序,也可以把大的模块划分成小的模块。在程序内部,小模块之间数据传递的入口设计接口函数,用于快速地定位错误。用此模块嵌套的思想进行软件测试,需要模块内部结构清晰,数据链路简单。
2.3 集成测试
单个软件模块测试正确之后,将所有模块集成起来进行测试。本阶段主要是找出各模块之间数据传递和系统组成后的逻辑结构的错误。在宿主机上采用黑盒与白盒相结合的方法进行测试,要最大限度地模拟实际运行环境,可以屏蔽掉一些不影响系统执行的和数据传递的难以模拟的函数。集成测试是模块化设计软件的测试优点充分体现的阶段。集成测试前,应该由程序员根据模块之间的数据的输入输出编写模块接口函数,这需要负责不同软件模块的程序员共同协调完成,然后将模块接口函数集成到接收数据模块的入口处。由前面的分析可知,单链路数据传递的软件模块集成测试时容易定位错误所在的软件模块。一个软件模块的数据不一定只有另外一个模块提供,即软件模块的数据链路不一定只是单链路的,测试时可以把复杂链路结构的数据传递划分为单链路结构数据传送进行错误定位。修改输出数据的软件模块时,可能导致输入数据的软件模块引入新的错误,因此在这里引入关联矩阵确定修改某一模块后需要重要测试的模块。
假定模块化设计的嵌入式系统软件由软件模块Ai(i=1,2,…,m,n)组成,m表示矩阵的行号,n表示矩阵
《基于模块化设计的嵌入式软件测试方法(第2页)》