实例介绍因果图法

 因果图法就是找出输入因子以及其间的影响关系,确定每组输入因子所应输出的结果,画出因果图,转换成判定表,然后生成测试用例的一个测试方法。

       我们先来看看因果图的画法:

一般来说,因果图为左因右果,以直线表示因果关系,如图:

实例介绍因果图法

表示当因子A为真时则得出B。比如,如果得分大于等于60为真,则是否及格为真。

实例介绍因果图法

逻辑非的关系,表示当因子A为假时则得出B。比如,如果得分大于等于60为假,则是否及格为假。  

实例介绍因果图法

逻辑或的关系,表示当因子A1、A2、A3其一为真时则得出B。比如,招聘单位招聘条件为:至少精通DB2、ORACLE、SQLSERVER一种数据库。

实例介绍因果图法

逻辑与的关系,表示当因子A1、A2、A3全部为真时则得出B。比如,招聘单位招聘条件为:A1大本以上学历,A2精通JAVA,A3,28岁以下。

 

以上为因果图的符号,下面介绍一下约束符号。

实例介绍因果图法

逻辑异关系,表示A与B最多只能有一个为真,但均可为假。想吃A鱼还是想吃B熊掌?鱼与熊掌不可兼得,却可都不得。

实例介绍因果图法

逻辑或关系,表示A与B最多只能有一个为假,但均可为真。比如,商店收款时,可以A支持刷银联卡支付方式?可以B支持现金支付方式?显然,可以都支持,但却不可以两个都不支持。

实例介绍因果图法

表示唯一关系,A与B只能有一个为真。比如单位领导找你谈话,你是想出国锻炼发展呢,还是想留在国内升职?

实例介绍因果图法

表示限制关系,当A为真时,则B必须为真,比如windows操作系统的TCP/IP属性配置,当手工指定IP地址为真时,则手工指定DNS地址必然为真。

实例介绍因果图法

表示要求关系,当A为真时,则B必须为假,TCP/IP属性配置比如windows操作系统的TCP/IP属性配置,当手工指定IP地址为真时,则自动获得DNS地址必然为假。

 

好了,如果画已经介绍完了,我们再做一个实例来融会贯通一下吧。教材上饮料机、象棋马走日的例子已经被举烂了,我们拿个实际工作生活中会用到的例子吧,例如某公司产假规定如下:

  • 女员工产假为90天,符合晚婚、晚育(男25周岁,女23周岁)的,可增加产假30天,共计120天。
  • 难产凭医院证明,产假增加15天。
  • 怀孕不满七个月小产,产假不超过30天,由医生检查酌情况确定。
  • 男员工符合晚婚、晚育的,可享受陪产假7天。

分析因果关系,绘制如下因果图。

实例介绍因果图法

在此图的绘制过程中发现,此规定有些条目未予以明确,那么有些情况出现时,就找不到相应的依据了,比如,第二胎的情况如何处理?怀孕不满七个月不产时,如果医生认为的产假天数超过了30天怎么处理?等等。发现需求、设计的不完善,也是科学运用测试方法理清思路进行测试设计的一个益处吧。这些情况如果是在软件开发过程中,无论是开发人员还是测试人员都是应当找到制度规定者请其明确的,否则就会使系统的容错性、健壮性降低,甚至会丢失需求。

好了,我们回到该图,将已明确的部分转化为判定表。

条件

女员工

1

1

1

1

1

1

1

1

1

0

0

0

0

晚婚

/

1

1

0

0

1

1

0

0

1

1

0

0

晚育

/

1

0

1

0

1

0

1

0

1

0

1

0

怀孕不满七个月小产

1

0

0

0

0

0

0

0

0

/

/

/

/

医院证明难产

0

1

1

1

1

0

0

0

0

/

/

/

/

医生明确小产后的产假天数<=30天

1

/

/

/

/

0

0

0

0

/

/

/

/

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

中间结果

普通产假天数(90)

0

1

1

1

1

1

1

1

1

0

0

0

0

小产产假天数(医生确定天数)

1

0

0

0

0

0

0

0

0

0

0

0

0

难产产假天数(15)

0

1

1

1

1

0

0

0

0

0

