2025.3.27

软件测试实验一:

一、 实验目的

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

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

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

二、 实验内容

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

2、找零钱最佳组合

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

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

3、有一个饮料自动售货机(处理单价为5角钱)的控制处理软件,它的软件规格说明如下:

若投入5角钱的硬币,按下橙汁啤酒的按钮,则相应的饮料就送出来。若投入1元钱的硬币,同样也是按橙汁啤酒的按钮,则自动售货机在送出相应饮料的同时退回5角钱的硬币。

模拟程序如下:

 

因果图法测试该程序,并撰写实验报告。

4、航空服务查询问题:根据航线,仓位,飞行时间查询航空服务。

假设一个中国的航空公司规定:

① 中国去欧美的航线所有座位都有食物供应,每个座位都可以播放电影。

② 中国去非欧美的国外航线都有食物供应,只有商务仓可以播放电影。

③ 中国国内的航班的商务仓有食物供应,但是不可以播放电影

④ 中国国内航班的经济仓只有当飞行时间大于2小时时才有食物供应,但是不可以播放电影。

请用程序实现上述功能,并用决策表法设计测试用例,再执行测试,撰写实验报告。

 

三、 实验步骤及结果

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

 

实验步骤:

① 设计程序

package one;

 

import java.util.Scanner;

 

public class Day {

 

    public static int which_week(int y, int m, int d){

        return ((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) % 7);

    }

 

    public static void main(String[] args) {

        int year,month,day;

        String[] week =new String[]{"","","","","","",""};

        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入年");

        try {

            year = scanner.nextInt();

        } catch (Exception e){

            System.out.println("输入日期无效");

            return;

        }

        System.out.println("请输入月");

        try {

            month = scanner.nextInt();

        } catch (Exception e){

            System.out.println("输入日期无效");

            return;

        }

        System.out.println("请输入日");

        try {

            day = scanner.nextInt();

        } catch (Exception e){

            System.out.println("输入日期无效");

            return;

        }

        if (year < 1900 || year > 2050){

            System.out.println("输入日期无效");

            return;

        }

        if (month < 1 || month > 12){

            System.out.println("输入日期无效");

            return;

        }

        if (day < 1 || day > 31){

            System.out.println("输入日期无效");

            return;

        }

        if (year % 4 == 0 && month == 2 && day > 29){

            System.out.println("输入日期无效");

            return;

        }

        if (year % 4 != 0 && month == 2 && day > 28){

            System.out.println("输入日期无效");

            return;

        }

        if (month == 4 || month == 6 || month == 9 || month == 11){

            if (day > 30) {

                System.out.println("输入日期无效");

                return;

            }

        }

        System.out.println("星期"+week[which_week(year,month,day)]);

    }

}

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

输入条件

有效等价类

唯一标识

无效等价类

唯一标识

1900到2050内的闰年

(1)

Year<1900

(10)

 

1900到2050内的平年

(2)

Year>2050

(11)

 

 

 

非数字

(12)

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

(3)

Month<1

(13)

 

4,6,9,11

(4)

Month>12

(14)

 

2

(5)

非数字

(15)

1-28

(6)

Day<1

(16)

 

29

(7)

Day>31

(17)

 

30

(8)

Year为闰年

Month

2时,Day>29

(18)

 

31

(9)

Year为平年

Month

2时,Day>28

(19)

 

 

 

Month=4,6,9,11

,Day>30

(20)

 

 

 

非数字

(21)

 

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

 

序号

输入数据

覆盖等价类

输出

1

2024-3-31

1,3,9

星期日

2

2022-4-30

2,4,8

星期二

3

2023-2-20

1,5,6

星期一

4

2024-2-29

2,5,7

星期四

5

2022-3-0

2,3,16

输入日期无效

6

2022-3-32

2,3,17

输入日期无效

7

2020-2-30

1,5,18

输入日期无效

8

2022-2-29

2,5,19

输入日期无效

9

2023-6-31

2,3,20

输入日期无效

10

2023-6-a

2,4,21

输入日期无效

11

2020-0-22

1,13,6

输入日期无效

12

2023-13-29

2,14,7

输入日期无效

13

2023-b-30

2,15,8

输入日期无效

14

1800-5-20

10,3,6

输入日期无效

15

2055-4-18

11,4,6

输入日期无效

16

C-5-29

12,3,7

输入日期无效

 

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

序号

输入数据

覆盖等价类

输出

1

1900-1-1

1,3,6

星期一

2

2050-12-31

2,3,9

星期六

3

2023-2-28

2,5,6

星期二

4

2024-2-29

1,5,7

星期日

5

2025-3-31

2,3,9

星期一

6

2025-4-30

2,4,8

星期三

7

1900-2-30

1,5,8

输入日期无效

8

