上篇文章是把因果图法的理论,以及举了一个实际的例子,现在网上有很多这方面资料。我再举一个例子,便于大家理解。
一、分析中国象棋中走马的实际情况(下面未注明的均指的是对马的说明)
1、如果落点在棋盘外,则不移动棋子;
2、如果落点与起点不构成日字型,则不移动棋子;
3、如果落点处有自己方棋子,则不移动棋子;
4、如果在落点方向的邻近交叉点有棋子(绊马腿),则不移动棋子;
5、如果不属于1-4条,且落点处无棋子,则移动棋子;
6、如果不属于1-4条,且落点处为对方棋子(非老将),则移动棋子并除去对方棋子;
7、如果不属于1-4条,且落点处为对方老将,则移动棋子,并提示战胜对方,游戏结束。
二、根据分析明确原因和结果
原因:
1、 落点在棋盘上;
2、 落点与起点构成日字;
3、 落点处不为自己方棋子;
4、 落点方向的邻近交叉点有棋子;
5、 落点处无棋子;
6、 落点处为对方棋子(非老将);
7、 落点处为对方老将。
注意:第4点落点方向的邻近交叉点有棋子,说明不能移动棋子,其他原因都可以移动棋子。
结果:
21、不移动棋子;
22、移动棋子;
23、移动棋子,并除去对方棋子;
24、移动棋子,并提示战胜对方,结束游戏。
注意:在移动棋子的时候,由于有3种结果,所以要增加一个中间节点11,表明移动条件成立的过渡状态。
那么因果图怎么画呢?
![](https://p-blog.csdn.net/images/p_blog_csdn_net/xuhongge/33.png)
注:
原因
5
、
6
、
7
不能同时发生(唯一发生),所以对其施加异约束
E,考虑结果不能同时发生,所以对其施加唯一约束O。
三、根据因果图建立判定表:(分为两表)
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
15
|
16
| |
原因
|
1
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
1
|
2
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
1
| |
3
|
0
|
0
|
0
|
0
|
1
|
1
|
1
|
1
|
0
|
0
|
0
|
0
|
1
|
1
|
1
|
1
| |
4
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
1
| |
结果
|
11
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
21
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
0
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
`0
|
11
|
12
|
13
|
14
|
15
|
16
| |
原因
|
11
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
1
|
0
|
1
|
5
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
1
| |
6
|
0
|
0
|
0
|
0
|
1
|
1
|
1
|
1
|
0
|
0
|
0
|
0
|
1
|
1
|
1
|
1
| |
7
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
1
| |
结果
|
22
|
0
|
|
0
|
1
|
0
|
0
|
|
|
0
|
0
|
|
|
|
|
|
|
23
|
0
|
0
|
0
|
0
|
1
|
0
|
0
| ||||||||||
24
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
注:
1
、以上判定表中由于表格大小限制没有列出最后所选的测试用例;
2
、第
2
表中部分列被合并表示不可能发生的现象;
3
、通过中间节点将用例的判定表简化为两个小表,以减少工作量。
四、根据判定表写测试用例表