周炜 曹亮
【摘要】软件工业化生产过程中,構件复用是一条可行之路,而软件复用又以构件技术为核心,现阶段基于构件的软件开发应用越来越广泛,随之而来的问题就是构件及基于构件的软件系统测试中遇到了诸多问题。从某种程度上讲,构件质量的好坏是由其可测试性来决定的,在构件设计阶段充分考虑其可测试性,并予以完善与提高,则可进一步保证构件质量。本文主要针对嵌入式构件系统的测试进行讨论。
【关键词】嵌入式;构件系统;测试技术
一、构件系统测试的特点及分类
所谓构件是指系统中可明确辩识的成分,构件是可独立配置的单元,由于其封装十分严格,故其内部实现细节通常不为所知。构件最大的优势在于可在恰当的环境中被复用,因此也被认为是解决软件危机的重要途径。构件需要清晰的接口规范支持,以利其与环境交互。
(一)构件系统测试的特点
在构件化软件测试过程中应用传统软件测试,难免出现力不从心的问题。比如构件内部会包含状态变量,即调用一个构件接口操作需要依赖前面调用操作的历史来获得另一个结构,但构件内部实现细节不可知,故只能将其视为一个黑盒,难免用到用于功能性测试的黑盒测试。但是在这个过程中,一方面由于实际系统中功能组合过于复杂,难以实现完全的功能性测试;另一方面黑盒测试需要对构件建立测试驱动器,其代价非常之高。所以通常会用白盒测试做补充,但也会由于构件系统不可见的特性而加大白盒测试的难度。所以构件测试体现出与传统测试方法所不同的特殊性。
(二)构件测试的分类
具体而言,可以从以下几个方面对构件测试进行分析:首先,基于构件测试的内容来看,可分为构件内部实现细节测试、构件接口测试、构件组装测试等;其次,基于与受测者的关系而言,可分为构件开发者测试、构件复用者测试、第三方测试等;再次,基于测试过程采用的具体技术而言,可分为基于变异测试的方法、基于构件状态机的方法、构件的易测性设计等;最后,基于构件层次测试可分为构件单元测试、构件综合测试及系统测试等。
二、构件测试仿真平台
开发构件系统测试仿真平台,可以将嵌入式软件置于一个自动、实时的闭环测试环境中,具体而言,嵌入式构件系统仿真测试平台分层体系结构如图1所示:
图1 嵌入式构件系统测试平台分层体系结构示意图
宿主机负责测试开发环境的运行,其体现出图形化、交互式的特点,测试人员在根据具体的测试要求来设置系统相关资源,完成对被测软件的组织与输入,驱动其正常行动;并在测试过程中实时监控测试数据及其与受测软件的交互情况;完成结束后将受测软件的输出结果自动保存起来,完成一系列自动、实时的嵌入式软件闭环测试。
由上图可知,仿真测试环境中一个重要组成部分即测试开发环境,其主要作用是对目标系统交联设备进行仿真建模,以建立受测软件的设备交联环境,将受测软件真实的运行环境模拟出来,完成必要的内部数据解算,再通过各个接口与各被测单元之间进行数据交换。实时内核的主要作用就是对测试过程中产生的实时数据进行处理,对测试任务进行实时调度,并实时传递测试数据。总体上讲,测试开发环境必须包括测试文档管理、测试脚本开发环境、搭建测试面板、配置测试环境、分析测试数据及日志管理等六项功能。
三、嵌入式构件系统测试开发环境的设计
(一)创建构件系统构架模型
基于构件化的形式进行系统建模,其主要作用是分析软件的应用领域,实现其核心功能与设想的输入及输出行为的互相分离,所设计的构件模型中封装系统内核所需的所有数据及功能,并在应用构件系统的过程中加以体现。进行嵌入式构件系统测试环境的开发与设计,可获得整个嵌入式测试系统环境的构件图,而图2所示则可直观的看出构件与组件包的关系:
图2 嵌入式构件系统测试开发环境设计图
由图2可知,在搭建整个嵌入式测试系统环境过程中,共包含六个主要的构件部分,且依托于两个组件包利用预先设定的接口形式把需要测试的不同构件关联起来,使之形成一个整体,从而形成一个嵌入式的测试系统平台。上文中提到,测试开发环境必须包含六项功能,(即测试文档管理、测试脚本开发环境、搭建测试面板、配置测试环境、分析测试数据及日志管理等)。故此系统构架模型就对应包括测试文档管理、测试配置、日志管理、脚本测试、脚本开发程序组件包测试及面板组件包测试等六个构件。
其中测试文档管理构件的主要作用就是对测试环境文档进行分级处理,而测试环境文档的主要内容则包括日志文档、接口文档、测试配置文件及测试脚本文件,通过测试文档管理模块实现测试工作的组织与管理。
测试配置则是针对受测系统、测试工作的时间周期、测试过程中的输入与输出等进行配置、管理,它也是整个权件系统架构模型中比较重要的一部分。它是系统通用性及可扩展性的直接体现。
日志管理是测试过程中每项工作的记录,其主要作用是利用后台运行的监控自动捕捉测试过程中发生的所有事件,并将整个测试过程中相关测试人员在不同阶段的具体活动记录下来。
测试脚本构件主要包括测试脚本中支持的各种测试任务的链表,而测试任务主要有执行测试任务的具体时间、任务的优先等级特性、任务的周期特性、测试人员施加的测试动作序列集合等等。根据不同的测试用例要求,测试人员生成对应的测试脚本动作序列,在描述这些测试动作序列时,会由对应的处理程序对编译出来,转换为对应的测试指令,再进行实时解析即可驱动受测软件的自动化测试。
测试脚本开发程序组件包的主要目的是便于测试人员便捷的生成测试脚本,其支持文本及图形两种数据格式,并依托于测试配置构件,测试配置信息后再进行脚本测试,并对生成的测试脚本的语法进行检查。
测试面板开发程序组件包可以提供测试面板,其通过图形的方式建立,可直观的显示出数据,用户可以测试开发过程中对整个过程进行监控;并且用户还可以在测试过程中实现与受测软件的交互,比如实时添加测试命令。在测试开发环境中提供一组封装控制,用户可通过图形化配置完成测试面板的搭建,当然由于其依托于测试配置构件,故需要测试配置信息才能搭建面板。
(二)整体框架建模
对于整个测试系统而言,其框架建模过程中必须通过组件的形式完成构件运行环境与测试平台的交互,在同一个构件库中可存储所有的已开发的构件,以实现构件的统一管理。测试过程中根据实际需要搜索与测试要求相符的构件,再进行测试系统平台的构建,当然整个过程必须进行性能、安全及有效性的测试,最终确定出测试系统的理想构件。设计测试系统过程中,只需考虑构件之间的接口即可,不同的构件之间要将其业务分割平衡点定义好,从而通过高内聚、低耦合的功能构件实现嵌入式测试需求的业务构件,以适应不同嵌入式构件系统测试的要求。
四、结语
总之,随着软件工程的不断发展,会有越来越多的软件需要复用,而嵌入式构件系统的应用也会越来越广泛,而作为软件构件质量的重要保证,嵌入式构件系统测试的重要性也会越来越突出。现阶段我国对构件的可测试性的研究还处于初级阶段,后续诸如统一测试标准、提高测试性能、保证构件可靠性等问题均是需要进一步研究的发展方向。
参考文献
[1]王益,耿相铭,陈慧.嵌入式测试系统设计[J].计算机工程,2011,34(18):237-238.
[2]王轶辰,徐萍.嵌入式软件机内测试的设计与测试[J].计算机工程,2012,35(17):34-39.
[3]刘利枚.基于51系列的嵌入式软件测试系统研究与实现[D].电子科技大学,2012:4-6.
[4]范东丽.嵌入式软件测试技术的研究[D].哈尔滨工程大学,2009:39-42.
[5]傅程,宫云战,洪慧.构件可测试性模型研究与应用[J].北京化工大学学报,2013(34):98.