2050-2-29

2,5,7

输入日期无效

9

2025-4-31

2,4,9

输入日期无效

10

1900-2-31

1,5,9

输入日期无效

11

2050-2-30

2,5,8

输入日期无效

12

2050-2-31

2,5,9

输入日期无效

 

 

2、找零钱最佳组合

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

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

实验步骤:

① 设计程序

package one;

import java.util.Scanner;

public class money {
    public static void main(String[] args) {
        int N50 = 0,N10 = 0,N5 = 0,N1=0;
        double price,pay,value;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入商品价格");
        try {
            price = scanner.nextDouble();
        } catch (Exception e){
            System.out.println("输入价格无效");
            return;
        }
        if(price>100||price<0){
            System.out.println("无效输入");
            return;
        }
        System.out.println("请输入顾客支付金额");
        try {
            pay = scanner.nextDouble();
        } catch (Exception e){
            System.out.println("输入支付金额无效");
            return;
        }
        if (price > pay){
            System.out.println("无效,顾客付款小于商品价格");
            return;
        }
        if ( pay > 100 ){
            System.out.println("无效输入");
            return;
        }
        value = pay - price;
        if (value / 50 >= 1){
            N50 = (int) (value / 50);
            value = value - 50 * N50;
        }
        if (value / 10 >= 1){
            N10 = (int) (value / 10);
            value = value - 10 * N10;
        }
        if (value / 5 >= 1){
            N5 = (int) (value / 5);
            value = value - 5 * N5;
        }
        N1 = (int) (value);

        System.out.println("1" + N1 + "");
        System.out.println("5" + N5 + "");
        System.out.println("10" + N10 + "");
        System.out.println("50" + N50 + "");
    }
}

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

输入条件

有效等价类

唯一标识

无效等价类

唯一标识

商品价格

0<=R<=100

(1)

R<0

(3)

 

 

 

R>100

(4)

 

 

 

R非数字

(5)

顾客付款

0<=P<=100

(2)

P<0

(6)

 

 

 

P>100

(7)

 

 

 

P非数字

(8)

 

 

 

R>P

(9)

 

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

 

序号

输入数据

覆盖等价类

输出

1

R=83,P=97

1,2

10元1张,1元4张

2

R=30,P=-1

1,6

无效输入

3

R=30,P=120

1,7

无效输入

4

R=40,P=a

1,8

输入支付金额无效

5

R=40,P=30

1,9

无效,顾客付款小于商品价格

6

R=-10,P=20

2,3

无效输入

7

R=130,P=50

2,4

无效输入

8

R=b,P=50

2,5

输入价格无效

 

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

序号

输入数据

覆盖等价类

输出

1

R=60,P=90

1,2

10元3张

2

R=50,P=-1

1,6

无效输入

3

R=60,P=101

1,7

无效输入

4

R=-1,P=70

2,3

无效输入

5

R=101,P=80

2,4

无效输入

 

3、有一个饮料自动售货机(处理单价为5角钱)的控制处理软件,它的软件规格说明如下:

若投入5角钱的硬币,按下橙汁啤酒的按钮,则相应的饮料就送出来。若投入1元钱的硬币,同样也是按橙汁啤酒的按钮,则自动售货机在送出相应饮料的同时退回5角钱的硬币。

模拟程序如下:

 

因果图法测试该程序,并撰写实验报告。

实验步骤:

   ①编写程序

package one;

import java.util.Scanner;

