《软件测试》实验
实验三 白盒测试
实验目的
(1) 学习白盒测试方法
(2) 掌握语句覆盖、条件覆盖、分支覆盖等逻辑覆盖方法
(3) 掌握Java代码分析工具的使用
实验内容
1、 计算整数X和整数Y的最大公约数。(不允许采用课堂上所用的方式实现)
l 请用类和方法实现(定义一个类,在类中定义一个求最大公约数的方法),命名时请按照规范命名。
l 在main方法中获取用户输入的两个整数,调用之前写的方法,输出它们的最大公约数。
l 利用FindBugs查找程序中是否存在bug。
2、 逻辑覆盖的应用
l 按照所给的程序流程图,分别写出语句覆盖、分支覆盖的测试用例,以及它所覆盖的路径
l 附加题:根据程序流程图,写出代码(定义一个类和方法来实现),用JUnit生成单元测试,并利用前面设计的测试用例进行测试。
实验结果
1.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class GreatestCommonDivisor {
public void Gcd(){
int a = 0;
System.out.print("请输入m:");
BufferedReader strin=new BufferedReader(new InputStreamReader(System.in));
try {
a=Integer.parseInt(strin.readLine());
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int b = 0;
System.out.print("请输入一个n:");
BufferedReader strin2=new BufferedReader(new InputStreamReader(System.in));
try {
b=Integer.parseInt(strin2.readLine());
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int flag = 0;
for (int i = 1; i <= a; i++) {
if(a%i==0){
if(b%i==0){
flag=i;}
}
}
System.out.println("最大公约数为"+flag);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
GreatestCommonDivisor Gcd1 = new GreatestCommonDivisor();
Gcd1.Gcd();
}
}
2.
语句覆盖:
覆盖路径: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
package com.lin.action;
import java.util.Scanner;
public class SC {
public void test2(int X,int Y){
if(X<4||Y>0){
if(Y>1){
Y=Y+1;
}
}else{
if(X>=5){
X=X-Y;
}else{
X=X+Y;
}
}
System.out.println("输出的X为:"+X);
System.out.println("输出的Y为:"+Y);
}
public static void main(String[] args){
Scanner a=new Scanner(System.in);
System.out.print("请输入X:");
int num1=a.nextInt();
System.out.print("请输入Y:");
int num2=a.nextInt();
SC test1 = new SC();
test1.test2(num1,num2);
}
}
测试类
package com.lin.test;
import static org.junit.Assert.*;
import org.junit.Test;
import com.lin.action.SC;
public class SCTest {
@Test
public void test() {
SC test1 = new SC();
test1.test2(2,2);
test1.test2(2,1);
test1.test2(4,-1);
test1.test2(5,-1);
}
}