详细设计文档模版

news2024/11/18 12:15:37

背景

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

业务需求类此处可以将产品需求文档中的内容放到此处。技术改造类项目记录发起改造的原因,如系统问题、架构升级、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.coloradmin.cn/o/1462299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#上位机与三菱PLC的通信09---开发自己的通讯库(A-3E版)

1、A-3E报文回顾 具体细节请看: C#上位机与三菱PLC的通信05--MC协议之QnA-3E报文解析 C#上位机与三菱PLC的通信06--MC协议之QnA-3E报文测试 2、为何要开发自己的通讯库 前面开发了自己的A-1E协议的通讯库,实现了数据的读写,对于封装的通…

合金电阻2512 0.01R是怎么应用在电池保护板中的

合金电阻2512 0.01R可以应用在电池保护板中的过流保护电路中。电池保护板用于监测和控制电池的充放电状态,以防止电池过充、过放和过流等情况,保护电池的安全和寿命。 过流保护电路是电池保护板的主要功能之一,用于检测电池输出电流是否超过安…

DT DAY3 信号和槽

作业: 1> 思维导图 2> 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 btn3 new QPushButton("按钮3",this);btn3->resize(ui->btn2->width(),ui->b…

Android14 InputManager-InputReader的处理

IMS启动时会调用InputReader.start()方法 InputReader.cpp status_t InputReader::start() {if (mThread) {return ALREADY_EXISTS;}mThread std::make_unique<InputThread>("InputReader", [this]() { loopOnce(); }, [this]() { mEventHub->wake(); });…

第3.4章:StarRocks数据导入-Routine Load

注&#xff1a;本篇文章阐述的是StarRocks-3.2版本的Routine Load导入机制 一、概述 Routine Load&#xff08;例行导入&#xff09;支持用户提交一个常驻的导入任务&#xff0c;可以将消息流存储在 Kafka 的Topic中&#xff0c;通过订阅Topic 中的全部或部分分区的消息&#…

什么是EMC电磁兼容性测试?

摘要: 电磁兼容性测试&#xff08;Electromagnetic Compatibility Testing&#xff0c;简称EMC测试&#xff09;是对电子产品在电磁场方面干扰大小&#xff08;EMI&#xff09;和抗干扰能力&#xff08;EMS&#xff09;的综合评定。其目的是检测电器产品所产生的电磁辐射对人体…

代码随想录Leetcode 343. 整数拆分

题目&#xff1a; 代码(首刷看解析 2024年2月21日&#xff09;&#xff1a; dp[i]表示i所能拆分的最大乘积&#xff0c;则dp[i] 与dp[i - 1]的递推公式是&#xff1a; max( 1~n * dp[n ~ 1]) class Solution { public:int integerBreak(int n) {vector<int> dp(n 1);dp…

Python: argparse基本用法

Python: argparse基本用法 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;【Matplotlib之旅&#xff1a;零基础精通数据可视化】 &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于深度学习、PyTorch、Python领域的优质内容…

快速清理_卸载docker_找到不用的进程_centos磁盘爆满_清理磁盘---Linux工作笔记071

查看大文件,并且按照大小排名 cd / | du -h |sort -hr|head -30 可以看到根据不用的结果进行删除 可以看到在/data/dict目录很大,里面的都可以删除 然后再去卸载docker,要不然,没有磁盘是卸载不了的 systemctl stop docker systemctl stop docker.socket yum remove docker-…

DataX - 全量数据同步工具

前言 今天是2024-2-21&#xff0c;农历正月十二&#xff0c;相信今天开始是新的阶段&#xff0c;尽管它不是新的周一、某月一日、某年第一天&#xff0c;尽管我是一个很讲究仪式感的人。新年刚过去 12 天&#xff0c;再过 3 天就开学咯&#xff0c;开学之后我的大学时光就进入了…

JavaSE匿名对象 , 继承 , 抽象类

文章目录 1 面向对象回顾面向对象的核心思想是什么 ?现有的类还是先有的对象 ?Java类的创建 ?类中的组成成分 ?创建对象所使用的关键字 ?创建对象的格式 ?调用对象的成员 ?定义构造方法的格式 ?定义构造方法的特点 ?构造方法的作用 ?面向对象三大特征是什么 ?封装的…

java基础之 SPI机制

SPI机制说明 什么是SPI Service Provider Interface 机制是Java提供的一套用来被第三方实现或扩展的API&#xff0c;他可以用来启用框架扩展和替换组件。通过“基于接口的编程 策略模式 配置文件”组合实现的动态加载机制。SPI机制为某个接口寻找服务实现的机制&#xff0c;…

Autosar-Mcal配置详解-MCU

3.6.1创建、配置RAM 1)创建RAM配置 2)配置RAM 以F1KM R7F7016533ABG为例,它的local RAM有512K, global RAM 192K,Retention RAM 64K. Local RAM: local RAM就是程序平常使用的RAM,在DeepStop模式下内容会丢失。 Global RAM:主要用于DMA的源地址和目的地址使用,在Dee…

2012及其以上系统修改服务器密码指南

修改服务器密码指南,目前介绍两种不同的方案 方法一 指令式 winR键 弹出运行框里输入 cmd 点击确认或者右下角开始程序里面的点开运行 2.在弹出框里手动输入以下一组文字&#xff1a;net user administrator 123456 框内无法粘贴 需要手动输入 其中administrator 是用…

上传回显图片

<!-- 父页面--><el-dialog title"直播详情" :visible.sync"dialogFormVisible" append-to-body:close-on-click-modal"false" width"50%" close"dialogClose"><editUserVideo v-if"dialogFormVisible&q…

【Node.js】介绍、下载及安装

目录 一、什么是 Node.js 二、Node.js下载 下载方式1&#xff1a;直接在首页下载&#xff08;下载的是.msi后缀的安装包&#xff09; 下载方式2&#xff1a;点击官网顶上的DOWNLOAD 三、Node.js安装 .zip后缀的安装步骤 .msi后缀的安装步骤 一、什么是 Node.js Node.js …

计算以10为底的对数 math.log10(x)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算以10为底的对数 math.log10(x) [太阳]选择题 以下代码的输出结果中正确的是? import math print("【执行】math.log10(10)") print(math.log10(10)) print("【执行】math…

基于 QUIC 协议的 HTTP/3 正式发布!

近期&#xff0c;超文本传输协议新版本 HTTP/3 RFC 文档&#xff0c;已由互联网工程任务组&#xff08;IETF&#xff09;对外发布。HTTP/3 全称为 HTTP-over-QUIC&#xff0c;指在 QUIC&#xff08;Quick UDP Internet Connections, 快速 UDP 互联网连接&#xff09;上映射 HTT…

OpenTiny Vue 组件库适配微前端可能遇到的4个问题

本文由体验技术团队 TinyVue 项目成员岑灌铭同学创作。 前言 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略&#xff0c;每个应用可以选择不同的技术栈&#xff0c;独立开发、独立部署。 TinyVue组件库的跨技术栈能力与微前端十…

十三、图像像素值统计

项目功能实现&#xff1a;对一张图像进行统计最大、最小像素值、均差以及方差的值 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 pixel_statistic.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class Pixel_Statistic { public:vo…