专栏首页授客的专栏测试思想-测试设计 测试用例设计之因果图方法

测试思想-测试设计 测试用例设计之因果图方法

by:授客 QQ:1033553122

一.方法简介

1.定义

是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。

2.因果图法产生的背景:

等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。

如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)。

3.因果图介绍

1) 4种符号分别表示了规格说明中向4种因果关系。

2) 因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。

3) Ci表示原因,通常置于图的左部;ei表示结果,通常在图的右部。Ci和ei均可取值0或1,0表示某状态不出现,1表示某状态出现。

4. 因果图概念

1) 关系

①恒等:若ci是1,则ei也是1;否则ei为0。

②非:若ci是1,则ei是0;否则ei是1。

③或:若c1或c2或c3是1,则ei是1;否则ei为0。“或”可有任意个输入。

④与:若c1和c2都是1,则ei为1;否则ei为0。“与”也可有任意个输入。

前面两者①,②,考虑的是单个输入(原因)和输出(结果)之间的关系:也就是输入为真(假)时,输出的值为真还是假的对应关系,很自然的,我们很容易想到有两种情况:一种和输入同真同假,一种和输入相反。

后面两者③,④,考虑的是多个输入之间的组合输入和输出之间的关系:我们也很容易想到:一种是组合关系为或(or),一种组合关系为组合(and),满足这种组合关系得出的输出才为真,否则为假

2) 约束

输入状态相互之间还可能存在某些依赖关系,称为约束。例如, 某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。在因果图中,用特定的符号标明这些约束。

A.输入条件的约束有以下4类:

① E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1。

② I约束(或):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0。

③ O约束(唯一):a和b必须有一个,且仅有1个为1。

④ R约束(要求):a是1时,b必须是1,即不可能a是1时b是0。

B.输出条件约束类型

输出条件的约束只有M约束(强制):若结果a是1,则结果b强制为0。

5. 采用因果图法设计测试用例的步骤

1)分析软件规格说明描述中, 哪些是原因(即输入条件或输入条件的等价类), 哪些是结果(即输出条件), 并给每个原因和结果赋予一个标识符。

2)分析软件规格说明描述中的语义,找出原因与结果之间, 原因与原因之间对应的关系,根据这些关系,画出因果图。

3)由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不可能出现,为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件。

4)把因果图转换为判定表。

5)把判定表的每一列拿出来作为依据,设计测试用例。

二.实战演习

1.某软件规格说明书包含这样的要求:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。

解答:

1) 找出原因(输入)和结果(输出):

原因:

C1.第一列字符为A?;

C2.第一列字符为B?;

C3.第二列字符为数字?

技巧:如上,查找原因时将输入有效等价类和输入无效等价类看作是同一个原因的正反面取值,即查找有效等价类,然后加上问号

结果:

e1.修改文件

e2.给出信息L

e3.给出信息M 2) 其对应的因果图如下:

考虑到原因1和原因2不可能同时为1,因此在因果图上施加E约束。

注意,学习添加中间结果节点

3) 根据因果图建立判定表。

表中,C1和C2是不可能同时为1的,即不可能同时出现,所以应排除这两种情况。

4)用例设计

针对每一条规则(C,D列除外)设计一条用例

2.有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。

1) 分析这一段说明,列出原因和结果

原因:

C1:投入1元钱?

C2:投入5角钱?

C3: 押下橙汁?

C4:押下啤酒?

C5:售货机有零钱找?

C6:中间结果,按下按钮?

C7:中间结果,找钱成功?

结果:

e1:送出橙汁

e2:送出啤酒

e3:高亮【零钱找完】的红灯

e4:退出1元硬币

e5: 熄灭【零钱找完】的红灯

e6:退出5角硬币

2)画出因果图

说明:因果图需要对需求和逻辑理解很透彻,不同的理解画出的因果图不同,自然设计难易程度也就不一样,个人建议少用因果图,多用场景法,因为相比之下,场景法设计用例实施起来会比较容易

3)转换为判定表

4)简化判定表

5)用例设计

pdf版下载:

测试用例设计之因果图方法.pdf

参考文章: 测试用例设计白皮书_张元礼

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Nginx 日志格式配置介绍

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '

    授客
  • JQuery jquerysessionjs插件使用介绍

    https://gitee.com/ishouke/front_end_plugin/blob/master/jquery-3.2.1.min.js

    授客
  • Easyui datagrid 修改分页组件的分页提示信息为中文

    直接引入中文locale目录下的easyui-lang-zh_CN.js,引入时注意js的引入顺序,避免js直接的相互影响,比如后面引入的js覆盖前面引入的js

    授客
  • 红帽子RHCS套件安装与配置(二)

    系统环境: RHEL6.4     iptables 关闭     selinux is disabled https://access.redhat.com/...

    BG彪
  • 使用Qt Designer 设计主窗口

    选中Type Here 处 双击(或按 Enter键)编辑菜单名。输入完毕后按Enter 键 确认,可继续编辑下一个菜单项。如有必要,可以在菜单项之间添加分隔符...

    用户6021899
  • Python模拟决赛现场最终得分计算过程

    代码执行过程:首先输入评委人数,然后依次输入每个评委给出的得分,接下来分别去掉最高分和最低分,最终给出平均分。在输入过程中使用异常处理结构保证评委人数和每个评委...

    Python小屋屋主
  • k8s源码-揭开scheduler的算法面纱(上)

    预选和优选算法都在 pkg/scheduler/algorithm包下,在该包同级的包algorithmprovider注册默认算法(其实是将算法名字和func...

    ascehuang
  • 写Laravel测试代码(1)

    写laravel程序时,除了写生产代码,还需要写测试代码。其中,写数据库测试比较麻烦,因为需要针对每一个test case需要建立好数据集,该次test cas...

    botkenni
  • 7-2 树种统计 (20 分)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    韩旭051
  • Python3实现PTA平台-基础编程题目集(1)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    村雨遥

扫码关注云+社区

领取腾讯云代金券