软件设计文档示例模板 - 学习/实践

article/2025/9/18 18:31:58

1.应用场景

主要用于学习,以及书写软件设计文档。

2.学习/操作

1.文档阅读

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

2.整理输出

在第9篇文章中,我讲了每种UML模型图的画法,以及这些画法分别适用于什么样的设计阶段,我们也可以将不同阶段输出的模型图放在一个文档中,对每张模型图配以适当的文字说明,构成一篇设计文档。

对于规模不太大的软件系统,我们可以将概要设计文档和详细设计文档合并成一个设计文档。这一篇文章中,我会展现一个设计文档示例模板,你可以参考这个模板编写你的设计文档。

文档开头是设计概述,简单描述业务场景要解决的核心问题领域是什么。至于业务场景,应该在专门的需求文档中描述,但是在设计文档中,必须要再简单描述一下,以保证设计文档的完整性,这样,即使脱离需求文档,阅读者也能理解主要的设计。

此外,在设计概述中,还需要描述设计的非功能约束,比如关于性能、可用性、维护性、安全性,甚至开发和部署成本方面的设计目标。

然后就是具体的设计了,第一张设计图应该是部署图,通过部署图描述系统整个物理模型蓝图,包括未来系统长什么样。

如果系统中包含几个子系统,那么还需要描述子系统间的关系,可以通过子系统序列图,子系统活动图进行描述。

子系统内部的最顶层设计就是组件图,描述子系统由哪些组件组成,不同场景中,组件之间的调用序列图是什么样的。

每个组件内部,需要用类图进行建模描述,对于不同场景,用时序图描述类之间的动态调用关系,对于有复杂状态的类,用状态图描述其状态转换。

具体示例模板如下:

1 设计概述

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

1.1 功能概述

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

1.2 非功能约束

……系统未来预计一年用户量达到……,日订单量达到……,日PV达到……,图片数量达到 ……。

  1. 查询性能目标:平均响应时间<300ms,95%响应时间<500ms,单机TPS>100;
  2. 下单性能目标:平均响应时间<800ms,95%响应时间<1000ms,单机TPS>30;
  3. ……性能目标:平均响应时间<800ms,95%响应时间<1000ms,单机TPS>30;
  4. 系统核心功能可用性目标:>99.97%;
  5. 系统安全性目标:系统可拦截…… 、……、……攻击,密码数据散列加密,客户端数据HTTPS加密,外部系统间通信对称加密;
  6. 数据持久化目标:>99.99999%。

2 系统部署图与整体设计

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

2.1 系统部署图


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

子系统2参照子系统1来写。

2.2 下单场景子系统序列图

 

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

2.3 退款场景子系统序列图

 

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

2.4 退款场景子系统活动图


如图所示:

  1. 退款开始时,子系统1处理XXX,然后判断m的状态,如果m为真,请求子系统3处理ZZZ,如果m为假,子系统继续处理ZZZ并结束。
  2. 子系统3处理ZZZ后,一方面继续处理XYZ,一方面将……消息发送给财务通进行AAA处理。
  3. 子系统在处理完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设计

重复上面的格式。

后续补充

...

3.问题/补充

TBD

4.参考

参见上面文档列表

后续补充

...


http://chatgpt.dhexx.cn/article/ugKrpXxe.shtml

相关文章

来给你的CSDN博客换个皮肤~

进入CDSN官网&#xff0c;登录自己的账号&#xff0c;点击内容管理。 进入首页&#xff0c;选择博客设置 进入页面后&#xff0c;可修改博客标题、添加博客描述、修改博客皮肤&#xff0c;还可以修改默认编辑器。 来呀&#xff0c;一起换皮肤啊~

cdsn怎么查看我的关注(我关注过谁)

登录后点开链接 https://my.csdn.net/my/follow 如下图&#xff1a;

CDPN解读

关于6-DoF的一些基础的知识点请看上一篇博客。 Related work 从RGB图像中识别6-DoF的方法分为直接法和间接法。 1. 间接法 即不是直接的从RGB图像中恢复出6-DoF的信息&#xff0c;而是现在2维RGB图像和它的3维的模型上建立点到点的对应关系&#xff0c;然后通过数学的方法将…

2023年7月江苏/北京/深圳CDGA/CDGP数据治理认证招生

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

CDSN发文章

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

CDC-ECM 和 RNDIS

HomeCategoriesTagsAboutFeed CDC-ECM 和 RNDIS Category: network Tags: network linux wifi ###1. USB-CDC USB协议中的的CDC类是USB通信设备类 (Communication Device Class) 的简称, CDC类是USB组织定义的一类专门给各种通信设备&#xff08;电信通信设备和中…

