关于作者
褚佳义,腾讯新闻产品技术部\客户端开发中心iOS开发组员工
导语I新闻团队一直在实践如何规范研发流程,提升研发效率。在半年多的探索中,我们也总结出了一些方法与工具,本文会进行简要的介绍。
从最开始的每月一个版本,到后来的双周迭代,再到现在的单周迭代,新闻客户端的迭代速度越来越快,研发效率也越来越高。
在这种快速迭代下,我们是如何保证研发工作有条不紊的进行呢?
如果把我们的快速迭代比作高速公路的话,为了保证高速公路畅通无阻,需要以下几个条件:
- 详尽的交通规则
行车不规范,亲人两行泪。交通规则规定了每个司机都必须遵守的条例,并细化到很多具体场景。如果没有交通规则,大家都在高速公路上随意开车,那肯定是一团糟。 - 良好的车况路况
高速公路为啥不让三蹦子开上去?因为车子不行,速度跟不上,很容易造成堵车。哪怕是个资深老司机,他也得望车兴叹。
同样,高速公路也不能坑坑洼洼,坑太多车速肯定起不来,关键是还影响司机心情,没法充分发挥车技。 - 完备的导航系统
高速公路上需要配置各种各样的指示牌,比如出入口标识,前方拥堵状况等等。有了这些指示牌,司机才能做好预判,安心开车。
上面这几点放到研发流程上也同样适用,分别对应详尽的流程规范、先进的研发工具和完备的进度提醒。
详尽的流程规范
没有规矩,不成方圆。尤其是涉及到多团队合作,很容易产生各种协同问题。为了保障迭代工作有序进行,新闻团队设计了一套完整的产品研发流程规范,囊括了产品、设计、开发、测试的各个方面。
(感谢徐昊老师提供的流程图)
流程将每个迭代周期划分成几个阶段,并规定了每个阶段需要完成的任务。根据这个流程,我们就能明确的知道当前属于哪个阶段,需要哪些团队参与,并以此设置好任务的优先级,保证任务能够按时完成。
研发流程
具体到研发流程上,每个迭代的开发时间有4天,并划分成2天、1天、1天三个开发阶段。开发需要将产品需求拆成独立的子需求,并分配到各个开发阶段。
我们的研发流程也规范了每个阶段开发同学需要做的事情,总结下来主要有以下几个步骤:
再进一步,我们还有代码级别的规范,比如代码风格规范、代码安全规范等。这里不再展开说。
按照这套流程规范研发,就像遵守交通规则开车,一个字,稳!
先进的研发工具
只有流程规范肯定是不够的,必须有先进的研发工具的支撑,我们才能去实践这套流程规范。就像是给你一本交通安全法规和一个滑板车,然后让你滑得汽车一样快,除非你滑到了早高峰的后厂村路,不然肯定做不到。
我们目前用到的研发工具主要分成三类:
1. IDE/命令行
IDE和命令行是我们写代码不可或缺的,也是我们打交道最多的工具。以iOS开发为例,我们在Xcode中写代码,在命令行中提交代码。对于这类系统工具,我们需要让它们变得更加好用。
2. 公司内研发平台
研发平台指公司提供的代码托管平台、CI平台等,我们平常用到的主要有工蜂git、蓝盾、TAPD及一些列其他平台。有了这些平台的支撑,我们的研发流程才会变得更高效快捷。对于这类内部平台,我们需要充分利用它们提供的能力。
3. 自动化工具与配置
我们在IDE和命令行中编写、提交代码,在git上进行CR(Code Review),在蓝盾上执行流水线,在TAPD上查看需求状态… 这些工具和平台给我们提供了便利,但我们总需要在这些工具和平台中来回切换,费时费力。我们希望通过自动化的工具与配置,降低繁琐的人工操作,达到最大程度地自动化,进而提升研发效率。
自动化工具与配置能够帮助我们完成上面提到的两个目标:
- 让系统工具变得更加好用
- 充分利用内部平台的能力
这样说可能有些抽象,没事,举两个例子就好了。
例1: 开发流水线自动触发构建
按照上面的研发流程图,我们每开发完一个需求之后,要先去蓝盾构建出一个体验包,然后使用这个包进行走查,走查通过后才能继续下面的流程。
一开始我们是怎么做的呢?
- 把分支push上去
- 在蓝盾中找到自己的流水线
- 编辑流水线,选取当前构建分支
- 点击构建
- 下载体验包
非常繁琐是不是!好不容易开发完一个需求,为啥push上去了还得到蓝盾上选来选去,不能直接构建吗?没问题,你可以的。
现在,我们将个人流水线配置为push事件触发,触发分支为 feature/username*(通配符模式),比如我的流水线配置的触发分支就是 feature/jerrychu* (iOS客户端git分支规范要求需求开发分支以feature和英文名开头)。配置好了之后,只要对应的分支有push事件,就会自动触发构建。那如何确保构建的是自己的开发分支呢?不用担心,我们在流水线中会自动切换到push事件触发分支,也就是需求开发分支,同时也会在构建完成的消息提醒中带上当前构建的分支,确保万无一失。
于是,现在的流程变成了
- 把分支push上去
- 下载体验包
⚡️
例2: 快速发起MR
继续例1中的流程,走查没问题之后,紧接着就要发起MR(Merge Request)了,需求状态马上就能改成已完成了,此时正心潮澎湃,突然发现发起一个MR还要在git平台上点来点去,而且比在蓝盾上点得还多!
- 打开git项目主页
- 点击发起MR
- 选择源分支和目标分支
- 点击对比
- 填写MR信息
- 提交
尤其是选择分支那一步,如果分支比较多,还得找一会儿,如果眼神不太好还有可能选错了。为啥不能让我痛快地发起一个MR呢!没问题,你也可以的。
我们提供了一个gitmr脚本,用于快速发起MR。有了这个脚本之后:
- 命令行执行gitmr,自动跳转MR页面
- 填写MR信息
- 提交
方便快捷且不会出错,非常优雅!
上面的两个例子分别是从 平台配置 和 自动化工具 两个方面阐述了自动化工具与配置在提升研发效率中的作用。在实践的过程中,肯定会遇到很多比较繁琐的点,需要我们不断的去发现并优化。这些自动化工具和配置可能看起来都是比较零散的小优化,但是确实能为我们优化研发流程,提升研发效率。就像是把汽车后视镜从手掰的变成自动的,虽然只是个小优化,但是非常实用。
聚沙成塔,聚少成多,小优化的不断积累,最终也会成为我们研发效率提升实践中不可或缺的一环!我们在实践中积累了不少实用的自动化工具与配置,欢迎交流!
完备的进度提醒
流程规范和研发工具都完善之后,还必须要有进度提醒工具来辅助整个流程的顺利执行。进度提醒就像是高速公路上的路标,提醒我们现在到了哪个阶段,有哪些任务还没完成,可能会遇到哪些问题,从而保证整个流程能够按照既定的时间点走下去。有了进度提醒工具,我们才能够做到运筹帷幄,心中不慌。
下面以新闻团队的两种进度提醒工具为例,说明一下我们是如何通过进度提醒来保障研发流程的顺利执行的。一是CR事件提醒工具,二是TAPD任务提醒工具。
Code Review提醒
团队成员能够及时了解项目进展,是整个团队高效协作的基础。
为了让团队的每个人都能了解项目进展,我们建立了一个CR专用群。每当有CR消息发出时,群里都会自动收到CR通知。信息公开透明,每个人都能了解到其他人在做些什么,提前发现可能出现的问题,比如两人都改动了某一模块等。
此外,我们还在群里维护了一个CR人员列表,列举了当前所有CR相关的人,并自动进行更新。有了这个列表,我们就可以更合理的选择给自己进行CR的同事,同时也不会忘了自己还有CR没有处理。
任务提醒
及时的提醒比事后的复盘更重要。
高效的运转离不开规范的流程,但如何确保每个人都能遵守规范呢?最好的方式就是不断提醒。
没有自动提醒的时候,需要吾日三省吾身,需求提测了没?bug改完了没?改出新bug了没?
现在日子变好了,有机器人每天替你省几次,再也不用担心有遗漏的需求没有实现,bug没改了。
总结
详尽的流程规范、先进的研发工具和完备的进度提醒是研发效率提升中重要的三个维度。新闻团队的实践过程,也是一个充分利用现有能力,不断完善这三个维度的过程。同时,研发方式的变革和迭代速度的提升,也离不开代码质量的提升。