一线大厂:从需求提出到上线流程总结

2023-10-31

在一线大厂,从需求提出到上线,整个流程是怎样的?笔者结合腾讯的工作流和调研了阿里、字节等公司的项目开发流程,发现大厂的工作流大同小异,总结了如下的整体流程图。

图片

下面将按照这个流程的每个节点,详细阐述。全文3000多字,阅读大概需要6分钟~

目录

1、需求阶段

2、开发阶段

3、测试阶段

4、发布阶段

5、监控阶段

6、总结

1、需求阶段

1.1 原型评审

需求提出后,产品一般会带着原型图,拉开发、数据、设计一起开需求评审会。

在这个会议中,大家如果对需求有什么建议/意见都可以提出,如果需求实现不了、改动很大没法向前兼容、开发周期长等问题都可以在这个会议中抛出来,产品会做出相应的调整。

1.2 交互设计评审

大家对原型图都没有什么异议之后,就进入下一流程了。当设计出了设计稿之后,就拉着产品、前端一起评审交互设计稿。

这个评审会主要是看以下几个方面:

(1) 交互设计稿跟产品逻辑有没有一个比较大的出入;

(2) 组件风格跟整体风格是否统一;

(3) 在有产品上线有规定时间的条件下,UI还原复杂度如果占用开发时间比较长的话,会考虑让设计协调一个降级的方案。(比如复用以前的功能类似组件)

2、开发阶段

2.1 概要设计&排期

交互设计评审完之后,开发就可以开始排期了。(前端同学要到这个阶段才开始排期,但是后台、数据的同学一般原型评审完后就可以排期了)

开发是如何排期的呢?一般来说,一个需求开发出来到底需要多少时间,这个是不能百分之百准确评估的,因为有很多情况你没发预料,

比如线上出现bug,这个bug你可能要花一天的时间才能找到并修复,

再比如在你开发过程中,遇到一个难题,要花时间做调研等等。

所以开发排期一般都会留给自己一些buff(缓冲时间)。

要评估一个需求开发完需要花费多少时间,一般我们会先做一个概要设计,啥是概要设计?

概要设计就是实现这个需求的一个大概方案。一般会考虑以下几点:

(1) 考虑依赖

需求要实现依赖了哪些服务,包括第三方和我们自己的服务。

如果需要依赖第三方服务,需要调用第三方接口的话,可能还要去阅读第三方服务的接口文档和调用方式,也是需要一定的工作量的。

(2) 考虑复用

需求依赖的接口是否能复用,前端的组件是否能复用。如果组件可以复用的话,开发工作量是可以减少的。

(3) 考虑兼容性

需求实现之后,对已经存在的数据是否有冲突?对现有的功能是否有冲突?

比如说一个平台,以前用户的昵称是可以重复的,但最近产品提了一个需求是用户昵称不能重复,那么开发就需要对以前的用户昵称数据做一个修复,这也是一个工作量。

(4) 考虑技术盲点

如果遇到了不了解的技术盲点,可以申请一个调研的时间。因为技术选型也是需要调研和做竞品分析的 ,要找到最适合自己业务的技术选型。

概要设计一般会使用xmind等工具来把每一个功能涉及到的服务及影响写出来。

同时,概要设计也会给到测试同学,测试同学会根据你的概要设计,评估影响范围,新增、改动的接口有哪些,可以更全面的去写测试用例。

2.2 测试用例评审

这个环节测试同学会把测试用例拿出来评审,这时开发可以评估是否合理,或者有哪些点没有考虑到,都可以提出来。

2.3 接口定义与开发

如果这次需求涉及到新增、更改接口,是需要后端先定义一个接口协议的。比如一个查询订单的接口,需要提供哪些字段查询,返回的数据结构是怎样的。

后端提前定义好协议之后前端开发起来就顺畅很多了,因为数据结构已经都清楚了。

接下来开发们就开始写代码了。

2.4 开发自测

开发自测一般会在开发过程中完成。一般会做单元测试,性能测试等,根据具体需求而定。

对于前端,因为后台可能接口还没开发完成,但是这时又需要后台接口来测试,那怎么办呢?

我们一般会使用mock服务,mock就是模拟接口返回的服务。这样就可以大大提高了开发效率。

2.5 联调

