本文大纲

《我的敏捷软件项目管理实践》

概要设计

第五章 如何做好设计

输入与输出

输入:

  1. 脑图+功能清单
  2. 产品原型图
  3. 《需求规格说明书》或《产品需求文档》(PRD)
  4. 《XXX项目设计分工》干特图

过程活动:概要设计

参与者:项目经理、研发人员

输出:《概要设计文档》

干货

  1. 在《敏捷宣言》(The Agile Manifesto)中,有4点敏捷开发的核心价值观,具体可看 第二章 软件开发生命周期模型–敏捷方法论–敏捷思维。其中第二点的内容是:可工作的软件优先于详尽的文档:更注重实际可用的软件,而非过度关注文档的完整性。
  2. 敏捷思维降低了文档的重要程度。 是降低,是不过度关注文档,不是不写文档,文档要尽可能的精简。反思:文档流传性追溯性更强,规范的文档能帮助我们低成本的跨部门沟通;面对团队成员的更新换代,文档也能更好的帮助新人清晰地了解产品历程及全貌。
  3. 概要设计不要深入到类、方法、时序图、伪代码等层面。那样做就是涉及过度关注文档了。
  4. 所以我们写精简的概要设计文档,可参考下面提供的模板。

目标与意义

  1. 目标
    概要设计的主要目标是明确系统的整体结构和核心逻辑,为后续详细设计和编码提供清晰的指导。具体包括:

    • 确定模块划分
    • 定义实体和状态
    • 明确服务接口及调用时序
    • 规划主业务流程和关键状态
  2. 意义

    • 提升设计能力:通过设计文档的编写,强迫自己提炼和精简编码逻辑,从而提高自身的设计水平。
    • 促进团队协作:清晰有条理的设计文档能够说服团队成员按统一思路推进工作。
    • 降低返工风险:在早期发现问题并快速调整,避免后期因设计问题导致的大规模返工。

概要设计的核心内容

根据项目需求和实际情况,概要设计通常包含以下几个核心部分:

  1. 模块划分
    将系统拆分为多个子系统或模块,并定义每个模块的功能边界和职责。这一步需要遵循高内聚、低耦合的原则,确保各模块之间的依赖关系尽可能简单。

  2. 实体与状态设计

    • 实体:列出系统中涉及的核心数据对象(如用户、订单等),并定义其属性和关系。
    • 状态:明确这些实体可能存在的状态及其转换规则。例如,订单的状态可以是“待支付”、“已支付”、“已发货”等。【重要】
  3. 服务接口设计

    • 定义模块间通信的方式,包括API接口的输入输出参数、调用方式以及错误处理机制。
    • 绘制接口调用时序图,展示不同模块之间交互的顺序和逻辑。
  4. 主业务流程
    描述系统的主要业务场景,以流程图或文字形式呈现。重点突出关键路径上的操作步骤和异常处理策略。

  5. 表结构设计
    如果涉及到数据库开发,则需初步设计主要的数据表结构,包括字段名称、类型、约束条件等。

概要设计的实施步骤

  1. 理解需求
    在开始概要设计之前,必须对需求文档(如《需求规格说明书》)有深入的理解。可以通过需求评审会与产品经理、测试人员等确认需求细节,确保没有遗漏或误解。
  2. 分解任务
    根据系统规模和复杂度,将设计任务分解为若干小块,比如按子系统或功能模块分配给不同的设计师。【重要】
  3. 绘制草图
    使用工具(如Visio、Draw.io)绘制模块划分图、接口调用时序图、状态流转图等辅助说明材料。这些图表能直观地表达设计思路,便于团队成员理解和讨论。
  4. 撰写文档
    编写概要设计文档时,应遵循“少即是多”的原则,只记录最重要的信息。文档内容应尽量精简,但又足够全面,以便于后续维护和变更。
  5. 组织评审
    完成初稿后,由项目经理召集相关人员(产品、测试、研发、架构师等)召开设计评审会。在会上介绍设计思路,听取反馈意见,并据此修改完善文档。

概要设计文档包含的内容

1. 项目介绍

  • 背景:明确项目的核心问题和目标。
  • 人员角色:列出主要参与者(如平台方、买家、卖家)及其职责。
  • 子系统:概述涉及的主要子系统(如PC商城前台、会员中心、商家后台等)。

2. 总体设计

  • 框架与业务流向:简述各系统间的关系及核心业务流程。
  • 设计要求:
    • 性能:所有页面响应时间控制在500ms以内。
    • 安全:防止SQL注入、缓存穿透等攻击。
    • 扩展性:确保功能点可扩展、可复用,易于后期拆分。

3. 系统子模块设计【重要】

  • 支付模块:
    • 流程:构造交易数据并签名 → 用户发起支付 → 调用支付接口 → 支付完成通知。
    • 注意:应用私钥必须保存在服务端,避免客户端暴露。
  • 订单模块:
    • 流程:下单 → 待付款 → 待发货 → 待收货 → 已完成(待评价)→ 已评价。

4. 影响范围和服务升级内容

  • 改动业务:明确哪些原有业务受到影响,如订单审核流程的自动化调整。

5. 对外提供的接口列表

  • 示例:查询城市列表接口(GET请求,返回城市列表JSON对象)。

6. 依赖外部系统的接口

  • ERP系统、百度OCR、腾讯地图、支付宝支付等。

7. 性能与安全设计

  • 性能:优化响应时间,采用负载均衡和分布式缓存。
  • 安全:加强输入验证,遵守PCI-DSS标准。
  • 降级策略:超时未返回时启动备用方案或返回默认值。
  • 扩展性:模块化设计,API版本化管理。

8. 前端/APP相关方案

  • 响应式设计、用户体验优化、性能优化。