转载:http://blog.sina.com.cn/s/blog_560ddb8501000a9c.html
因为在公司不能访问源地址,所以转载如下。
前面已经介绍了等价类划分法与边界值法,掌握了这两个最基本的测试设计方法,对于单一输入域的测试应该就可以轻松地设计出高效、高质、简练的测试用例了,但当输入域较多时呢?OK,我们当然可以运用等价类划分法与边界值法先分析出每个输入域的可能值,然后再对这些值进行排列组合组成若干用例,并分析每种组合所应当产生的结果,那当输入域不止两三个时,排出来一下,哇塞,好大一张表格,当某些输入域又受到其他输入域的影响时呢?你又不得不在表格中考虑这种情况,做些修修补补的工作,删除或者补充,汗呀,真是一项浩大的工程。还有,如果再加上几个输入的话……
一般来说,因果图为左因右果,以直线表示因果关系,如图:
表示当因子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 |
测试数据与预期出来了,测试用例就比较好写了,在这里就不再罗嗦了。
不得不提的是,采用因果图分析的一个好处,可以清晰地归纳出输入条件之间的限制关系,直接将某些条件的组合忽略掉,比如男员工的产假、难产、小产情况等,而这种异常情况并非不需测试,虽然有些输入组合是不可能出现的,但为了检验软件的容错性,还应针对因果图中的各个约束条件,灵活采用等价类划分法和边界值法等测试方法进行有针对性的测试。