软件测试 黑盒测试 边界值分析法测试 人民币数字到大写转换

实验四 黑盒测试之边界值分析法测试  人民币数字到大写转换

实验要求:

要求进行黑盒测试,使用边界值分析法分别进行测试。另外请考虑,如果使用因果图法进行测试,此程序的输入域中存在哪种制约条件,并举例说明。据此实验生成测试报告3;测试报告中至少包含等价类列表,依据边界值法生成的测试用例及输入域边界测试结论及输入域存在的制约条件。

 

 

import java.util.Scanner;


public class test3 {
    //定义数字对应的汉字
    public final static String[] num = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    //定义单位
    public final static String[] unit = {"", "拾", "佰", "仟"};

    public static void main(String[] args) {
        while (true) {
            try {
                System.out.println("请输入数字:");
                Scanner sc = new Scanner(System.in);
                String input = sc.next();
                System.out.print("人民币");
                //对数字进行整数和小数的分隔
                String[] numString = input.split("\\.");
                //若是整数则将其转换为有小数的数
                if (numString.length == 1) {
                    input += ".0";
                    numString = input.split("\\.");
                }
                //将整数进行分隔
                String[] zhengshu = numString[0].split("");
                //将数字前的0去掉
                while (zhengshu[0].equals("0") && zhengshu.length > 1) {
                    String[] tmp = new String[zhengshu.length - 1];
                    for (int i = 0; i < zhengshu.length - 1; i++) {
                        tmp[i] = zhengshu[i + 1];
                    }
                    zhengshu = tmp;
                }

                //对小数进行分隔
                String[] xiaoshu = numString[1].split("");
                //若格式不对则抛出异常
                if (xiaoshu.length > 2 || numString.length != 2 || zhengshu.length > 12) {
                    throw new Exception();
                } else if (xiaoshu.length == 1 && xiaoshu[0].equals("0")) {
                    //小数部分为0的情况
                        printInfo(zhengshu);
                        System.out.println("整");

                } else if (xiaoshu.length == 1 && !xiaoshu[0].equals("0")) {

                    printInfo(zhengshu);
                    System.out.print(num[Integer.parseInt(xiaoshu[0])] + "角");
                } else if (xiaoshu.length == 2) {

                    printInfo(zhengshu);
                    System.out.print(num[Integer.parseInt(xiaoshu[0])] + "角");
                    System.out.print(num[Integer.parseInt(xiaoshu[1])] + "分");
                }
                break;
            } catch (NumberFormatException e) {
                System.out.println("输入有误");
            } catch (Exception e) {
                System.out.println("输入有误");
            }
        }

    }

    public static void printInfo(String[] zhengshu) {
        int tmp = 0; //该标志位用来记录对unit的操作地址
        int zeroNum = 0; //记录从右到左第5到第8位0的个数

        //数字为亿级
        if (zhengshu.length > 8) {
            for (int i = 0; i < zhengshu.length - 8; i++) {
                int nums = Integer.parseInt(zhengshu[i]);

                //判断相邻是否为0
                if (zhengshu[i].equals("0") && zhengshu[i + 1].equals("0") && i + 1 < zhengshu.length - 8) {
                    continue;
                }

                //若0在级的最后一位则不输出
                if (i == zhengshu.length-8-1 &&zhengshu[zhengshu.length-8-1].equals("0")){
                    break;
                }

                //若有相邻的0则输出最后一个0
                if (zhengshu[i].equals("0")) {
                    System.out.print(num[nums]);
                } else {
                    System.out.print(num[nums] + unit[zhengshu.length - 8 - 1 - i]);
                }
            }
            System.out.print("亿");

            for (int i = zhengshu.length - 8; i < zhengshu.length - 4; i++) {
                int nums = Integer.parseInt(zhengshu[i]);

                if (zhengshu[i].equals("0") && zhengshu[i + 1].equals("0") && i + 1 < zhengshu.length - 4) {
                    tmp++;
                    zeroNum++;
                    continue;
                }

                if (i == zhengshu.length - 5 && zhengshu[zhengshu.length - 5].equals("0")) {
                    break;
                }

                if (zhengshu[i].equals("0")) {
                    System.out.print(num[nums]);
                    tmp++;
                } else {
                    System.out.print(num[nums] + unit[3 - tmp]);
                    tmp++;
                }
            }
            if (zeroNum != 3) {
                System.out.print("万");
            }
            tmp = 0;
            for (int i = zhengshu.length - 4; i < zhengshu.length; i++) {
                int nums = Integer.parseInt(zhengshu[i]);

                if (i + 1 < zhengshu.length && zhengshu[i].equals("0") && zhengshu[i + 1].equals("0")) {
                    tmp++;
                    continue;
                }

                if (i == zhengshu.length - 1 && zhengshu[zhengshu.length - 1].equals("0")) {
                    break;
                }

                if (zhengshu[i].equals("0")) {
                    System.out.print(num[nums]);
                    tmp++;
                } else {
                    System.out.print(num[nums] + unit[3 - tmp]);
                    tmp++;
                }
            }
            System.out.print("元");
            tmp = 0;

        } else if (zhengshu.length > 4) {  //数字为万级
            for (int i = 0; i < zhengshu.length - 4; i++) {
                int nums = Integer.parseInt(zhengshu[i]);

                if (zhengshu[i].equals("0") && zhengshu[i + 1].equals("0") && i + 1 < zhengshu.length - 4) {
                    continue;
                }

                if (i == zhengshu.length - 4 -1 && zhengshu[zhengshu.length-4-1].equals("0")){
                    break;
                }

                if (zhengshu[i].equals("0")) {
                    System.out.print(num[nums]);
                } else {
                    System.out.print(num[nums] + unit[zhengshu.length - 4 - 1 - i]);
                }
            }
            System.out.print("万");
            for (int i = zhengshu.length - 4; i < zhengshu.length; i++) {
                int nums = Integer.parseInt(zhengshu[i]);
                if (i + 1 < zhengshu.length && zhengshu[i].equals("0") && zhengshu[i + 1].equals("0")) {
                    tmp++;
                    continue;
                }

                if (i == zhengshu.length - 1 && zhengshu[zhengshu.length - 1].equals("0")) {
                    break;
                }

                if (zhengshu[i].equals("0")) {
                    System.out.print(num[nums]);
                    tmp++;
                } else {
                    System.out.print(num[nums] + unit[3 - tmp]);
                    tmp++;
                }
            }
            System.out.print("元");
        } else if (zhengshu.length <= 4) {
            int snums = Integer.parseInt(zhengshu[0]);
            if (snums==0){
                System.out.print("零");
            }
                for (int i = 0; i < zhengshu.length; i++) {
                    int nums = Integer.parseInt(zhengshu[i]);
                    if ( i + 1 < zhengshu.length && zhengshu[i].equals("0") && zhengshu[i + 1].equals("0")) {
                        continue;
                    }

                    if (i == zhengshu.length-1 && zhengshu[zhengshu.length-1].equals("0")){
                        break;
                    }

                    if (zhengshu[i].equals("0")) {
                        System.out.print(num[nums]);
                    } else {
                        System.out.print(num[nums] + unit[zhengshu.length - 1 - i]);
                    }
                }

            System.out.print("元");
        }
    }
}

 

