基于三种黑盒测试技术生成测试用例(PKU)

依据以下步骤生成测试用例设计:

1. 输入范围(从命令行输入)检查:
a. 整数类型检测,
b. 下界小于等于上界;
c. 不正确时提示重新输入;
2. 应用等价类划分技术,对于输入范围进行划分:返回一个有效区间,两个无效区间
3. 应用边界值分析技术,对于各区间去边界值,并返回边界值。注意返回的边界值里没有重复值
4. 应用随机数生成器对每个区间生成指定数量(从命令行输入)的随机值。注意返回的值里没有重复值
5. 主程序:调用功能1至4,生成一组测试用例



import com.sun.org.apache.xpath.internal.operations.Lt;

import java.util.*;

/** * Created by ${wuyupku} on 2019/3/25 17:52 */


public class BlackBoxTest {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int b = 0;
        while (true) {
            try {
                System.out.println("请输入待划分区间下界:");
                b = input.nextInt();
                System.out.println("您输入的区间下界为:" + b);
                System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                break;  //如果是整数,则退出while循环
            } catch (Exception e) {  //这里用Exception来捕获这个异常
                e.printStackTrace();
                System.out.println("您输入的" + b + "不是整数,请重新输入一个整数!");
                System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                input.next();  //继续输入
            }
        }