public class Drinks {
    public static void main(String[] args) {
        int button1,button2;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请投币(一元请输入1,五角请输入2");
        try {
            button1 = scanner.nextInt();
            if (button1 != 1 && button1 != 2){
                System.out.println("输入无效");
                return;
            }
        } catch (Exception e){
            System.out.println("输入无效");
            return;
        }
        System.out.println("请选择商品(啤机请输入1,橙汁请输入2");
        try {
            button2 = scanner.nextInt();
            if (button2 != 1 && button2 != 2){
                System.out.println("输入无效");
                return;
            }
        } catch (Exception e){
            System.out.println("输入无效");
            return;
        }
        if (button1 == 2 && button2 == 1 ){
            System.out.println("请取饮料:啤酒");
        }
        else if (button1 == 2 ){
            System.out.println("请取饮料:橙汁");
        }
        else if ( button2 == 1 ){
            System.out.println("请取饮料:啤酒,找零:五角");
        }
        else {
            System.out.println("请取饮料:橙汁,找零:五角");
        }


    }
}

 

②分析原因与结果

原因

结果

C1:一元

E1:找零:五角

C2:五角

E2:请取饮料:啤酒

C3:啤酒

E3:请取饮料:橙汁

C4:橙汁

 

 

③画出因果图

 

④转化为决策表

选项规则

条件

 

 

 

 

动作

 

 

 

 

C1

C2

C3

C4


按钮

E1

E2

E3

不可能

1

1

1

1

1

 

 

 

 

2

1

1

1

0

 

 

 

 

3

1

1

0

1

 

 

 

 

4

1

0

1

1

 

 

 

 

5

0

1

1

1

 

 

 

 

6

1

1

0

0

 

 

 

 

7

1

0

1

0

1

 

 

8

0

1

1

0

1

 

 

 

9

1

0

0

1

1

 

 

10

0

1

0

1

1

 

 

 

11

0

0

1

1

 

 

 

 

12

0

0

0

1

 

 

 

 

13

0

0

1

0

 

 

 

 

14

0

1

0

0

 

 

 

 

15

1

0

0

0

 

 

 

 

16

0

0

0

0

 

 

 

 

 

⑤根据决策表设计测试用例,得到测试用例表

 

序号

投币(1代表一元,2代表五角)

商品(1代表啤酒,2代表橙汁)

输出

1

1

1

请取饮料:啤酒,找零:五角

2

1

2

请取饮料:橙汁,找零:五角

3

2

1

请取饮料:啤酒

4

2

2

请取饮料:橙汁

5

1

不可能

6

2

不可能

7

1

不可能

8

2

不可能

9

不可能

 

4、航空服务查询问题:根据航线,仓位,飞行时间查询航空服务。

假设一个中国的航空公司规定:

① 中国去欧美的航线所有座位都有食物供应,每个座位都可以播放电影。

② 中国去非欧美的国外航线都有食物供应,只有商务仓可以播放电影。

③ 中国国内的航班的商务仓有食物供应,但是不可以播放电影

④ 中国国内航班的经济仓只有当飞行时间大于2小时时才有食物供应,但是不可以播放电影。

请用程序实现上述功能,并用决策表法设计测试用例,再执行测试,撰写实验报告。

 

 

实验步骤:

① 编写程序

② 构造决策表

选项规则

条件

 

 

动作

 

 

 

航线(1代表欧美,2代表其他国外,3代表国内)

舱位(1代表商务舱,2代表经济舱)

飞行时间<=2(1代表是,2代表否)

食物

电影

不可能

1

1

任意

任意

1

1

 

2

2

1

任意

1

1

 

3

2

2

任意

1

2

 

4

3

1

任意

1

2

 

5

3

2

2

1

2

 

6

3

2

2

2

2

 

7

0

任意

任意

 

 

 

8

任意

0

任意

 

 

 

9

任意

任意

0

 

 

 

10

0

0

任意

 

 

 

11

0

任意

0

 

 

 

12

任意

0

0

 

 

 

13

0

0

0

 

 

 

 

③ 根据决策表设计测试用例,得到测试用例表

 

序号

航线(1代表欧美,2代表其他国外,3代表国内)

舱位(1代表商务舱,2代表经济舱)

飞行时间

输出

1

1

1

1

享受服务:食物供应、播放电影

2

2

1

3

享受服务:食物供应、播放电影

3

2

1

3

享受服务:食物供应

4

3

1

1

享受服务:食物供应

5

3

1

3

享受服务:食物供应

6

3

1

1

享受服务:无

7

1

2

输入无效

8

2

3

输入无效

9

2

1

输入无效

10

输入无效

 

5、旅馆住宿系统中,旅馆业主可进行添加房间操作。

– 旅馆业主登录旅馆住宿系统后,可以请求添加房间;

– 待进入“房间管理”对话框,单击“添加”按钮可进行添加房间操作;

– 添加房间时,可以设定房间的房间编号、房间类型、房间描述信息;

– 添加房间信息不能缺失,若某一项未填写,要给出提示信息;

– 房间编号长度不超过5个字符;

– 房间描述长度不超过1000个字符;

– 房间信息不能重复,成功填写后,可进行保存或取消操作,之后返回“房间管理”对话框,结束添加房间流程。

实验步骤:

利用黑盒测试策略编写添加房间功能的测试用例。

 

 

测试用例编号

测试标题

前置条件

测试步骤

预期结果

测试数据

1

添加房间成功

旅馆业主登录旅馆住宿系统后,进入“房间管理”对话框

1. 填写房间编号(长度 ≤5 个字符) 2. 选择房间类型 3. 输入房间描述(长度 ≤1000 个字符) 4. 单击“添加”按钮 5. 单击“保存”按钮

1. 系统无错误提示 2. 房间信息成功保存 3. 返回房间管理对话框

房间编号:1,房间类型:单人间,房间描述:很好

2

房间编号缺失

旅馆业主登录旅馆住宿系统后,进入“房间管理”对话框

1. 不填写房间编号 2. 选择房间类型 3. 输入房间描述 4. 单击“添加”按钮

1. 系统提示“房间编号不能为空” 2. 返回房间管理对话框

房间编号:(空),房间类型:单人间,房间描述:很好

3

房间类型缺失

旅馆业主登录旅馆住宿系统后,进入“房间管理”对话框

1. 填写房间编号 2. 不选择房间类型 3. 输入房间描述 4. 单击“添加”按钮

1. 系统提示“房间类型不能为空” 2. 返回房间管理对话框

房间编号:1,房间类型:(空),房间描述:很好

4

房间描述缺失

旅馆业主登录旅馆住宿系统后,进入“房间管理”对话框

1. 填写房间编号 2. 选择房间类型 3. 不输入房间描述 4. 单击“添加”按钮

1. 系统提示“房间描述不能为空” 2. 返回房间管理对话框

房间编号:1,房间类型:单人间,房间描述:(空)

 

5

房间编号过长

旅馆业主登录旅馆住宿系统后,进入“房间管理”对话框

1. 填写房间编号(长度 >5 个字符) 2. 选择房间类型 3. 输入房间描述 4. 单击“添加”按钮

1. 系统提示“房间编号长度不能超过 5 个字符” 2. 返回房间管理对话框

房间编号:123456,房间类型:单人间,房间描述:很好

6

房间描述超长

旅馆业主登录旅馆住宿系统后,进入“房间管理”对话框

1. 填写房间编号 2. 选择房间类型 3. 输入房间描述(长度 >1000 个字符) 4. 单击“添加”按钮

