腾讯研发效率领先的秘密:高效率的工具

在5月5日的DevOpsDays Beijing,腾讯CODE平台产品经理mars分享介绍了腾讯研发工具体系,并通过两个研发过程中的实践案例,说明DevOps理念对于研发过程的优化作用,本文是这次分享内容的整理和延伸。

一、 腾讯拥有业界领先的研发效率

平均每研发人员单位时间释放出的产品能力,即“研发效率”。

根据腾讯3月份最新发布的公司介绍,腾讯大约有15,000名研发人员。但是,腾讯却有几乎最为广泛的业务线。在日常生活中,每个人都可以感受到腾讯产品的覆盖宽度。更为甚之,腾讯还有著名的“内部赛马”文化,同一类产品可能有多个团队竞争,这意味着集团的产品线要有多份的研发能力以供赛马。在这一切的背后,必须以高效的研发能力来应对保障。

研发效率是是指单位研发人员负责输出的产品能力,统计上就是集团公司整体的产品能力,除以整家公司技术族人数。

那么,究竟是什么使腾讯拥有如此高效的研发能力呢?有以下几点因素:

  • 人的因素

在腾讯,有上万名优秀的技术人员,感谢他们心怀梦想的工作,为企业和社会做出了重要贡献。

  • 敏捷文化

在腾讯,敏捷早已深入骨髓,已经是一种自发的行为。公司无需刻意强调,团队已然践行。

  • 研发工具自动化

研发链上,腾讯具备完整的去中心化的工具体系。在这个体系中,自动化和便利性同等重要,并通过去中心化的机制保证组织末梢上的业务效率。

  • 质量保障能力

腾讯有非常高效的质量控制能力——高效率的质量团队、高效率的质量工具和高效率的方法论。

二、腾讯研发工具链

腾讯特有去中心化的研发工具体系,平台之间使用松耦合的方式互相集成。

下图中列出的工具系统大约占到腾讯内部工具平台的1/8左右。若从圆心点画每一条射线,都能找到一个完整的工具链。从图中可以看出,有些工具平台是公共的,而其他一些则是与业务相关的。

(腾讯研发工具链示意图)

来看一下集团层面的公线工具。

腾讯的代码管理和需求管理有统一的平台,也就是说腾讯的源代码统一由CODE平台负责管理,其中主要是腾讯自研的Git平台,而需求规划系统统一由TAPD承担。

除此之外对于DevOps很重要但又很容易被忽略的部分,是企业内部的一些关键设施,比如办公网络、知识管理、安全管理还有就是最最重要的企业IM。

特别是IM,国内在做DevOps解决方案时经常忽略,IM和DevOps系统适当集成,可以组成实时的信息传递中枢。IM与全链工具链如何结合是一个可以深挖的课题。腾讯在IM方面已经全面使用企业微信,DevOps有关的各个系统都在实时通知的能力上与企业微信做了内部整合。

(公线工具示意图,虚线内)

再来看一下业务线,虚线内囊括了集成、测试、容器、部署、微服务等等工具,可以看到沿着中心每一条线,都能伸展出一条完整的研发和运维工具链。

(业务线工具示意图,虚线内)

其中还有一些比较著名的系统,比如织云、蓝鲸、WeTest、Bugly,在各自的领域上都十分完备,有很好的用户体验。

系统和系统之间的DevOps闭环是通过松耦合的模式互相衔接的:用Hooks触发,再用API相互集成调用。实现一种去中心化的协作能力。

每个业务可以自行选用适于自己的系统,比如一个团队可以使用MIG的RDM做编译,用IEG的CodeCC做静态代码扫描,用QTA或者WeTest做自动化测试,再用织云来发布服务。而不会因为组织架构而拘泥于某一系列的研发工具。

另外每个业务都可以自行定制贴近自己的工具,这样一旦业务形成规模,就能保证研发系统在需求上最快时间的响应,更加利于研发团队快速优化自己的效率。

三、一个案例

腾讯的研发团队,如何进行项目组织?

腾讯有一个研发项目,因为是个很重要的产品,所以对变更的管理是很在意的,这个团队每月要处理300到500个需求或者任务,项目代码放在腾讯TGit系统上,需求管理用腾讯的TAPD,

具体看一下这个项目是怎么组织的。

