实验三
实验目的
(1) 学习白盒测试方法
(2) 掌握语句覆盖、条件覆盖、分支覆盖等逻辑覆盖方法
(3) 掌握Java代码分析工具的使用
实验内容
1、 计算整数X和整数Y的最大公约数。(不允许采用课堂上所用的方式实现)
l 请用类和方法实现(定义一个类,在类中定义一个求最大公约数的方法),命名时请按照规范命名。
l 在main方法中获取用户输入的两个整数,调用之前写的方法,输出它们的最大公约数。
l 利用FindBugs查找程序中是否存在bug。
2、 逻辑覆盖的应用
l 按照所给的程序流程图,分别写出语句覆盖、分支覆盖的测试用例,以及它所覆盖的路径
l 附加题:根据程序流程图,写出代码(定义一个类和方法来实现),用JUnit生成单元测试,并利用前面设计的测试用例进行测试。
1、import java.util.Scanner;
public class Demo{
public int getGCDBySub(int x,int y){
while(x!=y){
if(x>y){
x=x-y;
}else{
y=y-x;
}
}
return x;
}
public int getGCDByDiv(int x,int y){
for(int i=x%y;i!=0;)
{
x=y;
y=i;
i=x%y;
}
return y;
}
public static void main(String[] args) {
boolean isInputNum=true;
int num1=1;
int num2=1;
while(isInputNum){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第一个整数:");
try{
num1 = scanner.nextInt();
}catch(java.util.InputMismatchException e){
System.out.println("输入的不是整数!");
continue;
}
if(num1<=0){
System.out.println("0和负数不参与求最大公约数");
continue;
}
isInputNum=false;
}
isInputNum=true;
while(isInputNum){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入第二个整数:");
try{
num2 = scanner.nextInt();
}catch(java.util.InputMismatchException e){
System.out.println("输入的不是整数,请再次输入:");
continue;
}
if(num2<=0){
System.out.println("0和负数不参与求最大公约数");
continue;
}
isInputNum=false;
}
NumberOperation numOperation=new NumberOperation();
System.out.println("它们的最大公约数是:"+numOperation.getGCDBySub(num1, num2));
System.out.println("它们的最大公约数是:"+numOperation.getGCDByDiv(num1, num2));
}
}
解:
语句覆盖:
覆盖路径:abc 测试用例:x=2,y=2 预期结果:x=2,y=3
覆盖路径:aeg 测试用例:x=4,y=-1 预期结果:x=3,y=-1
覆盖路径:aef 测试用例:x=5,y=-1 预期结果:x=6,y=-1
分支覆盖:
覆盖路径:abc 测试用例:x=2,y=2 预期结果:x=2,y=3
覆盖路径:abd 测试用例:x=2,y=1 预期结果:x=2,y=1
覆盖路径:aeg 测试用例:x=4,y=-1 预期结果:x=3,y=-1
覆盖路径:aef 测试用例:x=5,y=-1 预期结果:x=6,y=-1