实验目的
(1) 学习白盒测试方法
(2) 掌握语句覆盖、条件覆盖、分支覆盖等逻辑覆盖方法
(3) 掌握Java代码分析工具的使用
实验内容
1、 计算整数X和整数Y的最大公约数。(不允许采用课堂上所用的方式实现)
l 请用类和方法(写一个求最大公约数的方法)实现,命名时请按照规范命名。
l 在main方式中获取用户输入的两个整数,调用之前写的方法,输出它们的最大公约数。
l 利用FindBugs查找程序中是否存在bug。
import java.util.Scanner;
public class Common{
//求最大公约数
public static int commonDivisor(int n,int m){
//辗转相除是用大的除以小的。如果n<m,第一次相当n与m值交换
while(n%m!=0){
int temp=n%m;
n=m;
m=temp;
}
return m;
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数:");
int n=sc.nextInt();
System.out.println("请输入第二个数:");
int m=sc.nextInt();
System.out.println("最大公约数为:"+commonDivisor(n,m));
}
}
弄错后
2、 逻辑覆盖的应用
l 按照所给的程序流程图,写出Java代码(用类和方法实现)
l 写出语句覆盖、分支覆盖的测试用例,以及它所覆盖的路径,用JUnit编写测试用例进行测试
import java.util.Scanner;
public class Test1 {
/**
* @param args
*/
public void test() {
Scanner sc=new Scanner(System.in);
System.out.println("请输入x的值:");
int x=sc.nextInt();
System.out.println("请输入y的值:");
int y=sc.nextInt();
if(x<4 || y>0){
if(y>1){
y=y+x;
}
else{}
}
else{
if(x>=5){
x=x-y;
}
else{
x=x+y;
}
}
System.out.println("x="+x);
System.out.println("y="+y);
}
}
测试类
import static org.junit.Assert.*;
import org.junit.Test;
public class Test1Test {
Test1 test1 =new Test1();
@Test
public void test() {
test1.test();
}
}
语句覆盖:
X=4,y=0 路径:aeg
X=5,y=0 路径:aef
X=4,y=2 路径:abc
分支覆盖:
X=4,y=0 路径:aeg
X=5,y=0 路径:aef
X=4,y=2 路径:abc
X=3,y=1 路径:abd