详细设计文档模版

背景

描述为什么要做这个技术改造,改造后收益是什么。可以是业务背景或者技术背景。

业务需求类此处可以将产品需求文档中的内容放到此处。技术改造类项目记录发起改造的原因,如系统问题、架构升级、bug修复、性能优化等。

现状

描述当前的技术实现的现状,是否满足需求

描述下方技术方案所涉及到的内部/外部现状的梳理结果,辅助技术方案,这部分可以单独页面展开

[注]: 针对技术改造类的方案,外部依赖梳理时,除开接口层面的梳理,还需要关注数据(通过数据服务间接依赖)消息层面的依赖梳理

目标

描述做完这次开发改造后,我们要达到的目标。可以是业务目标,可以是技术目标。目标需要遵循一下规则:

  1. 目标必须是具体的、可理解的。被考核者必须清楚自己做什么,做到什么程度。
  2. 目标是可量化、可考核的。例如,系统性能指标如RT、QPS,业务目标提升多少付费转化率等。

变更记录:

版本号

变更人

变更时间

变更记录

v1.0.0

XX

2022-12-25

增加了XX功能

修改了XX功能

技术方案

原则(可选)

本次技术方案的多个设计原则,例如对业务方尽可能少的修改,平滑迁移,接入xx基服务,基础服务业务剥离,业务数据自治,中台接入治理等等,概要性的指导原则,下方技术方案需要遵循这一原则

改造范围

罗列本次技术方案的改造范围,包括系统维度,功能维度等,确定改造边界,防止改造范围被无限扩大导致无法落地,范围比较大的改造可以分期进行。

举例:

模块域模块功能点
套餐购买套餐

改造点1

改造点2

使用套餐

方案概述

概要性的描述整体技术方案,对技术方案的大体思路有个大致的轮廓,后续再逐项展开

系统交互设计

关联系统的详细交互时序图+每一步的详细描述,粒度为接口级别。如果是一个系统内部,则可以使用细化到模块之间的交互时序。

整体思路是: 基于时序图产出需要调整的系统之间最小粒度的交互,例如接口/MQ,再基于MQ,再基于此产出各个系统改造的功能列表

规则/状态机设计

如果是规则性比较强的系统,例如计费规则,可以将规则列表+对应示例在此做详细描述

如果涉及到主实体状态比较多的场景,可将住实体的状态机罗列于此

接口设计

基于系统交互设计,得到最小粒度的接口列表,基于这部分需要调整的接口,作详细的接口设计。

包含给到其他业务系统或者前端的接口列表,也就是http和dubbo接口

接口设计元素: URL Method Header 入参 出参 demo示例

示例:

接口名:UserService.getUserById(String userId)

入参
列名code列名字段类型长度示例
userId用户IDString161001
出参
列名code列名字段类型长度示例
code返回码String80:成功,1失败,2跳转充值
message返回信息String64“网络异常,请稍后再试”
dataUser
userId用户IDString161001
name用户名Sting32张三
mobile手机号String1618888888888

数据库设计

ER关系图(可选),需要设计多张表时可以方便大家理解实体之间的关系

表结构设计(可选)

表名:user_info

列名

数据类型

注释

可空(默认N)

默认值

扩展

idbigint(20) unsigned主键
AUTO_INCREMENT PRIMARY KEY
create_timedatetime创建时间(行记录创建时间)
update_timedatetime更新时间(行记录更新时间)
DEFAULT CURRENT_TIMESTAMP
namevarchar(16)用户名
mobilevarchar(16)手机号
is_deletedtinyint(1)是否删除(逻辑删除:0正常 -1删除)0
索引名类型包含字段
PRIMARYPrimaryid

建表语句:

