研发管理 - 流程篇_研发管理流程-程序员宅基地

技术标签: java研发  项目管理  研发管理  

研发管理-流程篇

标签: 项目管理 研发管理


情况介绍

2018年,总部新成立****事业部,让我负责研发管理工作,由于涉及到电费相关,系统出现异常容易造成企业用户损失,为降低系统风险,确保流程规范顺畅,制定一份切实可行项目研发管理,争取2019年做到系统零事故。

项目研发管理
项目管理阶段

研发项目主要从产品需求作为入口,线上验证作为结束,主要分为:
需求评审
项目设计
项目研发
项目测试
项目上线
线上验证
六个阶段分别阐述每个阶段的主要工作职责和内容。

    需求评审

需求评审主要评审什么?一直以来我们对需求的评审不够严格或者仅仅是过了一遍需求,让大家都知道有这个需求需要研发上线,缺乏对业务、系统整体风险的揭示,业务评审主要考虑从业务、技术两个层面规避风险和处理风险。我要求团队对需求的评审主做到如下四点:

  1. 分析新上产品(需求)对现有产品是否存在冲击风险
  2. 分析新上产品(需求)自身的业务风险,如果出现系统风险,业务层面是否有解决办法
  3. 分析新上产品(需求)业务流程是否逻辑清晰,业务是否考虑后续产品扩容
  4. 分析新上产品的接入方(银行、内部系统、其他厂商)的产品和我们产品的融合能力和技术实现

    项目设计

技术经理或研发组长在需求评审结束后开展项目设计工作,如果做好如下的三条应可以满足我们当前的研发要求,太多的要求担心时间的损耗大还未必能够达到好的效果,本着实用好用的原则做好如下三条。

  1. 数据库架构设计(表名,字段名命名规范、充分思考业务发展,满足业务扩展、查询多变更少的采用缓存数据库(redis+oracle)结合使用,基础字段必须包含如:操作用户编码、创建时间,可以适当的冗余字段方便管理平台的统计分析和查询工作)

  2. 应用架构设计(应用架构图,描述系统应用关系,描述不同系统间的职责范围(银行、财务公司、内部系统、其他外部系统)、设计测试环境和正式环境的虚拟机数量、说明相关网路权限的申请和开通)

  3. 安全架构设计(数据脱敏、数据加密、网络安全(专线、https、证书)、用户权限、Xss、SQL注入等基本安全防范)

重点:设计必须评审,这个是我必须要过的一道程序。

    项目研发

项目研发需要经过九大步骤,主要包括:

  1. 分支创建
  2. 工作分配
  3. 环境申请(测试)
  4. 代码编写
  5. 代码审查
  6. 代码合并
  7. 集成测试
  8. 环境申请(正式)
  9. 测试提交

分支创建
研发经理根据项目需求、应用架构设计、《git管理办法》做出项目分支(future_branch)创建工作。

工作分配
研发经理创建好分支后,在分支下将包创建好后,将分支权限分配和具体研发人员。

环境申请(测试)
申请虚拟机、开通对外网络、内部网络、申请redis、memcached的key。

代码编写
代码编写必须做到如下规范日志输出、规范注释编写、规范命名规范(应用、包、类、方法、字段)、规范单元测试、规范异常处理、规范缓存使用、规范SQL、规范使用通用类、规范任务处理调用、关键程序逻辑处理、QAPlug代码检查。

代码审查

  1. 为什么代码审查在合并之前?
    研发经理层面:1)审查代码实现是否符当初的设计。2)投提前了解合并可能存在冲突。
    研发工程师层面:1)团队其他成员通过审查,能够理清(加强理解)队友代码实现和自己代码的逻辑关系。2)通过代码审查,了解技术实现尽早实现技术层面提升。
  2. 代码审查的成员
    代码审查包括所属项目组所有成员
  3. 代码审查的内容
    日志输出、注释使用、命名规范(应用、包、类、方法、字段)、单元测试情况、异常捕获、权限处理、事务处理、缓存使用、数据库使用、SQL编写、代码逻辑、通用类使用情况、任务处理、关键程序处理。

代码合并
代码合并的工作必须由研发经理执行,研发经理解决合并的代码问题。合并完成后使用代码检测工具(Sonar)开展代码检查工作。

