决策是为了解决一个问题而做出决定的过程。它为了实现特定的目标,根据客观的可能性,在占有一定信息和经验的基础上,借助一定的工具、技巧和方法,对影响目标实现的诸多因素进行分析、计算和判断选优后,对未来行动做出决定。
一个软件设计决策涉及的要素如图1-32所示。
图1-32 软件设计决策的要素
软件设计决策是为了满足特定的需求和目标,包括功能需求,也包括非功能需求。一次决策解决一组内聚的需求。
软件设计决策需要在一定的约束下进行,这些约束限定了候选设计的选择范围和解决方案的决定过程。
为了解决问题,设计决策会试着先给出众多候选设计方案,每个候选设计方案包括:
● 会发生的设计行为,例如增加、修改或者删除一个设计组件。
● 添加的设计规则,在后续的设计决策中不能违反这些设计规则。例如如果决策采用分层体系结构风格,那么整个系统都不能再发生自底向上的逆向调用。
● 添加的设计约束,这些约束会限制后续的设计决策的选择范围。例如,如果决策决定高峰期并发用户数为10万,那么后续的设计决策都要在这个条件下进行考虑。
● 附加需求,它们是决策中额外产生的新需求,例如决策中决定使用扫码器,那么扫码器规格就是新附加的硬件需求。
依据设计师的理由,设计决策会从众多候选设计中选择一个作为最终的解决方案,并将其内容(规则、约束、行为、附加需求)实施到设计结构。
下面我们分别解释其中的几个关键事项。