实验三: 黑盒测试——决策表分析法

本文介绍了在Windows10环境下,使用C/C++、C#、Java或Python设计的实验,通过决策表分析法对三角形问题和NextDate函数进行黑盒测试。实验强调了决策表测试的全面性、问题发现能力以及在提高效率和可重复性方面的优势。
摘要由CSDN通过智能技术生成
【实验环境】

Windows 10 操作系统, C,C++,C#、Java或Python语言开发环境(IDE)。

【实验类型】

设计型

【实验目的】
  1. 认识黑盒测试方法中决策表分析测试法原理
  2. 掌握黑盒测试方法中决策表分析测试法过程
【实验内容】

      1.三角形问题

问题描述:三角形问题接受三个整数,a、b和c作为输入,用作三角形的边。程序的输出是由这三条边确定的三角形类型:等边三角形、等腰三角形、不等边三角形或非三角形。

作为输入:三角形的三条边必须满足如下条件:

C1:1<=a<=100

C2:1<=b<=100

C3:1<=c<=100

C4:a<b+c

C5:b<a+c

C6:c<a+b

      2.NextDate函数

问题描述:NextDate是一个由三个变量(月份、日期和年份)的函数。函数返回输入日期后边的那个日期。

作为输入:变量月份、日期和年都具有整数值,满足以下条件。

C1:1<=月份<=12

C2:1<=日期<=31

C3:1912<=年<=2050

【算法描述】

程序1算法描述

1. 输入三个整数a、b和c,代表三角形的三条边。

2. 首先,检查输入的a、b和c是否在范围1到100内(满足条件C1到C3)。

3. 接下来,检查是否满足三角形的边长条件(满足条件C4到C6):

   - 检查是否a + b > c

   - 检查是否a + c > b

   - 检查是否b + c > a

4. 如果满足上述条件,进一步判断三角形的类型:

   - 如果a、b和c都相等,输出"等边三角形"。

   - 否则,如果至少两个边相等,输出"等腰三角形"。

   - 否则,输出"不等边三角形"。

5. 如果不满足条件4,输出"非三角形"。

程序2算法描述

1. 输入三个整数,分别表示月份(month)、日期(day)和年份(year)。

2. 首先,检查输入日期是否符合以下条件(条件C1到C3):

   - 1 <= month <= 12

   - 1 <= day <= 31

   - 1912 <= year <= 2050

3. 如果输入日期不符合条件,输出 "输入日期不符合条件",并结束算法。

4. 否则,进入下一个日期计算部分。

5. 增加日期(day)的值 by 1。

6. 检查日期是否超过了一个月的天数:

   - 如果 day > 31,表示下一个月的第一天,day 被设置为 1,然后 month 的值增加 by 1。

   - 如果 day > 30,而当前月份是4、6、9或11,同样 day 被设置为 1,month 的值增加 by 1。

   - 如果 day > 29,当前月份为2,且 year 为闰年,同样 day 被设置为 1,month 的值增加 by 1。

   - 如果 day > 28,当前月份为2,但 year 不是闰年,同样 day 被设置为 1,month 的值增加 by 1。

7. 继续检查月份,如果 month 超过 12,表示下一年的第一月,month 被设置为 1,year 的值增加 by 1。

8. 输出下一个日期的月份、日期和年份。

【测试案例】

      1.三角形问题

* 条件桩:6

C1:a<b+c

C2:b<a+c

C3:c<a=B

C4:a=b

C5:a=c

C6:b=c

* 条件条目:2^6(Y or N)

* 行动桩:5

A1:非三角形

A2:不等边三角形

A3:等腰三角形

A4:等边三角形

A5:不可能

* 行动条目:5

三角形决策表

1-32

33-48

49-56

57

58

59

60

61

62

63

64

C1:a<b+c?  

F

T

T

T

T

T

T

T

T

T

T

C2:b<a+c?

-

F

T

T

T

T

T

T

T

T

T

C3:C<a+b?

-

-

F

T

T

T

T

T

T

T

T

C4:a=b?

-

-

-

T

T

T

T

F

F

F

F

C5:a=c2

-

-

-

T

T

F

F

T

T

F

F

C6:b=c?

-

-

-

T

F

T

F

T

T

T

F

A1:非三角形

A2:不等边三角形

A3:等腰三角形

A4等边三角形

A5:不可能

三角形决策表测试用例

测试编号

a

b

c

预期结果

输出结果

1

8

3

4

非三角形

非三角形

2

2

5

2

三角形

非三角形

3

2

3

9

非三角形

非三角形

4

5

5

5

等边三角形

等边三角形

5

5

5

6

等腰三角形

等腰三角形

6

5

6

5

等腰三角形

等腰三角形

7

6

5

5

等腰三角形

等腰三角形

8

3

4

5

不等边三角形

不等边三角形

        

      2.NextDate函数

等价类:

M1=(月份 每月有30天}

M2=(月份 每月有31天,12月除外}

M3=(月份 此月是2月}

M4={月份 此月是12月}

D1={日期:1<=日期<=27)

D2={日期:日期=28)

