随机测试框架Randoop的简单使用
今天介绍一下Randoop这个工具的简单使用方法,Randoop最早在07年的ICSE上提出:
C. Pacheco, S. K. Lahiri, M. D. Ernst, and T. Ball, “Feedback-Directed Random Test Generation,” in Proceedings of the 29th international conference on Software Engineering, 2007, pp. 75-84.
这篇文章的出发点和思路很直观,简单总结一下(以Java程序为例,Randoop本身有Java版本和.NET版本):长期以来,随机测试方法都存在覆盖率不高的问题,很多实验都论证了随机测试的覆盖率低于模型检验、符号执行等方法。这篇文章在传统的随机测试基础上增加了反馈指导的思想,就是基于最初(或之前)已经执行的测试用例的执行过程,对下一步测试用例的生成进行指导,分两种情况:如果之前测试用例不存在contract violation或异常,则对之前测试序列进行扩展;如果存在上述情况,则记录下对应的方法执行序列。通过这种启发式方法,可以有效地提高测试的覆盖率(特别是方法覆盖率)。
Randoop的官方主页:http://code.google.com/p/randoop/
下面我们介绍最简单的Randoop使用方法:下载Randoop的JAR包后,假设我们需要测试的类为A,那么只需要在命令行(假设在Windows系统)下输入:
1 java -ea -classpath .;randoop.1.3.3.jar;A randoop.main.Main gentests --testclass=A --timelimit=60
对上面这条命令行简单解释一下,ea表示enable assertions,其次,将randoop的JAR包和待测试类加入classpath,再运行gentests这个方法,最后设置一个运行时间阈值。成功运行之后,可以看到在目录下生成了RandoopTest.java和RandoopTest0.java两个文件。接下来运行下面两条命令:
1 javac -classpath randoop.1.3.3.jar RandoopTest*.java 2 java -classpath .;randoop.1.3.3.jar junit.textui.TestRunner RandoopTest
就可以使用JUnit来运行生成的测试用例。需要指出的是,上面两条命令成功运行的前提是已经将JUnit 3.x加入环境变量(Randoop生成的测试用例是JUnit 3的,使用JUnit 4无法正常运行)。
今天暂时记录这么多,其他具体内容请参考Randoop的官方用户手册。