实验目的
(1) 学习白盒测试方法
(2) 掌握语句覆盖、条件覆盖、分支覆盖等逻辑覆盖方法
(3) 掌握Java代码分析工具的使用
实验内容
1、 计算整数X和整数Y的最大公约数。(不允许采用课堂上所用的方式实现)
请用类和方法(写一个求最大公约数的方法)实现,命名时请按照规范命名。
在main方式中获取用户输入的两个整数,调用之前写的方法,输出它们的最大公约数。
利用FindBugs查找程序中是否存在bug。
package cn.lq.com; import java.io.*; import java.util.*; class Demo { public static void main(String args[]) throws Exception { Scanner cin = new Scanner(System.in); System.out.println("请输入第一个数字:"); int a = cin.nextInt(); System.out.println(" 请输入第二个数字:"); int b = cin.nextInt(); int c = gcd(a, b); System.out.println(" 最大公约数:" + c); } public static int gcd(int a, int b) { while (true) { if ((a = a % b) == 0) return b; if ((b = b % a) == 0) return a; } } }
没有语法错误
2、 逻辑覆盖的应用
按照所给的程序流程图,写出Java代码(用类和方法实现)
写出语句覆盖、分支覆盖的测试用例,以及它所覆盖的路径,用JUnit编写测试用例进行测试
package cn.lq.com; import java.util.Scanner; public class Demo { /** * @param args */ public static void t(float x,float y){ System.out.print("走过的路径为a"); if(x<4||y>0){ System.out.print("b"); if(y>1){ System.out.println("c"); y=y+1; System.out.println("x="+x); System.out.println("y="+y); } else{ System.out.println("d"); System.out.println("结束判断"); System.out.println("x="+x); System.out.println("y="+y); } } else{ System.out.print("e"); if(x>=5){ System.out.println("f"); x=x-y; System.out.println("x="+x); System.out.println("y="+y); } else{ System.out.println("g"); x=x+y; System.out.println("x="+x); System.out.println("y="+y); } } } }
测试类
package cn.lq.com; import static org.junit.Assert.*; import org.junit.Test; public class DemoTest { @Test public void test() { float x = 2; float y = 1; System.out.println("测试的两个数为x="+x+" y="+y+""); Demo.t(x, y); } }
语句覆盖
测试用例 |
覆盖用例 |
结果 |
X=4 Y=0 |
aeg |
X=4 y=0 |
X=5 y=0 |
aef |
X=5 y=0 |
X=2 y=2 |
adc |
X=2 Y=3 |
分支覆盖
测试用例 |
覆盖用例 |
结果 |
X=4 Y=0 |
aeg |
X=4 y=0 |
X=5 y=0 |
aef |
X=5 y=0 |
X=2 y=2 |
adc |
X=2 Y=3 |
X=2 Y=1 |
abd |
X=2 Y=1 |
我们测试语句覆盖的截图