等价类、决策表测试

问题:输入年月日year、month、day,其中年份的有效取值范围为[1818,2018],请输出输入日期的前一天,例如输入2018年9月18日,输出为2018年9月17日。若输入日期非法,例如输入2013年2月30日,则输出“输入日期不存在”,若输入日期超出取值范围,例如输入2013年9月32日,则输出“输入日期超出范围”。

试采用决策表测试方法(弱健壮等价类测试)对上述问题设计等价类、决策表,并给出相应测试用例。

解:

  采用弱健壮性等价类测试设计

  弱健壮性等价类测试要求:对于有效输入,使用每一个有效类的一个值,对于无效输入,测试用例将拥有一个无效值,并保持其余的值都是有效的。根据确定等价类的原则:

  1. 输入条件规定了取值范围,或者值的个数,则可以确定一个有效等价类和两个无效等价类。
  2. 规定了输入数据的一组值,而且程序要对每一个输入值分别进行处理,这时要对每一个规定的输入值确立一个等价类,而对于这组值之外的所有值确立一个等价类
  3. 规定了输入数据必须遵守的规则,则可以确立一个有效等件类(即遵守规则的数据)和若干无效等价类
  4. 确知以划分的等价类中的各元素在程序中的处理方式不同,则应进一步划分成更小的等价类.

等价类划分:

有效等价类:基于输入域:

D1={day:1<=day<=28}; D2={day:day=29} ;  

D3={day:day=30} ,D4={day:day=31}

Y1={year:1818<=year<=2018;且year是平年}

Y2={year:1818<=year<=2018;且year是闰年}

            M1={monthmonth有30天};M2={monthmonth有31天,除去12月}

            M3={monthmonth为12月};M4={monthmouth是2月}

            基于输出域;

            P1={“输入日期不存在”}

            P2={“输入日期超出范围}

P3={“输出正常前一天”}

无效等价类:

M8={mouth:mouth<1},M9={mouth:mouth>12};

D8={day:day<1},D9={day:day>31};

Y8={year:year<1818}、Y9={year;year>2018};

根据等价类:列出条件桩与动作桩

条件桩:

“日”在D1中、“日”在D2中、“日”在D3中、“日”在D4中、“日”在D8中、

“日”在D9中

“年”在Y1中、“年”在Y2中、“年”在Y8中、“年”在Y9中

“月”在M1中、“月”在M2中、“月”在M3中、“月”在M4中、“月”在M8中

“月”在M9中.

动作桩:

 P1、P2、P3。

结合弱等价类健壮性测试以及决策表设计测试用例如下。

“-”代表取不到值,因为有些条件互斥。很容易看出这是带有互斥条件的决策表。

决策表:每一列代表一个测试用例。

序号

1

2

3

4

5

6

7

8

9

10

 

 

 

 

 

 

 

 

条件

Y1

1

1

-

-

1

-

-

-

-

-

Y2

-

-

1

1

-

1

-

-

1

1

Y8

-

-

-

-

-

-

1

-

-

-

Y9

-

-

-

-

-

-

 

1

-

-

M1

-

1

-

1

-

-

1

1

1

1

M2

-

-

1

-

-

-

-

-

-

-

M3

1

-

-

-

-

-

-

-

-

-

M4

-

-

-

-

-

-

-

-

-

-

M8

-

-

-

-

1

-

-

-

-

-

M9

-

-

-

-

-

1

-

-

-

-

D1

-

-

1

-

-

-

-

-

-

-

D2

-

-

-

-

-

-

-

-

-

-

D3

-

1

-

1

1

1

1

1

-

-

D4

1

-

-

-

-

-

-

-

-

-

D8

-

-

-

-

-

-

-

-

1

-

D9

-

-

-

-

-

-

-

-

-

1

 

动作

P1

0

0

0

1

0

0

0

0

0

0

P2

0

0

0

0

1

1

1

1

1

1

P3

1

1

1

0

0

0

0

0

0

0

 

具体的测试用例如下:

测试用例:

