识别决策表测试中的缺失规则和覆盖盲区,核心是把决策表当作一份可核验的覆盖清单:先确定条件桩、条件项与动作桩的完整取值域,按全覆盖口径算出应有规则数,再与表中实际规则列逐列比对;随后用业务规则清单反向映射,找出没有对应规则列的业务场景。评估结论同时报告规则覆盖率、条件取值覆盖率和业务规则映射率,并说明分母口径与不可判定项。
要点总览(TL;DR)
- 把决策表当作覆盖清单:先由条件取值域推导应有规则数,再与实际规则列逐列比对,定位缺失组合、重复列与被吸收列。
- 用规则覆盖率、条件取值覆盖率、业务规则映射率三个指标分别衡量内部完整性与外部完整性,每个指标都要写明分母口径和不可判定项。
- 五步检查顺序:列取值域算理论组合→剔除无效组合得应有规则数→逐列比对标记缺口→检查动作空值与冲突→用业务规则清单反向映射找盲区。
- 覆盖率只说明规则列是否齐全,不保证动作取值正确;业务规则映射率依赖规则清单完整性,清单缺失会高估覆盖。
- 不可判定项必须单列,不能计入通过;指标定位缺口位置,规则评审确认缺口性质,两者结合才能判断决策表能否作为测试设计依据。
评估目标:要回答哪两个覆盖问题
决策表覆盖完整性评估要回答两个层次不同的问题,混在一起看容易得出片面结论。
第一个问题是内部完整性:在已确认的条件桩和取值域下,决策表是否列出了全部有效条件组合。它检查的是表内规则列之间有没有遗漏、重复或被其他列吸收的组合。第二个问题是外部完整性:需求中的业务规则是否都能在决策表中找到落点。它检查的是决策表与需求规则清单之间的对应关系,关注那些根本没有进入决策表的业务场景。
评估对象限定为决策表本身和需求规则清单。测试脚本是否实现、自动化框架如何组织,属于后续执行环节,不在本次评估范围内。
两个问题各自给出三种判定方向:通过,表示在已确认口径下未发现缺口;存在缺口,表示已定位到具体缺失组合或未映射规则;不可判定,表示某个条件取值域或某条业务规则尚未确认,无法判断是否覆盖。不可判定项必须单列,不能并入通过。
指标与范围:规则覆盖率、条件取值覆盖率、业务规则映射率
三个指标分别对应内部完整性和外部完整性,计算前需要统一统计范围:条件桩、动作桩、规则列,以及约束与互斥说明。统计单位是当前版本的决策表快照,按需求版本统计,不跨版本合并。
| 指标 | 公式 | 分子 | 分母 | 单位 |
|---|---|---|---|---|
| 规则覆盖率 | 已定义规则列数 ÷ 应有规则列数 | 决策表中实际存在且有效的规则列数 | 由条件取值域推导、剔除无效组合后的应有规则数 | 百分比,附规则列数 |
| 条件取值覆盖率 | 已出现的条件取值组合数 ÷ 全部有效取值组合数 | 决策表中实际出现的条件取值组合数 | 按约束与互斥条件筛选后的有效取值组合总数 | 百分比,附组合数 |
| 业务规则映射率 | 能找到对应规则列的业务规则条数 ÷ 业务规则总条数 | 在决策表中至少对应一列的业务规则条数 | 需求规则清单中的业务规则总条数 | 百分比,附规则条数 |
规则覆盖率的分母不是简单地把各条件取值数相乘。需要先按约束与互斥说明剔除逻辑上不可能同时成立的组合,剩下的才是应有规则数。例如某条件标注“仅当上一条件为是时才有意义”,那么上一条件为否时该条件的取值不参与组合计数。
条件取值覆盖率与规则覆盖率的口径差异在于:前者看取值组合是否出现,后者看规则列是否齐全。当一条规则列合并了多个取值组合时,规则覆盖率可能接近满分,而条件取值覆盖率仍暴露组合遗漏。两个指标一起看,才能区分“列数够但组合粗”和“组合细但列缺失”两种情况。
业务规则映射率的分母来自需求规则清单,清单本身的完整性直接决定这个指标的可信度。统计时以当前需求版本为准,规则清单与决策表版本不一致时不做混算。
数据口径与证据:条件取值域和业务规则清单怎么来
指标是否可复算,取决于两类输入数据的来源是否清楚。
条件取值域的来源包括需求文档中的字段约束、系统枚举值、业务方确认的边界值,以及接口或数据字典中的取值范围。每个条件的取值域应有明确的确认记录,记录谁确认、依据哪份材料、确认时间。取值域未确认的条件,在评估中标记为不可判定,不计入分母,或单独列一栏说明。
业务规则清单的来源包括需求条目、规则编号和例外说明。规则清单应能逐条编号,便于在决策表中反向查找对应规则列。清单中只有描述没有编号的条目,先补编号再统计,否则映射率的分母会失真。
证据形式建议保留三类:决策表版本(含修改记录)、规则清单版本、取值域确认记录。三者版本号对齐后,评估结果才具备可比性。不同版本的决策表不混算,版本升级后重新计算,不与旧结果直接比较百分比。
在需求、规则清单和用例之间流转时,可以用 ONES 的工作项管理需求条目与规则编号,用文档承载决策表版本和取值域确认记录,让规则清单与决策表保持同一版本快照,评审时按同一口径核对。
评估步骤:从条件组合到规则映射的五步检查
五步检查按固定顺序执行,每一步留下可复查的记录,避免遗漏藏在中间环节。
第一步:列出条件桩与取值域,计算理论组合数。 把每个条件的全部取值列出,理论组合数为各条件取值数的乘积。输出一张条件取值域清单,标注每个取值的来源和确认状态。
第二步:按约束与互斥条件剔除无效组合,得到应有规则数。 逐条核对约束说明,标记不可能同时成立的组合。剔除后剩下的组合数就是规则覆盖率的分母。输出无效组合清单及剔除理由。
第三步:逐列比对实际规则,标记缺失组合、重复列与被吸收列。 将应有组合与实际规则列一一对照。缺失组合是应有但表中没有的;重复列是两列条件项与动作项完全相同的;被吸收列是某列的条件范围被另一更宽泛的列完全包含、实际不起区分作用。输出缺口清单,按缺失、重复、被吸收分类。
第四步:检查动作列空值、冲突动作与默认分支。 逐列检查动作项是否有空值,同一条件下是否出现互相冲突的动作,以及是否存在未声明的默认分支。空值和冲突动作往往对应需求中未写清的规则,需要回到业务方确认。
第五步:用业务规则清单反向映射,标记无对应规则列的业务规则。 逐条业务规则在决策表中查找对应列,找不到的记为覆盖盲区。同时检查一条业务规则是否被拆到多列、多列是否对应同一条规则,避免映射率虚高。输出映射表,含规则编号、对应规则列、映射状态。
例子:一张订单折扣决策表的缺口识别
以下为演示情景,用于说明计算过程,不代表任何真实系统。
某订单折扣规则涉及三个条件:客户等级(普通、银卡、金卡)、订单金额(满500、不满500)、是否使用优惠券(是、否)。理论组合数为 3 × 2 × 2 = 12。约束说明中写明“优惠券仅金卡可用”,因此普通和银卡在使用优惠券时的组合无效,剔除 2 × 2 = 4 个组合,应有规则数为 8。
实际决策表列出 6 列有效规则,则规则覆盖率为 6 ÷ 8 = 75%。逐列比对后发现,缺失的是金卡、满500、使用优惠券和金卡、不满500、使用优惠券两个组合。另有一列的条件项写作“金卡、金额不限、不使用优惠券”,与另一列“金卡、满500、不使用优惠券”构成吸收关系,后者实际不起区分作用,应合并或删除。
条件取值覆盖率按实际出现的有效取值组合计算,若表中只出现 6 个有效组合,则为 6 ÷ 8 = 75%,与规则覆盖率一致;若某列合并了多个取值组合,两个指标会出现差异,需要分别报告。
动作列检查发现,金卡、不满500、不使用优惠券这一列的动作项为空,属于动作空值,需回到需求确认该场景是否享受折扣。业务规则清单共 7 条,其中“金卡用户使用优惠券时折扣叠加”一条在决策表中找不到对应列,业务规则映射率为 6 ÷ 7 ≈ 85.7%,该条即为业务规则层面的覆盖盲区。
若某条件的取值域尚未确认,例如优惠券适用门槛未定,则该条件相关组合标记为不可判定,从分母中剔除并单列说明,规则覆盖率只对已确认部分计算,并在结论中注明不可判定项数量。若应有规则数为零,说明条件取值域或约束说明存在矛盾,应先修正输入数据,不计算比率。
解读与限制:指标能说明什么、不能说明什么
规则覆盖率高,说明在已确认的取值域和约束下,条件组合基本被列出,不代表这些规则的动作取值符合业务预期。规则列齐全但动作写错,覆盖率仍然很高。因此覆盖率回答的是“有没有列”,规则正确性要靠规则评审和业务方确认。
业务规则映射率依赖规则清单的完整性。清单本身遗漏了业务规则,映射率会高估覆盖程度,把盲区算成已覆盖。评估前应先检查规则清单是否覆盖需求条目和例外说明,清单不完整时,映射率只能作为参考,不能作为通过依据。
不可判定项必须单列。取值域未确认、规则描述有歧义、业务方尚未回复的场景,都不能计入通过。评估结论中应写明不可判定项的数量和原因,便于后续补充确认后重新计算。
三个指标各自反映一个侧面,单指标不能作为全部验收依据。建议把规则覆盖率、条件取值覆盖率、业务规则映射率与规则评审记录一起看:指标定位缺口位置,评审确认缺口性质,两者结合才能判断决策表是否可以作为测试设计的依据。
常见问题
条件取值域还没确认时,规则覆盖率还能算吗?
可以算,但要限定范围。取值域未确认的条件,其相关组合标记为不可判定,从分母中剔除,规则覆盖率只对已确认部分计算,并在结论中注明不可判定项的数量和原因。等取值域确认后,重新计算并更新结论。如果未确认的条件占比较大,覆盖率结果只能作为阶段性参考,不宜直接用于验收判断。
业务规则清单本身不完整,映射率还有意义吗?
映射率仍然可以反映决策表与现有清单之间的对应关系,但它的分母不完整,会高估覆盖程度。使用前应先检查规则清单是否覆盖需求条目和例外说明,把缺失的规则补进清单再统计。如果清单暂时无法补全,映射率只能作为参考指标,不能作为通过依据,评估结论中应说明清单的完整性限制。
一条业务规则对应决策表多列,映射率怎么算?
映射率按业务规则条数统计,不按规则列数统计。一条业务规则对应多列时,只计为一条已映射规则。同时要检查这些列是否确实在表达同一条规则的不同条件分支,避免把一条规则拆成多列后重复计数,也避免多列实际对应同一条规则却让映射率虚高。建议在映射表中记录规则编号与对应规则列的对应关系,便于复查。
规则覆盖率达到多少才算通过?
没有统一的达标线。规则覆盖率的分母由条件取值域和约束说明推导,不同决策表的规模和复杂度差异很大,直接比较百分比意义有限。更合适的做法是结合缺口清单看:缺失组合是否涉及关键业务场景、被吸收列是否影响动作区分、动作空值是否对应未写清的规则。把覆盖率与规则评审记录一起看,由业务方和测试负责人共同判断决策表是否可以作为测试设计的依据。
决策表版本升级后,旧版本的覆盖率结果还能直接比较吗?
不建议直接比较。版本升级可能改变条件桩、取值域或约束说明,分母随之变化,旧百分比与新百分比的口径不一致。正确做法是以当前版本决策表为快照重新计算,保留旧版本的计算记录作为历史参考,但不把两个版本的覆盖率数值直接对比。如果需要观察趋势,应同时报告各版本的分母和不可判定项数量,说明口径差异。


















