zoukankan      html  css  js  c++  java
  • 实验三 白盒测试

    实验内容

    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);

    }

    }


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

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

  • 相关阅读:
    Java语言
    Java面向对象编程思想
    final关键字
    abstract关键字
    对象初始化过程
    访问修饰符
    继承
    面向对象设计
    static
    封装
  • 原文地址:https://www.cnblogs.com/igottogo/p/5361705.html
Copyright © 2011-2022 走看看