作者图
一个软件系统通常由复杂的逻辑控制,条件和操作的各种组合会导致不同的系统行为。例如,如果驾驶员按下汽车巡航控制系统上的加速按钮,而汽车目前正在巡航,则系统会提高汽车的速度。但是,如果汽车没有巡航,系统就不会做任何事情。
开发人员必须将他们的工作建立在一组功能需求的基础上,这些功能需求描述了系统在正常和错误条件的所有可能组合下应该做什么。但是,很容易忽略特定的条件组合,从而导致需求缺失。通过审查以自然语言编写的规范及其庞大和含糊不清,很难发现这些知识差距。
决策表和决策树是两种有效的技术,用于表示系统在复杂逻辑和决策发挥作用时应如何表现。这些技术在定义功能需求和业务规则时很有价值。它们也是有效测试计划的重要帮助。
01
决策表
决策表列出了影响系统行为某些方面的所有因素的各种值,并指示响应每种因素组合的预期系统操作。这些因素可以显示为可能答案为真或假的陈述,可能答案为是或否的问题,或者可以有两个或更多可能值的条件。
作为说明,让我们考虑一下我曾经使用过的化学跟踪系统。该系统管理着一家大公司研究实验室的化学品库存。它允许科学家请求新化学品、跟踪单个化学品容器的位置和状态、提供健康和安全信息等。
化学品追踪系统是否应接受个人对新化学品的请求取决于四个因素:
-
创建请求的用户是否有权请求化学品。
-
化学品是否可在化学品库房或供应商处获得。
-
该化学品是否在需要安全处理方面的特殊培训的危险化学品清单上。
-
创建请求的用户是否接受过处理此类危险化学品的培训。
其中一些考虑因素源自业务规则:用户授权和处理危险化学品的培训需求。其他基于用户尝试发出请求时的系统数据:化学品是否可用以及用户是否接受过任何必要的培训。
你可以想象尝试用自然语言指定的功能需求的形式写出这四个因素的所有逻辑组合。它很快就会变得庞大而复杂。很容易错过其中一个组合,包括逻辑上不合理的组合,或者以可能导致不正确实现的模棱两可的方式编写需求。
图 1 显示了以决策表的形式描述这些逻辑组合的另一种方法。该表明确说明了化学品跟踪系统是应该接受还是拒绝对新化学品的每个请求。
图 1. 化学品追踪系统的示例决策表。
这四个因素中的每一个都有两个可能的条件,真或假。原则上,对于 16 种不同的功能需求,这会产生 2 的四次方,或 16 种可能的真/假组合。但在实践中,许多组合会导致相同的系统响应。例如,如果用户无权请求化学品(第一个条件为假),那么系统将不会接受该请求,因此其他条件无关紧要。那些不相关的条件组合在决策表的相应单元格中有破折号。
该表显示,只有五种不同的功能需求来自各种组合。事实证明问题比您想象的要小,这总是好的。决策表是一种简洁有效的方式,可以明确传达这些不同逻辑组合的结果。
02
决策树
决策树是表示决策表中出现的相同信息的一种可视化方式。图 2 显示了一个决策树,它代表了化学品追踪系统的相同逻辑。这个例子看起来很像流程图。有些人使用其他绘图约定,但我喜欢对条件和由此产生的系统行为使用不同的符号。
图 2. 化学品追踪系统的示例决策树。
四颗钻石说明了四个因素及其可能的真假结果。一些结果导致问下一个问题;其他人则得出关于系统是否应该接受或拒绝化学品请求的结论。五个方框表示接受或拒绝化学品请求的五种可能结果。
决策树比决策表占用更多空间。您可以想象有更多(可能更多)四个决定的问题,每个决定可能不止两个结果。解决此类问题的决策树可能会变得庞大而复杂。追踪决策树中的决策路径确实使逻辑序列比决策表中显示的更紧凑的条件和结果摘要更清晰。
03
测试的好处
除了有效地显示多个决策如何导致一组功能需求的好处之外,决策表或树对测试人员来说也是一个很好的帮助。您希望确保测试所有相关的输入和条件组合,并查看它们是否激发了正确的系统行为。这些工具可以快速显示测试人员需要为成功路径和失败路径考虑哪些组合。使用决策表可确保测试人员不会忽略来自此逻辑的任何需求。它还可以防止他们执行不会产生额外有用信息的不必要的测试。
04
总结
我一直热衷于使用替代技术来表示自然语言之外的需求知识。决策表和决策树是记录需求或业务规则以避免忽略任何条件组合的有效方法。即使是一个复杂的决策表或决策树,也比一大堆重复的文字需求更容易阅读。所有业务分析师都应该在他们的工具包中拥有这些有价值的技术。
原文章来源:https://medium.com/analysts-corner/its-only-logical-decision-tables-and-decision-trees-12a8b52243ea