实验三 白盒测试

实验内容

1、 计算整数X和整数Y的最大公约数。(不允许采用课堂上所用的方式实现)

l 请用类和方法实现(定义一个类,在类中定义一个求最大公约数的方法),命名时请按照规范命名。3.

l 在main方法中获取用户输入的两个整数,调用之前写的方法,输出它们的最大公约数。

l 利用FindBugs查找程序中是否存在bug。

package cn.rocky.gcd;

import java.util.Scanner;

public class Divisor {

/**

 * 功能:求两个整数的最大公约数

 * @author 余*强  

 * 2016-04-01

 */

 

// 定义构造方法对两个数实现最大公约数

void divisor(int num1, int num2){  

        int k = 2;   //2开始测试 是不是最大公约数

        int gcd = 1; //初始化公约数

      if(num1 > 0 && num2 > 0){       //限制输入的数不等于0或负数

    //只有当k小于等于 num1 和 num2 才继续检测是否有最大公约数,否则就为初始值1

    for ( k = 2; k <= num1 && k <= num2; k++ ){
      if ( num1 % k == 0 && num2 % k == 0){
        gcd = k ;
          }
        }
    System.out.println("最大公约数:" + gcd);
        }else{
        System.out.println("不能为0或负数!");
    }
  }

 

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

        System.out.println("第一个数字:");

        int num1= input.nextInt();

        System.out.println("第二个数字:");

        int num2 = input.nextInt();

        

        //实例化对象 调用方法 实现功能

Divisor d = new Divisor();

d.divisor(num1,num2);

}

}

 未发现bug:

 总结:findbugs静态检查只能初步简单的检查部分bug,是非常有限制的。这就要求测试人员做更进一步的检查。

2逻辑覆盖的应用

l 按照所给的程序流程图,分别写出语句覆盖、分支覆盖的测试用例,以及它所覆盖的路径

l 附加题:根据程序流程图,写出代码(定义一个类和方法来实现),用JUnit生成单元测试,并利用前面设计的测试用例进行测试。

 

1. 语句覆盖:

路径:a b c    测试用例: x = 1, y = 2   预期结果:x = 1, y = 3;

        a e g                      x = 4, y = 0                 x = 4, y = 0;

         a e f                      x = 5, y = 0                 x = 5,y = 0;

 

分支覆盖:

路径:a b c      测试用例:x = 1, y = 2 预期结果: x = 1, y = 3;

     a b d           x = 1, y = 1                x = 1,y = 1;

     a e g           x = 4, y = 0        x = 4, y = 0;

     a e f            x = 5, y = 0                x = 5,y = 0;

附加题:

package cn.rocky.pfd;

import java.util.Scanner;

public class Pfd {

/**
* 功能:将流程图用代码实现
* @author 余*强
* 2016-04-01
*/

void pfd(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) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("第一个数字x:");
int num1= input.nextInt();
System.out.println("第二个数字y:");
int num2 = input.nextInt();

Pfd p = new Pfd();
p.pfd(num1, num2);
}

}

测试用例:

package cn.rocky.pfd;

import org.junit.Test;

 

public class PfdTest {

 

 

@Test

public void testMain() {

 

Pfd p = new Pfd();

p.pfd(1,2);

p.pfd(4,0);

p.pfd(5,0);

p.pfd(1,1);

}

}


总结:语句覆盖->保证每个语句至少被执行一次,但对多分支语句则不能达到全面覆盖;

   分支覆盖->对多分支语句,能够使每个分支至少被执行一次,即分支的真、假都能执行到,比语句覆盖来得更强。

原文地址:https://www.cnblogs.com/igottogo/p/5361705.html