当前后端都开发完,就开始联调啦。联调就是前端正式调用后台发布到测试环境的接口。这个阶段可能会出现后台漏字段、字段名变更、接口返回异常等问题。

在排期时联调也是需要把时间算进去的。

3、测试阶段

3.1 静态扫描

前后端联调完之后,就可以把代码发布到测试环境啦。测试环境是公司内网才可以访问的环境。在发布到测试环境之前,会自动触发一个工具的静态扫描。

静态扫描是啥呢?其实就是一个检测你的代码的工具。

一般会检查代码是否符合规范、代码是否有安全漏洞、依赖的第三方库是否安全等等,如果扫描过程中出现问题,会直接通知你,让你改进。

3.2 提测

代码发布到测试环境后,测试同学就开始测试啦。遇到什么bug的话,就会在需求管理平台给开发提bug单,开发收到之后就去解决。

这个阶段的周期看开发的质量和需求的大小。

3.3 产品第一次体验

bug都修复完之后,产品就开始在测试环境进行产品的第一次体验啦。

体验阶段,产品找出了bug,或者实现与需求有出入的地方都可以提给开发。

对于有设计稿的需求,设计这时也会参与进来走查还原度的问题。

产品&设计验收ok后,需求就可以发布到预发布环境体验真实的场景啦。

3.4 预发布环境体验

什么是预发布环境?预发布环境是为了模拟线上真实环境的体验环境,它跟线上环境唯一的区别是网址不同,其他的都一致。

为什么要有这么个环节呢?原因主要有2个:

一是线上数据与测试环境数据不同,想用线上数据做一些测试。二是为保证万无一失,看看新功能增加后,在线上环境会不会暴露出一些隐藏问题。

这个阶段不是必须的。还是具体情况具体分析。

4、发布阶段

4.1 制定发布计划

一般上线前,后台会找到相关的开发同学,制定一个发布计划。

因为当一个产品强大起来之后,它依赖的服务是非常多的,会涉及到一个发布顺序和对线上服务不可用的问题。

如果发布的是一个产品大版本,对线上完全不兼容,在服务发布时,如果线上有用户在使用,可能会导致操作失败或者引入脏数据。这都是我们不想要的结果。

对于这种情况,一般会采用2种方案,一种是暂时关闭线上服务,提示服务升级中。还有一种是关闭数据库的写操作,提示用户稍后重试。

4.2 灰度/全量发布

如果产品没有要求的话,默认使用全量发布,即对所有用户开放。

什么情况下会使用灰度发布?

(1) 降低发布带来的影响

虽然功能都在测试环境测过,但毕竟没有发布到生产环境,如果先让少部分用户先使用新版本,提前发现bug,或者性能问题,提前做好修复,就可以降低新版本带来的影响。

(2) 通过对新老版本的对比,观察新版本带来的效果。

具体的灰度发布细节可以看我以前写的这篇文章:大厂常用的几种灰度发布方案

4.3 产品第二次验收

当服务都发完后,产品需要到线上体验下新功能,看看有没有什么问题,保证万无一失。产品第二次验收完成后这个需求就算是完成了。

5、监控阶段

5.1 埋点统计

产品为了查看功能的使用情况,比如页面停留时长、点击量、访问量等,前端一般都会做埋点统计。

5.2 错误日志监控&性能监控

为了保证线上的稳定性,前端、后台都会接入错误日志上报,比如接口返回出错1分钟内次数达到10次,那就会给开发通知告警。

性能监控主要是为了保证服务的可用性。比如服务内存、cpu占用过大,或者某个接口在1秒内调用频率超过了限制,都会有告警。

6、总结

到这里就讲完了,可能有的小伙伴会觉得这个过程很长很复杂,有点小题大做了,有些节点没必要。

当然如果对于一些小需求,小改动有些环节是可以省去的。但是对于常规的需求,都这样规范起来的话,可以保证开发效率和产品质量。

我们可以看到一个需求从开发到上线涉及到了需求管理、代码管理、版本管理、发布管理、人员通知等关键节点,

在上古时期,这些节点之间是割裂的,没有一个工具或者平台可以把他们串起来,比如需求和代码的关联,代码和发布版本的关联。

而且,这些节点很多都可以用自动化工具来管理起来,比如当开发提交代码到测试分支后自动发布,自动通知产品验收。

