type
status
date
slug
summary
tags
category
icon
password
😀
文章前言:本文主要介绍黑盒测试中的决策表测试。

一、简介

在一些数据处理问题中,某些操作是否实施依赖于多个逻辑条件的取值。在这些逻辑条件取值的组合所构成的多种情况下,分别执行不同的操作。处理这类问题的一个非常有力的分析和表达工具是判定表,或称决策表(Decision Table)。
在所有黑盒测试方法中,基于决策表的测试是最严格、最具有逻辑性的测试方法。
决策表的概念:决策表是分析和表达多逻辑条件下执行不同操作的情况的工具。
  • 利用判定表设计测试用例集合的方法叫做判定表驱动分析法(决策表法)。
 

二、决策表的特征

1.判定表的优点:

  • 能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用决策表能够设计出完整的测试用例集合。
  • 在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。决策表很适合于处理这类问题。

2.判定表的缺点:

  • 不能表达重复执行的动作,例如循环结构。
  • 判定表不能很好地伸缩。
    • 有n个条件的决策表有2n个规则。
  • 解决方法:
    • 使用扩展条目判定表、代数简化表,将大表“分解”为小表,查找条件项的重复模式。

3.判定表方法所适用的应用程序的特征:

  • if-then-else逻辑很突出。
  • 输入变量之间存在逻辑关系。
  • 涉及输入变量子集的计算。
  • 输入与输出之间存在因果关系。
  • 很高的McCabe圈复杂度。
备注:决策表分析不太适合佣金问题,在佣金问题中只有很少的判断逻辑。

三、决策表的构成

了解五个概念——条件桩、动作桩、条件项、动作项和规则。
判定表是一种二维的表格,通常由四部分组成。
条件桩
条件项
动作桩
动作项
  • 条件桩:列出问题的所有条件,如上述3个条件——功率大小、维修记录和运行时间。
  • 动作桩:列出针对问题所采取的操作,如优先维修。
  • 条件项:针对所列条件的具体赋值,即对每个条件可以取真值和假值。
  • 动作项:列出在条件项(各种取值)组合情况下应该采取的动作。
  • 规则:任何一个条件组合的特定取值及其相应要执行的操作。在决策表中贯穿条件项和动作项的一列就是一条规则。
    • n个条件的决策表有2^n个规则。
    • 规则合并:判定表的化简。有两条或多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系。
注意:决策表的所有条件之间是相互独立、互不影响的。
 

四、决策表的构建步骤

决策表构建步骤:

1、确定规则个数
2、列出所有的条件桩和动作桩
3、填入动作项,得到初始决策表
4、简化决策表,合并相似规则
  • 若表中有两条以上规则具有相同的动作,并且在条件项之间存在极为相似的关系,便可以合并。
  • 合并后的条件项用符号“-”表示,说明执行的动作与该条件的取值无关,称为无关条件。
例题:对功率大于50马力且维修记录不全的机器,或者已运行10年以上的机器,应给予优先的维修处理。
notion image

使用判定表设计测试用例的Beizer条件。

  • 规格说明以判定表形式给出,或是很容易转换成判定表。
  • 条件的排列顺序不会也不应影响执行哪些动作。
  • 规则的排列顺序不会也不应影响执行哪些动作。
  • 每当某一规则的条件已经满足,并确定要执行的动作后,不必检验别的规则。
  • 如果某一规则得到满足要执行多个动作,这些动作的执行顺序无关紧要。

五、决策表实例

1 阅读指南

“阅读指南”程序,可以根据读者的当前阅读情况,为读者做出是否继续阅读的决定。如果读者感到疲倦则休息;如果读者不感到疲倦并且很感兴趣,在此情况下,如果读者糊涂则重新读一遍,如果读者不糊涂则继续阅读下一部分;如果读者不感到疲倦但对阅读内容不感兴趣,在此情况下,不管读者是否糊涂都跳到下一章继续学习。
以下为原题链接,本题答案存疑。
notion image

2 设备维修

对“某维修站对“功率大于50马力”的机器且“维修记录不全”或“已运行十年以上”的机器应给予优先维修,否则作一般处理。请绘制决策表。
notion image

3 银行贷款

某银行发放贷款原则如下: 1)对于贷款未超过限额的客户,允许立即贷款。 2)对于贷款超过限额的客户,若过去还款记录好且本次贷款在2万元以下,可作出贷款安排;否则拒绝贷款。请绘出发放贷款的决策表并优化。
notion image
💡
有关问题,欢迎您在底部评论区留言,一起交流~
Relate Posts
软件工程:面向对象设计
Lazy loaded image
软件工程:面向对象的需求获取与需求分析
Lazy loaded image
软件工程:软件测试
Lazy loaded image
软件测试:面向对象的测试
Lazy loaded image
软件测试:测试驱动开发
Lazy loaded image
软件工程:面向对象的概念和记号
Lazy loaded image
软件测试:控制流测试Linux:基本指令+镜像
Loading...
Koreyoshi
Koreyoshi
一个无可救药的乐观主义者
Latest posts
编译原理:文法和语言
2025-6-3
智能体开发与接口调用
2025-6-3
软件工程:面向对象设计
2025-6-3
软件工程:面向对象的需求获取与需求分析
2025-6-3
软件工程:软件测试
2025-6-3
编译原理:语法制导翻译技术和中间代码生成
2025-6-3
Announcement
🎉写给自己的2025心愿🎉
保研
国奖
完善博客
学一门乐器
发表一篇论文
拍摄人生照片
去3个城市旅游
专业课知识视频
拍摄毕业季视频
----- 2025 ------
👏希望我们一起变好👏