决策表测试,决策表可以方便地获取特定的系统需求并记录测试对象的内部实现,可以记录测试对象的各种复杂规则,并有效地指导测试用例的设计。尽管决策表测试对于测试人员而言非常重要,但是许多测试人员并不熟悉这种技术。
决策表是分析和表达多逻辑条件下执行不同操作的表格,能够将复杂的问题按照各种可能的情况全部列举出来,以避免遗漏测试需求,因此利用决策表可以设计出比较完整的测试用例集合。决策表测试技术特别适用于针对不同逻辑条件的组合,测试对象需要执行不同操作的场景。
决策表由4个部分组成,分别是条件桩(Condition Stub)、动作桩(Action Stub)、条件项(Condition Entry)和动作项(Action Entry)。
(1)条件桩,列出测试对象的所有条件。一般情况下,列出的条件次序不影响测试对象的动作。
(2)动作桩,列出测试对象所有可能执行的操作。一般情况下,这些执行的操作没有先后顺序的约束。
(3)条件项,列出针对特定条件的取值,即条件的真假值。
(4)动作项,列出在不同条件项的各种取值组合情况下测试对象应该执行的动作。
其格式如表所示。
其中条件桩中的条件1、条件2到条件m表示测试对象的各种输入条件;动作桩中的动作1、动作2到动作n表示测试对象根据不同输入条件的组合需要执行的操作。规则1、规则2到规则p定义了在不同条件的组合下,测试对象需要执行的操作。需要注意的是测试对象执行的操作和条件的顺序没有关系,而仅仅依赖于其取值(这些取值认为是同时有效的)。同样测试对象执行的操作仅仅依赖于特定的条件组合,而与其他测试输入或测试对象状态无关。
决策表测试主要由以下步骤组成。
(1)列出所有的条件桩和动作桩。
(2)确定规则的数目。如果有n个条件,每个条件有两个取值(0 或1),则共有2n个规则。
(3)填入条件项和动作项得到初始的决策表。
(4)简化相似的规则得到优化的决策表。
(5)每列规则设计一个测试用例。
确定条件桩和动作桩
首先分析测试对象,确定测试对象的输入个数(条件的数目)和输出个数(动作的数目),并且确定决策表规则的数量。经过分析可以得出如下4个条件(条件的确定并不是惟一的,根据不同的分析,可以得到不同的条件数目,但这并不影响决策表本身的应用)。
(1)C1:a、b和c构成三角形?
(2)C2:a = b?
(3)C3:a = c?
(4)C2:b = c?
当条件桩中条件的数目为n时,可以得到初始决策表的规则数目为2n个。在这个案例中分析得到的条件共有4个,所以针对该测试对象得到的规则数目为24个,共16个规则。
动作桩中动作的确定相对比较简单,最终确定的动作如下。
(1)A1:非三角形。
(2)A2:不规则三角形。
(3)A3:等腰三角形。
(4)A4:等边三角形。
(5)A5:不符合逻辑。
初始决策表
有了决策表的条件桩、动作桩及其具体条件和动作,以及规则的数目之后即可确定初始决策表的大小。在决策表中填入相应的条件项和动作项,即可得到初始的决策表。其中包含所有条件的所有组合,每个规则代表其中的一个组合。三角形的初始决策表如表所示。
优化决策表
检查初始决策表,可以发现有的动作对应一个规则,有的动作对应多个规则,因此需要优化。将具有相同的动作且条件项之间存在相似关系的规则进行合并,相关条件项置为“不关心”,用“-”表示。例如,当条件“C1:a、b和c构成三角形?”的取值为N时,后面几个条件的判断没有任何意义,得到的结果都是“A1:非三角形”;同时删除初始决策表中不符合逻辑的规则,即可得到优化的决策表,如下表所示。
决策表的优化可以从下面几个方面进行。
(1)引入“不关心”的条件。在初始的决策表中规则9至规则16,只要满足条件1“C1:a、b和c构成三角形?”的取值为N,那么条件C2、C3和C4都属于不相干的条件,即不用关心的条件。
(2)检查决策表中是否存在不一致处,如相同的规则产生不一致的动作,此时需要严格分析。
- 重新分析测试对象,确定是否是测试人员分析和理解有误导致决策表设计错误。
- 重新分析测试对象,确定是否是由于测试对象的规格说明本身的错误造成决策表设计错误。
(3)简化决策表,删除冗余的规则。判断决策表是否冗余,可以为决策表的每个规则引入一个规则计数器。
- 如果规则内没有包含“不关心”条件,则规则计数器为1。
- 如果规则中出现一个“不关心”条件,该规则计数器乘以2。出现n个“不关心”条件,该规则计数器为2n。
- 如果决策表的规则计数器总和大于2n(此处的n代表条件桩中条件的数目),则决策表内有冗余项。
创建测试用例
得到优化的决策表之后,根据该决策表生成相应的测试用例。其策略是把决策表中的条件项组合作为输入,动作项作为输出,每一条规则可以得到一个测试用例。如果得到的决策表是完整的,那么可以得到针对测试对象的完整测试用例集合,如表所示。
覆盖率准则
决策表测试也可以明确地定义覆盖率准则,基本的要求是决策表的每一列(规则)至少需要有一个测试用例覆盖,这样就可以验证所有关心的输入条件组合和相应的输出结果。
因果图和决策表
决策表测试除了依赖于前面提到的决策表之外,也可以基于因果图技术得到测试用例;或者通过因果图得到决策表,然后得到测试用例。
因果图中的“因”指的是一个明确的输入条件或输入条件的等价类,而“果”指的是一个输出条件或输出动作。基于测试对象的规格说明确定其中的“因”和“果”,并为每个“因”和“果”赋予一个唯一的编号。将“因”和“果”通过布尔图连接形成因果图。因果图的基本符号如图所示。
每个节点的值为0或1,0代表“不存在”状态,而1代表“存在”状态。函数identify表示如果a为1,则b也为1;否则b为0。函数NOT表示如果a等于1,则b为0;否则b为1。函数OR表示如果a或者b或者c等于1,则d为1;否则d为0。函数AND表示如果a和b都等于1,那么c为1;否则c为0。函数OR和AND可以允许任意数量的数据输入。
决策表可以转换为因果图,因果图也可以转换为决策表。具体是使用决策表,还是因果图设计测试用例,取决于测试人员。笔者更喜欢通过决策表的方式设计测试用例。决策表和因果图之间转换的步骤如下。
(1)决策表转换为因果图。
- 罗列决策表条件桩中的所有条件,作为因果图中的“因”。
- 罗列决策表动作桩中的所有动作,作为因果图中的“果”。
- 根据决策表中的每个规则,确定哪些条件的组合可以得到相关的动作,并通过因果图的符号连接和表示。
(2)因果图转换为决策表。
- 将因果图的所有条件(因)填入决策表的条件桩中。
- 将因果图的所有动作(果)填入决策表的动作桩中。
- 根据因果图确定各个条件组合对应的动作,并且确定决策表中各个规则的条件项和动作项,在需要时优化决策表。
酷客教程相关文章:
评论前必须登录!
注册