测试用例

输入

期望输出

    覆盖等价类

Year

Mouth

Day

1

2000

1

6

200015

Y2,M2,D1,P3

2

2000

2

30

输入日期不存在

  Y2,M1,D3,P1

3

2001

12

31

20011230

  Y1,M3,D4,P3

4

2001

4

30

2001429

  Y1,D3,M1,P3

5

2001

0

30

输入日期超出范围

  Y1,D3,M8,P2

6

2000

18

30

输入日期超出范围

Y2,D3,M9,P2

7

1000

4

30

输入日期超出范围

Y8,D3,M1,P2

8

3000

4

30

输入日期超出范围

Y9,D3,M1,P2

9

2000

4

0

输入日期超出范围

Y2,D8,M1,P2

10

2000

4

200

输入日期超出范围

Y2,D9,M1,P2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小大整数对象池及intern机制

1. 小整数对象池 Python 对⼩整数的定义是[-5, 256] 2. 大整数对象池 每⼀个⼤整数&#xff0c;均创建⼀个新的对象。 a 100 b 100 # print(a is b) True # 代码块 c 1000 d 1000 print(c is d) # True class Foo(object): a 1000 c 1000 class …

Apache Commons IO: 简化文件和IO操作

第1章&#xff1a;引言 咱们在做Java编程的时候&#xff0c;经常会遇到各种文件操作和输入输出&#xff08;IO&#xff09;的问题。不论是读取一个配置文件&#xff0c;还是把数据写入日志&#xff0c;这些看似简单的任务有时候会让人头疼。传统的Java IO操作&#xff0c;虽然…

LeetCode 1560. 圆形赛道上经过次数最多的扇区

文章目录1. 题目2. 解题2.1 模拟2.2 脑筋急转弯1. 题目 给你一个整数 n 和一个整数数组 rounds 。有一条圆形赛道由 n 个扇区组成&#xff0c;扇区编号从 1 到 n 。 现将在这条赛道上举办一场马拉松比赛&#xff0c;该马拉松全程由 m 个阶段组成。其中&#xff0c;第 i 个阶段…

如何用jar命令对java工程进行打包

如何用jar命令对java工程进行打包有时候为了更方便快捷的部署和执行Java程序&#xff0c;要把java应用程序打包成一个jar包。而这个基础的操作有时候也很麻烦&#xff0c;为了方便java程序员们能够方便的打包java应用程序&#xff0c;下面对jar命令进行介绍&#xff0c;并举出几…

垃圾回收:引用计数与分代收集机制

当引⽤计数为0时&#xff0c;该对象⽣命就结束了。 引⽤计数机制的优点&#xff1a; 1、简单 2、实时性&#xff1a;⼀旦没有引⽤&#xff0c;内存就直接释放了。不⽤像其他机制等到特定时机。实时性还带来⼀个好处&#xff1a;处理回收内存的时间分摊到了平时。 引⽤计数机制的…

Android 行程APP简单介绍

登录模块 数据库设计如图所示创建了如上的数据库由于没有注册功能人为添加了两个用户&#xff1a; 数据库创建语句&#xff1a; public static final String CREATE_task "create table user (" "id integer primary key autoincrement, ""remenber…

python中主要内建函数

1.__getattribute__属性访问拦截器&#xff08;内建属性 class Foo(object): def __init__(self): self.a 100 def __getattribute__(self, name): if name "a": # return self.a # __getattribute__("a") return super(Foo,self).__getattribute__(&qu…

LeetCode 1561. 你可以获得的最大硬币数目

文章目录1. 题目2. 解题1. 题目 有 3n 堆数目不一的硬币&#xff0c;你和你的朋友们打算按以下方式分硬币&#xff1a; 每一轮中&#xff0c;你将会选出 任意 3 堆硬币&#xff08;不一定连续&#xff09;。Alice 将会取走硬币数量最多的那一堆。你将会取走硬币数量第二多的那…

最近做项目的一些关于重构方面的总结