D3={日期:日期=29)

D4={日期:日期=30}

D5={日期:日期=31}

Y1=(年-年是闰年)

Y2=(年-年是平年}

* 条件桩:

C1:month in {M1,M2,M3,M4}

C2:day in {D1,D2,D3,D4,D5}

C3:year in {Y1,Y2}

* 条件条目:4*5*2

* 行动桩:

A1:不可能

A2:日期增1

A3:日期复位(置1)

A4:月份增1

A5:月份复位(置1)

A6:年增1

NextDate决策表

条件

1-3

4

5

6-9

10

11-14

15

16

17

18

19

20

21-22

C1:月份在 

M1

M1

M1

M2

M2

M3

M3

M4

M4

M44

M4

M4

M4

C2:日在

D1,D2,

D3

D4

D5

D1,D2,

D3,D4

D5

D1,D2,

D3,D4

D5

D1

D2

D2

D3

D3

D4,D5

C3:年在

-

-

-

-

-

-

-

-

Y1

Y2

Y1

Y2

-

A1:不可能

A2:日增1

A3:日复位

A4:月增1

A5:月复位

A6:年增1

NextDate函数决策表测试用例

用例ID

预期输出

输出结果

1-3

4

12

2001

4/13/2001

4/13/2001

4

4

30

2001

5/1/2001

5/1/2001

5

4

31

2001

不可能

输入日期不符合条件

6-9

1

15

2001

1/16/2001

1/16/2001

10

1

31

2001

2/1/2001

2/1/2001

11-14

12

15

2001

12/16/2001

12/16/2001

15

12

31

2001

1/1/2002

1/1/2002

16

2

15

2001

2/16/2001

2/16/2001

17

2

28

2004

2/29/2004

3/1/2004

18

2

28

2001

3/1/2001

3/1/2001

19

2

29

2004

3/1/2004

3/1/2004

20

2

29

2001

不可能

输入日期不符合条件

21,22

2

30

2001

不可能

输入日期不符合条件

【实验总结】

1.测试覆盖性: 决策表测试方法能够帮助设计出全面而紧凑的测试用例,覆盖了系统的各个方面,确保了测试的全面性。

2.问题发现: 在测试过程中,可能会发现系统中的一些潜在问题和错误,及时发现并修复这些问题,提高了软件的质量。

3.效率提升: 决策表测试方法相对于随机测试或者猜测性测试,能够更高效地进行测试,减少测试工作的时间和成本。

4.可重复性: 通过决策表测试,测试用例的设计是可重复的,可以在不同的测试周期中进行重复使用,提高了测试的可维护性。

5.改进机会: 如果在测试过程中发现了系统设计中的一些不足之处,可以提供反馈并推动系统的改进。

总体而言,决策表测试是一种强大的测试方法,有助于提高测试效率、全面性和准确性。通过实验总结,可以不断优化测试过程,确保软件系统的质量得到有效地保障。

【附-程序源码】
  1. 三角形问题
    #include <iostream>
    using namespace std;
    
    int main() {
        int a, b, c;
        while (
        cin >> a >> b >> c) { 
    
        if (a >= 1 && b >= 1 && c >= 1 && a <= 100 && b <= 100 && c <= 100) {
            if (a + b > c && a + c > b && b + c > a) {
                if (a == b && b == c) {
                    cout << "等边三角形" << endl;
                } else if (a == b || b == c || a == c) {
                    cout << "等腰三角形" << endl;
                } else {
                    cout << "不等边三角形" << endl;
                }
            } else {
                cout << "非三角形" << endl;
            }
        } else {
            cout << "输入不合法" << endl;
        }
        }
        return 0;
    }
    
  2. NextDate函数
    #include <iostream>
    using namespace std;
    
    bool IsLeapYear(int year) {
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
            return true;
        } else {
            return false;
        }
    }
    
    bool IsValidDate(int month, int day, int year) {
        if (month < 1 || month > 12 || day < 1 || day > 31 || year < 1912 || year > 2050) {
            return false;
        }
    
        if (month == 4 || month == 6 || month == 9 || month == 11) {
            return (day <= 30);
        } else if (month == 2) {
            if (IsLeapYear(year)) {
                return (day <= 29);
            } else {
                return (day <= 28);
            }
        } else {
            return true;
        }
    }
    
    void NextDate(int &month, int &day, int &year) {
        day++;
    
        if (day > 31 || (day > 30 && (month == 4 || month == 6 || month == 9 || month == 11)) ||
            (day > 29 && month == 2 && IsLeapYear(year)) || (day > 28 && month == 2)) {
            day = 1;
            month++;
        }
    
        if (month > 12) {
            month = 1;
            year++;
        }
    }
    
    int main() {
        int month, day, year;
        while(cin >> month >> day >> year){  // 以空格分隔输入
        if (!IsValidDate(month, day, year)) {
            cout << "输入日期不符合条件" << endl;
            continue;
        }
         NextDate(month, day, year);
    
        cout << month << "/" << day << "/" << year << endl;
        }
        return 0;
    }
    
    

  • 27
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值