CREATE TABLE `db_job_history_session_gather_record` (

  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',

  `create_time` datetime NOT NULL COMMENT '创建时间',

  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',

  `namevarchar(16) NOT NULL COMMENT '用户名',

  `mobile` varchar(16) NOT NULL COMMENT '手机号',

  `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否删除(0正常 -1删除)',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户信息表'

;

中间件设计

消息队列

描述消息发送者、接收者关系,描述消息发送触发条件,,记录topic、listener相关配置。

示例:topic=“tc_****”,group=“****_group”,listener=“UserPaySuccListener.class”

缓存设计

描述redis、memcache、guavaCache等缓存使用设计方案,包括key、value格式,value值大小,存储数据量级等。

性能设计

性能设计,需要考虑可能的容量规划,包括接口和存储层面,以及之后的性能提升方案,例如增加实例,添加缓存,分库分表,读写分离(CQRS)等等

性能设计需要有相应数据量化指标参考,如:QPS、RT、TP99、内存使用量预估等

安全性设计

安全合规方面的考虑,例如敏感信息加密传输/存储,对C端用户是否存在安全漏洞,例如越权,脱库等等

日志&监控设计

系统稳定性考虑,针对重点核心链路要有完善的监控告警链路覆盖,非重点的功能点需要有相应日志辅助排查问题。

数据兼容方案

根据技术方案类型,如果是技术新老系统改造类的,则需要考虑数据同步方案,双写还是切流,切流的维度是什么,开关如何控制,以及接口访问路由方

案,上线步骤等等数据库变更脚本,刷库脚本等等

原型设计

原则上应该产品经理出原型设计,如果产品经理不熟悉,则开发可以给一些原型设计到产品经理侧,辅助产品经理设计

测试回归功能点汇总

需要测试回归的功能点汇总,方便测试评估工作量,以及开发自测功能点罗列

示例:

功能域细分功能项验证人测试关注点备注
押金购买押金免押多次免押场景
支付宝支付

支付余额不足不成功场景

支付

上线计划(运维计划)

系统发布上线所需要执行的内容和步骤,包含详细的操作指令、sql、配置内容等等

上线CheckList

罗列上线所需的检查项,包括数据库变更脚本,nacos配置,定时任务配置,自有控台配置,运营后台配置,外部依赖服务配置(例如规则引擎,UC等等),业务验证等

示例:

分类

检查项

检查人

检查工具/平台

数据库数据库变更脚本
系统配置nacos配置

实施路径

改造是否需要分期实施,每一期的具体改动点,排期时间,依赖业务方等

举例:

步骤

操作

执行人

执行时间

核验人

备注

步骤1新增数据库表DBA12.01 21:00开发A同学
步骤2配置菜单

产品B同学

12.01 21:30开发A同学
步骤3nacos配置运维C同学开发A同学
步骤4系统发布运维C同学开发A同学
步骤5定时任务开发A同学开发A同学

回滚方案

上线回滚方案,每个技术方案必须考虑,典型的思路是开关控制,开关粒度需要关注

事项

回滚方案

执行人

备注

系统发布代码版本回滚运维A

回滚时要按A→B->C的顺序依次回滚

时间规划

时间规划具体到什么人什么时间点完成什么事,如遇到实施过程中超出原定时间,需要及时抛出风险。

功能负责人人日
功能1开发A1
功能2开发B0.5

总开发*人日,预计12.01联调;联调人日2人日,预计12.10提测;测试人日5人日,预计上线时间12.15

问题列表

在设计技术方案时能想到的所有的问题罗列于此,方便记忆,后续这部分问题需要在方案中解决2

举例:

问题

解决方案/结论

用户***怎么办?

方案一:

方案二:

风险列表

在设计和开发过程中,会因为各种原因导致我们的方案不能绝对安全地按照预期落地,比如开发工作delay不能按期发布,老版本无法做到全部兼容等。

举例:

问题

解决方案/结论

开发同学A,因紧急需求插入导致delay

协调开发同学B接手部分工作

补充:

设计方案编写标准&评审标准

  1. 方案是可转交的:开发同学A编写的技术方案,在评审并交给开发同学B之后,开发同学B可以基于文档直接进行开发,而不需要继续拆解工作内容或完善技术方案。
  2. 方案与代码是直接关联的:其他技术同学可以基于技术方案文档,可直接跳转到具体代码,并进行相应代码阅读或问题处理。
  3. 方案是直接指导操作的:开发上线过程中,可直接基于方案中的步骤进行按部就班地执行操作,具体命令及操作指引清晰明确。
  4. 方案是风险清晰可控的:项目需求研发过程中,偏离方案的部分需要记录并跟踪相应风险项,包括时间风险和内容变更风险,风险前置并沟通详细的解决方案。

面向人群

  1. 研发本人:帮助研发同学梳理清楚开发内容,不遗漏改动点,开发过程中快速做到代码实现。
  2. 其他研发同学:在排查问题、梳理业务、新同学学习了解的场景中,其他同学可通过技术文档快速定位代码并了解逻辑概况。
  3. 测试:测试同学可以通过研发的详细改动点,编写测试用例,文档清晰,测试用例的梳理才不会遗漏。
  4. 运维&架构同学:运维同学可通过详细的改动点,评估对系统性能、变更问题的影响面及影响程度,协助研发完成系统上线及系统安全防护。

工具推荐

时序图:

  • Visual
  • PUML
  • Processon
  • StarUML
  • drowio

业务/技术架构图:

  • Processon
  • drowio
  • PPT

数据库设计:

  • powerdesigner
  • navicat
  • PDManer

原型设计:

  • Axure Pro
  • Processon

参考案例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/261313.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis---初阶

一、MyBatis作用 是一种更简单的操作和读取数据库的工具。 二、MyBatis准备工作 1、引入依赖 2、配置Mybatis(数据库连接信息) 3、定义接口 Mapper注解是MyBatis中用来标识接口为Mapper接口的注解。在MyBatis中,Mapper接口是用来定义SQL映射的接口,通…

phar反序列化原理及利用

phar是什么? phar 是 PHP 的一种归档文件格式,类似于 ZIP 或 TAR 文件,它可以包含多个文件和目录,并且可以像访问普通文件系统一样在 PHP 中进行访问。在php 5.3 或更高版本中默认开启 在php.ini中配置如下时,才能生成…

2024.4.21

多进程实现拷贝 #include <myhead.h> //定义结构体 typedef struct INFO {const char *src_file;const char *dest_file;int mv;int size;}info_t;//获取源文件的大小并且创建目标文件 int size_creat(const char *src_file,const char *dest_file) {//获取源文件的大小…

opengl 学习着色器

一.GLSL 着色器是使用一种叫GLSL的类C语言写成的。GLSL着色器编码顺序&#xff1a;声明版本》定义输入输出》uniform》main函数。每个着色器的入口点是main函数&#xff0c;在main函数中我们处理所有的输入变量&#xff0c;并将结果输出到输出变量中。如下图&#xff1a; #ver…

PyCharm 主题和字体 (Scheme Editor Font)

PyCharm 主题和字体 [Scheme & Editor Font] References Scheme & Editor Font File -> Settings -> Editor -> Colors & Fonts -> Font Show only monospaced fonts&#xff1a; 只显示等宽字体。编程时使用等宽字体效果较好。 References [1] Yon…

JAVA并发编程之原子性、可见性与有序性

并发编程-原子性、可见性与有序性 一、CPU的可见性 1.1 缓存一致性问题的出现 CPU处理器在处理速度上&#xff0c;远胜于内存&#xff0c;主内存执行一次内存的读写操作&#xff0c;所需要的时间足够处理器去处理上百条指令。 为了弥补处理器与主内存处理能力之间的差距&am…

Jenkins 中部署Nodejs插件并使用,并构建前端项目(3)

遇到多个版本nodeJS需要构建的时候 1、第一种就是一个配置安装&#xff0c;然后进行选中配置 2、第二种就是插件&#xff1a;nvm-wrapper&#xff0c;我们还是选用NodeJS插件&#xff1a; &#xff08;1&#xff09;可以加载任意npmrc文件&#xff1b; &#xff08;2&#x…

grafana配置钉钉告警模版(一)

1、配置钉钉告警模版 创建钉钉告警模版&#xff0c;然后在创建钉钉告警时调用模版。 定义发送内容具体代码 my_text_alert_list 是模版名称后面再配置钉钉告警时需要调用。 {{/* 定义消息体片段 */}} {{ define "my_text_alert_list" }}{{ range . }}告警名称&…

彻底解决关于路由的问题,前端路由和服务端路由,history api 和 hash路由

首先路由分成两大块&#xff0c;分别是前端路由和服务端路由&#xff0c;而前端路由又分为两种模式&#xff0c;分别是 histroy api 模式和 hash 模式。 路由 前端路由&#xff1a;指在浏览器中进行路由控制的一种方式&#xff0c;通过监听 url 变化决定加载哪个页面组件或视图…

用idea debug时,怎么在某个map对象中再加个key value

实现方式 在用idea 进行 debug时&#xff0c;我们经常喜欢对某行代码打断点&#xff0c;然后对某个对象重新设置值&#xff0c;以快速地实现我们预期想覆盖的场景。通常的方式是用鼠标右键点击某个对象&#xff0c;然后选择Set value进行设置值&#xff0c;但是如果想在map中添…

Elasticsearch:创建自定义 ES Rally tracks 的分步指南

作者&#xff1a;Alejandro Snchez 按照这个综合教程学习如何制作个性化的 Rally tracks ES Rally 是什么&#xff1f;它的用途是什么&#xff1f; ES Rally 是一个用于在 Elasticsearch 上测试性能的工具&#xff0c;允许你运行和记录比较测试。 做出决策可能很困难&#x…

使用Autodl云服务器或其他远程机实现在本地部署知识图谱数据库Neo4j

本篇博客的目的在于提高读者的使用效率 温馨提醒&#xff1a;以下操作均可在无卡开机状态下就可完成 一.安装JDK 和 Neo4j 1.1 ssh至云服务器 打开你的pycharm或者其他IDE工具或者本地终端&#xff0c;ssh连接到autodl的服务器。(这一步很简单如下图) 1.2 安装JDK 由于我…

阿里云幻兽帕鲁Linux 服务器下载游戏存档的方法

阿里云幻兽帕鲁Linux 服务器下载游戏存档的方法也非常简单。 远程连接到阿里云的 linux服务器后&#xff0c;可以在 ECS 远程连接命令行界面&#xff0c;点击左上角的文件&#xff0c;打开文件树。通过一行命令打包。 在打包后的 Saved.tar 文件上右键&#xff0c;选择 下载文…

小程序--模板语法

一、插值{{}}语法 1、内容绑定 <view>{{iptValue}}</view> 2、属性绑定 <switch checked"{{true}}" /> Page({data: {iptValue: 123} }) 二、简易双向数据绑定 model:value&#xff1a;支持双向数据绑定 注&#xff1a;仅input和textarea支持&a…

unity学习(36)——角色选取界面(自制美工)

1.添加一个背景图片&#xff0c;记不住可以查之前的资料&#xff08;4&#xff09; 图片拖入asset&#xff0c;属性设成sprite&#xff1b;把图片拖到source image中&#xff1b;colour白色&#xff08;透明&#xff0c;点一下右边的笔即可&#xff09;&#xff1b;material为…

数字化转型导师坚鹏:政府数字化转型之数字化技术

政府数字化转型之数字化技术 ——物联网、云计算、大数据、人工智能、虚拟现实、区块链、数字孪生、元宇宙等综合解析及应用 课程背景&#xff1a; 数字化背景下&#xff0c;很多政府存在以下问题&#xff1a; 不清楚新技术的发展现状&#xff1f; 不清楚新技术的重要应…

【C++】初始化列表、static成员、友元、匿名对象、附练习题

文章目录 前言一、构造函数【初始化列表】1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 二、static成员2.1 概念2.2 特性 三、友元3.1 友元函数3.2 内部类 四、匿名对象4.1 拷贝对象时的一些编译器优化 五、再次理解类和对象六、练习题6.1 求123...n&#xff0c;要求不…

unity学习(32)——跳转到角色选择界面(父子类问题)

新问题 应该是两个脚本之间缺少继承关系 its children 解决起来很简单&#xff0c;把ResceneScript也绑到canvas上就可以了 。 此时&#xff0c;在账号密码正确的情况下&#xff0c;是可以完成场景切换。 对应的代码如下&#xff1a; TMP_Text d GameObject.FindWithTag(&…

ubuntu22.04@laptop OpenCV Get Started: 013_contour_detection

ubuntu22.04laptop OpenCV Get Started: 013_contour_detection 1. 源由2. 应用Demo2.1 C应用Demo2.2 Python应用Demo 3. contour_approx应用3.1 读取图像并将其转换为灰度格式3.2 应用二进制阈值过滤算法3.3 查找对象轮廓3.4 绘制对象轮廓3.5 效果3.6 CHAIN_APPROX_SIMPLE v.s…

软件测试工程师经典面试题

软件测试工程师&#xff0c;和开发工程师相比起来&#xff0c;虽然前期可能不会太深&#xff0c;但是涉及的面还是比较广的。前期面试实习生或者一年左右的岗位&#xff0c;问的也主要是一些基础性的问题比较多。涉及的知识主要有MySQL数据库的使用、Linux操作系统的使用、软件…