高质量嵌入式系统开发的集成测试技术(2)

发表于:2011-10-21来源:未知作者:领测软件测试网采编点击数: 标签:嵌入式; 集成测试
测试仪器与源代码调试器相似 由于UML模型表示的是完整的可执行系统模型,因而可自动转换成实现。对模型应用一套转换法则,其情况与编译器转换高级

  测试仪器与源代码调试器相似

  由于UML模型表示的是完整的可执行系统模型,因而可自动转换成实现。对模型应用一套转换法则,其情况与编译器转换高级编程语言相似。

  语言编译器和模型编译器的相似之处在于:模型编译器可在所生成的代码中加入测试仪器代码,正如语言编译器可以为可执行程序加入符号表和调试信息一样。为两种编译器加入测试仪器可以使开发者在开发的同一抽象级进行测试和调试。高级语言的开发人员大都不愿在调试应用程序时查看汇编或机器代码。类似地,对于UML模型,开发者也希望在模型的较高抽象级进行调试,而不愿调试实现代码。

  除程序代码外,转换方法还要利用UML模型信息来生成代码,以支持测试。测试仪器代码并未给软件增加额外的功能,只是提高了可测试性。测试仪器只提供对测试的支持,但在软件正常运行时却不能使用。

  由于模型转换期间加入的测试仪器仅遵循UML模型执行语义,因而它可提供适用于任何应用的通用测试工具。可以在编译时将测试仪器分离出来,也可以在没有测试仪器的情况下重新生成代码,情况与编译器处理调试信息类似。

  在人工实现的系统中,所需的测试仪器级别依赖于应用的复杂度、测试方法、目标环境、可用内存和其它工具的支持,以及可用的时间等。因此,必须权衡这些因素以按期推出高质量的产品。在UML模型中,必须识别重要的数据值、属性、输入和控制点。对每一项都应加入相应的测试仪器访问接口。下文将叙述如何利用转换方法添加测试仪器,其原理对手工实现同样适用。

  使用测试仪器的应用结构

  UML测试结构分成两个部分,即动态验证用户接口(DVUI)和测试仪器代理程序。DVUI负责为用户显示信息并接受用户命令,可由自动化批接口(batch interface)代替。

  测试仪器代理程序是应用系统和DVUI之间的接口。代理程序和DVUI间的通讯机制可能是任何协议,如TCP/IP、RS-232等。代理程序通过所生成的测试仪器代码汇集信息和通信。它与测试仪器相连,以设置和获取实例数据,并支持DVUI关于中断和踪迹点的通知。它还与事件处理相连,可提供执行控制、系统激励、中断点和步进等功能。

  数据测试仪器代码是在转换过程添加到应用系统的,用以监视和更新目标实例的数量、属性值、事件队列数量、事件数据项值和服务参数。

  数据访问

  在集成测试和调试期间,评价系统状态是一个重要步骤。由于系统状态分布在很多类实例中,DVUI应能获取系统的所有实例及属性值。

  比较直接的方法是列出系统中实例的清单。每个类必须包括一些结构来保存该类的实例,通常是链接清单。在构造器(constructor)内,新的实例加入清单,而在解构器(destructor)内,实例则从清单中删除。

  为了查看实例的状态,实例还可支持ASCII串行化,与“Java toString()”方法类似。“toString()”方法将每一实例的属性值和与之有关的实例放入字串中。然后,字串就由应用的代理程序传送至DVUI进行显示。为了设置实例的数据,还要支持“fromString()”方法以打开数据并正确地进行转换为属性赋值。

  实例状态机的状态在调试过程中也应引起注意,因为它代表了系统控制流程的一个方面。由于它可影响实例对事件的响应,所以很特殊。将状态机的当前状态与其它类属性分开也很有用。

  动态行为

  在系统执行过程中进行着很多活动:生成和删除实例并交换事件;生成和删除关联;调用域服务;设置并触发定时器。所有这些活动都应在集成测试中注意。根据实现的不同,每个活动都会触发交互的中断点或踪迹输出。

  DVUI应能将中断状态发送给代理程序。中断可让DVUI在执行过程中交互式地浏览该点的系统状态,并在必要时调整实例和属性。踪迹点也可由DVUI设置。在踪迹点,描述触发活动的信息传送给DVUI并存在日志文件中。踪迹点是在高层追踪系统执行情况的好方法。它们甚至可以后处理,以生成描述执行情境的序列图,也可用于回归测试

  中断和踪迹点控制可以通过发布-订阅模式实现。代理程序可支持所有类型的应用执行活动的注册。DVUI可以订阅这些活动,如某一特定实例的生成或状态机变换的初始化。当活动发生时,应用代码内的测试仪器通知代理程序,代理程序再通知订阅者执行相应的动作、中断或踪迹。

  用通信状态机建模的系统实现包含一个事件队列,由对象从域外发送的事件放在队列中。事件环不断执行,将下一事件拉出队列,并传送至执行特定行为的目的实例。采用这一实现方法,事件环成为监控系统执行的中枢。

  在事件环内加入测试仪器接口可监视经过的事件并查出接收实例应执行的下一状态。这些状态可与DVUI设置的中断和踪迹点状态相比较。

  事件环中的测试仪器还应支持单事件步进模式。在这种模式下,DVUI命令应用执行一个动作,并在下一动作之前停止。

  如果用分析级的执行语句描述UML模型动作和服务,可以用相似的方法编写代码,将分步执行事件扩展成分步执行语句。每一句执行语句跟随一条测试仪器指令,记录行数和局域变量值。当然,如果用手工操作将非常费时费力,但是通过转换则很容易实现。

  测试的执行

  这一部分将阐述在应用中使用测试仪器使测试和故障隔离更简单的不同方法。

  a. 初始化

  可以使用测试仪器将系统设置到已知的初始状态。用代理程序生成和初始化类实例,测试案例可以直接设置状态。这样就不必使用一个输入序列使它达到某种难以到达的状态,从而简化了这种状态下的测试。实例数据越过通信信道串行输入至代理程序,在这里生成新实例并将其初始化。

  软复位功能还可使系统清零、用其它初始状态重新初始化,或运行其它测试案例。

  b. 激励

  激励通过测试仪器代理程序从DVUI施加到系统。事件可由DVUI初始化并通过测试仪器代理程序和事件队列传送到目标实例,此外,还要派生出事件和数据的一个编码方案。通过一些额外的编码,域服务还可以作为系统激励调用。这一机制与CORBA和RPC在跨越进程调用函数时所用的参数编码相似。

原文转自:http://www.ltesting.net