确认等价类,列出等价类表:

输入条件

有效等价类

编号

无效等价类

编号

输入整数部分

整数部分存在

1

整数不存在(但有.)

8

整数长度大于等于0小于等于12

2

负数

9

长度大于12

存在非数字字符

输入小数部分

小数部分存在

3

小数不存在(但有.)

10

小数长度大于等于1小于等于2

4

负数

11

长度大于2

12

存在非数字字符

13

数字中间含有0

中间位只含有一个0

5

数字不含0

14

中间位含有多个0

6

存在非数字的字符

15

角位是0,而分位不是0

数字小数点后第一位位0,第二位不是0

7

角位不是0

16

存在非数字的字符

17

根据边界值生成的测试用例表:

输入条件

测试编号

用例说明

测试数据

预期结果

测试结果

数字

1

以0作为输入

0

人民币零元整

结果正确

2

以最大合法数输入

999999999999.99

人民币玖仟玖佰玖拾玖亿玖仟玖佰玖拾玖万玖仟玖佰玖拾玖元玖角玖分

结果正确

3

以最小合法数字作为输入

0.01

人民币零元零角壹分

结果正确

4

超过最大或小值作为输入

1000000000000

人民币输入有误

结果正确

5

-1

人民币输入有误

结果正确

6

小数部分为0

100

人民币壹佰元整

结果正确

7

小数部分为1

100.1

人民币壹佰元壹角

结果正确

8

小数部分为2

100.01

人民币壹佰元零角壹分

结果正确

9

小数部分为3

100.001

人民币输入有误

结果正确

字符

10

首位有字符

A12

人民币输入有误

结果正确

11

末尾有字符

1aa

人民币输入有误

结果正确

12

有两个小数点

12..1

人民币输入有误

结果正确

因果图:

原因

结果

输入非法字符 (c1)

输入有错,请重新输入 (e1)

超出数字范围 (c2)

输出相应的大写金额 (e2)

输入正确数字 (c3)

在因果图中c1与c2存在制约条件,c1和c2中至多有一个可能为1,为互异的制约条件。

决策表:

判定表

1

2

3

4

5

6

7

8

原因

 

C1

0

0

0

0

1

1

1

1

C2

0

0

1

1

0

0

1

1

C3

0

1

0

1

0

1

0

1

10

               

结果

 

E1

   

 

 

 

E2

 

           

错误

   

 

 

根据边界值生成的测试用例执行后结果演示:

演示(测试编号1):

演示(测试编号2):

演示(测试编号3):

演示(测试编号4):

演示(测试编号5):

演示(测试编号6):

演示(测试编号7):

演示(测试编号8):

演示(测试编号9):

演示(测试编号10,11,12):

posted @ 2022-12-15 10:09  王回甘  阅读(303)  评论(0编辑  收藏  举报