因果图法—软件测试流程设计(3)

发表于:2020-3-27 09:44  作者:51Testing教研团队   来源:51Testing软件测试网原创

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签: 软件测试 软件测试流程 软件测试技术

  1.1.4 因果图法
  1.什么是因果图法
  因果图用于描述系统的输入和输出之间的因果关系、输入和输入之间的约束关系。因果图的绘制过程是对被测试系统外部特征的建模过程。根据系统输入和输出之间的因果图可以得到判定表,从而规划出测试用例。因果图法和判定表法在实际中往往同时使用,此时可以把因果图法视为判定表法的前置过程。对于一些简单的系统,或者输入与输出的逻辑关系已经非常明确的系统,可以只使用判定表法。
  因果图需要描述下面的关系。
  (1)输入与输出之间的因果关系。因果图的表示中,输入与输出间的因果关系有以下4种。
  恒等关系:当出现输入项时,会产生对应输出项;当不出现输入项时,不会产生对应输出项。
  非关系:与恒等关系相反。
  或关系:多个输入条件中,只要有一个出现,就会产生对应输出。
  与关系:多个输入条件中,只有所有输入项出现时,才会产生对应输出项。
  输入与输出的因果关系分别如图1-8(a)~(d)所示。
  (2)输入与输入之间的约束关系。因果图的表示中,输入与输入之间的约束关系有以下4种。
  异关系:所有输入中至多一个输入条件出现。
  ▲图1-8 输入与输出的因果关系
  或关系:所有输入中至少一个输入条件出现。
  唯一关系:所有输入中有且只有一个输入条件出现。
  要求关系:所有输入中只要有一个输入条件出现,其他输入也会出现。
  对应的因果图输入之间的约束关系如图1-9(a)~(d)所示。
  ▲图1-9 输入之间的约束关系
  2.如何使用因果图法
  因果图法具体的实施步骤如下。
  (1)标识输入和输出。
  逐项分析测试子项的测试规格,找出其中的输入和输出并标识出来,其中要注意以下几点。
  ① 输入需要包括外部消息输入、内部预置的用户状态、数据配置等所有对系统输出有影响的因素。
  ② 如果输入和输出项只涉及两种取值(真和假;是和否),在两种取值中可以只把一个标识出来。如果输入项涉及多种取值,则每个取值需要作为一个输入标识出来。
  ③ 标识符可以自己确定,但输入与输出需要独立标识。
  (2)画出因果图。
  ① 分析测试需求和SRS等参考文档,针对每个测试子项的测试规格,分析输入与输出之间、输入与输入之间的关系,根据这些关系,画出因果图。
  ② 由于语法或环境限制,有些输入与输入之间、输入与输出之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号表示约束条件或限制条件。
  (3)将因果图转换为判定表。
  ① 将输入和输出分别填入条件桩与动作桩,并在条件项中填满输入的所有组合,若输入有n项,则组合的列数应该为2n。
  ② 根据因果图中的输入条件约束关系,对不可能出现的输入组合,在动作项上做出删除标记。
  ③ 根据因果图中的输入与输出的因果关系,在动作项上标出对应动作的结果。
  (4)简化判定表(可选)。
  可参照1.1.3节中判定表法的简化步骤。
  (5)生成测试用例。
  简化后的判定表的每一列可以规划为一个测试用例,它的输入和输出都已经非常明确。
  3.案例1-7
  用因果图法对下面的需求进行测试。
  当想对文件进行修改时,输入的第1列字符必须是A或B,第2列字符必须是一个数字。如果第1列字符不正确,则给出信息L;如果第2列字符不正确,则给出信息M。
  (1)分析了上面的规格说明要求后,我们可以很明确地把原因和结果分开。
  
  (2)在这个例子的规格说明中,很明确地给出了原因和结果之间的对应关系,根据原因和结果之间的对应关系用相应的逻辑符号连接起来,并画出因果图,如图1-10所示。
  在图1-10中左侧列表示原因,右侧列表示结果,编号为k的节点表示导致结果的进一步原因。
  ▲图1-10 案例1-7的因果图
  (3)考虑到原因①和原因②不可能同时为1(即第1列不能同时为A和B),因此可以在图上对其施加E约束,这样就有了具有约束的因果图,如图1-11所示。
  ▲图1-11 具有约束的因果图
  (4)把因果图转换成判定表,如表1-15所示。
  表1-15 由因果图转化成的判定表
  
  注:由于原因①和原因②不可能同时为1,因此规则1、2属于不可能发生的组合,在编辑测试用例时可以不用考虑。
  (5)把判定表的每一列拿出来作为依据,设计测试用例,如表1-16所示。
  表1-16 由判定表转换成的测试用例
  
  注:规则3中A2表示输入的第1列为A,第2列为数字(见表1-15中的规则3),“?”表示除数字之外的任何值。
  4.案例1-8
  假设有一台自动售卖5角钱的饮料的机器(假设只接受5角钱和1元钱),其规格说明如下。
  若塞入5角钱或1元钱,按下“橙汁”或“啤酒”按钮,相应的饮料就出来了。若售货机没有零钱了,则一个显示“零钱找完”的红灯亮,这时再塞入1元钱并按下按钮,饮料就不会出来但1元钱会退回;若有零钱找,则显示“零钱找完”的红灯灭,在出来饮料的同时退还5角钱。”
  (1)分析原因和结果。
  原因如下。
  ① 售货机有零钱。
  ② 塞入1元硬币。
  ③ 塞入5角钱。
  ④ 按下“橙汁”按钮。
  ⑤ 按下“啤酒”按钮。
  结果如下。
  u售货机中“零钱找完”的红灯亮。
  v退还1元硬币。
  w找5角硬币。
  x出来橙汁饮料。
  y出来啤酒饮料。
  (2)分析输入和输出之间的关系以及输入与输入之间的约束关系,如图1-12所示。
  5.实际应用
  通过画因果图能更好地让测试人员了解需求、理解需求,高效地生成判定表,因此因果图法通常作为一种辅助的方法。当能很快得到判定表的时候,就不需要画因果图了。只有当处理过程过于复杂,导致不太容易理解的需求时,才会使用因果图法。
  ▲图1-12 案例1-8的因果图
  6.总结
  判定表法、因果图法普遍适用于对复杂逻辑关系的需求进行用例设计
  其优点主要有以下几方面。
  充分考虑了输入条件间的组合,对组合情况覆盖充分。
  最终每个用例覆盖多种输入情况,有利于提高测试效率。
  在设计过程中,考虑了输入条件间的约束关系,避免了无效用例,用例的有效性高。
  能同时得出每个测试项目的预期输出结果。
  其缺点主要有以下几个方面。
  当被测试需求的输入较多时,判定表的规模将会非常庞大。
  输入之间的约束条件不能有效区分输入是否确实需要进行组合测试,会造成不需要组合测试的输入做了组合,从而产生用例冗余。
  简化如下。
  前面已经提到,当测试需求的输入比较多时,会造成因果图和判定表规模庞大。考虑到每个测试需求可以细分为若干个功能流程,而这些功能流程都有自己各自的输入,因此功能流程间的输入是不需要进行组合的。为了简化工作量,在应用判断表法、因果图法等方法前建议对特性进行功能流程细分,然后对每个功能流程采用上述方法。
  注意:规则的化简、合并造成了漏测的风险。一个显而易见的原因是,虽然某个输入条件在输出接口上是无关的,但是在软件设计上,内部针对这个条件选择了不同的程序分支。因为某个输入条件由分析的内部业务流程而定,所以在化简时要谨慎分析。
  7.练习
  练习1-5 根据以下关于中国象棋软件中走马规则的描述,分析其因果图,并设计用例。
  如果落点在棋盘外,则不移动棋子。
  如果落点与起点不构成日字型,则不移动棋子。
  如果落点处有自己方的棋子,则不移动棋子。
  如果在落点方向的邻近交叉点有棋子(绊马腿),则不移动棋子。
  如果不属于以上4条,且落点处无棋子,则移动棋子。
  如果不属于以上4条,且落点处为对方棋子(非老将),则移动棋子并吃掉对方棋子。
  如果不属于以上4条,且落点处为对方老将,则移动棋子,并提示战胜对方,游戏结束。
  1.2  白盒测试用例设计方法
  有时在黑盒测试中虽然没有发现问题,但是并不能说明程序代码中没有缺陷。比如,虽然在程序代码中存在着一些内存泄露,但是因为在黑盒测试中的运行时间短,所以并不能发现问题。再比如,程序中往往存在着很多的异常处理分支语句,在黑盒测试中,有些分支可能并没有测试到。而没有测试到的代码不能保证它运行正确,在以后的系统运行过程中,如果执行到这些分支语句,则很可能出现问题。另外,如果有些异常或错误情况在系统测试过程中很难满足条件,就需要使用白盒测试方法分析源代码(确认何时能够触发这些代码的运行,触发条件是否合理,能否达到要求)。
  当我们了解了白盒测试与黑盒测试之间的互补关系后,还要系统了解白盒测试方法。由于白盒测试主要检查程序的内部结构,因此根据被测程序是否运行,白盒测试也可分为静态白盒测试和动态白盒测试两种。
  下面先对动态白盒测试方法进行说明。假设下列代码需要进行测试。
   public int simpleCal(int A,int B,int X){
      if(A>1&&B==0){
        X=X/A;
  }
  if(A==2||X>1){
      X=X+1;
  }
     return X;
  }
  

查看《软件测试流程设计 从传统到敏捷》全部连载内容>>
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。 

评 论

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海瀛东律师事务所 张楠律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2020, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道