  1. 系统提示“房间描述长度不能超过 1000 个字符” 2. 返回房间管理对话框

房间编号:1,房间类型:单人间,房间描述:(1001 个字符)

7

房间信息重复

旅馆业主登录旅馆住宿系统后,进入“房间管理”对话框,系统存在相同房间编号的房间

1. 填写已存在的房间编号 2. 选择房间类型 3. 输入房间描述 4. 单击“添加”按钮

1. 系统提示“房间信息重复,无法添加” 2. 返回房间管理对话框

房间编号:1(已存在),房间类型:单人间,房间描述:很好

 

 

实验思考

① 在实际的测试中,如何设计测试用例才能达到用最少的测试用例检测出最多的缺陷;

理解需求和功能:深入理解软件的功能和需求,明确每个功能点和边界条件,确保测试用例覆盖所有重要的功能场景。

使用多种测试方法结合:

等价类划分:将输入数据划分为有效和无效等价类,减少测试用例数量,同时覆盖所有可能的输入情况。

边界值分析:针对每个输入的边界值设计测试用例,能够检测出因边界问题导致的缺陷。

因果图法和决策表法:适用于复杂的逻辑关系,通过因果图和决策表生成测试用例,确保逻辑分支被充分覆盖。

优先级排序:根据功能的重要性和风险程度对测试用例进行优先级排序,优先执行高优先级的测试用例。

基于风险的测试设计:识别软件中可能存在的高风险缺陷,设计针对性的测试用例,提高缺陷检测效率。

② 在进行用例设计时,如何考虑软件测试用例的充分性和减少软件测试用例的冗余性;

充分性:

覆盖所有功能点:确保测试用例覆盖软件的所有功能模块和业务逻辑。

覆盖边界条件:包括输入的边界值、特殊值和异常值,确保软件在边界情况下的行为正确。

覆盖错误处理:设计测试用例验证软件在错误输入或异常情况下的处理能力。

减少冗余性:

避免重复覆盖:通过等价类划分,避免对同一等价类中的多个值进行重复测试。

合并相似用例:对于功能相似的测试用例,尽量合并为一个用例,减少测试用例数量。

使用正交测试设计:通过正交表设计测试用例,确保测试用例的组合覆盖所有可能的输入组合,同时避免冗余。

 

四、 个人体会

通过本次黑盒测试实验,我深刻体会到理论与实践相结合的重要性。实验中,我熟练掌握了等价类划分、边界值分析、因果图法和决策表法等黑盒测试方法,并能够灵活运用这些方法设计测试用例。在设计测试用例时,我意识到全面考虑各种输入情况的重要性,同时要避免测试用例的冗余,确保每个用例都有其独特的价值。团队协作在实验过程中发挥了重要作用,通过与同学的交流和讨论,我更好地理解了测试方法和技巧,也发现了更多潜在问题。此外,我认识到软件测试是一个不断发展和改进的过程,需要持续学习新的测试方法和技术,以适应复杂多变的软件开发需求。这次实验不仅提高了我的问题解决能力,还增强了我的质量意识,让我更加深刻地认识到测试在保障软件质量中的关键作用,为今后的软件开发和测试工作奠定了坚实的基础。

posted @ 2025-03-27 21:24  贾贾鱼  阅读(20)  评论(0)    收藏  举报