CDC

CDC CDC(clock domain crossing) 思维导图: 跨时钟域处理方法总结如下: 1、有关系的时钟之间传单bit数据,理论上只需要源数据保持足够长的时间(clk2的两个周期)即可; 2、无关系的时钟之间传单bit数据,必须要使用同步器; 3、不管有无关系的时钟进行单bit传输,脉冲同…

2023年3月全国DAMA-CDGA/CDGP数据治理认证招生简章

弘博创新是DAMA中国授权的数据治理人才培养基地&#xff0c;贴合市场需求定制教学体系&#xff0c;采用行业资深名师授课&#xff0c;理论与实践案例相结合&#xff0c;快速全面提升个人/企业数据治理专业知识与实践经验&#xff0c;通过考试还能获得数据专业领域证书。 DAMA认…

cdsn的code使用方法

今天无意间发现了csdn的code,刚好前两天因为校园网对github的限制苦恼,这下来了精神,迫不及待的尝试了一下! 网上搜了很多使用方法,在这里做个总结,感谢网上的各位贴友。 code感觉就是github的大陆版,各种功能都蛮像的,希望是一个经得起考验的版本控制器。 下面是方…

CDSN格式

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

CDSN使用教程

欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…

Mysql中去重的语法_MySQL去重distinct

去重 在MySQL中需要查询表中不重复的记录时,可以使用distinct关键字过滤重复记录。 语法: select distinct [,...,] from ; 数据表如下: mysql> select * from emp; +-------+--------+------------+------+------------+------+------+--------+ | empno | ename | job …

mysql去重统计

第一种使用 DISTINCT 去重统计 SELECT COUNT(DISTINCT record_id) FROM assessment_record_date WHERE date_type 1 and DATE_FORMAT( the_date,%Y-%m) DATE_FORMAT(NOW(),%Y-%m) 结果是去重之后的总数量 第二种使用 GROUP BY 去重统计 SELECT COUNT(record_id) FROM a…

mysql查询去重后的总数

mysql 查询去重 建议以后给出列名、数据示例&#xff0c;这样我们写的SQL你可以粘贴运行&#xff5e; SELECTDISTINCT表1.列2,表1.列1 FROM表1 WHERE表1.列2IN(SELECT列1FROM表2) 更多追问追答 谢谢你&#xff0c;我补充了一下&#xff0c;我想粘贴的多点&#xff0c;但是太多了…

mysql去重查询方法优化

前言 说起来开始进行面试是年前倒数第二周,上午9点,我还在去公司的公交上,突然收到蚂蚁的面试电话,其实算不上真正的面试。面试官只是和我聊了下他们在做的事情(主要是做双十一这里大促的稳定性保障,偏中间件吧),说的很详细,然后和我沟通了下是否有兴趣,我表示有兴趣…

Mysql去重查询---DISTINCT、group by

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 DISTINCT语法:关键词 distinct用于返回唯一不同的值。 表结构案例SELECT DISTINCT age FROM emp1SELECT DISTINCT age ,NAME FROM emp1SELECT DISTINCT * FROM emp1…

MYSQL去重方法汇总

表数据 备注&#xff1a; id: 任务id;name: 参与人name; 1&#xff1a;distinct 1.1 -- 根据任务ID去重 SELECT DISTINCT id FROM test;1.2 -- 任务总数 SELECT COUNT(DISTINCT id) FROM test;1.3 distinct 通常效率较低。它不适合用来展示去重后具体的值&#xff0c;一般与…

mysql 怎么去重2维数组,mysql去重查询

在使用MySQL时&#xff0c;有时需要查询出某个字段不重复的记录&#xff0c;这时可以使用mysql提供的distinct这个关键字来过滤重复的记录&#xff0c;但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段&#xff…

MySQL去重查询只保留一条最新的记录

需求&#xff1a;MySQL去重查询只保留一条最新的记录 文章目录 易错的写法正确的写法-1正确的写法-2正确的写法-3 易错的写法 表结构与初始数据如下SQL文件&#xff1a; -- MySQL dump 10.13 Distrib 8.0.28, for Linux (x86_64) -- -- Host: localhost Database: test01…

MySQL去重查询

在使用MySQL时&#xff0c;有时需要查询出某个字段不重复的记录&#xff0c;这时可以使用mysql提供的distinct这个关键字来过滤重复的记录&#xff0c; 实例&#xff1a; select distinct name,id from user;&#xff0c;这样的结果为&#xff1a; distinct name,id 这样的my…