集成测试
完成业务基本测试和性能测试。将研发的包放入集成测试环境(暂时正在搭建),主要测试核心逻辑、外部系统调用、内部系统调用、数据量千万级、数据量亿级处理时长,考虑业务量大的情况性能和基本功能测试。

环境申请(正式)
申请正式环境的虚拟机、开通正式的网络、可提前部署相关的硬件或者软件(如:银行前置机)。

测试提交
准备发版文档,将发版文档提交给测试,测试按照发版文档部署配置(jenkins、 git)服务。
后续将测试环境当做生产,确保提交给测试的环境配置无错误。

    项目测试

用例编写
测试用例编写开始于需求评审完成后,包括覆盖基础功能、本次上线功能、环境变化调整功能。

用例评审
测试用例评审,包括必须复测的基础功能,包括本次上线功能的完整性,包括因代码、环境调整等因素需要测试和恢复测试用例。测试用例的评审包括开发(最低2人)+测试本项目组全体成员。

分配工作
测试工作的分配,通过项目计划将模块分配给相关的测试测试人员,(考虑交叉测试,希望明年能够实现,交叉测试需要人员较多,成本较高)。

系统测试
系统主要测试三轮:

  1. 第一轮主要是业务流程跑通测试,目前由于测试环境和研发环境较大差异(配置、数据、外部环境)所以第一次的测试以跑通为主;
  2. 第二轮测试主要包括业务实现逻辑及细节测试,包括日志输出、相关系统处理时间、业务数据、异常数据测试等。
  3. 第三轮主要是回归测试,出具测试报告,提出因测试条件缺失的风险,让业务人员签字确认风险。出具代码研发质量报告,根据代码行数和bug的比率、相似功能bug比率提出研发质量报告。

    产品上线

发版准备

  1. 做发版计划,环境准备提前一周,发版计划提前3天。
  2. 准备发版的工作票,封版前完成。
  3. 做好发版材料的审查

发版跟踪

  1. 发版当天安排技术经理值班。
  2. 跟踪运维系统启动情况、日志输出情况(检查kibana日志查询)、系统的初步验证

    线上验证

线上验证
我们的产品主要TO-B,线上的验证难度大,所以19年我们需要实现灰度+白名单客户帮助业务便于线上业务验证。

作者介绍

2011年-2014年主要致力于国内某大型企业财务公司资金结算系统,系统主要业务包括对公、对私、代理资金划转交易,交易金额少则几万多则亿元,不容闪失。值得骄傲的是在我担任项目经理期间没有出现一笔问题,回想那段时间我个人压力巨大,每天琢磨系统哪儿容易出现问题,如何防范,出现问题如何补偿。带领团队完成系统监控研发上线,确保问题交易提早发现通知银行协同解决。

2015至-2018年初主要负责某e宝研发工作,主要分为两个阶段,第一阶段,2015年-2016年底主要负责APP研发,带领团队完成某宝APP v1-v3版本研发上线。2017年-2018年主要负责某宝全部系统的研发管理,包括前端APP和后端核心系统,在这期间带领兄弟们夜以继日工作,完成一项一项艰巨任务。每次想到此,心中尤为感概,特别感谢曾经一起共事的兄弟们,道一声“感谢 & 珍重”。

以上是我研发管理总结,整个研发部门都在推行。感谢您阅读到此,希望您多指正。如果你对研发管理工具感兴趣,请看《研发管理-工具篇》

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/joynet007/article/details/85071807

智能推荐

kohana简介-程序员宅基地

文章浏览阅读108次。2019独角兽企业重金招聘Python工程师标准>>> ..._kohana是什么洗发水

QT中UDPSocket丢包问题_qt udp 丢包考核-程序员宅基地

文章浏览阅读8.9k次,点赞4次,收藏43次。Qt中的QUdpSocket发生严重丢包现象,在Linux下使用while死循环接收来解决,但存在CPU占用率太高的问题。_qt udp 丢包考核

Python中出现UnboundLocalError: local variable ‘xxx‘ referenced before assignment情况的解决方法_unboundlocalerror: local variable 'sentencepiece_m-程序员宅基地

文章浏览阅读2w次,点赞14次,收藏11次。UnboundLocalError: local variable 'xxx' referenced before assignment在函数外部已经定义了变量n,在函数内部对该变量进行运算,运行时会遇到了这样的错误:主要是因为没有让解释器清楚变量是全局变量还是局部变量。有时候在其他模块声明该变量,在本模块使用时也会出现。那么问题就来了,出现这个问题我们就要考虑程序是按照全局变量,就是经过函数运算到函数外面还生效,还是按照局部变量在函数外生效。第一种,当全局变量来看,就是使用global..._unboundlocalerror: local variable 'sentencepiece_model_pb2' referenced befor