这半年做专题和项目的过程中&#xff0c;遇到一些有时很难想到问题&#xff0c;今天在这总结以下&#xff1a; 1. 关于width:100%缩小窗口时背景图片出现空白bug &#xff0c;刚开始找了半天方法都没解决&#xff0c;最后在里面加了最小宽度给解决了&#xff0c; 例如&#xff…

微信小程序 地图组件使用

本地图程序利用map组件&#xff0c;以及使用它的markers,polyline属性分别设置地图两个位置的标志以及他们之间的连线&#xff0c;利用腾讯地图的API对两个地点进行查询&#xff0c;动态设置地图的经纬度&#xff0c;以及动态初始化markers,polyline属性。 程序运行截图如下&a…

python中的集合set

集合与之前列表、元组类似&#xff0c;可以存储多个数据&#xff0c;但是这些数据是不重复的 集合对象还⽀持union(联合), intersection(交), difference(差)和 sysmmetric_difference(对称差集)等数学运算. >>> x set(abcd) >>> x {c…

LeetCode 1562. 查找大小为 M 的最新分组

文章目录1. 题目2. 解题1. 题目 给你一个数组 arr &#xff0c;该数组表示一个从 1 到 n 的数字排列。有一个长度为 n 的二进制字符串&#xff0c;该字符串上的所有位最初都设置为 0 。 在从 1 到 n 的每个步骤 i 中&#xff08;假设二进制字符串和 arr 都是从 1 开始索引的情…

HDOJ 3415 Max Sum of Max-K-sub-sequence

单调队列优化。。。。Max Sum of Max-K-sub-sequenceTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4759 Accepted Submission(s): 1734Problem DescriptionGiven a circle sequence A[1],A[2],A[3]......A[n]…

DurOS语音开发

DuerOS语音开发项目&#xff0c;该项目通过搭载DuerOS开发者平台&#xff0c;利用平台开发的一组API规范&#xff0c;实现实时的语音播报功能。 整体流程示意图&#xff1a; 所用设备&#xff1a;树莓派微机系统、arduino与74HC595单片机、地图彩灯控制沙盘、小度语音。 数据流…

Sharepoint学习笔记—习题系列--70-573习题解析 -(Q40-Q44)

Question 40You need to send a single value from a consumer Web Part to a provider Web Part.Which interface should you use?A. IAlertNotifyHandlerB. IWebPartFieldC. IWebPartParametersD. IWebPartRow 解析&#xff1a;本题的目的是在Webpart之间传递“单值”(singl…

LeetCode 1563. 石子游戏 V(DP)

文章目录1. 题目2. 解题2.1 区间DP1. 题目 几块石子 排成一行 &#xff0c;每块石子都有一个关联值&#xff0c;关联值为整数&#xff0c;由数组 stoneValue 给出。 游戏中的每一轮&#xff1a; Alice 会将这行石子分成两个 非空行&#xff08;即&#xff0c;左侧行和右侧行…

python中进程创建—fork()

导入模块&#xff1a;import os 1.程序执行到os.fork()时&#xff0c;操作系统会创建一个新的进程&#xff08;子进程&#xff09;&#xff0c;复制父进程信息 2.子进程从fork&#xff08;&#xff09;函数中得到返回值零 3.父进程从fork&#xff08;&#xff09;函数中得到返…

个人简历小程序

为了熟练掌握微信小程序开发的一些基本技巧&#xff0c;熟悉微信小程序开发流程&#xff0c;特此&#xff0c;运用所学知识&#xff0c;做了一个个人简历小程序。 效果图如下&#xff1a; 代码如下&#xff1a; ① index.jsconst app getApp() Page({ data: { userInfo: {}…

Android的Fragment介绍

前言 fragment是从android3.0开始提出来的&#xff0c;用来支持大屏幕设备的ui设计。通过将activity划分为多个fragment&#xff0c;不仅提高了设计的灵活性&#xff0c;而且可以在程序运行时改变它们的特征&#xff0c;比如动态的修改&#xff0c;替换已有的fragment等等。 fr…