极客时间已完结课程限时免费阅读

加餐 | 软件设计文档示例模板

加餐 | 软件设计文档示例模板-极客时间

加餐 | 软件设计文档示例模板

讲述:李智慧

时长02:10大小1.99M

第 9 篇文章中,我讲了每种 UML 模型图的画法,以及这些画法分别适用于什么样的设计阶段,我们也可以将不同阶段输出的模型图放在一个文档中,对每张模型图配以适当的文字说明,构成一篇设计文档。
对于规模不太大的软件系统,我们可以将概要设计文档和详细设计文档合并成一个设计文档。这一篇文章中,我会展现一个设计文档示例模板,你可以参考这个模板编写你的设计文档。
文档开头是设计概述,简单描述业务场景要解决的核心问题领域是什么。至于业务场景,应该在专门的需求文档中描述,但是在设计文档中,必须要再简单描述一下,以保证设计文档的完整性,这样,即使脱离需求文档,阅读者也能理解主要的设计。
此外,在设计概述中,还需要描述设计的非功能约束,比如关于性能、可用性、维护性、安全性,甚至开发和部署成本方面的设计目标。
然后就是具体的设计了,第一张设计图应该是部署图,通过部署图描述系统整个物理模型蓝图,包括未来系统长什么样。
如果系统中包含几个子系统,那么还需要描述子系统间的关系,可以通过子系统序列图,子系统活动图进行描述。
子系统内部的最顶层设计就是组件图,描述子系统由哪些组件组成,不同场景中,组件之间的调用序列图是什么样的。
每个组件内部,需要用类图进行建模描述,对于不同场景,用时序图描述类之间的动态调用关系,对于有复杂状态的类,用状态图描述其状态转换。
具体示例模板如下:

1 设计概述

……系统是一个……的系统,是公司……战略的核心系统,承担着公司……的目标任务。

1.1 功能概述

系统主要功能包括……,使用者包括……。

1.2 非功能约束

……系统未来预计一年用户量达到……,日订单量达到……,日 PV 达到……,图片数量达到 ……。
查询性能目标:平均响应时间 <300ms,95% 响应时间 <500ms,单机 TPS>100;
下单性能目标:平均响应时间 <800ms,95% 响应时间 <1000ms,单机 TPS>30;
……性能目标:平均响应时间 <800ms,95% 响应时间 <1000ms,单机 TPS>30;
系统核心功能可用性目标:>99.97%;
系统安全性目标:系统可拦截…… 、……、……攻击,密码数据散列加密,客户端数据 HTTPS 加密,外部系统间通信对称加密;
数据持久化目标:>99.99999%。

2 系统部署图与整体设计

系统上线时预计部署……台物理机,……个子系统,和公司……系统交互,和外部第三方……个系统交互。

2.1 系统部署图

子系统 1 的功能职责为……,部署……台服务器,依赖……和……子系统,实现 ……功能。
子系统 2 参照子系统 1 来写。

2.2 下单场景子系统序列图

下单时,子系统先发送……消息到子系统 3,子系统 3 需要执行……完成……处理,然后发送……消息到财务系统,消息中包含……数据。
收到……的处理结果……后,子系统 1 发送……消息到……子系统 2……。

2.3 退款场景子系统序列图

退款子系统先发送……消息到子系统 3,子系统 3 需要执行……完成……处理,然后发送……消息到财务系统,消息中包含……数据。
收到……的处理结果……后,子系统 1 发送……消息到……子系统 2……。

2.4 退款场景子系统活动图

如图所示:
退款开始时,子系统 1 处理 XXX,然后判断 m 的状态,如果 m 为真,请求子系统 3 处理 ZZZ,如果 m 为假,子系统继续处理 ZZZ 并结束。
子系统 3 处理 ZZZ 后,一方面继续处理 XYZ,一方面将……消息发送给财务通进行 AAA 处理。
子系统在处理完 XYZ 后,返回子系统继续梳理 YYY,然后退款处理结束。

3 子系统 1 设计

子系统 1 的主要功能职责是……,其中主要包含了……组件。

3.1 子系统 1 组件图

子系统 1 包含 6 个组件:
组件 1 的功能主要是……,需要依赖组件 2 完成……,是子系统 1 的核心组件,用户……请求主要通过组件 1 完成。
同样的,组件 2 也可以参照组件 1 来这样写。

3.1.1 场景 A 组件序列图

对于场景 A,首先组件 1 收到用户消息 CCC,然后组件 1 调用组件 2 的 XXX 方法……。

3.1.2 场景 B 组件活动图

在场景 B 中,首先组件收到……消息,开始处理……,然后判断……,如果为 true,那么……,如果为 false,那么……。

