不管是半路转行的准程序员,仍是正在读书的大学生,你们都比较关心一个问题:「企业中真实的研发流程是怎样的」。有一些在小公司的程序员,也会好奇大厂的研发流程。前端
为何这么多人关心研发流程呢,由于一个合理完善的流程表明着稳定、高效。一个公司有了好的流程,就能极大节约人力成本和时间成本;一名开发人员体会了好的流程,就能极大锻炼本身的项目 / 代码掌控能力。程序员
本文就和你们分享一下,现在互联网大厂的研发流程。后端
大厂流程虽好,但也不是一蹴而成。每一个公司体量不同,流程也不同,咱们就从最简单的流程讲起,看看这些环节是如何一步一步演进过来的。微信
这套流程很是简单,从需求提出到需求结束就只有一个「开发」环节。运维
该流程能够说是没有流程,每每只会在「我的接私活」中这样作。我曾经接私活,许多客户只有一个简单的需求场景,好比「用户输入一些数据,根据必定公式给出分析建议」,像这种程序,开发人员直接根据描述完成功能便可。工具
流程弊端:布局
需求不明确,容易陷入无尽的「扯皮」中。学习
用户一开始要的是 A 功能,你作出来后,客户改口说要的是 B,那么你以前作的就白费了。测试
因此,明确需求是软件开发的大树之根,这一点没作好,后面所作的一切都没有意义。编码
「初创的外包公司」或者「我的接私活」常实行这套流程。
该流程多了一个「需求确认与分析」环节,顾名思义,这一环节主要是对用户提出的需求进行确认和分析,最后肯定好需求是会写在合同中的,后续一切按照合同中的需求项进行开发。
这个环节上限极高,下限也极低。作得好,天然可以很大程度上避免用户反复无常;作得差,需求不明确,依然会让开发人员返工。
需求变动是程序员最痛苦的事情,因此该环节会随着流程的完善而不断升级。
流程弊端:
客户的需求通常就只有文字描述。这种状况下,开发人员只是凭借本身的想象进行开发,对需求的理解容易产生误差。
原型图就是产品的预览模型,用于展现产品的最终效果。
原型图分为低保真原型和高保真原型。
低保真原型就像草图,用于快速向客户或者开发人员展现产品效果,方便修改和调整。
高保真原型基本就是产品的最终效果了,并且还会有交互效果(就是页面能够点击等操做),前端开发人员能够直接按照原型图进行页面开发。
「小型的外包公司」和「我的接私活」常实行这套流程。
外包公司的话每每会有一个设计师进行原型图设计。
我的接私活的话,不少客户会直接给你原型图,他们通常是请外包设计师画出效果图,而后再请咱们开发人员进行开发。
流程弊端:
开发完毕后就直接将项目交付了。
项目的各个Bug都是客户在使用过程当中发现的,这时候须要开发人员修改不少趟,才能将项目彻底交付出去。
要知道,客户不是专业人士也不是你的同事,沟通起来成本是很是高的,这种形式的交付会极其耽误时间。
曾经我接的一个私活,工期是一个月,可是来来回回更改细节和缺陷,拖了三四个月,身心俱疲。
开发人员实现功能后,就会交由专门的测试人员进行系统测试,测试完毕后由产品进行验收,验收无误才能交付/上线。
「中小型的外包公司」和「小型的产品公司」会实行这套流程。
外包公司,就是指没有本身产品的公司,主要承接项目进行开发。需求都是从客户那边来的。
产品公司,就是指有本身产品的公司,会对本身的产品进行开发、运营、迭代。需求是业务部门、产品部门提出的。
这套流程麻雀虽小但也五脏俱全,各个环节都有对应的人员负责:
每一个人员都各司其职,对本身所处的环节会进行把控,当前环节没问题后才会推动到下一个环节。
这时候流程的扭转与推动,不是口头上说一下就好了,而是要进行工程化管理,每一个环节都要通过特定步骤才能推动到下一步,好比发送邮件。
如今有许多协做工具/平台,可让咱们很是方便地管理流程。好比腾讯推出的 TAPD:
流程弊端:
虽然该流程已初具规模,但仍是很粗糙,每一个环节都有完善的余地。
不少环节在没有准备充足的状况下就开始实施了,质量得不到有效的保障。
好比肯定需求和原型后,开发就直接编码,若是在编码过程当中发现技术方案不合理,此时要变动,就会浪费大量的时间。
因此,在实现功能前,应该进行一系列的设计与评审。
接下来的流程演进,基本就是各互联网中大厂的流程了,每一个环节可能各个公司的取舍不太同样,不过差异不是太大。
这套流程主要体现了功能实现前的一系列环节,这些环节作得越好,功能实现得也就越快越好。
需求提出后,产品会拉上各个岗位的人进行产品需求评审,交互/视觉设计、开发、测试都会拉上。
产品经理会将需求项写好,而且整理出低保真原型图、产品流程等,让你们可以对产品和需求有个概念。
这时产品经理整理出来的叫作 PRD 文档,内容大概以下:
每一个公司都不同,也不必定要写出文档一条条列出来,如今许多时候是直接在原型图上进行标注说明,而后你们根据原型图评审。
各个岗位会争取弄清楚产品和需求的每一个细节,而且提示本身的想法,各抒己见。好比某个需求实现成本过高须要从新考虑、某个需求不合理须要改进等。
这个过程会花费比较长的时间,意见统一后产品经理会肯定版本,而后各岗位就要开始进行本身职责内的设计了。
首先是开发人员,要进行概要和详细设计。
概要设计就是开发方案设计,好比模块怎么划分、技术如何选型、数据模型如何设计等。
这一块主要是对整个项目进行一个大概的设计,切记在该阶段对业务流程、细节实现过多纠结,这些都是详细设计的事。
概要设计完成后,接下来就能够对细节方面进行设计了。
这个细节就是指功能的实现思路,好比一个很是简单的登陆功能是这样的:
编码时基本上就是看着图开发了,设计得越详细,编码时就越轻松。
开发人员须要对编码进行思考和设计,测试人员也要对测试进行思考和设计,否则到时候想到哪测哪,容易遗漏功能点。
测试用例就是指须要测试的功能点详情,这个功能点应该怎样测试、前置条件是什么、预期结果是什么,等等。
测试用例能够帮助测试人员理清需求,为后续的测试提供可参考的依据,在测试过程当中也能够反映测试进度。
同时,设计师也要进行交互和视觉设计。
这个环节作出来的高保真原型图,基本就是产品的最终样貌了。
当开发人员、测试人员、设计师把本身的内容设计完毕后,你们又会凑到一块进行一番评审,来看看各自的设计有没有问题。
好比开发人员和测试人员会看下互相对功能的理解是否一致,否则到时候测试起来,测试说这个有问题,开发说这样是对的,就会浪费时间。
产品也会看下你们对需求的理解程度,避免理解误差。
这个环节就是对细节方面的修改,改动通常不会太大,不会花太多时间。
该环节完成后,就是开发人员进行功能实现,先后端也会进行联调,联调完毕后开发人员会自行测试一番,没问题了再交由测试人员测试。
流程弊端:
该流程是在开发环节前作了充足的准备,但没有在开发环节后作充分的测试验收,产品上线后质量得不到保障,容易出问题。
因此,在开发完成后还须要进行一系列的测试验收工做。
能够看到,开发完成后还有一大堆的事要作。
首先,大厂通常会作代码 Review,即由组长或者组员审查你的代码,不管是业务上仍是技术上,在这个环节都能收获许多建议,这个对开发人员能够说是成长最快的环节。
代码没问题后,开发人员就要提交测试申请,而后测试人员将代码发布到测试环境进行测试。
为何开发人员在这一步还要提交一个申请呢,直接将代码发布不就得了。
这是由于测试周期比较长,测试人员还在测呢,你擅自发布,会影响测试人员的工做。
因此,测试环境只能由测试人员发布代码。
测试环境没问题后,就能够将代码分支合并,而后由测试人员发布到预发/沙箱环境。
沙箱环境就是指将系统接入真实的数据,但系统只能内部访问,用户是没法访问的。
这个环节就是为了保证上线前不出问题,因此模拟线上真实环境,看系统能不能在真实数据下抗得住。
这一轮测试没问题后,又能够将代码分支合并一次,而后让产品经理进行验收。
产品经理会看看如今完成的功能是否和需求一致。
验收无误后,就会发起上线申请,而后就要将代码发布到线上真实环境了。
上线这个事是“神圣又庄严”的,每一个人恨不得焚香沐浴,深怕在线上出问题。
上线前要准备许多工做,好比要列出上线的服务有哪些、参与的相关人员、上线服务配置的变化、部署步骤、回滚方案等。
发布时间也有讲究,通常不会在周五发布,怕出问题后周末很差调整;同理,通常也不会接近晚上发布,怕下班后很差处理。
有些公司还会发布灰度版本,即给部分用户发送新版升级,这部分用户体验没问题后,才全量发布。
上线以后,测试人员还会进行一次回归测试(第三轮测试了),测试无误后产品会再次验收。
都没问题了,这个需求才算结束。
从需求提出到需求结束,仍是挺不容易的,中途历经多个环节,要和多个部门/岗位协调,各类问题和难点都要面对。
这些流程,各个公司可能会有些出入,不过差不了太多。
每一个公司会根据本身的公司文化、人员配比、业务方向以及需求大小作出调整,好比一些小的需求小的改动,概要/详细设计就不会作了;再好比一些公司会将产品验收环节放在第一轮测试以后……
流程的最终目的是节省人力成本和时间成本而且提升产品质量,符合公司实际状况的才是好流程。
小公司盲目采用大公司的流程,反而增长沟通成本;大公司明明流程老旧也不肯意改进,技术负债就会愈来愈多。
不管是公司仍是开发人员,咱们都应当保持学习、时刻进步,这样才不会被这个时代抛下!
本文到这里就结束了,我是「RudeCrab」,一只粗鲁的螃蟹,咱们下篇文章再见。
关注「RudeCrab」微信公众号,和螃蟹一块儿横行霸道。