基于遗传算法的软件测试用例自动生成研究
2018-09-20刘东旭吴昊
刘东旭 吴昊
摘要:测试用例由测试输入数据以及与之对应的输出结果组成,测试用例设计的好坏直接决定了测试的效果和结果,所以说在软件测试活动中最关键的步骤就是设计有效的测试用例。文章阐述了一种寻优搜索算法来自动生成软件测试用例数据,即遗传算法,利用遗传算法原理的模型图结合测试用例设计需求,介绍了遗传算法自动生成测试用例数据的思想和步骤,并在此基础上研究了基于遗传算法在测试用例自动生成上的技术。利用此方法产生的测试用例数据可以产生较好的测试结果。
关键词:软件测试;测试用例;遗传算法
1 遗传算法概述
遗传算法(Genetic Algorithm,GA)是在20世纪70年代由美国科学家提出的,是模拟自然界的生物物种的进化和遗传机制原理用来寻找最优解的自组织、自适应搜索算法。软件测试与软件质量是成正比的关系。测试工作的质量决定了软件的质量,而测试用例的优劣又决定了测试工作的质量,人工的用例设计耗时耗力且存在主官片面性,因此,要设计出最优最少的用例找出软件中尽可能多的缺陷是测试人员需要解决的问题。本文在阐述了软件测试的特点及测试用例设计之后,结合软件测试与遗传算法各自的特点,分析利用遗传算法自动生成软件测试用例数据的应用,研究用于软件测试用例数据自动生成的遗传算法。
2 软件测试及测试用例设计
软件测试是由测试人员获取需求规格说明书,设计文档及源程序清单等资料,结合测试用例设计方法有针对性地设计出大量的测试用例,测试用例执行人员执行设计出的用例找出软件中存在的问题[2]。因此软件测试的目的找出程序在设计过程中的问题(或者叫缺陷)。所以软件测试是在软件开发整个周期中找出软件中存在的缺陷,而并不是为了验证软件的正确。软件测试团队在进行测试时主要包括以下几个步骤。
(1)编写软件测试计划方案;(2)利用常用的测试用例设计方法编写测试用例;(3)测试人员逐条执行用例,如找出缺陷,标记并提交;(4)测试人员追踪缺陷状态,进行回归测试;(5)编写本次测试总结报告。
测试用例是测试人员在测试过程中执行的最小的一个单位,是由输入的数据值、测试执行的条件和步骤以及对应的预期输出的数据值3部分构成[3]。一个测试用例的好坏,不能体现整个测试用例集的优劣。所以测试用例集的设计对
测试人员有着很高的要求,不仅能找出潜在的缺陷,还能节省软件开发的成本。
测试用例在设计过程中的输入数据值的范围很广,如有一个程序F,有两个输入量X,Y,一个输出量Z,在字长为64位的计算机上运行。若X,Y取整数,按用例设计方法可设计出:264×264=2 128条测试用例。这是一个非常庞大的数据,在实际的测试中这种数据量的测试是不可行的,因此穷举法在测试中是不能实现的,我们需要在大量的数据中选择一些具有代表性的值作为测试用例。这要求在测试人员在设计测试用例时利用一些方法并考虑到额外的一些因素。测试方法主要包括两大类:黑盒测试法主要着重与功能和特性,白盒测试法主要着重与程序的逻辑结构。黑盒测试和白盒测试主要方法如表1所示。
3 遗传算法生成测试用例的系统模型
遗传算法作为一种在大量数据中寻优的搜索算法,它是在大量搜索数据中随机选取数据,按照一定的评价函数对搜索出的每个数据进行评估,并对遗传算子进行优化,直到找出最合理最优的数据值,利用遗传算法原理自动生成测试用例数据的系统模型如图1所示。从图1中我们可看出其由两大块组成:(1)遗传算法设计与执行模块;(2)数据个体评优模块。其中遗传算法设计与执行模块是用例生成的核心算法,第一步给定初始数据值,随机初始化第一代种群,第二步按照设计好的编码规则将初始化的数据值转换成驱动程序的实参值,通过参数传递给被测程序的形参,运行被测程序。而个体评价部分主要是在被测程序中插入评价函数,产生相应的函数值传递给遗传算法。利用个体评优模块的评价函数对遗传算法设计与执行模块产生的大量数据值优胜劣汰,再结合遗传算子的选择、交叉、突变操作改变个体数据值的结构,形成更优一代的种群,反复循环,直至找出测试用例需求数据的最优解[4]。
4 遗传算法在软件测试用例生成中的应用研究
软件测试过程中测试用例的设计起着至关重要的作用,人工设计软件测试用例是不可或缺的,但是庞大的数据量让人工设计测试用例举步维艰,因此自动化生成测试用例是测试人员设计用例的未来发展方向。测试用例数据自动生成大大缩短软件开发的生命周期、提高了软件测试的效率。测试用例数据的自动生成就是在大量数据值的范围中,利用设计好的算法规则选出一些具有代表性的数据成为用例的输入值。而遗传算法又作为一种寻找最优解的搜索算法,因此将遗传算法融入测试用例设计中去,很大程度上优化了测试用例的数据值,提高了测试用例的质量。
4.1 遗传算法生成測试数据的思想
遗传算法是一种高效的自动寻优搜索算法,对繁冗的软件测试用例自动生成具有指导性作用。利用遗传算法的原理
得出一组最优的测试用例数据集,在每一次种群迭代过程中,不断生成新的群体,并继续自动生成测试用例传递给被测试程序执行,测试人员在每一次对被测程序执行测试之后都将记录执行路径追踪测试数据,并形成一个日志文件,以路径覆盖度的最大化作为评价函数的评价标准,得出新一代的群体;经过多次迭代,使用遗传和变异的方式更新种群中的个体,当算法达到之前设定的循环结束条件或者产生出最优最适合的测试用例集。软件测试过程中,利用遗传算法搜索最优解的特点,自动生成数值型测试用例数据,产生测试用例集。使用遗传算法自动生成软件测试用例数据的思想是:(1)数据值输入问题转化为数据值优化问题;(2)设计出合理有效的评价函数,评价生成数据值的优劣。
4.2 利用遗传算法生成软件测试用例数据
(1)将程序的输入数据问题转换为遗传算法可处理的问题,对程序的输入值f1(x1,x2,x3,x4,…..xn_),进行编码,一般可利用二进制编码形式,编码后数据值为f1(y1,y2,y3,y4,…..yn_)每个数据均视为一个个体,利用随机函数生成初始化种群。
(2)配置好被测程序的驱动程序一个driver()和粧程序若干program1(),program2(),program3()…以及之间的接口问题。
(3)结合具体的程序要求和测试要求,设计出一个软件失效模型,给出相应的评价体系函数F(x)执行测试用例数据输入操作,根据被测程序的返回数据值,对比软件失效模型的数据值F=F[f1(y1,y2,y3,y4,…..yn_), f2(y1,y2,y3,y4,…..yn_),…fn(y1,y2,y3,y4,…..yn_)],评价测试用例数据的优劣。所谓的软件实现模型亦即评价函数或适应度函数。
(4)根据软件失效模型的数据值对每个输入值的个体利用遗传算子进行选择、交叉和变异操作,形成新一代的种群。
(5)重复(2)—(4),利用遗传算法直至找出测试用例数据的最优解或依据程序规则设置合适的终止条件。如可定义一个整型变量count。测试用例输入值每输入一次count++。当count值达到设定的范围时,终止此次算法。依据评价函数的数据值和实际数据值比较形成测试用例数据值。
5 结语
利用算法为软件测试生成高效率的测试用例是测试人员必须面临和急需解决的问题。而遗传算法由于其本身强大的全局搜索能力和鲁棒性,因而能够很好地应用于测试用例数据的自动化生成中[1]。
本文主要阐述了目前测试用例数据自动生成技术的普遍性和重要性,软件测试的目的和测试用例设计的主要方法,并利用遗传算法建立了测试用例自动生成的系统模型,介绍了遗传算法生成测试用例数据的思想以及利用遗传算法自動生成测试用例数据的算法步骤[5]。综上所述,遗传算法在生成数据时受到适应性函数的制约,由此产生的数据值既高效又具有代表性。因此,结合遗传算法自动生成测试用例,它不仅能保证高质量的测试用例数据,而且还在很大程度上缩短了开发周期,提高了软件质量降低软件使用过程中受到的风险。
[参考文献]
[1]姚尧.一种基于遗传算法的软件测试用例生成新方法[J].计算机与数字工程,2009(1):18-21.
[2]陈明.软件工程实用教程[M].北京:清华大学出版社,2005.
[3]易禹,廖年冬.软件测试简明教程[M].武汉:武汉大学出版社,2012.
[4]彭稷栋.基于改进遗传算法的测试用例自动生成应用研究[D].南昌:江西理工大学,2012.
[5]李柱.基于自适应遗传算法的软件测试用例自动生成[J].计算机系统应用,2016(1):192-196.