po3a  

实验一   黑盒测试

一、实验目的

1、 掌握黑盒测试的基础知识;

2、 掌握黑盒测试的检查内容及测试目的;

3、 掌握黑盒测试的几种基本测试方法:等价类划分方法、边界值分析方法、因果图法和决策表法;

二、实验要求

1、 复习有关内容,理解黑盒测试;

2、 掌握等价类划分、边界值分析方法、因果图法和决策表法,并能设计出测试用例;

3、 对具体软件,能分别使用相应的黑盒测试方法设计测试用例,并实施测试、分析测试结果。

三、实验内容

 1、设计函数实现输入日期显示星期几,并用等价类及边界值法测试

 

实验步骤:

① 设计程序

package org.example.test1;
import java.util.*;
public class rili {
    public static void main(String[] args) {
        Scanner n=new Scanner(System.in);
        int r=0,i,p=0,year,k,z=0,month,day,t,monthsum=0;
//r为闰年数,i为余数。p为平年数。k为起始年数。z为总天数。monthsum为各个月天数

        System.out.println("输入190011号之后的年份:");
        year=n.nextInt();

        for(k=1900;k<year;k++)//计算输入年数到1900年之间的平年有几个,跟闰年有几个。

        {

            if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)

            {

                r++;

            }

            else

                p++;

        }

        z=z+r*366;

        z=z+p*365;//计算年的总天数。

        System.out.println("输入月数:");

        month=n.nextInt();

        for(t=1;t<month;t++)//计算输入月,之前的月份的总天数。

        {

            switch(t)

            {

                case 1:monthsum=monthsum+31;

                    break;

                case 2:

                    if((year%4==0 && year%100!=0)||(year%400==0))

                        monthsum=monthsum+29;

                    else

                        monthsum=monthsum+28;

                    break;

                case 3:monthsum=monthsum+31;

                    break;

                case 4:monthsum=monthsum+30;

                    break;

                case 5:monthsum=monthsum+31;

                    break;

                case 6:monthsum=monthsum+30;

                    break;

                case 7:monthsum=monthsum+31;

                    break;

                case 8:monthsum=monthsum+31;

                    break;

                case 9:monthsum=monthsum+30;

                    break;

                case 10:monthsum=monthsum+31;

                    break;

                case 11:monthsum=monthsum+30;

                    break;

                case 12:monthsum=monthsum+31;

                    break;

            }

        }

        System.out.println("输入天:");

        day=n.nextInt();

        monthsum=monthsum+day;

        z=monthsum+(z+1);

        i=z%7;

        if(i==0) {

            System.out.println("星期一");

        }

        if(i==1) {

            System.out.println("星期二");

        }

        if(i==2) {

            System.out.println("星期三");

        }

        if(i==3) {

            System.out.println("星期四");

        }
        if(i==4) {
            System.out.println("星期五");
        }
        if(i==5) {
            System.out.println("星期六");
        }
        if(i==6) {
            System.out.println("星期七");
        }
    }
}

 

② 划分等价类,得到等价类表。等价类表格式如下:

输入条件

有效等价类

唯一标识

无效等价类

唯一标识

1900<=y<=2500的闰年

1

Y<1900

10

 

1900<=y<=2500的平年

2

y>2500

11

m=1,3,5,7,8,10,12

3

m<1

12

 

m=4,6,9,11

4

m>12

13

 

m=2

5

 

 

1<=d<=28

6

d<1

14

 

d=29

7

d>31

15

 

d=30

8

 

 

 

d=31

9

 

 

 

③ 运用等价类划分法设计测试用例,得到测试用例表。测试用例表格式如下:

 

序号

输入数据

覆盖等价类

输出

1

2012.3.31

1-3.6-9

星期二

2

2022.5.31

1-3.6-9

日期不存在

3

2022.4.29

1.2.4.7

星期五

4

2022.4.30

1.2.4.8

星期六

5

2022.4.31

1.2.4.9

日期不存在

6

2022.2.28

1.2.5.6

星期一

7

2012.2.29

1.5.7

星期三

8

2022.2.29

2.5.7

日期不存在

9

2055.3.12

10.11

年份错误

10

2012.13.1

12.13

月份错误

11

2012.1.33

14.15

日期错误

1

2012.3.31

1-3.6-9

星期二

 

④ 运用边界值法设计测试用例。

序号

输入数据

覆盖的边界条件

输出

1

1900-01-01

最小年份、最小月份、最小日期

星期一

2

2500-12-31

最大年份、最大月份、最大日期

星期六

3

1900-01-07

周循环边界(满7天周期)

星期日

4

2020-02-29

闰年2月最大日期

星期六

5

2021-02-28

平年2月最大日期

星期日

6

2021-03-01

2/3月日期过渡边界

星期一

7

2023-04-30

小月份最大日期

星期日