        int c = 0;
        while (true) {
            try {
                System.out.println("请输入待划分区间上界:");
                c = input.nextInt();
                System.out.println("您输入的区间上界为:" + c);
                System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                break;  //如果是整数,则退出while循环
            } catch (Exception e) {  //这里用Exception来捕获这个异常
                e.printStackTrace();
                System.out.println("您输入的" + c + "不是整数,请重新输入一个整数!");
                System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                input.next();  //继续输入
            }
        }
        try {
            if (b > c) {
                System.out.println("区间下界" + b + "大于" + "区间上界" + c + "请重新输入!");
                return;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        int a = 0;
        while (true) {
            try {
                System.out.println("请输入一个数值:");
                a = input.nextInt(); //如果输入的不为整数,会抛出一个InputMismatchException异常
                break;  //如果是整数,则退出while循环
            } catch (Exception e) {  //这里用Exception来捕获这个异常
                e.printStackTrace();
                System.out.println("您输入的不是整数,请重新输入一个整数!");
                System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                input.next();  //继续输入
            }
        }
        if (a >= b && a <= c) {
            System.out.println("您输入数值" + a + "位于区间[" + b + "," + c + "]内,有效!数值为:" + a);
            System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        } else if (a < b) {
            System.out.println(a + "您输入数值" + a + "不位于区间[" + b + "," + c + "]内,无效!因为小于区间下界值:" + b);
            System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            return;
        } else if (a > c) {
            System.out.println(a + "输入数值不位于区间[" + b + "," + c + "]内,无效!因为大于区间上界值:" + c);
            System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            return;
        }
        System.out.println("您把区间划分为(" + Integer.MIN_VALUE + "," + b + ")和[" + b + "," + c + "]" + "和(" + c + "," + Integer.MAX_VALUE + ")三部分");
        System.out.println("您的无效区间为(" + Integer.MIN_VALUE + "," + b + ")和(" + c + "," + Integer.MAX_VALUE + ")两部分");
        System.out.println("您的有效区间为[" + b + "," + c + "]");
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        System.out.println("请输入生成随机数数目:");
        int d = input.nextInt();
        System.out.println("您输入的随机生成的数值为:" + d + "个");

        if (d < (c-b)) {
            System.out.println("您输入数值有效!满足区间绝对值!");
            System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        } else if (d < (c-b)) {
            System.out.println("您输入数值无效!越界!");
            System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            return;
        } else if (d == c-b) {
            System.out.println("您输入数值有效!满足区间绝对值!");
            System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            return;
        }

        Set<Integer> set = new HashSet<Integer>();
        boolean flag = true;
        while (true) {
            int z = (int) (Math.random() * (Math.abs(c)+Math.abs(b))%(c-b+1) + b);//[-10,10]先生成[0,20],再取模,再加小
            flag = set.add(z);
            if (!flag) {
                continue;
            }
            if (set.size() >= d) {
                break;
            }
        }
        System.out.println("系统随机生成数组"+ new TreeSet(set));
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        for (Iterator iter = new TreeSet(set).iterator(); iter.hasNext(); ) {
            Integer value = (Integer) iter.next();
            System.out.println("在您输入的有效区间["+b+","+c+"]内,随机生成的"+d+"个数的值分别为:" +value);
        }

        Set<Integer> set2 = new HashSet<Integer>();
        for(int g = 0;g<d;g++) {
            int x = (int) (Math.random() * (Integer.MAX_VALUE)%(Integer.MAX_VALUE-c+1) + c);//[-10,10]先生成[0,20],再取模,再加小
            set2.add(x);
        }
        System.out.println("系统随机生成数组"+ new TreeSet(set2));
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        for (Iterator iter = new TreeSet(set2).iterator(); iter.hasNext(); ) {
            Integer value = (Integer) iter.next();
            System.out.println("在您输入的右无效区间("+c+","+Integer.MAX_VALUE+"]内,随机生成的"+d+"个数的值分别为:" +value);
        }

        Set<Integer> set3 = new HashSet<Integer>();
        for(int t = 0;t<d;t++) {
            int y = (int) (Math.random() * (Integer.MAX_VALUE)%(Integer.MAX_VALUE-Math.abs(b)+1) + Math.abs(b));
            int v = Math.negateExact(y);
            set3.add(v);
        }
        System.out.println("系统随机生成数组"+ new TreeSet(set3));
        System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
        for (Iterator iter = new TreeSet(set3).iterator(); iter.hasNext(); ) {
            Integer value = (Integer) iter.next();
            System.out.println("在您输入的左无效区间("+Integer.MIN_VALUE+","+b+")内,随机生成的"+d+"个数的值分别为:" +value);
        }

    }

}

测试结果:

请输入待划分区间下界:
a
java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at BlackBoxTest.main(BlackBoxTest.java:18)
您输入的0不是整数,请重新输入一个整数!

请输入待划分区间下界:
-100
您输入的区间下界为:-100

请输入待划分区间上界:
b
java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at BlackBoxTest.main(BlackBoxTest.java:34)
您输入的0不是整数,请重新输入一个整数!

请输入待划分区间上界:
100
您输入的区间上界为:100

请输入一个数值:
99.9
java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
您输入的不是整数,请重新输入一个整数!
at BlackBoxTest.main(BlackBoxTest.java:59)
请输入一个数值:
a
java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at BlackBoxTest.main(BlackBoxTest.java:59)
您输入的不是整数,请重新输入一个整数!

请输入一个数值:
100
您输入数值100位于区间[-100,100]内,有效!数值为:100

您把区间划分为(-2147483648,-100)和[-100,100]和(100,2147483647)三部分
您的无效区间为(-2147483648,-100)和(100,2147483647)两部分
您的有效区间为[-100,100]

请输入生成随机数数目:
10
您输入的随机生成的数值为:10个
您输入数值有效!满足区间绝对值!

系统随机生成数组[-98, -79, -55, 4, 11, 34, 50, 81, 84, 95]

在您输入的有效区间[-100,100]内,随机生成的10个数的值分别为:-98
在您输入的有效区间[-100,100]内,随机生成的10个数的值分别为:-79
在您输入的有效区间[-100,100]内,随机生成的10个数的值分别为:-55
在您输入的有效区间[-100,100]内,随机生成的10个数的值分别为:4
在您输入的有效区间[-100,100]内,随机生成的10个数的值分别为:11
在您输入的有效区间[-100,100]内,随机生成的10个数的值分别为:34
在您输入的有效区间[-100,100]内,随机生成的10个数的值分别为:50
在您输入的有效区间[-100,100]内,随机生成的10个数的值分别为:81
在您输入的有效区间[-100,100]内,随机生成的10个数的值分别为:84
在您输入的有效区间[-100,100]内,随机生成的10个数的值分别为:95
系统随机生成数组[65916050, 322765351, 663207706, 822506996, 940339348, 1371578696, 1674182506, 1678719171, 1904368099, 2122322881]

在您输入的右无效区间(100,2147483647]内,随机生成的10个数的值分别为:65916050
在您输入的右无效区间(100,2147483647]内,随机生成的10个数的值分别为:322765351
在您输入的右无效区间(100,2147483647]内,随机生成的10个数的值分别为:663207706
在您输入的右无效区间(100,2147483647]内,随机生成的10个数的值分别为:822506996
在您输入的右无效区间(100,2147483647]内,随机生成的10个数的值分别为:940339348
在您输入的右无效区间(100,2147483647]内,随机生成的10个数的值分别为:1371578696
在您输入的右无效区间(100,2147483647]内,随机生成的10个数的值分别为:1674182506
在您输入的右无效区间(100,2147483647]内,随机生成的10个数的值分别为:1678719171
在您输入的右无效区间(100,2147483647]内,随机生成的10个数的值分别为:1904368099
在您输入的右无效区间(100,2147483647]内,随机生成的10个数的值分别为:2122322881
系统随机生成数组[-2090180587, -1459055808, -1423727464, -1393278527, -1384147565, -1312037019, -918076924, -606507128, -373155926, -346304159]

在您输入的左无效区间(-2147483648,-100)内,随机生成的10个数的值分别为:-2090180587
在您输入的左无效区间(-2147483648,-100)内,随机生成的10个数的值分别为:-1459055808
在您输入的左无效区间(-2147483648,-100)内,随机生成的10个数的值分别为:-1423727464
在您输入的左无效区间(-2147483648,-100)内,随机生成的10个数的值分别为:-1393278527
在您输入的左无效区间(-2147483648,-100)内,随机生成的10个数的值分别为:-1384147565
在您输入的左无效区间(-2147483648,-100)内,随机生成的10个数的值分别为:-1312037019
在您输入的左无效区间(-2147483648,-100)内,随机生成的10个数的值分别为:-918076924
在您输入的左无效区间(-2147483648,-100)内,随机生成的10个数的值分别为:-606507128
在您输入的左无效区间(-2147483648,-100)内,随机生成的10个数的值分别为:-373155926
在您输入的左无效区间(-2147483648,-100)内,随机生成的10个数的值分别为:-346304159


全部评论

相关推荐

10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务