3.2 组件 1 设计

组件 1 的主要功能职责是……,其中主要包含了……类。

3.2.1 组件 1 类图

Class1 实现接口 Interface1,主要功能是……,Class1 聚合了 Class2 和 Class3,共同对外提供……服务,Class1 依赖 Class4 实现……功能,Class4……。

3.2.2 场景 A 类序列图

在场景 A 中,当外部应用调用类 1 的 create 方法时,类 1……。

3.2.3 对象 1 状态图

对象 1 运行时有 4 种状态,初始状态是状态 1,当条件 1 满足是,状态 1 转换为状态 2,当条件 3 满足时,状态 2 转换为状态 4……。

3.3 组件 2 设计

重复上面的格式。

4 子系统 2 设计

重复上面的格式。
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 32

提建议

上一篇
答疑丨工作中的交往和沟通,都有哪些小技巧呢?
下一篇
结束语丨期待未来的你,成为优秀的软件架构师
unpreview
 写留言

精选留言(25)

  • 许童童
    2019-12-11
    这个加餐不错,直接上干货,这个设计文档只要稍做修改,就可以在公司内部直接使用了,老师牛啊。
    共 1 条评论
    27
  • 天天向上
    2019-12-11
    老师 您好!类似文档丰富的Java开源项目,您能否推荐一个?
    共 1 条评论
    6
  • 老男孩
    2019-12-11
    一个很好的设计文档模板。看了这个我才知道,之前的一些文档有些地方就是胡写了。很多公司,而且是有一定规模的公司,设计文档也是后补的,为了应付领导或者甲方。产品和开发也不看,就盯着产品原型图死磕。关于一个核心问题域,有时候连名词都没统一。project,你说的是项目管理,他说的是工程管理,或者一会儿工程一会儿项目。这样的文档写了也没人看,然后就真的成了软件系统的“遗产”了。
    7
  • 丁丁历险记
    2019-12-18
    给markdown 打个广告,我现在blog 全是md 格式了。
    4
  • 几点了
    2019-12-17
    终于理解公司的设计文档的章节了,学习到了
    2
  • king5699
    2020-03-23
    加餐优秀,谢谢老师
    1
  • 探索无止境
    2020-03-02
    这样的干货加餐,应该多来点!感谢老师!
    1
  • 靠人品去赢
    2019-12-16
    这个mark一下,设计文档之前一个公司都是A复制B换个图,换个描述,也不知道对不对。这个最起码是模版,到时候用的时候可以拿出来。
    1
  • 曹翔
    2021-03-02
    如果系统小型重构,或者微服务之间有变动,都要先更新这些文档吗?这样的话,发版频繁的系统文档操作太频繁了
  • pinteressante
    2021-02-28
    这个很棒了, 希望老师再多上一些类似的干货
  • def
    2021-02-24
    非常不错的模板,甚至可以直接上手用,感谢老师!
  • escray
    2020-10-21
    其实不久之前是看过这篇加餐的,当然也学过文档模板,但是再次打开,却有一些不一样的发现。 其实这个不仅仅是一个模板,在这个模板的下面,是一个相对完整的设计思路。 之前写过架构师训练营的课程作业,画一个食堂餐卡系统的 UML 图。我自己画的比较简陋,而那些“学霸”们的优秀作业,和这里的结构比较类似,可能是师出同门,也可能是因为优秀的脑袋总是相通的。 我不喜欢写冗长的文档,不过类似这样的文档,无论是作为作者还是读者,对于理解系统架构都很有帮助。
    展开
  • Lin大坑haha~
    2020-10-19
    加餐很棒,逻辑清晰,谢谢老师
  • 火锅小王子
    2020-08-19
    老师您好,想问下第三部分中的组件图是不是改为模块图更合理些?组件应该是属于工具,而我们这个应该是属于业务系统设计的层面
  • 买了就等于学了
    2020-07-03
    老师,以及各位同学,有些关于性能指标的问题想请教下。 1,TPS和QPS两者之间是单位时间增删改数量和单位时间查询数量的区别吗? 2,以及我们常说的高并发具体到底指哪个指标达到什么阈值才算是高并发? 3,单机下,RT,TPS,QPS,请求成功率应该多少才是合理?
  • 小牛人
    2020-01-04
    95%是哪个范围?
  • Geek_3b1096
    2020-01-01
    谢谢老师终于认识从哪里切入来写文档
  • 小文同学
    2019-12-16
    干货!谢谢老师
  • Jonathan Chan
    2019-12-16
    优秀,学习了
  • seg-上海
    2019-12-13
    干货。。,