chatgpt VS 文心一言使用对比实测_chatgpt和文心一言-程序员宅基地

文章浏览阅读5.4k次。chatgpt VS 文心一言使用对比实测_chatgpt和文心一言

thermal的gov_bang_bang governer_thermal bangbang-程序员宅基地

文章浏览阅读838次。thermal gover 有五种,我们这里以gov_bang_bang.c 为例gov_bang_bang是控制风扇的。之后两种状态,即风扇开和关,并没有提供调整风扇转速的方法.static struct thermal_governor thermal_gov_bang_bang = { .name = "bang_bang", .throttle = bang_bang_contr_thermal bangbang

六款常用的linux C/C++ IDE_linux c++ ide-程序员宅基地

文章浏览阅读5.9k次。sourceinsight一、AnjutaAnjuta是一个多语言的IDE,它最大的特色是灵活,同时打开多个文件,内嵌代码级的调试器(调用gdb),应用程序向导(Application wizards)可..._linux c++ ide

随便推点

js dom node.children与node.childNodes区别_node.children和node.childnodes的区别-程序员宅基地

文章浏览阅读1k次。不同点:node.children不会取到节点下面的TextNode但是node.childNodes会取到 共同点:两者都是集合类数组,可以通过索引的方式取到值也可以用for循环遍历..._node.children和node.childnodes的区别

HTML、CSS知识点总结,浅显易懂。_sm学习 html-程序员宅基地

文章浏览阅读7.2k次,点赞25次,收藏116次。一,html+css基础1-1Html和CSS的关系学习web前端开发基础技术需要掌握:HTML、CSS、JavaScript语言。下面我们就来了解下这三门技术都是用来实现什么的:1. HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片、视频等。2. CSS样式是表现。就像网页的外衣。比如,标题字体、颜色变化,或为标题加入背景图片、边_sm学习 html

vue中$bus的用法及$emit、$on、$off的使用_this.$bus.$on-程序员宅基地

文章浏览阅读9.5k次,点赞7次,收藏32次。vue中 $bus 一般与 $emit、 $on、 $off 连用,一般用在任意组件间的通信,即 $bus 用来传递非父子关系的数据。如两个组件之间传递数据:子组件1子组件21、$emit2、$on注意:$emit 和 $on 的事件必须在一个公共的实例上,才能够触发。3、实例事件实例事件就是在构造器外部调用构造器内部的数据。4、实例在Student组件中提供数据给另一个School组件在School组件中使用事件总线,接收数据。School组件想接收数据,则在School组件中给 $bus绑_this.$bus.$on

2022第二届网刃杯writeup_2022年网刃杯wp-程序员宅基地

文章浏览阅读931次,点赞3次,收藏4次。文章目录MISC玩坏的winxpICSeasyiec喜欢移动的黑客carefulguyxyp07re定时启动ez_algorithmRe_functionfreestylewebSign_inuploadez_java这次re做了4个,ICS做了3个,wp直接贴战队的了。MISC玩坏的winxp1、虚拟机加载硬盘2、Magnet AXIOM收集信息发现了网页浏览历史中的特殊网址。3、meiren.png中两次binwalk可以得到一个需要密码才能解压的zip,并且提示寻找戴围脖的软件。4、尝试_2022年网刃杯wp

《UnityAPI.CharacterController角色控制器》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Unity+SimpleMove+立钻哥哥++OK++)_unity charactercontroller源码-程序员宅基地

文章浏览阅读1.5k次。《UnityAPI.CharacterController角色控制器》 版本 作者 参与者 完成日期 备注 UnityAPI_CharacterController_V01_1.0 严立钻 2020.08.28 ..._unity charactercontroller源码

css3属性:transform border-radius-程序员宅基地

文章浏览阅读151次。transform:改变,变形,转换transform:rotate(10deg); 旋转10度transform:skew(20deg); 倾斜20度transform:scale(1.5); 放大1.5倍,缩小改为负transform:translate(100px,50px); 向右移100px,向上移动50px,如需左 下移动改为负值即可border-..._border-radius transform