这是一个分支策略的示意图,可以看到这个项目采用的多分支的管理模式,每个功能和需求都是在独立的特性分支上开发的。和主流的Github Flow有些不一样,最主要是项目的默认分支不是稳固的,它会在每个月把默认分支重设一遍,比如现在是五月,那么研发Leader就会把默认分支设置成May,所有这个月要发布的功能都向这个分支合并,等到May这个版本发布完之后就启用六月份的June。

这种分支的管理模式的核心思想主要是用发布节奏来组织分支策略,这个模式对多团队合作的大型项目来说有很多的优点。但这个不是本文的议题,有兴趣的同学可以研究下。

本文要谈的重点是左边棕色区域的功能分支,300到500个功能分支,最终要被合入这个月发布的版本中去。可以想象一下临近发版日的时候是什么样子的。

首先,500个功能一定不会是均匀提交的,一般都得到月中或者月末才提交,因为这个月先要沟通需求,需求沟通PK差不多了,开发再去实现,实现完开发自己还要做些调试和测试。所以一个月月末的时候,这些分支的合并压力就会很大。500个功能,假设核心团队的三个技术Leader负责合入把控,就那么几天时间,每个合并遇到问题还要和团队一个一个沟通……别的事就没法做了……

所以大型研发团队的痛点,所有的矛盾和解决方案都指到了分支的合入控制这个点上。那么这个团队怎样解决的呢?

首先是关联需求

在发起合并请求的时候,直接在描述里粘贴对应的需求链接,后台有一个脚本会用正则判断链接是否存在,格式是不是正确。

如果没贴链接或者链接不对,脚本就会自动调用Git平台的接口,阻止下一步操作,像左图这样显示合并被阻止,同时自动用评论提示缺少需求链接,就是下图的样子。

在需求一侧也可以控制这个功能是否可以合入。下图的提示意思就是要在需求管理平台,标记需求单位“可合入”的状态,这个合并请求才能放行。

再来看在合并时质量自动化改进

同样的,利用代码平台的接口,通过自动化脚本,可以实现质量的自动化能力。

可以看到这里构建是用jenkins,测试是用团队自己调用的测试工具和静态检查工具完成的。

如果编译和自动化测试没通过,合并请求也会被阻止,直到开发人员推送了能测试通过的版本,才会放行。

在合并请求的列表上,直接显示了合并请求的检测状态。可以看到每一个合并请求,后面都自动跟了检测状态,绿色的对号或者红色的叉子,这对项目管理人员是很友好的,红色的可以直接跳过不看了。

四、质量控制流程设计的三个要求

自动化、感知能力、控制能力

第一是自动化,流程必须被设计成全面的自动化。哪怕有一点点操作需要手工执行,到具体研发的场景里就有各种理由被遗忘,所以要尽可能保证全流程都是自动化无人工操作的,这里有三小点,自动触发,自动检测,还有自动上报。

第二个要点是感知能力,这里面主要谈的是信息流。如何让研发团队有能力了解和自己去把控质量,那么一定要把信息流做到位,要让研发团队,特别是和这段代码有关的相关人,清晰的知道整个质量验证的进度情况。信息流,主要解决的是沟通的问题,如果信息流做的不好,沟通基本靠嘴,那么效率是非常的低的。

这里也有三个小点,是实时、可追溯、可配置。可配置的意思主要的目的是信息泛滥。

第三点讲控制,就是如何防止低质量的模块被发布,那么流程上就要能自动截断低质量模块的发布,这里面我们提到的解决方法是拦截合并,控制关键分支。当然这里有一个前提,是代码管理系统必须要有拦截功能。

回过头来看从编码到发布的流程,在过去,质量检测在发布前能够介入的时机也就有合并前,合入后,封包后三个阶段:

往常这三步需要分开来做,用DevOps思想解决的是,让这几个事情同时完成,形成一个质量验证的快速闭环。在每次合并请求发起和更新的时候,都自动化的把整个事情完整做一遍。这样保证每一个功能合入都是安全可靠的。

真的能实现完全自动化的差不多只有下图红框圈起来这些

五、第二个例子

RDM是腾讯米格(MIG)的集成工具平台,主要功能是移动端应用集成编译和发布管理。

第二个例子来自米格的RDM平台

RDM是支撑MIG旗下所有移动端业务的工具平台,最主要的功能是集成编译,也有一些自动检测和验证的能力。

下图是一张流程的示意图,展示的是集成和质量工具与源代码管理平台的之间接口的互相调用。从分支push开始到静态检测、到构建、到自动的功能测试,集成在一个Pipeline里面。

下图是RDM Pipeline 配置页

