本文大纲
《我的敏捷软件项目管理实践》
概要设计
输入与输出
输入:
- 脑图+功能清单
- 产品原型图
- 《需求规格说明书》或《产品需求文档》(PRD)
- 《XXX项目设计分工》干特图
过程活动:概要设计
参与者:项目经理、研发人员
输出:《概要设计文档》
干货
- 在《敏捷宣言》(The Agile Manifesto)中,有4点敏捷开发的核心价值观,具体可看 第二章 软件开发生命周期模型–敏捷方法论–敏捷思维。其中第二点的内容是:可工作的软件优先于详尽的文档:更注重实际可用的软件,而非过度关注文档的完整性。
- 敏捷思维降低了文档的重要程度。 是降低,是不过度关注文档,不是不写文档,文档要尽可能的精简。反思:文档流传性追溯性更强,规范的文档能帮助我们低成本的跨部门沟通;面对团队成员的更新换代,文档也能更好的帮助新人清晰地了解产品历程及全貌。
- 概要设计不要深入到类、方法、时序图、伪代码等层面。那样做就是涉及过度关注文档了。
- 所以我们写精简的概要设计文档,可参考下面提供的模板。
目标与意义
-
目标
概要设计的主要目标是明确系统的整体结构和核心逻辑,为后续详细设计和编码提供清晰的指导。具体包括:- 确定模块划分
- 定义实体和状态
- 明确服务接口及调用时序
- 规划主业务流程和关键状态
-
意义
- 提升设计能力:通过设计文档的编写,强迫自己提炼和精简编码逻辑,从而提高自身的设计水平。
- 促进团队协作:清晰有条理的设计文档能够说服团队成员按统一思路推进工作。
- 降低返工风险:在早期发现问题并快速调整,避免后期因设计问题导致的大规模返工。
概要设计的核心内容
根据项目需求和实际情况,概要设计通常包含以下几个核心部分:
-
模块划分
将系统拆分为多个子系统或模块,并定义每个模块的功能边界和职责。这一步需要遵循高内聚、低耦合的原则,确保各模块之间的依赖关系尽可能简单。 -
实体与状态设计
- 实体:列出系统中涉及的核心数据对象(如用户、订单等),并定义其属性和关系。
- 状态:明确这些实体可能存在的状态及其转换规则。例如,订单的状态可以是“待支付”、“已支付”、“已发货”等。【重要】
-
服务接口设计
- 定义模块间通信的方式,包括API接口的输入输出参数、调用方式以及错误处理机制。
- 绘制接口调用时序图,展示不同模块之间交互的顺序和逻辑。
-
主业务流程
描述系统的主要业务场景,以流程图或文字形式呈现。重点突出关键路径上的操作步骤和异常处理策略。 -
表结构设计
如果涉及到数据库开发,则需初步设计主要的数据表结构,包括字段名称、类型、约束条件等。
概要设计的实施步骤
- 理解需求
在开始概要设计之前,必须对需求文档(如《需求规格说明书》)有深入的理解。可以通过需求评审会与产品经理、测试人员等确认需求细节,确保没有遗漏或误解。 - 分解任务
根据系统规模和复杂度,将设计任务分解为若干小块,比如按子系统或功能模块分配给不同的设计师。【重要】 - 绘制草图
使用工具(如Visio、Draw.io)绘制模块划分图、接口调用时序图、状态流转图等辅助说明材料。这些图表能直观地表达设计思路,便于团队成员理解和讨论。 - 撰写文档
编写概要设计文档时,应遵循“少即是多”的原则,只记录最重要的信息。文档内容应尽量精简,但又足够全面,以便于后续维护和变更。 - 组织评审
完成初稿后,由项目经理召集相关人员(产品、测试、研发、架构师等)召开设计评审会。在会上介绍设计思路,听取反馈意见,并据此修改完善文档。
概要设计文档包含的内容
1. 项目介绍
- 背景:明确项目的核心问题和目标。
- 人员角色:列出主要参与者(如平台方、买家、卖家)及其职责。
- 子系统:概述涉及的主要子系统(如PC商城前台、会员中心、商家后台等)。
2. 总体设计
- 框架与业务流向:简述各系统间的关系及核心业务流程。
- 设计要求:
- 性能:所有页面响应时间控制在500ms以内。
- 安全:防止SQL注入、缓存穿透等攻击。
- 扩展性:确保功能点可扩展、可复用,易于后期拆分。
3. 系统子模块设计【重要】
- 支付模块:
- 流程:构造交易数据并签名 → 用户发起支付 → 调用支付接口 → 支付完成通知。
- 注意:应用私钥必须保存在服务端,避免客户端暴露。
- 订单模块:
- 流程:下单 → 待付款 → 待发货 → 待收货 → 已完成(待评价)→ 已评价。
4. 影响范围和服务升级内容
- 改动业务:明确哪些原有业务受到影响,如订单审核流程的自动化调整。
5. 对外提供的接口列表
- 示例:查询城市列表接口(GET请求,返回城市列表JSON对象)。
6. 依赖外部系统的接口
- ERP系统、百度OCR、腾讯地图、支付宝支付等。
7. 性能与安全设计
- 性能:优化响应时间,采用负载均衡和分布式缓存。
- 安全:加强输入验证,遵守PCI-DSS标准。
- 降级策略:超时未返回时启动备用方案或返回默认值。
- 扩展性:模块化设计,API版本化管理。
8. 前端/APP相关方案
- 响应式设计、用户体验优化、性能优化。