人的一生当中,难免遭遇不愉快的经历。譬如学习成绩不佳,求职困难,公司裁员等。以公司裁员为例,2019年初Oracle裁撤中国区研发中心,预计裁员900人,这900人当中,有多少人曾经顶着天子骄子的光环,如今这般遭遇,令人唏嘘不已。为什么会出现裁员的现象?Oracle究竟出现了什么问题?
有人说是Oracle进行方向调整、业务重组,以云计算服务为核心,非主要部门将进行裁员。也有人说是时代抛弃了Oracle,免费时代对垄断的商业付费产生了变革。更有人说,Oracle靠着老本养了一群老油条,这是一次壮士断腕的选择。
上述缘由又会受到其他因素的影响,通过头脑风暴我们可以分析出这些影响因素,并将它们按关联性整理成层次分明、条例清晰的结构,最终形成这次Oracle的裁员根因分析。这就是鱼骨图分析法,也叫因果图分析法。
鱼骨图是由日本管理大师石川馨先生所发明,它是对问题的 根因 进行分析的方法,透过现象看本质的方法。
1、 什么是因果图
在软件测试设计中,因果图用于 输入与输入、输入与输出 存在依赖与约束关系的被测对象。因果图是一种利用图解法分析输入的各种组合情况,从而进行测试用例设计。
等价类和边界值分析法同样是对输入条件的测试分析,但其输入条件之间并不存在任何关联或约束,且必须相互独立(等价类的原则之一)。
2、 因果图的关系
在进行因果图图解之前,你需要先了解因果图特有的术语和语法(关系图)。
2.1 因果关系
1. 恒等 (是1则1)
- 若原因出现,则结果出现;若原因不出现,则结果也不出现。
- 若C1是1,则E1也是1
- 若C1是0,则E1也是0
例:商场购物,买单后才会打印凭条,没有买单是不会打印的。
2. 非 ~ (是1则0)
- 若原因出现,则结果不出现;若原因不出现,则结果出现。
- 若C2是1,则E2是0
- 若C2是0,则E2是1
例:用手机逛淘宝,如果有网络,则不提示网络异常, 如果没有网络,则提示网络异常。
3. 或 U (其中一个是1则为1)
- 若原因中的一个有出现,则结果出现,若所有原因都不出现,则结果不出现。
- 若C3或C4或C5是1,则E3是1
- 若C3和C4和C5是0,则E3是0
例:手机、电脑、平板、电视,拥有其中之一就可以看视频,如果都没有则无法看视频。
4. 与 ^ (全部为1才是1)
- 若所有原因都出现,则结果出现,若原因中的一个不出现,则结果不出现。
- 若C3和C4和C5是1,则E4是1
- 若C3或C4或C5是0,则E4是0
例:手机要有电、有网络信号,才能上网,没电或没网络信号,则不能上网
2.2 条件约束
1. 异或/互斥(Exclusive)
- C1/C2/C3中至多一个为 1
例:你要赶赴约会地点,只能选择步行、自行车、打车、坐地铁、开车中的一个。同时,也可以都不选择,猫在家里爽约。
2. 或(Inclusive)
- C1、C2中至少一个必须是 1
例:你和女朋友想在家里看电影,手机、平板、电视、电脑都可以是选择,但是必须选择至少其中一个。
3. 唯一(Only)
- C1和C2必须有且只有一个是1
例:要想进入地铁站闸口,那你必须从 交通卡、微信支付、临时票 中选择其中一个。
4. 要求(Require)
- C1出现时,C2必出现。C1不出现时,C2不确定。
例:在篮球场上打球,如果出手投篮(C1),则必然拥有球权(C2)。如果没有出手投篮,也无法确定是否拥有球权。
5. 强制(Mask)
- C1出现时,C2必不出现。C1不出现时,C2不确定。
例:如果你在公司了,则你必定不在家。如果你不在公司,你也未必在家。
3、 分析步骤
- 分析被测对象的规格,找出原因与结果
- 确定因果关系,画出因果图
- 确定因果图中的约束,并做好标记
- 把因果图转换为判定表
- 用判定表设计测试用例
4、 实例
4.1 在自助机器进行地铁卡的充值
要求:
- 自助机器只接收50元或100元纸币,一次只能使用一张纸币
- 一次充值金额只能为50元或100元
-
分析对象的原因和结果:
-
画出因果图:C1和C2是或关系,C3和C4是或关系
-
因果图增加约束:C1和C2只能出现一个,C3和C4只能出现一个
-
转换成判定表,并通过约束去除无效用例
-
根据判定表生成测试用例
5 小结
因果图分析是为有效测试分析的辅助工具,通过因果图分析可以得到判定表。判定表根据约束进行用例的有效性分析,最终输出测试用例。但是很多时候,绘制因果图是非常麻烦,非常影响效率,所以在熟练之后,可以直接写判定表,进而编写测试用例。
- 黑盒测试设计专题:边界值
- 黑盒测试设计专题:等价类
- 软件测试活动分类:按测试覆盖分类
- 软件测试活动分类:按测试方法分类
- 软件测试活动分类:按测试阶段分类
- 软件测试活动分类:按质量属性分类
- Python自动化:Pytest快速入门
- Python自动化:requests编写接口用例
- Python自动化:Selenium编写Web用例
- Python自动化:Appium编写App用例
- Python自动化:自动化测试脚本优化