在自动化方面,一般大公司都有相应的工具/平台来管理,后面的文章将会讲到自动化管理项目方面的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一线大厂:从需求提出到上线流程总结 的相关文章

  • 状态机的置位与复位

    1 状态机的异步置位与复位 异步置位与复位是与时钟无关的 当异步置位与复位到来时它们立即分别置触发器的输出为1或0 不需要等到时钟沿到来才置位或复位 把它们列入always块的事件控制括号内就能触发always块的执行 因此 当它们到来时就
  • Linux设置所有用户环境变量

    Linux中每个用户都要指定各自的环境变量 这样会比较麻烦 那么如何配置一个环境变量 所有的用户都可以使用呢 比如说我想把Linux默认语言由en US UTF 8修改为zh CN UTF 8 那么我需要设置环境变量 LANG 百度很多方法
  • Conda 配置 Python 环境

    文章目录 前言 一 Conda 是什么 二 如何获取 三 使用 Conda 命令配置多环境 1 创建新环境 2 激活新环境 3 配置新环境 4 退出新环境 5 检查所有环境 6 检查所有安装的包 7 删除某环境 8 重命名某环境 四 使用
  • Crontab配置任务定时执行

    一 每奇数周的周一执行 16 0 1 date W 2 eq 1 gt dev null sh data1 test sh 具体地 1 分钟字段 Minute field 16 2 小时字段 Hour field 0 3 日期字段 Day
  • 亚马逊首席技术官Werner Vogels:2023年及未来五大技术趋势预测

    近年来 随着我们经历的数次全球危机 如何借助技术解决人类棘手问题至关重要 如今 我们获取数据的来源比以往任何时候都多 包括可穿戴设备 医疗设备 环境传感器 视频捕获和其他联网设备 当这些数据与计算机视觉 机器学习和模拟仿真等云技术相结合时
  • OpenWrt目录之target

    target目录下主要是和平台有关的代码 最主要的是linux文件夹 linux文件夹的ramips中 ramips应该指的是对应cpu的架构 ramips文件夹下的就是不同系列的cpu对应的芯片的型号 进行试验一下 首先在根目录下运行ma
  • IDEA工具实用开发快捷键

    选中new ArrayList lt gt 或者光标放在new前面 按ctrl alt v 选中new ArrayList lt gt 或者光标放在new后边面 按ctrl alt 空格 ideal 工具没识别maven项目的话 右键pom
  • uni-app开发微信小程序,button通过数组的length判断disabled无效(数组length === 0写法无效)

    错误写法
  • caffe特征提取/C++数据格式转换

    Caffe生成的数据分为2种格式 Lmdb 和 Leveldb 它们都是键 值对 Key Value Pair 嵌入式数据库管理系统编程库 虽然lmdb的内存消耗是leveldb的1 1倍 但是lmdb的速度比leveldb快10 至15
  • 国产操作系统进入被彻底抛弃的时代

    当倪光南正在不断呼喊支持国产操作系统的时候 国产操作系统却迎来了噩梦 国产操作系统接连倒闭 国产操作系统进入一个被国家彻底抛弃的时代 红旗linux梦断国产操作系统 今年2月中科红旗linux因为缺钱倒闭解散了 一直以来做得最好的国产操作系
  • 图形学数学基础之基本蒙特卡罗尔积分(Monte Carlo Integration)

    作者 i dovelemon 日期 2017 07 29 来源 CSDN 主题 Monte Carlo Integration 引言 好久没有写博客了 最近一直在忙于工作 同时GLB库中关于PBR的渲染算法 一直卡住 无法实现下去 不过在这
  • dd大牛的《背包九讲》

    P01 01背包问题 题目 有N件物品和一个容量为V的背包 第i件物品的费用是c i 价值是w i 求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量 且价值总和最大 基本思路 这是最基础的背包问题 特点是 每种物品仅有一件 可以选
  • 【HCNP路由交换学习指南】学习笔记丨第07章 BGP

    07 BGP BGP 的基本概念 BGP 对等体关系类型 IBGP 水平分割原则 路由黑洞问题及 BGP 同步规则 路由通告 Router ID 报文类型及格式 Open 报文 Update 报文 Keepalive 报文 Notifica
  • PaddleOCR使用笔记之模型训练

    目录 简介 模型训练 步骤一 文本检测模型 detection 1 准备训练数据集 2 下载预训练模型 模型介绍 下载预训练模型 3 开始训练 断点训练 4 模型评估 5 模型测试 6 训练模型转inference模型 步骤二 文本识别模型
  • RabbitMQ保证消息的一致性解决方案

    RabbitMQ保证消息的一致性 一 采用confirm消息确认机制及return返回机制 确保消息发送成功 二 将队列以及消息设置持久化 保证rabbitmq突然宕机消息仍然存在 三 手动确认接收消息方式 消息处理失败拒收重回队列 1 y
  • 后端响应是否成功、信息、操作码响应前端及异常处理

    异常处理流程 1 自定义异常类型 2 自定义错误代码及错误信息 3 对于可预知的异常由程序员在代码中主动抛出 由SpringMVC统一捕获 可预知异常是程序员在代码中手动抛出本系统定义的特定异常类型 由于是程序员抛出的异常 通常异常信息比较
  • java反射(从认识到应用)-黑马笔记

    此文章是观看黑马雷哥关于Java反射的视频做的笔记 如有错请多指教 一 认识反射 反射在JavaAPI中的详解 说白了 反射就是 加载类 并允许以编程方式解剖类中的各种成分 成员变量 方法 构造器等 如图 二 反射还学什么 加载类 获取类的
  • 做题

    在一个文件中定义一个全局变量 n 主函数 main 在另一个文件中定义函数 fn1 在 main 中对 n 赋值 再调用 fn1 在 fn1 中也对 n 赋值 显示 n 最后的值 include using namespace std in
  • style对象和less/scss互相转换,驼峰转中横线,支持嵌套转换

    不知道有没有小伙伴在维护或重构前端项目时修改样式的时候遇到js style和less scss需要互相转换的问题 本人找网上没有比较完善的转换工具 要么嵌套不支持 要么兼容不好 于是自己写了一个 请大家参考 emotion style In
  • CSDN英雄大会之 SOA技术观感

    5号假装英雄去北京参加了CSDN技术英雄大会 见到了很多一直想见的同行高手还有编辑记者 这里就不一一列举了 只是从SOA中间件开发角度列一下相关的内容 1 IBM如下划分SOA与构件 SOA4类关键构件 基础构件WAS MQ 流程构件WPS

