对NextDate问题运用决策表法设计测试用例并执行测试用例

一、实验目的

1、掌握决策表的概念。

决策表,也叫判定表。在所有的功能性测试方法中,基于决策表的测试方法被认为是最严格的,因为决策表具有逻辑严格性。

决策表是分析和表达多逻辑条件下执行不同操作的情况的工具。在程序设计发展的初期,决策表就已被用作编写程序的辅助工具了。它可以把复杂的逻辑关系和多种条件组合的情况表达得比较明确。方便程序员无需知道背后复杂的逻辑关系就能看出动作对应的状态。

决策表
在所有功能性测试方法中,基于决策表的测试方法是最严格的,因为决策表具有逻辑严格性。
决策表一直被用来表示和分析复杂逻辑关系。决策表很适合描述丌同条件集合下采取行动的若干组合的情况。
决策表有四个部分:桩部分条目部分条件部分行动部分

决策表通常由4个部分组成:

●条件桩(condition stub):列出了问题的所有条件。通常认为列出的条件的次序无关紧要。 

●动作桩(action stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。 

●条件项(condition entry):列出针对它所列条件的取值,在所有可能情况下的真假值。      

●动作项(action entry):列出在条件项的各种取值情况下应该采取的动作。                   

●规则:任何一个条件组合的特定取值及其相应要执行的操作。在决策表中贯穿条件项和动作项的一列就是一条规则。显然,决策表中列出多少组条件取值,也就有多少规则,条件项和动作项就有多少列。

2、掌握决策表测试用例设计法。

决策表的测试
决策表的条件是真值表
保证能够考虑了所有可能的条件组合
使用决策表标识测试用例,能够保证一种完备的测试
为了使用决策表标识测试用例,我们把条件解释为输入,把行动解释为输出。
决策表是说明性的,给出的条件没有特别的顺序,而且所选择的行动发生时也没有任何特定顺序

二、实验任务

       对NextDate问题运用决策表法设计测试用例,并执行测试,撰写实验报告。

NextDate (int month, int day, int year)函数规定输入三个整数:month、day和year,函数的输出为输入日期后一天的日期。例如,输入为2006年3月7日,则函数的输出为2006年3月8日year满足1920≤year≤2050

实验步骤:

1、构造决策表

根据所有可能出现的情况列出条件桩和动作桩如下表:

条件桩

月份

M1: {month=4,6,9,11}

M2: {month=1,3,5,7,8,10}

M3: {month=12}

M4: {month=2}

天数

D1: {1≤day≤26}

D2: {day=27}

D3: {day=28}

D4: {day=29}

D5: {day=30}

D6: {day=31}

年份

Y1:  {year是闰年}

Y2:  {year不是闰年}

动作桩

A1:day++

A2:day=1

A3:month+1

A4:month=1

A5:year+1

A6:格式有误

根据上边得出决策表:

情况1

情况2

情况3

情况4

情况5

情况6

情况7

情况8

情况9

情况10

情况11

月份

M1

M1

M1

M2

M2

M3

M3

M4

M4

M4

M4

天数

D1/D2

/D3/D4

D5

D6

D1/D2/

D3/D4/D5

D6

D1/D2/

D3/D4/D5

D6

D1/D2/

D3

D4

D4

D4/D5

/D6

年份

Y1/Y2

Y1/Y2

Y1/Y2

Y1/Y2

Y1/Y2

Y1/Y2

Y1/Y2

Y1/Y2

Y1

Y2

Y1/Y2

动作

A1

A3,A2

A6

A1

A3,A2

A1

A5,A4,A2

A1

A3,A2

A6

A6

简化后:

情况1,4,6,8

情况2,5,9

情况3,10,11

情况7

月份

M1,M2,M3,M4

M1,M2,M3

M1,M4

M3

天数

D1,D2,D3,D4

D5

D6

D6

年份

Y1,Y2

Y1,Y2

Y1,Y2

Y1,Y2

动作

A1

A3,A2

A6

A5,A4,A2

2、根据决策表设计测试用例,得到测试用例表。

测试用例编号

输入

月份:天数:年份

预期输出

实际输出

T1

3:21:1919

格式有误

请输入月份、天数、年份:3 21 1919

输入有误!

T2

2:28:1920

1920年2月29日

请输入月份、天数、年份:2 28 1920

下一天是:1920年2月29日

T3

3:31:1921

1921年4月1日

请输入月份、天数、年份:3 31 1921

下一天是:1921年4月1日

T4

13:15:1930

格式有误

请输入月份、天数、年份:13 15 1930

输入有误!

T5

12:30:2024

2024年12月31日

请输入月份、天数、年份:12 30 2024

下一天是:2024年12月31日

T6

2:30:1928

格式有误

请输入月份、天数、年份:2 30 1928

输入有误!

T7

2:29:1928

1928年3月1日

请输入月份、天数、年份:2 29 1928

下一天是:1928年3月1日

T8

11:30:2040

2040年12月1日

请输入月份、天数、年份:11 30 2040

下一天是:2040年12月1日

T9

1:29:2051

格式有误

请输入月份、天数、年份:1 29 2051

输入有误!

T10

12:31:2050

2051年1月1日

请输入月份、天数、年份:12 31 2050

下一天是:2051年1月1日

3、执行测试。

4、填写软件缺陷报告。

测试缺陷报告:

测试模块:

输入月份/天数/年份,输出下一天

开 发 者:

XXX

测 试 员:

XXX

测试日期:

2024.4.10

软件缺陷列表

缺陷ID

缺陷详细信息

BUG1

BUG2

BUG3

BUG4

5、代码(C)

#include <stdio.h>
#include <stdlib.h> 
	int main(){
        int year;
        int month;
        int day;
        printf("请输入月份、天数、年份:");
        scanf("%d %d %d",&month,&day,&year);
        while(year>2050||year<1920)
        {
            printf("输入有误!\n");
            return 0;
        }
        while(month>12||month<1)
        {
            printf("输入有误!\n");
            return 0;
        }
        if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
        {
            while(day>31||day<1)
            {
                printf("输入有误!\n");
            	return 0;
            }
        }
        if(month==4||month==6||month==9||month==11)
        {
            while(day>30||day<1)
            {
                printf("输入有误!\n");
            	return 0;
            }
        }
        if((year%4==0&&year%100!=0)||(year%400==0))
        {
            if(month==2)
            {
                if(day>29)
                {
                    printf("输入有误!\n");
            		return 0;
                }
                else
                {
                    if(day==29)
                    {
                        day=1;
                    }
                    else
                    {
                        day++;
                    }
                }
            }
        }
        else
        {
            if(month==2)
            {
                if(day>28)
                {
                    printf("输入有误!\n");
            		return 0;
                }
                else
                {
                    if(day==28)
                    {
                        day=1;
                    }
                    else
                    {
                        day++;
                    }
                }
            }
        }
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
                if(day==31)
                {
                    month++;
                    day=1;
                    printf("下一天是:%d年%d月%d日\n",year,month,day);
                    break;
                }
                else
                {
                    day++;
                    printf("下一天是:%d年%d月%d日\n",year,month,day);
                    break;
                }
            case 2:
                if(day==1)
                {
                    month++;
                    printf("下一天是:%d年%d月%d日\n",year,month,day);
                    break;
                }
                else
                {
                    printf("下一天是:%d年%d月%d日\n",year,month,day);
                    break;
                }
            case 4:
            case 6:
            case 9:
            case 11:
                if(day==30)
                {
                    month++;
                    day=1;
                    printf("下一天是:%d年%d月%d日\n",year,month,day);
                    break;
                }
                else
                {
                    day++;
                    printf("下一天是:%d年%d月%d日\n",year,month,day);
                    break;
                }
            case 12:
                if(day==31)
                {
                    year++;
                    month=1;
                    day=1;
                    printf("下一天是:%d年%d月%d日\n",year,month,day);
                    break;
                }
                else
                {
                    day++;
                    printf("下一天是:%d年%d月%d日\n",year,month,day);
                    break;
                }
        }
        return 0;
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

珞(●'◡'●)雨了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值