0

0

0

晚婚晚育产假天数(30)

0

1

0

0

0

1

0

0

0

0

0

0

0

陪产假天数(7)

0

0

0

0

0

0

0

0

0

1

0

0

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

结果

假期

90

135

105

105

105

120

90

90

90

7

0

0

0

测试数据与预期出来了,测试用例就比较好写了,在这里就不再罗嗦了。

 

不得不提的是,采用因果图分析的一个好处,可以清晰地归纳出输入条件之间的限制关系,直接将某些条件的组合忽略掉,比如男员工的产假、难产、小产情况等,而这种异常情况并非不需测试,虽然有些输入组合是不可能出现的,但为了检验软件的容错性,还应针对因果图中的各个约束条件,灵活采用等价类划分法和边界值法等测试方法进行有针对性的测试。

### 因果图法的概念 因果图法是一种基于决策表的测试用例设计方法,主要用于分析输入条件与输出动作之间的因果关系。它通过图形化的方式表示这些关系,并将其转换为判定表,从而帮助测试人员更全面地覆盖各种可能的情况[^1]。 具体来说,因果图法的核心在于识别系统的输入条件和输出动作,并分析它们之间是否存在某种逻辑依赖关系。这种依赖可以是简单的布尔运算(如AND、OR、NOT),也可以是更为复杂的组合逻辑。最终目标是确保所有的因果路径都被充分考虑并加以测试。 --- ### 因果图法的应用流程 以下是因果图法的主要应用步骤: #### 1. **需求分析** 对待测功能的需求文档进行深入解读,提取出所有可能影响系统行为的输入条件以及对应的输出动作。例如,在账户注册场景中,输入条件可能是“手机号格式是否正确”或“验证码是否匹配”,而输出动作则对应于不同的错误提示或成功的反馈消息。 #### 2. **绘制因果图** 基于上述分析结果,构建一张反映各因素间相互作用规律的图表——即因果图。其中每条边代表一种特定的关系类型,比如: - 条件C1 和 C2 同时满足才会触发某个事件; - 或者只要任意一个成立即可达成目的等等[^3]。 #### 3. **转化成判定表** 将完成后的因果图进一步细化为形式化的表格结构—也就是所谓的判断矩阵(Judgment Matrix),以便后续处理更加直观便捷[^2]。在这个阶段里,每一个独立的情形都会被单独列出作为一个新的行项存在于此表之中。 #### 4. **生成测试用例** 利用已经建立起来完整的判定表来创建实际可执行的具体实例集合。这一步骤要求尽可能详尽无遗地列举出所有可能出现的不同情况下的参数组合及其预期的结果表现形式。 --- ### 实际案例解析 假设我们正在开发一款应用程序允许用户通过提供有效的电子邮件地址或者电话号码来进行身份认证过程中的第一步验证环节。同时还需要他们提交由系统发送过来的一次性动态密码(OTP)以确认其真实性。那么按照前述介绍的方法论框架我们可以这样操作: - 定义两个主要变量`accountType`(取值范围:{email,phone})用于区分当前所使用的登录方式;另一个则是`otpStatus`(true/false),用来指示验证码校验状态. ```python def validate_account(account_type, otp_status): if account_type not in ['email', 'phone']: return "Invalid Account Type" elif (account_type == 'email' and otp_status is True) or \ (account_type == 'phone' and otp_status is True): return "Account Verified Successfully!" else: return f"{['Email','Phone'][int('email'.startswith(account_type))]} Verification Failed." ``` 接着依据这段伪代码片段描绘相应的因果关联网络如下所示: | Input Conditions | Output Actions | |------------------|---------------| | `accountType='email' & otpStatus=True` -> Action A ("Verified")<br>`accountType='phone' & otpStatus=True`->Action B("Verified")<br>Otherwise->Error Message| 最后再把这些映射关系整理到标准模板当中去形成正式版的测试方案列表. --- ### 总结 综上所述,采用因果图技术能够有效提升软件质量保障水平的同时降低维护成本开销。因为它不仅有助于发现那些隐藏较深不易察觉但却至关重要的边界状况,而且还能促进团队内部成员间的沟通协作效率提高不少呢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值