一般来说,因果图为左因右果,以直线表示因果关系,如图:
表示当因子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 |
测试数据与预期出来了,测试用例就比较好写了,在这里就不再罗嗦了。
不得不提的是,采用因果图分析的一个好处,可以清晰地归纳出输入条件之间的限制关系,直接将某些条件的组合忽略掉,比如男员工的产假、难产、小产情况等,而这种异常情况并非不需测试,虽然有些输入组合是不可能出现的,但为了检验软件的容错性,还应针对因果图中的各个约束条件,灵活采用等价类划分法和边界值法等测试方法进行有针对性的测试。