任务:设计解决方案
为实现某些功能,识别元素并设计需要的交互、行为、关联关系,以及数据。

将设计可视化以帮助解决问题并沟通解决方案。

规程:开发
用途

此任务的目的是描述系统的元素,使它们支持要求的行为、高质量,且符合架构。

关系
角色主执行者: 其他执行者:
输入必需:
    可选:
      输出
        主要描述

        此任务是关于系统一部分的设计,而不是整个系统。它应该基于某个小的需求集合。这些驱动设计的需求可能是基于场景的功能需求、非功能需求,或者两种的混合。

        此任务可以应用在某些指定的上下文中,如某些场景要求的数据访问元素。在此种情况下,可能在后续过程中会再次执行此任务来处理在不同上下文中的相同需求。 记住,为用户构建有价值的功能,所有的上下文通常都需要设计和实现。例如,实际使用的某些系统功能需要在所有的上下文环境中设计和实现,如用户接口、业务规则、数据库访问等等。

        为了内聚和完整性,此任务被描述成一个端到端的设计某个系统场景的任务。实际上,此任务将重复许多次,在首先考虑设计、实现了部分设计后,将继续所了解学习的进行更多的设计。最健康的应用此任务会非常的接近实现。

        如果此任务是针对架构关键需求,其结果应该被 [技术-架构] 引用。

        步骤
        理解需求细节

        查看 [技术-规格] 以理解设计任务的范围和对 设计 的期望。同利益相关人和分析人员一起,澄清那些模糊或遗失的信息。

        如果需求未被表达成简短的场景形式(如非功能需求可能没有指定相关的场景),那么将需要仔细的考虑并适当的练习识别其场景。

        如果需求不完整或不正确,那么需要和分析人员一起完善需求,可能需要提交相应的需求变更申请。

        识别设计元素

        识别那些提供要求的行为而一起协作的元素。这可以从《架构备忘录》中识别的关键抽象,对需求进行设计、领域和对象分析开始,识别其中的设计元素。“Entity-Control-Boundary Pattern”为识别这些元素提供了一个好的开始。也可以参考指南:Analyze the Design

        检查已存在的设计元素,看看它们是否应该参与某个协作。试图在每次执行此任务的过程中创建所有的新元素,是一个错误。

        确定元素如何协作从而实现场景

        通过贯穿场景为参与的元素分配职责,并确定在协作中这些元素的关联关系。

        这些职责可能是对分配给这些元素的行为的简单描述,并不需要明确具体的操作规约和参数。类似的,可以此步骤中定义关联关系。此步骤是为了确保质量模型是被创建出来,并且足够健壮以支持那些需求。参见指南:Analyze the Design.

        参考架构和之前的设计工作,创建一个一致的协作。和架构师一起,理解架构细节和动机。参考可重用的已存在行为和关系,或应用类似的结构,以简化整个系统的设计。更多信息,参见指南:Software Reuse

        完善设计决策

        在适当的层次上完善设计细节以驱动实现,并确保它符合架构。在此步骤中,可以考虑实际的实现语言和其它技术决策。当在较低的抽象层次上考虑这些细节时,如果必要,重新审视实现场景所识别的元素和它们之间的协作。同测试人员和架构师讨论可测试性问题,如设计元素是否难于被测试或有关键的性能问题。

        在更大的上下文范围中,检查近期的变化,演进设计。并决定是否需要重构和重设计来改善健壮性、灵活性以及设计的可理解性。参见指南:Evolve the Design,获取有关特定的设计决策,以及在需要时的设计改进指南。

        从架构中,合入架构机制。在其它部分的设计中,应用元素的一致结构、组织其行为,并使用在架构中识别的模式。

        内部设计(对于大的或复杂的元素)

        对大的、复杂的元素或某些复杂的元素,进行更多的细节设计。

        这可能涉及到设计产生这些期望行为所需要执行的算法。为支持这些元素的期望,加入额外的操作、属性以及关系。

        设计元素其生命周期中的状态,从而保证其在不同的环境中做出正确的行为。对于那些有复杂状态的元素,可能需要通过描述状态机来提供帮助。

        沟通设计

        和那些需要理解系统设计的人员进行沟通。虽然是在此任务将结束时描述此步骤,但沟通应该在整个任务中进行。协作的工作总是比在完成工作时进行评审要更好。

        存在以下一些方式来沟通设计:

        • 使用UML定义的正式模型
        • 描述了静态结构和动态行为的非正式图形
        • 为静态结构添加代码注释。这可以通过补充对跨代码模块的协作行为进行文本描述来进行。
        • 描述了数据库样式的数据模型

        以下是谁需要理解系统设计的示例:

        • 基于设计实现解决方案的开发人员
        • 评审设计以保证其符合架构或检查设计寻找改进架构机会的架构师
        • 检查设计是否可以用于系统其它部分的其他设计人员
        • 依赖于此步骤中的元素进行系统其它部分工作的开发人员或设计人员
        • 评审设计是否符合质量要求和遵守规范的其他评审人员
        理解架构

        Review《架构备忘录》以识别架构的变更和新增内容。参见指南:Evolve the Design 获得更多信息。如果不确定对架构相关部分的理解或设计策略的一致性,则向架构师询问。

        如果在前一次的迭代中,架构没有任何变化,可跳过此步骤。

        评估设计

        评估对象设计的耦合、内聚以及其它的质量设计度量。

        从不同角度考虑设计,以保证其高质量、可沟通性。和其他技术团队成员进行此步骤,一个独立的团队可以提供新的视角。通过测试人员和架构师,提供设计质量和符合架构的视角。但是,当识别潜在的评审人员时记住,如果某人能通过评审提供价值,那么他们可以通过积极参与设计本身来提供更多的价值。如果识别了设计缺陷,修正它们改善设计。

        更多信息,参见概念:Design、指南:Analyze the Design、指南:Evolve the Design

        关键注意事项

        此任务中的每个步骤都可能因为出现新的信息和决策而引起重复之前的步骤。例如,当你决定元素如何协作时可能发现无法满足需求,这将导致你重新回到分析的起点;或者当进行设计评估时,某位评审人员注意到某个可重用的元素并不能按期望进行工作,这可能导致需要识别新的元素来进行替换。

        在执行此任务时考虑架构。必须对照架构完成所有的设计工作。此外,某些设计元素被视为架构关键要素,这些元素需要被更新进架构描述。

        此任务将被执行多次。最好是小块小块进行设计。

        甚至在开始某个特定项目时,希望有已存在的框架和可重用的元素。此任务的每个步骤都必须注意现有的设计和实现,可能时利用这些现有的元素,效仿或者改善这些已有元素。

        在此任务中应用模式。模式代表了经过证明的设计和使用方法,可提升设计的质量与一致性。

        更多信息