Pipeline最先是拉代码,然后是构建打包,检测项有代码风格、Coverity扫描、Sonar扫描,代码重复率等等,编译集成后,还联合有一些移动端的自动化测试平台和工具。

如下图的对话框,每项检测项目都可以设置他们是否能阻断合并请求。

当合并请求发起或者更新时,Pipeline的显示效果如下图

在合并请求的页面上显示检测正在进行,同时企业微信也弹出来提示,说明检测开始了

检测结果附在合并请求的动态墙上,这些都可以事后在代码平台上查询到,实时的结果则通过企业微信推送。

如果检测失败就会阻止合并请求,之后如果开发新提交的代码解决了这些问题,那么这里的合并请求会自动放行。

小结

上面这些例子,都是在合并请求上附加各种各样的集成能力,利用自动化和流程化,来增强项目人员和管理者的感知,达到优化流程的目的。

一方面通过代码平台和IM的能力实现了实时可追溯的信息流。另一方面,通过代码平台阻断低质量模块的合入(这个阻断能力需要代码管理平台支持)。并展示了在研发过程中的端到端打通能力(从代码提交封包测试完成)。

六、开源和开放

腾讯研发工具链上工具的开源项目和开放能力

腾讯研发管理工具链的开源做得很早。其中有一些知名项目,例如蓝鲸配置平台(bk_cmdb)和Tars微服务解决方案(Tars),业界已经比较了解,可以在Github的腾讯账号下搜索到。

腾讯研发工具链上开源过的工具和组件:

本文介绍几个冷门项目:

GAutomator

看截图很快能知道是互娱的项目,这个项目是个Unity的自动化测试框架,它是WeTest的其中一个模块,WeTest是个真机测试云的解决方案,用成千上万台不同型号的手机跑各个机型的自动化测试。

Tscancode

同样是来自互娱的TScanCode,做的是静态代码扫描,支持C++和Lua,帮你分析代码中的潜在漏洞。

QTAF

QTA是SNG社交网络质量部出品的自动化测试框架,承担了SNG多数业务包括腾讯云的部分业务在内的自动化测试需求。支持移动APP、Windows程序、网页、服务端、接口多种不同平台的测试任务,开源的部分放出了Android和iOS的测试库插件,分别是QT4A和QT4i,其中QTAF是其核心框架的核心模块。有兴趣交流可以在Github的项目上给项目组提issue。

七、总结

本文通过分享几个研发过程优化的例子,说明了DevOps端到端的思想不仅仅是针对运维的,它还对研发管理,特别是质量控制很有价值,并且能够直接改善研发团队的体验,减少沟通损耗,提高研发效率。同时也介绍了腾讯内部的实现经验。在流程改进上还有很多的路径或者体验可以优化,希望与同行共勉。

请关注公众号「腾讯技术工程官方号」

wechat ID:Tencent_TEG

后台回复“devops”,获取本文PPT原件

原文地址:http://blog.51cto.com/13591395/2116291

时间: 2024-10-12 13:25:01

腾讯研发效率领先的秘密:高效率的工具的相关文章

提升研发效率和体验,更爽的工作

相信有很多人和我一样,在日常工作中会碰到各种各样让人抓狂的事,但是生活还得继续,虽然有很多事我们改变不了,比如公司规定,团队成员,工作环境等等,但幸好还有些事我们能改变,比如我们自己.一直都想写一篇关于如何改进个人和团队的工作细节,以便提高工作效率的文章,刚好最近在极客时间上听了葛俊老师的课程<研发效率破局之道>,找到了很多共鸣,也受到了很多启发,结合自己的实践一并分享出来. 我不会在这篇文章中聊团队管理,敏捷实践之类高深的话题,只是会聊一些简单又实用的方法和工具,但是相信我,这些方法和工具能

雷观(十二):构建基础库,提升研发效率

观点:IT之所以迅速普及,进入到每个人的生活.一方面是由于,IT相关技术产品,给每个人带来了丰富的虚拟世界和娱乐生活.另一方面,它大大提升了大部分行业的生产效率.社会生产力的发展方向,就是时代的发展方向.   程序员等IT技术人员,在IT届的地位,就像IT在社会生活中的地位:不可或缺.普遍存在.生产力的关键. 作为一名自学6年多的程序员,对技术的追求从未曾放弃.但我也终究意识到,纯粹的技术无法带我到达理想境界,而生产力的提高才可以把我从繁杂的基础工作中解脱出来,可以把我带向幸福美好的生活中. 与