随机推荐

  • 设置一个FreemarkerExceptionHandler捕获freemarker页面上的异常

    在Freemarker页面中如果使用 userName 并且userName为空 那么Freemarker页面就会崩掉 需要设置默认值 userName 来避免对象为空的错误 同理 user userName 也应该写成这样 user us
  • WaveOut播放声音死锁问题原因

    1 首先我们复习下造成死锁的几个充要条件 1 互斥 互斥资源 只能被一个进程使用 2 不剥夺 非抢占式调度 不能强行抢用其他进程资源 3 请求和保持 占有着资源不释放 同时申请其他资源 4 环路等待 没什么可说的 在WaveOutReset
  • java.lang.IncompatibleClassChangeError: Found interface org.elasticsearch.common.bytes.BytesReferenc

    项目场景 再学谷粒商城时 练习elasticsearch时出现一下错误 问题描述 原因分析 提示 出现java lang IncompatibleClassChangeError Found interface org elasticsea
  • redis 由浅入深之 redis.conf配置文件

    是否以后台进程运行 默认为no 如果需要以后台进程运行则改为yes daemonize no 如果以后台进程运行的话 就需要指定pid 你可以在此自定义redis pid文件的位置 pidfile var run redis pid 接受连
  • 2021-04-09

    C 实现XN 2图灵机模拟 算法分析 代码实现 算法分析 1 首先需要完成数的进制转换 将二进制数转化成十进制数 如何转化呢 这里采用除二取余的方法 这种方法就是不断得到余数 放进数组arr 最后除以颠倒一下就行了 2 转换成拓展二进制编码
  • Leetcode刷题-522最长特殊序列II

    题目描述 给定字符串列表 strs 返回它们中最长的特殊序列 如果最长特殊序列不存在 返回 1 最长特殊序列定义 该序列为某字符串独有的最长子序列 即不能是其他字符串的子序列 s 的子序列可以通过删去字符串 s 中的某些字符实现 来源 力扣
  • 灰色预测原理及实例(附代码)

    灰色预测 引言 古人说 凡事预则立 不预则废 办任何事情之前 必须先调查研究 摸清情况 深思熟虑 有科学的预见 周密的计划 这样才能达到预期的成功 所谓预测 就是人们根据可获得的历史和现实数据 资料 运用一定的科学方法和手段 对人类社会 政
  • CSS文本设置超出2行显示省略号

    需求 如图所示 当居住地址字段太长超过2行时就显示 1 强制一行so easy div class line style 内容部分内容部分内容 div line white space nowrap 强制一行显示 overflow hidd
  • 快速入门

    之前正运动技术与大家分享了 运动控制器的固件升级 ZBasic程序开发 ZPLC程序开发 与触摸屏通讯和输入 输出IO的应用 运动控制器数据与存储的应用 运动控制器ZCAN EtherCAT总线的使用 示波器的应用 多任务运行的特点 运动控
  • 【Linux】echo命令用法详解

    作者 柒号华仔 个人主页 欢迎访问我的主页 个人信条 星光不问赶路人 岁月不负有心人 个人方向 专注于5G领域 同时兼顾其他网络协议 编解码协议 C C linux等 感兴趣的小伙伴可以关注我 一起交流 目录 1 echo命令介绍 2 命令
  • 【Linux】——makefile

    文章目录 1 什么是makefile 2 makefile优势与make命令 3 makefile文件内容 3 1makefile文件的基础写法 3 2 makefile文件的优化 1 什么是makefile 在一个大型工程中 工程中的源文
  • 构建Python,Raspberry Pi和PostgreSQL数据服务器

    视频教程 PostgreSQL初学者 学习Raspberry Pi Linux初学者指南 在Raspberry Pi安装和设置PostgreSQL 前提 下载Raspbian 格式化SD卡 使用Disk Utility在macOS中格式化S
  • 自制番茄钟脚本

    Shell脚本 bin bash i 0 if 1 then t 25 60 else t 5 60 fi while i lt t do sleep 1 i 1 m t i 60 s t m 60 i echo en m s r done
  • parsing XML document from class path resource [applicationContext.xml]…

    方法 1 可能是缺失了resource文件 项目右键 Build Path Configure Build Path Java Build Path source Add Folder 将Resource添加应用 2 可能缺失了spring
  • SqliLab_Mysql_Injection详解_字符型注入(五)_时间盲注(8~10)

    文章目录 1 SqliLab Mysql Injection详解 字符型注入 五 1 1 SQL注入 时间盲注 1 1 1 原理 1 1 2 常用的函数 2 SqliLab关卡 包含8 9 10 图片占据空间太大 payload具体返回情况
  • [从零学习汇编语言] - 模块化程序设计

    文章目录 前言 回顾 一 模块化程序设计 1 1 子程序 1 2 子程序的参数和返回值 1 3 批量数据的传递 1 4 寄存器的冲突处理 结语 前言 点赞再看 养成习惯 回顾 还记得我们之前讲过的ret指令搭配call指令实现的子程序模板吗
  • SpringCache通过注解实现redis缓存

    1 SpringCache介绍 2 SpringCache常用注解 底层是基于map实现的 缺点 重启后数据就不存在了 在Spring Cache使用方式中将底层实现替换成了redis缓存技术 1 CachePut 参考演示 CachePu
  • Loading自定义指令

    目录 Loading自定义指令 一 介绍 二 自定义指令及使用 1 创建loading组件 2 自定义指令 3 main js中全局注册 4 使用 三 结果演示 Loading自定义指令 相关知识查看官方文档 自定义指令 一 介绍 通过v
  • mysql5.5 导入 mysql5.6 或者 mysql 5.7 的sql文件失败

    今天导入数据库的时候 一直失败 发现是mysql版本的问题 唉 难道不能向下兼容嘛 下面说解决方案 第一步 用nodepad 打开sql文件 第二部 按照下面方式进行全文替换 代表任意数字字符 datetime gt datetime TI
  • 一线大厂:从需求提出到上线流程总结

    在一线大厂 从需求提出到上线 整个流程是怎样的 笔者结合腾讯的工作流和调研了阿里 字节等公司的项目开发流程 发现大厂的工作流大同小异 总结了如下的整体流程图 下面将按照这个流程的每个节点 详细阐述 全文3000多字 阅读大概需要6分钟 目录