8

2023-01-31

大月份最大日期

星期二

9

1899-12-31

年份下限-1

年份错误

10

2501-01-01

年份上限+1

年份错误

11

2023-00-15

月份下限-1

月份错误

12

2023-13-01

月份上限+1

月份错误

13

2023-05-00

日期下限-1

日期错误

14

2023-05-32

大月份日期上限+1

日期错误

 

2、找零钱最佳组合

   假设商店货品价格(R) 都不大于100元(且为整数),若顾客付款(P)100元内,现有一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。 假定此商店的货币面值只包括:50(N50)10(N10) 5(N5)1(N1) 四种。

   请结合等价类划分法和边界值分析法为上述程序设计 出相应的测试用例。

实验步骤:

① 设计程序

package org.example.test1;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ChangeCalculator extends JFrame {
    private JTextField priceField;
    private JTextField paymentField;
    private JTextArea resultArea;

    public ChangeCalculator() {
        setTitle("找零计算器");
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new GridLayout(5, 2));

        add(new JLabel("商品价格 (1-100):"));
        priceField = new JTextField();
        add(priceField);

        add(new JLabel("支付金额 (1-100):"));
        paymentField = new JTextField();
        add(paymentField);

        JButton calculateButton = new JButton("计算找零");
        add(calculateButton);

        resultArea = new JTextArea();
        resultArea.setEditable(false);
        add(new JScrollPane(resultArea));

        calculateButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                calculateChange();
            }
        });
    }

    private void calculateChange() {
        try {
            int price = Integer.parseInt(priceField.getText());
            int payment = Integer.parseInt(paymentField.getText());

            // 输入验证
            if (price < 1 || price > 100) {
                resultArea.setText("错误:价格需在1-100元之间");
                return;
            }
            if (payment < 1 || payment > 100) {
                resultArea.setText("错误:支付金额需在1-100元之间");
                return;
            }
            if (payment < price) {
                resultArea.setText("错误:支付金额不足");
                return;
            }

            int change = payment - price;
            if (change == 0) {
                resultArea.setText("无需找零");
                return;
            }

            int[] result = calculateOptimalChange(change);
            String output = String.format(
                    "找零 %d 元,最佳组合:\n50: %d \n10: %d \n5: %d \n1: %d \n总张数:%d",
                    change, result[0], result[1], result[2], result[3], result[4]
            );
            resultArea.setText(output);
        } catch (NumberFormatException ex) {
            resultArea.setText("错误:请输入有效的整数金额");
        }
    }

    private int[] calculateOptimalChange(int change) {
        int n50 = change / 50;
        change %= 50;

        int n10 = change / 10;
        change %= 10;

        int n5 = change / 5;
        change %= 5;

        int n1 = change;

        int total = n50 + n10 + n5 + n1;
        return new int[]{n50, n10, n5, n1, total};
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new ChangeCalculator().setVisible(true);
        });
    }
}

 

 

② 划分等价类,得到等价类表。等价类表格式如下:

输入条件

有效等价类

唯一标识

无效等价类

唯一标识

商品价格

1-100的整数(1≤R≤100)

R<1, R>100, 非整数输入

商品价格

1-100的整数(1≤R≤100)

支付金额

R≤P≤100的整数

P<R, P>100, 非整数输入

支付金额

R≤P≤100的整数

找零金额

0≤P-R≤99

P-R<0, P-R>99

找零金额

0≤P-R≤99

 

③ 运用等价类划分法设计测试用例,得到测试用例表。测试用例表格式如下:

 

序号

输入数据

覆盖等价类

输出

1

(50, 100)

有效边界值

找零50元:1张50

2

(99, 100)

有效最小找零

找零1元:1张1元

3

(1, 100)

有效最大找零

找零99元:组合计算

4

(50, 50)

找零为0的情况

无需找零

5

(0, 50)

无效价格下限

价格错误

6

(101, 200)

无效价格上限

价格错误

7

(80, 70)

支付不足

支付金额不足

8

(50, 150)

无效支付金额上限

支付金额错误

9

(50.5, 100)

非整数输入

输入格式错误

 

④ 运用边界值法设计测试用例。

序号

输入(价格,支付)

测试边界

预期输出

1

(1, 1)

最小金额交易

无需找零

2

(100, 100)

最大金额交易

无需找零

3

(50, 50)

找零零边界

无需找零

4

(99, 100)

最小找零边界

1元×1

5

(1, 100)

最大找零边界

50+10×4+5×1+1×4=99元

6

(50, 101)

支付金额上限+1

支付金额错误

7

(50, 50)

刚好支付

无需找零

8

(50, 55)

找零包含所有面额

5元×1

9

(95, 100)

需要多种面额组合

5元×1

posted on 2025-03-20 08:38  po3a  阅读(27)  评论(0)    收藏  举报