嵌入式软件的覆盖测试
时间:09-05
来源:互联网
点击:
1 概述
软件测试是很广的概念。从其贯穿软件生命周期全过程来看,测试可分为模块测试、集成测试、系统测试等阶段。测试还可分为静态检查和动态运行测试两大类。在动态运行测试中,又可有基于程序结构的白盒测试(或称为覆盖测试)和基于功能的黑盒测试。测试不仅关注程序的功能,还有性有测试、强度测试等等。
要达到比较好的测试效果,除了要有周全的测试计划、可控的测试过程、测试人员丰富的经验外,还需要借助一些行之有效的辅助工具,尤其在当今软件规模日益庞大、测试工作量成倍增加的情况下。对应上述的测试分类情况,测试工具可划分为:支持对程序源代码进行静态规则检查和质量评估的静态分析工具、支持对程序单元进行动态覆盖测试的工具、对软件系统的整体运行性能进行测试的工具。另外,还有一些特殊用途的或专用工具,如协议测试仪、内存检测工具等。这些工具都有较为成熟的商业化产品,也可通过自行开发的方式获得。
本文具体讨论了对一类特殊的系统软件——嵌入式实时操作系统——进行覆盖测试的情况。内容涉及对这类软件特性的研究、测试的难点和特点、对现有测试工具的适应性改造和测试实例说明。
2 软件覆盖测试
覆盖是一种白盒测试方法,测试人员必须拥有程序的规格说明和程序清单,以程序的内部结构为基础,来设计测试案例。其基本准则是则测试案例来尽可能多地覆盖程序的内部逻辑结构,发现其中的错误和问题。所以,覆盖测试一般应用在软件测试的早期,即单元测试阶段。
从以上简要介绍可看出,这几种覆盖策略的严格程序有如下趋势:其它一些覆盖策略还包括:修改的条件/判断覆盖(通常简称为MCDC)、路径覆盖、函数覆盖、调用覆盖、线性代码顺序和跳转覆盖、数据流覆盖、目标代码分支覆盖、循环覆盖、关系操作符覆盖等。随着软件规模的增长,实现全面的覆盖所需的测试案例的数目也越来越庞大,因此根据被测软件对象的特点选择适当的覆盖策略是非常重要的;同时,要确定合理测试目标,达到100%的覆盖往往要付出很大的代价,应该同形式化评审等方法结合,以发现更多的软件故障。
3 覆盖测试工具
要取得较好的覆盖测试效果,需要借助一定的工具软件。这些工具软件一般具备如下的功能特点,可弥补人为测试的缺陷:
①分析软件内部结构,帮助制定覆盖策略及设计测试案例;
②与适当的编译器结合,对被测软件实施自动插装,以便在其运行过程中生成覆盖信息并收集这些信息;
③根据搜集的覆盖信息计算覆盖率,帮助测试人员找到未被覆盖的软件部位,以改进测试案例提高覆盖率。
在利用工具进行动态覆盖测试时,需要3个要素:测试用例、插装过的被测代码、搜集覆盖信息并进行分析的工具本身。代码插装由工具自动完成,通过执行测试用例,再由工具搜集覆盖信息并进行分析,就可以看到覆盖率指标了。
4 嵌入式软件的覆盖测试原理
嵌入式软件的开发与通用软件很大的不同点在于,需要采用交叉开发的方式:开发工具运行在软硬件配置丰富的宿主机上,而嵌入式应用程序运行在软硬件资源相对缺乏的目标机上。对于这类软件的测试也存在着同样的问题:测试工具运行在宿主机上,测试所需要的信息在目标机上产生,并通过一定的物理/逻辑连接传输到缩主机上,由测试工具接收。因此,嵌入式软件测试的一个重要问题是建立宿主机与目标机之间的物理/逻辑连接,解决数据信息的传输问题。
在目标机方,插装过的被测应用程序将覆盖信息发送到消息队列中,一个专门的任务负责在适当的时候将这些信息发送到宿主机方。缩主机方有专门的模块负责接收覆盖信息。并交给分析工具分析和在线动态显示覆盖率的增长情况。
支持嵌入式软件覆盖测试的工具应解决如下2方面的关键问题:
*与嵌入式操作系统的结合覆盖测试工具与嵌入式操作系统的结合体现在3方面。首先,在目标机方,应用任务与专门负责收集/上传覆盖信息的任务是通过消息队列来传递数据的,该消息队列可使用嵌入式操作系统的相应机制实现。其次,这个专门任务也可以被看作一个特殊的应用任务,也必须有嵌入式操作系统的支持,因为任务管理是后者的基本功能之一。最后,目标机与宿主机之间的通信可以采用串口或以太网方式,对串口的驱动或网络协议均可使用嵌入式操作系统的相应程序组件。
*与其它嵌入式交叉开发工具的关系
嵌入式应用程序的开发通常采用交叉开发方式,几乎所有的开发工具均要解决3部分的问题:宿主机部分的功能、目标机部分的功能、宿主机与目标机的连接问题。其中,宿主机与目标机的连接是个瓶颈,如果不同的工具要使用同一物理线路实现数据传输,则要解决对该物理线路(或者说硬件端口)的正确共享。比如在图3所示的环境中,宿主机方的各种工具通过统一的接口——目标服务器(target server)实现对通信线路的访问,目标机方的调试代理(debug agent)则是各种信息(调试信息、覆盖信息、时间信息、对象信息等)的收集与传递的核心。
软件测试是很广的概念。从其贯穿软件生命周期全过程来看,测试可分为模块测试、集成测试、系统测试等阶段。测试还可分为静态检查和动态运行测试两大类。在动态运行测试中,又可有基于程序结构的白盒测试(或称为覆盖测试)和基于功能的黑盒测试。测试不仅关注程序的功能,还有性有测试、强度测试等等。
要达到比较好的测试效果,除了要有周全的测试计划、可控的测试过程、测试人员丰富的经验外,还需要借助一些行之有效的辅助工具,尤其在当今软件规模日益庞大、测试工作量成倍增加的情况下。对应上述的测试分类情况,测试工具可划分为:支持对程序源代码进行静态规则检查和质量评估的静态分析工具、支持对程序单元进行动态覆盖测试的工具、对软件系统的整体运行性能进行测试的工具。另外,还有一些特殊用途的或专用工具,如协议测试仪、内存检测工具等。这些工具都有较为成熟的商业化产品,也可通过自行开发的方式获得。
本文具体讨论了对一类特殊的系统软件——嵌入式实时操作系统——进行覆盖测试的情况。内容涉及对这类软件特性的研究、测试的难点和特点、对现有测试工具的适应性改造和测试实例说明。
2 软件覆盖测试
覆盖是一种白盒测试方法,测试人员必须拥有程序的规格说明和程序清单,以程序的内部结构为基础,来设计测试案例。其基本准则是则测试案例来尽可能多地覆盖程序的内部逻辑结构,发现其中的错误和问题。所以,覆盖测试一般应用在软件测试的早期,即单元测试阶段。
覆盖的几种方法或策略如表1所列。
从以上简要介绍可看出,这几种覆盖策略的严格程序有如下趋势:其它一些覆盖策略还包括:修改的条件/判断覆盖(通常简称为MCDC)、路径覆盖、函数覆盖、调用覆盖、线性代码顺序和跳转覆盖、数据流覆盖、目标代码分支覆盖、循环覆盖、关系操作符覆盖等。随着软件规模的增长,实现全面的覆盖所需的测试案例的数目也越来越庞大,因此根据被测软件对象的特点选择适当的覆盖策略是非常重要的;同时,要确定合理测试目标,达到100%的覆盖往往要付出很大的代价,应该同形式化评审等方法结合,以发现更多的软件故障。
3 覆盖测试工具
要取得较好的覆盖测试效果,需要借助一定的工具软件。这些工具软件一般具备如下的功能特点,可弥补人为测试的缺陷:
①分析软件内部结构,帮助制定覆盖策略及设计测试案例;
②与适当的编译器结合,对被测软件实施自动插装,以便在其运行过程中生成覆盖信息并收集这些信息;
③根据搜集的覆盖信息计算覆盖率,帮助测试人员找到未被覆盖的软件部位,以改进测试案例提高覆盖率。
在利用工具进行动态覆盖测试时,需要3个要素:测试用例、插装过的被测代码、搜集覆盖信息并进行分析的工具本身。代码插装由工具自动完成,通过执行测试用例,再由工具搜集覆盖信息并进行分析,就可以看到覆盖率指标了。
4 嵌入式软件的覆盖测试原理
嵌入式软件的开发与通用软件很大的不同点在于,需要采用交叉开发的方式:开发工具运行在软硬件配置丰富的宿主机上,而嵌入式应用程序运行在软硬件资源相对缺乏的目标机上。对于这类软件的测试也存在着同样的问题:测试工具运行在宿主机上,测试所需要的信息在目标机上产生,并通过一定的物理/逻辑连接传输到缩主机上,由测试工具接收。因此,嵌入式软件测试的一个重要问题是建立宿主机与目标机之间的物理/逻辑连接,解决数据信息的传输问题。
在目标机方,插装过的被测应用程序将覆盖信息发送到消息队列中,一个专门的任务负责在适当的时候将这些信息发送到宿主机方。缩主机方有专门的模块负责接收覆盖信息。并交给分析工具分析和在线动态显示覆盖率的增长情况。
支持嵌入式软件覆盖测试的工具应解决如下2方面的关键问题:
*与嵌入式操作系统的结合覆盖测试工具与嵌入式操作系统的结合体现在3方面。首先,在目标机方,应用任务与专门负责收集/上传覆盖信息的任务是通过消息队列来传递数据的,该消息队列可使用嵌入式操作系统的相应机制实现。其次,这个专门任务也可以被看作一个特殊的应用任务,也必须有嵌入式操作系统的支持,因为任务管理是后者的基本功能之一。最后,目标机与宿主机之间的通信可以采用串口或以太网方式,对串口的驱动或网络协议均可使用嵌入式操作系统的相应程序组件。
*与其它嵌入式交叉开发工具的关系
嵌入式应用程序的开发通常采用交叉开发方式,几乎所有的开发工具均要解决3部分的问题:宿主机部分的功能、目标机部分的功能、宿主机与目标机的连接问题。其中,宿主机与目标机的连接是个瓶颈,如果不同的工具要使用同一物理线路实现数据传输,则要解决对该物理线路(或者说硬件端口)的正确共享。比如在图3所示的环境中,宿主机方的各种工具通过统一的接口——目标服务器(target server)实现对通信线路的访问,目标机方的调试代理(debug agent)则是各种信息(调试信息、覆盖信息、时间信息、对象信息等)的收集与传递的核心。
- 在嵌入式多核集群中利用OCP处理高速缓冲器一致流量(07-20)
- 嵌入式智能设备的测试方法研究(11-29)
- 基于ARM的信号发生器人机交互系统设计(01-23)
- 采用C8051F020设计的嵌入式测试仪(01-17)
- 关于嵌入式智能设备的测试方法的研究(01-28)
- 基于μC/OS-II的电力参数监测仪设计(02-23)