判定表驱动法
基本思路:对多个条件的组合进行分析,从而设计测试用例来覆盖各种组合。
判定表:是分析和表达多逻辑条件下执行不同操作的情况下的工具。
判定表5个概念:
条件桩:问题的输入条件列出问题的所有条件。(通常列出条件的顺序没有约束)
动作桩:列出问题规定可能采取的动作。(动作的顺序也没有约束)
条件项:每一个输入条件的具体值列出针对条件的具体赋值,即每个条件可以取的真、假值。
动作项:具体动作列出在条件项(各种取值)组合情况下应该采取的动作。
规则: 任何一个条件组合的特定取值及其要执行的相应操作。在判定表中贯穿条件项和动作项的一列就是一条规则。
判定表的4个组成部分:
建立判定表的步骤:
1. 列出所有的条件桩和动作桩。
2. 填入条件项。
3. 填入动作项、制定初始判定表。
4. 简化、合并相似规则或相同动作。
注:
简化:就是把有两条或多条具有相同的动作、且其条件项之间存在着极为相似的关系的规则合并。
例子:打印机是否能打印出来正确的内容,有多个因素影响,包括驱动程序、纸张、墨粉等。(为了简化问题,不考虑中途断电、卡纸等因素的影响)
解:
条件桩:
(1) 驱动程序是否正确?
(2) 是否有纸张?
(3) 是否有墨粉?
动作桩:(动作桩有两种:打印内容和不同的错误提示,并且假定:优先警告缺纸,然后警告没有墨粉,最有警告驱动程序不对。)
(1) 打印内容
(2) 提示驱动程序不对
(3) 提示没有纸张
(4) 提示没有墨粉
初始化的判定表
|
序号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
|
条件 |
驱动程序是否正确? |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
|
是否有纸张? |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
|
|
是否有墨粉? |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
|
|
动作 |
打印内容 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
提示驱动程序不对 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
提示没有纸张 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
|
|
提示没有墨粉 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
|
注:
输入条件项,即上述每个条件的值分别取“是(Y)”和“否(N)”,可以简化表示为1和0。
优化的判定表
|
序号 |
1 |
2 |
4/6 |
3/5/7/8 |
|
|
条件 |
驱动程序是否正确? |
1 |
0 |
1 |
— |
|
是否有纸张? |
1 |
1 |
1 |
0 |
|
|
是否有墨粉? |
1 |
1 |
0 |
— |
|
|
动作 |
打印内容 |
1 |
0 |
0 |
0 |
|
提示驱动程序不对 |
0 |
1 |
0 |
0 |
|
|
提示没有纸张 |
0 |
0 |
0 |
1 |
|
|
提示没有墨粉 |
0 |
0 |
1 |
0 |
|
注:
如果动作结果一样,对于某些因素取“1”或“0”没有影响,即以“—”表示,并合并。
优化的判定表就可以设计测试用例,每一列代表一条测试用例。
判定表的优/缺点:
优点:把复杂的问题按各种可能的情况一一列举,简明而易于理解,也避免遗漏。
缺点:不能表达重复执行的动作,如循环结构。
判定表不能很好的伸缩。如有n个条件的判定表有2n个规则。
适合使用判定表设计测试用例的条件:
1. 规格说明以判定表形式给出,或很容易转换成判定表的。
2. 条件的排列顺序不会也不影响执行哪些操作。
3. 规则的排列顺序不会也不影响执行哪些操作。
4. 每当某一规则的条件已近满足,并确定要执行的操作后,不必检验别的规则。
5. 如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要。
注:对于某些不满足如上条件的判定表,同样也可以应用它来设计测试用例,只不过还要增加其他的测试用例。