常用测试用例设计方法-因果图
因果图测试用例设计因果图理论因果图设计过程举个经典的例子:象棋的走马规则因果图的优缺点通过因果图发现过的BUG个人心得因果图测试用例设计
因果图理论
因果图是用于描述系统的输入、输出以及输入和输出之间的因果关系、输入和输入之间的约束关系。因果图的绘制过程是对被测试系统外部特征的建模过程。在实际测试过程中,因果图和判定表两种方法往往同时使用,根据系统输入和输出间的因果图可以得到判定表,根据判定表产生设计测试用例。
表示输入与输出间的因果关系有以下四种:
(1)恒等关系:当输入项发生,会产生对应输出;当输入项不发生时,不会产生对应输出。
(2)非关系:与恒等关系相反。
(3)或关系:多个输入条件中,只要有一个发生,则会产生对应输出。
(4)与关系:多个输入条件中,只有所有输入项都发生,才会产生对应输出。
四种因果关系对应的因果图表示方法如下:
表示输入与输入间的约束关系也有四种:
(1)异:所有输入中至多一个输入条件发生
(2)或:所有输入中至少一个输入条件发生
(3)唯一:所有输入中有且只有一个输入条件发生
(4)要求:所有输入中只要有一个输入条件发生,则其它输入也会发生
该四种约束关系对应的因果图表示方法如下图:
因果图设计过程
因果图的设计用例步骤如下:
(1)把大的系统规格分解成可以测试的规格片段
(2)分析分解后待测的系统规格,找出哪些是原因,哪些是结果
(3)画出因果图
(4)把因果图转换成判定表
(5)简化判定表
(6)用判定表中的每一项生成测试用例
举个经典的例子:象棋的走马规则
步骤1:分析象棋的走马规则如下:
(1)如果落点在棋盘外,则不移动棋子
(2)如果落点与起点不构成“日”字型,则不移动棋子
(3)如果落点处有己方棋子,则不移动棋子
(4)如果在落点方向的邻近交叉点有棋子(绊马脚),则不移动棋子
(5)如果不属于1-4条,且落点无棋子,则移动棋子
(6)如果不属于1-4条,且落点有对方的棋子(非老将),则移动棋子并除去对方棋子
(7)如果不属于1-4条,且落点为对方老将,则移动棋子,移除老将,并提示战胜对方,游戏结束。
步骤2:分析以上以上原因,得出原因与结果:
(1)原因:
1.落点方向的邻近交叉点无棋子
2.落点与起点构成“日”字
3.落点处有己方棋子
4.落点在棋盘外
5.落点处无棋子
6.落点处为对方非老将棋子
7.落点处为对方老将
(2)中间结点:
8.允许移动
(3)结果:
9.不移动棋子
10.只移动棋子
11.移动棋子并除去对方棋子
12.移动棋子并提示战胜对方,游戏结束
步骤3:根据原因与结果画出因果图如下:
接下来的步骤将因果图转化为判定表,再根据判定表转化测试用例,在此不多描述了,因果图设计测试用例的重点就是画出因果图
因果图的优缺点
使用因果图设计测试用例有以下优点:
(1)尽管等价类法将各个输入条件可能出错的情况都考虑到了,但是多个输入条件组合起来出错的情况却被忽略了,因果图法则可以考虑多输入条件组合的情况
(2)因果图法能够帮助我们按照一定步骤高效地选择测试用例,设计多个输入条件组合用例。
(3)因果图法还能为我们指出程序规格说明描述中存在的问题。
使用因果图设计测试用例也存在以下缺点:
(1)输入条件与输出结果的因果关系,有时难以从需求规格说明书得到。
(2)即使得到了这些因果关系,也会因为因果关系复杂导致因果图非常庞大,测试用例数目极其庞大。
通过因果图发现过的BUG
商城活动的需求说明为:活动商品不能使用正常优惠券,可以使用代金券或活动优惠券(不能同时使用)
那么根据因果关系得出的一条用例为(代金券与活动优惠券同时使用)
由于开发没有加上同时使用的判断,导致优惠金额叠加,不符合需求。
个人心得
因果图绘制过程十分耗时,最后还得转换成判定表,对于思路清晰的同学可以直接跳过因果图的绘制过程,直接输出判定表;对于逻辑复杂,因果关系复杂的输入/输出点,再使用因果图,没必要所有因果列出。还有以上的逻辑关系画法,其实相当与给自己画的思路图,只要最后得出思路清晰的图能转换判定表即可,本人极其少用,甚至在面试过程中被问到使用会使用因果图,直接回答:因为因果图都是要转换判定表的,所以我都是直接输出判定表的。