从分析入手开始你的设计


    可以把模块设计分为4个阶段:准备阶段=>分析阶段=>选型阶段=>细化阶段。
    每个阶段都可以利用一些工具(比如表格、鱼骨图、checklist等)来辅助思考,跟踪结果。

    具体方法如下:
    image.png

    **
    1.准备 任务:
    准备阶段需要详细了解模块的职责背景,了解模块的具体需求,了解模块与系统其它部分的协作关系,了解模块的设计约束,了解相关领域知识,等等。总的来说,就是搞清楚干系人对模块设计的期望,希望这个模块做到什么(目标)。
    方法:
    找干系人沟通及确认
    产出:
    这个阶段应该产出一个特性列表,分两类描述,一类叫需求(模块需要做什么),一类叫约束(做某件事必须达到的最低要求)。
    每个特性,除了描述要做什么,还应描述相关的约束(比如性能、资源消耗、可测试性要求、可扩展性要求等)。
    模块作为一个整体,还应有一些整体约束。
    2.分析
    分析阶段需要对需求进行分析,了解各需求点的重要性,难度,风险,并提出后续阶段开发过程对本模块的设计要求(即要做好这个模块,还需要考虑哪些因素,比如可调试、可测试、可维护、可扩展等等)

    1.小范围的讨论会,可采用头脑风暴法;
    2.单独分析思考,可采用鱼骨图进行分析;

    这个阶段应该产出风险分析鱼骨图(或其它分析结果,比如风险列表),对需求和约束进行标注,按重要性分为三个级别(高:必须满足,中:建议实现,低:可供牺牲),按难度分为三个级别(高:重点设计,中:明确描述,低:保持跟进),按风险(包括影响面)分为三个级别(高:重点确认,中:持续跟踪,低:无需关注)。 | | 3.风险分析? | 第一个评审点。该评审点主要关注模块设计风险的评估,如果风险都已得到评估,可以进入下一阶段。
    如果整体风险较小,可以单独和架构师(或总体设计师)沟通,得到认可后可不召开会议,直接进入后续阶段。
    这个评审点可以和前一阶段的讨论会合并在一起进行。
    产出:
    会议纪要 | | 4.构思 |
    从功能需求出发,构思实现方案,包括结构(模块结构、数据结构)、逻辑(业务逻辑、交互逻辑、关键算法等)

    1.采用多维视图,结构图,数据流图,交互图等

    模块结构图;
    数据结构图;
    逻辑视图(数据流图、活动图、时序图等); | | 5.检视 | 任务:
    针对构思的方案,审视其是否能达成设计约束,如果不能,可以考虑是否能通过优化方案达成约束,或者重新审视约束的重要性。如果有多个方案,可以评估各个方案在达成设计约束方面的优劣势,从中选择最佳方案。
    部分设计方案会产生新的风险,所以这个阶段需要检视方案,评估其可能导致的新风险。并将新风险列入风险列表,检视其对模块/系统的各种影响。
    方法:
    Checklist法,对着前述阶段列的关注点,逐条检视
    产出:
    决策表; | | 6.风险消除? | 第二个评审点。该评审点主要关注模块设计风险的消除,如果风险都已有了可行的解决方案,可以进入下一阶段。如果模块整体风险不大,方案能够完全覆盖所有风险,可预见性很高,可以单独和架构师(或总体设计师)沟通,得到认可后可不召开会议,直接进入后续阶段。

    会议纪要 | | 7.细化 |
    针对已经初步定义的方案,做必要的细化,能把方案规格化为明确的设计表述,并切分成明确定义的任务。保证各协作方能从规格描述中得到与自身任务相关的信息定义(比如接口规格,行为规格,设计约束等)。

    任务分解表
    API定义列表;
    数据结构定义;
    | | 8.任务明确? | 第三个评审点。如果前两个阶段有召开过评审会议,本阶段无明显方案变化,任务清晰能得到各方认可,经架构师(或总体设计师)许可,可不召开会议。

    会议纪要 |


    任何一个阶段,都有可能发现前面阶段存在的问题,遗漏的风险,发现后应当对原方案进行修订,并评估其可能对其它流程、特性产生的影响。