面向分布式安全苛刻软件自动化测试系统研究
2012-07-04张维利
刘 捷,张维利
(电子科学研究院 软件室,北京 100041)
1 研究背景
近年来,软件规模不断扩大,复杂度不断增加,软件质量和可靠性备受国内外学者关注[1]。目前,软件测试技术是保证软件质量的最直接、最有效的手段。但是对于一些航天控制软件、大型武器装备软件等安全苛刻软件,由于其代码量通常为百万行数量级,系统功能非常复杂,因此测试用例数量庞大,只依靠人工测试会耗费太多的人力和物力。因此,迫切需要引入自动化测试技术,提高测试效率,缩短回归测试时间。
大型安全苛刻软件一般具有两个方面的特性:分布式与异质异构。首先,安全苛刻软件面对复杂的装备型号任务,需要综合多个功能子系统形成分布式系统结构,各子系统间通过有线、无线网络互联,依靠统一的报文格式实现信息互通。其次,由于各子系统实现目标功能不同,因此,子系统内部组织形式多样,从硬件平台方面,可以基于X86、PowerPC或者Spark等不同处理器或板卡结构,从软件平台而言,又常见构造于Windows和Linux之上。本文依据某安全苛刻软件,对软件功能加以抽象与提升,给出面向分布式安全苛刻软件的自动化测试系统的设计依据、工作流程与体系结构。
2 自动化测试系统设计
安全苛刻软件研发周期长且功能模块构成复杂,因此,面向其的自动化测试系统设计应注重两个基本方面[2]:
1)设计能够反映某安全苛刻系统测试领域需求的测试流程,对测试流程的各个环节进行分析,将其设计成自动化执行的软件过程,并通过过程的组合实现某安全苛刻系统的自动化测试。
2)自动化测试系统具备良好的可扩展性和可维护性。考虑到某安全苛刻软件的复杂性以及扩展应用到其他相关系统中,自动化测试系统设计必须具备一定的可扩展性以灵活应对业务逻辑的变化。
基于上述目标,可以归纳出如下四条基本设计思想:
1)模块化和层次化设计思想相结合
软件系统的发展实践证明,模块化的分层设计[4]是提高系统可用性、可扩展性和可维护性的主要途径。分层模型设计将软件系统划分为若干个相互独立的层次进行描述,各层之间通过设计好的接口通讯。每层负责一个功能模块,此功能模块可以又包含若干粒度更小的功能模块,这些功能模块各自负责一个功能。分层设计方法可考虑面向过程、面向对象和面向组件的分层设计方法[5]。
2)平衡系统功能的可扩展性与设计复杂性
由于不同被测系统、同一被测系统的不同分系统,其测试流程、测试数据和测试规范均有不同,自动化测试系统必须能够快速的对系统应用进行原有功能的修改或者扩展新的功能,因此本系统的设计必须具有一定的灵活性和前瞻性。针对此设计需求,要仔细进行接口设计并参考已有的各种设计模式。
3)界面设计的基本原则
交互界面的设计,直接关系到操作的友好度和软件的易用性。并且测试准备人员一般具有较高的被测系统测试知识技能,但计算机知识相对薄弱。因此,自动化测试系统的界面设计必须直观、友好和易于使用。最后,界面操作的响应时间必须在用户的容忍范围内,如果操作时间无法缩短,则应给出提示信息。
4)安全保障原则
由于安全苛刻系统测试环境的领域特殊性,因此系统的安全可靠运行的重要性极高。要考虑采用何种设计以保证数据的完整性和一致性,即在测试程序编辑时,根据用户角色给与不同的权限,并且据此约束用户行为,以避免误操作等导致严重后果。
3 自动化测试流程
自动化测试的总体流程分为四个子流程:权限认证,测试准备,测试执行以及结果分析,主流程如图1所示。
图1 自动化测试流程图
用户权限认证可以确保当前使用软件的用户具有相应的操作权限,系统对用户权限有严格的管理,对用户权限的操作进行访问控制。测试准备流程为自动化测试执行准备测试任务,测试任务是自动化测试执行过程所必须的测试资源,是自动化测试执行的数据基础。测试准备流程属于自动化测试流程,是自动化测试流程的最初阶段,进行自动化测试的执行准备相关的数据以及相关的配置。测试执行流程为自动化测试流程的核心阶段,该流程必须与被测环境进行交互实现自动化测试执行,而其他流程往往可以独立于被测环境而进行。首先在测试执行开始之后,进行测试任务的封装和发布过程,同时进行测试环境的监控过程,发现测试执行异常以及出错之后进行异常处理过程,然后继续执行剩余的用例,当测试任务包含的所有用例执行完毕之后测试执行流程结束。
结果分析流程将对此测试结果信息进行解析处理形成用户易于理解的测试结果信息。同时展示的信息还包括测试异常出错信息等。
4 系统体系结构
自动化测试系统是一个面向信息和数据驱动的测试系统[6]。根据分布式软件自动化测试基本原理,设计了自动化测试系统的系统结构。该系统结构与基本原理中测试过程的三个阶段相符合。下面将详细的介绍系统体系结构和功能,自动化测试系统结构如图2所示。
测试数据准备模块对应测试任务准备过程,它由测试数据库和测试任务准备单元组成,其中测试数据库包括测试脚本库、测试用例库、测试任务库、测试文档库、测试结果库和测试对象库等相关内容。
测试执行控制模块对应测试任务执行过程,包括测试过程监控单元、测试执行控制单元以及测试异常处理单元。测试过程监控单元负责在测试任务执行时对整个测试环境进行监控,通过操作日志记录本记录分布式测试框架系统的详细操作过程,生成操作留痕记录;测试异常处理单元将测试过程中异常信息进行回收并根据不同的策略进行恢复处理。
测试结果评估模块对应测试结果评估过程,它包括结果处理单元、结果统计单元和测试评估单元。
测试中间件分别与测试数据准备模块、测试执行控制模块和测试结果评估模块相连接,为整个测试系统提供基础的服务支持。基础服务包括时间服务、文件服务、进程服务、异常服务、消息通信服务、环境检测服务以及测试监控服务,这些服务均通过统一的测试中间件API接口提供本地和远程无差别访问,以适应分布式系统的特点。
5 结束语
本文面向航天器或大型武器装备所用的安全苛刻软件软件的自动化测试问题,从一般意义上给出了自动化测试系统的实现目标、依据与基本流程,并提出了一套分布式自动化测试架构。基于本架构,作者已经完成了某安全苛刻软件的自动化测试工作。本领域内,未来关注的目标是测试过程的实时性与时序性问题,同时,利用机器学习方法对测试结果的深度分析也是值得研究的内容。
图2 自动化测试系统结构图
[1] Glenford J.Myers.The Art of Software Testing (Second Edition)[M].Canada: John Wiley & Sons,Inc.2004, June.
[2] 张斌.精通QTP与自动化测试框架设计实践[M].北京: 人民邮电出版社.2010.
[3] 金大海, 宫云战.数据驱动自动化测试方法研究[J].装甲兵工程学院学报, 2004, 18(2): 95-97.
[4] 李玮.软件自动化测试混合框架的研究与实现[D].北京交通大学, 2007.
[5] 孙秋冬.软件系统的分层设计[J].计算机工程与应用,2001, V37(7): 110-112.
[6] 顾庆, 陈道蓄, 等.一个面向分布式程序的测试系统框架[J].软件学报, 2000, 11(8): 1053-1059.