数据库访问控制软件的自动化测试研究
2015年6月29日 17:33 作者:钟芳凌 电子科学研究院 北京石景山 10钟芳凌 电子科学研究院 北京石景山 100041
【文章摘要】
配置项测试在提高军用软件质量上起着重要作用。在测试任务中,数据库访问控制软件的自动化测试工作能为测试人员提供极大的方便。本文在分析了该软件的功能需求特点后,介绍了自动化测试用例设计的思路,并阐述了针对该软件的自动化测试策略,接下来描述了数据库访问控制软件的自动化测试程序的框架构成。通过实践证明该程序能够完成数据库访问控制软件的自动化测试,有效地提高测试效率。
【关键词】
自动化测试; 测试用例; 测试策略; 测试框架
0 引言
综合数据库访问控制软件是战术数据处理系统的一个软件配置项,为其他软件配置项提供统一访问数据库的接口,它与各个软件配置项关系紧密,负责实现各个配置项中数据的存储,检索,数据的关联关系,合法性保护等功能。作为一个重要支撑软件,对它功能的正确性和完备性提出了很高的要求。为了测试该软件是否满足任务要求,必须对它进行详细的功能测试。在文献[1] 中也提到,军事电子信息系统具有体系复杂、处理数据量大、人机交互频繁、评估结果直观等特点。
自动化测试的主要任务就是把以人为驱动的测试行为转化为能够自动执行的机器的行为。引入自动化测试就是为了节约这个过程中耗费的人力时间和硬件资源,提高测试的效率。软件的自动化测试是一种高效的软件质量保证技术。软件测试工程师通过执行特定的测试用例,并将得到的结果与预期相比较,再进行分析后就可以发现软件是否存在漏洞。自动化测试将测试用例重复使用,严格执行用例步骤并提供良好的新功能扩展,保障整个测试过程的严密性、科学性、可继续性。
软件的自动软件的自动化测试除了可以代替执行大量重复的测试命令以外,还有以下几个特点:(1)对程序的回归测试更方便;(2)大量的繁琐的测试执行;(3)可以执行一些手工测试困难或不可能进行的测试;(4)更好地利用资源;(5) 测试的复用性;(6)增加软件信用度;(7) 提高测试的覆盖率。如果采用自动化测试无论是用单元测试工具或者使用自己编写的脚本,都可以在比较短的时间内完成。对于一些要反复执行的有着上千个测试用例的操作,利用自动化测试都可以很快的在规定时间内完成。所以自动化测试不仅在时间上面大大缩短软件的测试周期,还可以在成本方面节约人力资源。文献[5] 描述了软件测试的基本原理和方法, 以及软件自动化测试的一般过程。
由于综合数据库访问控制软件主要功能是为系统其它配置项提供统一访问数据库的接口,测试量比较大, 测试用例需要涵盖的内容也多, 人工测试的效率难以满足要求, 因此采用软件自动化测试技术完成。本文结合综合数据库访问控制软件测试任务, 重点分析了该软件的功能需求特点, 介绍了自动化测试用例设计的思路,并阐述了针对该软件的自动化测试策略,接着描述了数据库访问控制软件的自动化测试程序的框架构成。
1 软件需求分析
为解决战术数据处理系统内配置项各自为战的数据管理局面,战术数据处理系统采用基于数据库的统一数据管理方式,负责提供统一数据库(非持久数据库、持久化数据库),并提供数据库访问控制接口软件,支撑各配置项对数据库的访问控制。同时,又保证了战术数据处理系统内数据的共享和统一处理。简化了系统的设计,增加了系统的鲁棒性。
战术数据处理系统内部各个软件单元访问数据库的方式统一采用调用综合数据库访问控制软件提供的API 方式来获取数据库内数据。综合数据库访问控制软件提供的API 接口提供对上述所说的每一类入数据库数据信息进行增、删、改、查操作。因此,综合数据库访问控制软件为应用层提供统一访问数据库接口,屏蔽底层数据库访问实现细节,为应用层提供统一、规范的数据增、删、改、查接口。
值得注意的是,对于战术数据处理系统而言,入数据库内的数据信息有多种,例如任务信息、武器挂载信息、浮标挂载信息、方案信息、目标信息等等。前文提到,综合数据库访问控制软件则是为这些数据信息提供在数据库中进行增删改查的API 接口。这些数据并不是完全相互独立的,有些数据信息之间存在着一定的联系。
例如,图1 所示为综合数据库访问控制软件中任务信息接口和武器挂载信息接口的描述,从图中可以看出任务信息接口和武器挂载信息接口均包含增、删、改、查四个函数。其中任务信息(MISSION_INFO) 包含任务ID、任务号、任务名等数据信息, 武器挂载信息包含任务名称、武器有效数目、武器结构体等数据信息,武器挂载信息中的任务名称对应了任务信息中的任务名,因此一条武器挂载信息是属于一个任务下的,不同的武器挂载信息可能属于不同的任务,也可能属于同一个任务。
2 自动化测试策略
前文提到,综合数据库访问控制软件提供的API 接口提供对每一类入数据库数据信息进行增、删、改、查操作。对该软件进行自动化测试,即测试其提供的API 接口。例如图2 中的任务信息接口, 包含四个API 接口函数:add(),update(), remove() 以及findALL()。在介绍自动化测试策略前,先介绍针对综合数据库访问控制软件的测试用例设计思路。
1) 测试用例设计思路
接口测试除了对每一个接口进行正常情况的测试外,还应对它们进行异常情况的测试。所以在验证综合数据库访问控制软件提供的API 接口是否能正确进行数据信息增、删、改、查外,还应验证给这些API 接口传入异常参数时,软件能否正确处理。具体思路可总结为如下几条:
a) 首先传入正常参数进行验证。例如对任务信息接口而言,分别给四个API 接口函数传入正确参数,通过返回值以及数
图1077
软件开发
Software Development
电子制作
据库数据显示等均可验证。
b) 针对数据库表中主键,传入异常参数进行验证。数据库的主键能唯一地标识表中的每一行,因此它的值唯一且非空。例如对于任务信息接口而言,任务名为任务信息表的主键,在验证add() 和update() 函数时,可设计传入参数中任务名为空、任务名重复。
c) 针对数据库中主键和外键,传入异常参数进行验证。数据库的主外键是依托两个表之间的关系而存在的。前文提到任务信息与武器挂载信息,一个任务下面可以有多个武器挂载。对于武器挂载信息接口而言假设任务名为外键,则在验证add() 和update() 函数时,可设计传入参数中任务名为空、任务名不存在(即在任务信息中不存在)。此外,假设一个任务下面有多个方案,而每个武器挂载信息对应着一个任务和一个方案,则还可设计传入参数中任务名与方案名不匹配。
d) 针对函数中传入的参数,传入异常数值进行验证。例如任务信息接口中的remove() 函数,参数仅为任务ID(类型为字符串),则可设计传入参数中任务ID 不存在、任务ID 为空情况。
2) 自动化测试策略
为实现对综合数据库访问控制软件的自动化测试,采用以下测试策略:
a) 首先测试查询函数。例如对任务信息接口而言,查询函数返回值为查找到的信息个数。在未向数据库添加任何任务信息时调用findALL() 函数,函数返回值应为0 ;在数据库中已有一条任务信息时调用findALL() 函数,函数返回值应为1。
b) 通过查询函数验证增加函数。例如对任务信息接口而言,增加函数返回值用于标识信息是否成功增加。调用add() 函数向数据库添加一条任务信息后,返回值应显示增加成功;接着调用findALL() 函数,遍历查询到的任务信息,与添加的任务信息数据进行对比,一致则说明add() 函数正确。
c) 通过查询函数验证修改函数。与增加函数验证方法类似,对任务信息接口而言,调用update() 函数针对数据库中的一条任务信息进行修改,返回值应显示修改成功;接着调用findALL() 函数,遍历查询到的任务信息,与修改的任务信息数据进行对比,一致则说明update() 函数正确。
d) 通过查询函数验证删除函数。例如对任务信息接口而言,删除函数返回值用于标识信息是否删除成功。调用remove() 函数删除数据库中的一条任务信息,返回值应显示删除成功;接着调用findALL() 函数,遍历查询到的任务信息,与删除的任务信息数据进行对比,没有一致情况则说明remove() 函数正确。
需要说明的是,在测试查询函数时, 需要人为在数据库中添加数据信息。另外,综合数据库访问控制软件中对于某些数据库数据信息提供增加、修改多条信息的函数,对于此类函数的测试策略与增加、修改一条信息的函数一致。
3 自动化测试框架
一个软件的所有测试脚本从层次结构上可以划分为测试支持层、测试用例层和测试控制层3 个层面。其中测试支持层脚本负责执行操作被测软件的动作, 其逻辑与被测软件的实现密切相关。测试用例层脚本负责实现一个具体的测试目标, 其逻辑与测试方法和被测软件的功能指标密切相关, 但是和被测软件功能的实现方式没有紧密的联系。测试用例层脚本通过调用测试支持层脚本完成对被测软件的一项测试。测试控制层脚本负责协调一系列相关的测试用例脚本, 完成为测试用例脚本准备数据和控制测试用例脚本执行过程的工作实现对被测软件一类功能的测试。
根据对测试脚本组织结构的分析, 我们设计了一种测试脚本框架,接下来仍以任务信息接口为例进行说明。在该脚本框架中,针对每一类数据信息接口建立一个类,图2 所示中MissTestClass 即为任务信息接口建立的类。其成员函数分为两类,一类为测试函数,一类为用例函数。
1) 首先介绍测试函数(见图2 中的AddTest ()函数),它属于测试支持层脚本: 依据前文提到的测试策略,首先调用任务信息接口的add 函数,接着调用findALL() 函数,接下来一方面通过比较查询到的任务信息与添加的任务信息是否一致,以及比较实际返回值与预期返回值是否一致来验证接口实现的正确性,生成测试结果。
2) 关于用例函数(见图2 中的AddExec()函数), 它属于测试用例层脚本:该类函数主要是负责列举所设计的相关用例,以及将用例遍历传入AddTest () 函数,将获得的测试结果写入结果文件。
3) 最后是主函数(即main() 函数),它属于测试控制层脚本,负责协调各用例的自动化执行过程:包括连接数据库,建立结果文件,通过任务信息接口类的对象调用AddExec()函数。
以此类推,对于每类每一类数据信息接口中的增、删、改、查函数编写测试函数和用例函数,最后统一通过主函数完成自动化测试。
4 总结
在“数据库访问控制软件”自动化测试工作中, 我们根据软件的自身特点采用了特定的测试策略以及测试框架, 共设计执行用例251 个,发现问题个数为25 个。利用编写的测试脚本完成一次全面的自动化测试只需要大约10min, 而使用传统的手工测试需要2d 的工作量。在后续的回归测试当中,只需根据实际情况增减用例,大大节省了时间和精力。针对不同项目而言,我们编写的测试脚本还需要进行相应的修改,所以后续可以研究设计针对不同项目中数据库访问控制软件的通用自动化测试框架。
【参考文献】
[1] 王鹏. 军事电子信息系统测试评估工具的研究与实践. 中国电子科学研究院学报,2007,2(1):73-79
[2] 宋波, 张忠能. 基于系统功能测试的软件自动化测试可行性分析. 计算机与软件,2005,12(22):31-32
[3] 陈能技. 软件自动化测试成功之道. 北京: 人民邮电出版社,2010:58-67
[4] 陆璐. 软件自动化测试技术. 北京交通大学出版社,2006:32-43
[5] 张克东. 软件工程与软件测试自动化教程[M]. 北京: 电子工业出版社, 2002
图 2 任务信息接口测试脚本的层次结构078
软件开发
Software Development