面向对象单元测试用例自动生成工具对比分析
来源:用户上传
作者:付玉珍
摘要:主要阐述了随机测试和搜索测试的两种单元测试用例生成技术的研究现状,通过经典测试程序,对JET、Randoop、Evosuite工具分别在分支覆盖率、产生测试用例数、所需时间三项指标进行了对比分析,总结了各自的特点及进一步的研究方向。
关键词:自动单元测试工具;Java;随机测试;搜索测试;分支覆盖
中图分类号:TP311
文献标识码:A
文章编号:1009-3044(2020)05-0053-02
开放科学(资源服务)标识码(OSID):
单元测试是为了保证软件质量而在软件开发期间执行的非常重要活动之一,它是通过输入编写好的测试用例执行被测程序,将输出结果与预期输出进行比较的测试活动。通常由于待测试程序的输入空间非常大,且软件测试活动受人力、时间等因素的影响,软件测试人员会选择测试用例生成工具自动生成具有代表性的测试用例子集进行测试。虽然很多测试用例自动生成工具只是某些步骤做到了自动,尚处于在理论研究阶段,并未使用于商业软件开发中,但众多研究人员致力于测试用例自动生成技术的研究,极大地推动了测试用例生成工具的自动化程度。本文主要对基于Java语言的开源测试用例生成工具进行阐述、介绍、对比与分析。
1 自动化单元测试用例研究现状
目前主要有基于符合执行、模型测试、组合测试、随机测试、以及搜索测试等多种方法可以根据被测程序的源代码自动生成测试用例,文章[1]对以上技术的研究现状、热点和面临的挑战进行了全面的概述。基于符号执行的主要有jCUTEc2],Symbolic PathFinder[3]等,随机测试的工具有JCrasherc4]、JTest[5]以及JET嘲等,随机测试基本无须人工参与、简单、易于实现,便于与其他技术结合和自动化程度比较高的优点。为了增强随机测试的有效性和效率,一系列自适应随机测试方法被提出:Randoopm,以及以Randoop为基础的随机测试工具GRT[8],利用静态和动态程序分析来指导运行中测试的生成的,这些自适应随机测试方法目的都是希望产生的测试用例能均匀地分布在输入区域。
基于搜索的测试用例生成则是通过定义一个捕获测试目标的适应度函数,找到满足测试目标的输入空间,将测试问题转换为一个优化问题,文献[11]对基于搜索的软件测试方面进行了系统全面的概述,目前已有PSO[12]、ACO[13]、GA[l4]、DEc15].MAc16]等算法成功运用到测试用例的生成,也有将符号执行技术集成到优化算法中,基于搜索技术的工具有Evosuite[9],JTEx-pert[10]。
2 Java单元测试用生成工具对比
JET[17]是用JML规范注释的Java类的自动化单元测试工具,采用的是一种随机测试技术;通过分别为被测试类的每个方法自动生成测试数据的集合,执行它们,并通过使用JML规范作为测试预言器来确定测试结果(即通过佚败),达到完全自动化Java类的单元测试工具,且生成的测试用例符合Junit标准,可以在Junit上直接执行。为了达到更好的测试效果,JET也允许手动添加人工设计的测试用例。
Randoop[7]则是一种面向对象的反馈式随机测试方法,它利用已经产生方法序列以及方法参数的运行结果作为反馈信息来调整后续参数的产生范围,避免了冗余和无意义的输入达到缩小了搜索空间的效果。因Randoop基于随机测试,所以无须代码插桩,无须理论证明、不受约束。实验结果表明在覆盖率和错误检测方面都优于无反馈的随机测试。
相比于无引导的随机测试,基于搜索算法的测试用例生成技术,利用复杂启发式信息来引导测试用例的产生[17]。Evosuite[9]就是基于搜索算法的测试用例生成工具,它可以使用相对较少的测试用例,获得比较高的覆盖率,同时生成的测试用例也完全符号Junit的标准。相对于其他自动化单元测试工具,因Evosuite需要重新执行测试用例,并最小化测试用例,所以需要较长的运行时间。目前Evosuite在解决复杂约束和数学问题,以及具有循环语句的覆盖问题方面能力还是有限,以及Evosuite配置相对复杂,需要较多的选项及参数设置。
3 对比实验及结果分析
3.1 比较测试实验
实验测试程序选用二叉树(BinTree)、二项堆(BinaryHeap)、、二分查找(BinarySearch)、三角形判定(Trangle)、阶乘(Factorial)、冒泡排序(BubbleSort)、四则运算(SimpleCalculate)等经典测试程序分别对JET、Randoop、Evosuite进行測试。实验运行环境为InteI(R)Core(TM)i7-4790 CPU@3.30GHz,8G内存,windows操作系统,每个函数独立运行25次,表中对每个工具取得的平均分支覆盖率、所需测试用例数、产生测试用例时间Tgen三个指标进行了对比。
3.2 实验结果分析
通过对基于lava语言的三个具有代表性的测试用例生成工具在覆盖率、产生测试用例数目、产生测试用例所需时间等指标做了对比分析。通过实验得出,JET生成效率高,时间开销小,所需运行时间最短,产生的测试用例数相对也较少,Evosu-ite拥有较少测试用例是由于它经过一个约减删除冗余测试用例的过程。同时实验将Randoop运行时间设置到60secends,但相比30seconds,并没有提高其覆盖率,从数据显示中得出Evo-suite取得了最好的覆盖率,但是所需的运行时间也相对较长,如果用于真实的复杂大型项目,Evosuite还需要提高其生成有效测试用例的速度。
4 结束语
基于随机搜索的测试用例生成技术需要结合其他技术或者利用反馈信息来提高测试效率,基于搜索的测试用例生成技术因不是所有的语句都有启发式信息可以用,所以如何更好的引导搜索方向和提高产生测试用例的效率是需要思考的问题。同时目前测试程序都是使用没有错误的小程序,且覆盖率高的测试技术并不一定在实际测试中就是高效,根据实验发现,超过50%的bug是在分支覆盖率几乎没有增加的时期内发现,所以测试用例停止标准使用分支覆盖达到一定标准或者一定时间内可能会造成bug不被发现,而实际测试技术更注重工具的错误检测能力,所以算法对程序错误检测能力也应该作为重要的考核指标。 参考文献:
[1] Anand S,Burke E K,Chen T Y,et aI.An orchestrated survey ofmethodologies for automated software test case generation[J].Journal of Systems and Software, 2013,86(8):1978-2001.
[2] Sen K,Agha G.CUTE and jCUTE: concolic unit testing and ex-plicit path model-checking tools[Ml//Computer Aided Verifica-tion. Berlin, Heidelberg: Springer Berlin Heidelberg, 2006:419-423.
[3] P5ssreanu C S,Visser W,Bushnell D,et aI.Symbolic PathFinder:integrating symbolic execution with model checking for Javabytecode analysis[Jl.Automated Software Engineering, 2013,20(3):391-425.
[4] Csallner C,Smaragdakis Y.JCrasher: an automatic robustnesstester for Java[J]. Software: Practice and Experience, 2004, 34(11):1025-1050.
[5] Parasoft Corporation, Automatic Java software and componenttesting: Using Jtest to automate unit testing and coding stan-dard enforcement[EB/OL].2007.1 http://www.parasoft.com
[6] Ali S,Briand L C,Hemmati H,et aI.A systematic review of theapplication and empirical investigation of search-based testcase generation[J].lEEE Transactions on Software Engineering,2010,36(6):742-762.
[7] Pacheco C, Lahiri S K, Ernst M D,et al. Feedback-directedrandom test generation[C].Proc. - Int. Conf. Softw. Eng., 2007 :75-84.
[8] Ma L, Artho C, Zhang C, et al. GRT: Program-analysis-guid-ed random testing[Cl. Proc. - 2015 30th lEEE/ACM Int. Conf. Autom. Softw. Eng. ASE 2015:212-223.
[9] Fraser G,Arcuri A.Whole test suite generation[J].lEEE Trans-actions on Software Engineering, 2013,39(2):276-291.
[10] Sakti A, Pesant G, Gueheneuc Y G.lnstance generator andproblem representation to improve object oriented code cover-age[J].lEEE Transactions on Software Engineering, 2015,41(3):294-313.
[11] Ali S,Briand L C,Hemmati H,et aI.A systematic review of theapplication and empirical investigation of search-based testcase generation[J].IEEE Transactions on Software Engineering,2010,36(6):742-762.
收稿日期:2019 -11-15
作者簡介:付玉珍(1984-),女,山西吕梁人,讲师,硕士研究生,主要研究方向智能算法。
转载注明来源:https://www.xzbu.com/8/view-15180350.htm