有人认为,“中文编程”,是解决中国程序员编程效率的一个秘密武器,请问它是一个“银弹“吗?

银色子弹(英文:Silver Bullet),或者称“银弹”“银质子弹”,指由纯银质或镀银的子弹.在欧洲民间传说及19世纪以来哥特小说风潮的影响下,银色子弹往往被描绘成具有驱魔功效的武器,是针对狼人,吸血鬼等超自然怪物的特效武器.后来银色子弹常被用做致命武器的代言词.被比喻为具有极端有效性的解决方法,作为杀手锏.最强杀招.王牌等的代称. IBM大型机之父弗瑞德.布鲁克斯(Frederick P. Brooks, Jr.)在1986年发表的一篇关于软件工程的经典论文,便以<没有银弹:软件工程的本质

如何成为一名研发主管--关于个人、过程、工具和团队之一

当一个研发或产品线团队人员数量达到几十人规模时,点对点的平面式沟通管理模式势必成为产品研发和团队发展的瓶颈,这时候就需要从人员组织架构上做出调整,即从点对点的平面式管理转换为金字塔型的梯队式管理.作为一个研发团队,技术研发主管作为梯队式管理中的基层主管在技术人员管理以及产品开发过程把握上发挥其核心作用.本文从团队管理角度出发,从技术研发主管的定位开始展开,对如何培养和建设技术主管队伍从以下几个方面进行阐述: 个人 过程 工具 团队 我举一张龙舟图对研发主管的定位进行描述,见下图.图中除了坐在船体

iOS 高效率编程工具篇

原文链接: 确实有很多好用的工具. http://huluo666.cn/2016/03/30/iOS%20高效率编程工具篇/ 图片压缩网站:https://tinypng.com

中石化牵手腾讯 背后隐藏了啥秘密?

中石化与腾讯之间长达半年之久的"绯闻"最终在8月26日坐实.当天,中国石化销售有限公司与腾讯科技签订业务框架合作协议,两方将建立长期.全面的战略合作伙伴关系,在业务开发与推广.移动支付.媒介宣传.O2O业务.地图导航.用户忠诚度管理.大数据应用与交叉营销等领域探索开展合作. 早在8月8日,中石化集团官网高层动态信息栏曾挂出的消息称,8月7日,中石化集团公司董事长傅成玉在总部会见腾讯公司总裁刘炽平一行.这也是截至眼下,全部传言将參与中石化销售公司混改合作的企业中,唯一在合作前被中石化公开

借助docker技术提高研发效率

目前的研发和运维经常会遇到下面的问题: 1.开发.测试及生产环境不一致: 环境搭建及部署步骤繁琐,而交付给测试人员的时候不是整个产品,而只是项目代码,这样就导致开发环境(开发联调环境)与测试环境极大可能不一致,从而影响测试的准确性和解决BUG的时间(因为要分析BUG是否因为环境导致的): 2.  申请测试资源比较麻烦: 3. 测试需要一个非常干净的环境来进行测试,以免造成测试不准确的结果: 4.业务无法敏捷 在发布产品的时候,发布周期太长 5.无法应对频繁的发布 引入docker以后,带来的影响

[转]腾讯研发类笔试面试试题(C++方向)

https://blog.csdn.net/Xiongchao99/article/details/73381280 1.C和C++的特点与区别? 答:(1)C语言特点:1.作为一种面向过程的结构化语言,易于调试和维护: 2.表现能力和处理能力极强,可以直接访问内存的物理地址: 3.C语言实现了对硬件的编程操作,也适合于应用软件的开发: 4.C语言还具有效率高,可移植性强等特点. (2)C++语言特点: 1.在C语言的基础上进行扩充和完善,使C++兼容了C语言的面向过程特点,又成为了一种面向对象

atitit.提升研发效率的利器---重型框架与类库的区别与设计原则

1. 框架的意义---设计的复用 1 1.1. 重型框架就是it界的重武器. 1 2. 框架 VS. 库 可视化图形化 1 2.1. 类库 2 2.2. 应用框架 2 2.3. 框架与类库的区别主要表现在以下几个方面: 2 2.4. 框架模式就是参团游,而自由行则类似于库的组合 3 3. 框架的特点 3 3.1.  没有一个万能的框架 3 3.2. 框架是不可组合的 3 3.3. 框架设计的俩个方向::全栈式与精细化 4 4.  框架设计经验.原则 4 4.1. 通用框架与应用框架 4 4.2.