理顺软件开发各个环节-13(开发管理-概要设计和详细设计)
5.5软件概要设计
概要设计,用于子系统或模块设计,也可用新增业务需求的跨子系统设计。概要设计在总体设计框架下,遵循总体设计思想,丰富子系统或模块设计,从而能够指导开发实现子系统或模块。
由于软件总体设计从宏观上架构软件,距离开发实现,还有许多需要细化之处。如果系统由多个子系统组成,每个子系统可以视为一个独立的应用软件或服务,此时概要设计不可省略;如果系统不大,重点模块也应需要做概要设计来细化。可以理解为概要设计粒度介于总体设计和详细设计之间。
另外,概要设计与代码实现的联系更紧密一些,如代码分层、核心的对象类及关系等。
责任人:开发项目组长。
执行人:高级程序员、子系统或模块开发人员。
关键行为:分析和概要设计。
- 分析:根据子系统或模块的功能规划,结合对软件需求进行分析,完整把握需求;
- 概要设计:在总体设计框架下,完成子系统或模块的概要设计。
输入:
- 软件需求规格书(SRS);
- 数据字典(DD);
- 用户故事集合;
- 其它需求资料;
- 软件总体设计文档。
输出:
- 软件概要设计文档;
- 子系统结构设计;
- 功能模块设计;
- 接口设计;
- 软件结构设计;
- 数据库设计。
职责要求:
- 概要设计;
- 沟通、协调、明确对接的上下游子系统/模块的接口和边界;
- 提请软件概要设计评审:
- 概要设计人员:主讲人,负责讲解和答复各种质询和疑问;
- 产品经理:评估产品需求在子系统或模块的部分是否被设计的系统所满足;包括后期的需求的满足性;非功能需求的支持情况;
- 项目经理:组织、协调,关注子系统与其它相关子系统的衔接;
- 开发项目经理及高级技术人员:关注技术方案的可行性、灵活性;非功能需求的支持情况;关注子系统与其关子系统的衔接;
- 开发技术人员:了解软件的设计思路,便于开发实现;如前后端分离,前端开发人员需评审涉及前端接口的合理性;
- 测试技术人员:了解软件的设计思路,以及其对测试的影响;
5.6软件详细设计
详细设计,能够在开发人员编码实现前,评审其设计思路,肯定是有帮助的。但是,详细设计是需要时间开销的,做为设计的末端,其数量规模是很大的;如果需求不明确,则这些投入就可能白费。
在敏捷开发模式,详细设计一般都不做。在实际操作中,发现有些核心功能还得需要做详细设计,有了总体设计文档,概要设计文档和软件需求规格书,并不能保证每个开发人员都能跟上设计人员的思路,结果实现的效果参差不齐,有的完全没有按照总体设计思路来。
因此,我认为,重要或核心功能开发,还是需要做详细设计。具体需要开发项目组长来把握。
责任人:开发项目组长。
执行人:软件需求开发人员。
关键行为:分析和详细设计。
输入:
- 软件需求规格书(SRS);
- 数据字典(DD);
- 用户故事;
- 其它需求资料;
- 软件总体设计文档;
- 软件概要设计文档。
输出:
- 详细设计文档;
- 接口设计:YApi或swagger;
- 单元测试设计:checklist
职责要求:
- 详细设计;
- 理解需求;
- 沟通、协调、明确对接的上下游模块的接口和边界;
- 提请软件详细设计评审:
- 开发人员:主讲人,负责讲解和答复各种质询和疑问;
- 开发项目组长:关注技术方案的可行性;
- 上下游相关开发人员:评审接口、业务流程及性能等技术可行性;
- 高级技术人员:如果功能比较复杂,参与评审;
- 其它人员,视情况需要