百度工程能力白皮书-Relentless pursuit of engineering excellence
工程能力对百度的意义:
公司研发工程能力的高低直接影响公司的持久创新力和公司在市场上的作为。只有不懈追求卓越的工程能力,才能够带来长期的核心竞争力,才能为每个用户、每个企业客户以及整个社会创造价值。长期以来,百度在大量的软件开发经验中总结了许多优秀的工程实践,这些实践来自于公司工程标准和开发工具链的结合。经过长期团队观察和大量研发数据分析,我们证明这些实践可以有效帮助提高软件开发效率和产品质量。
制订工程能力白皮书的目标和意义:
百度软件工程标准制定的目标是为了帮助研发团队持续提升工程能力。工程标准可以快速指导团队采用优秀的软件工程实践和研发工具,使其在研发效率或产品质量上获得提升。同时有了标准和规范,也能够更有效地衡量团队工程能力的水平,让各个团队能够更好地了解自身的工程能力现状,进而设定工程能力提升目标,不懈追求工程卓越。
白皮书希望分享百度在软件工程标准、实践、度量和改进方面的经验,呼吁业界共同加强工程能力建设、研发工具投入、工程标准更新与工程素养提升,共同推进软件工程的发展。
修订规则
百度软件工程标准是由百度DevOps TOC(Technical Oversight Committee)制定并发布的,并且随着公司工程技术的发展不断更新。 首先,DevOps TOC的委员广泛收集各个研发团队的优秀工程实践,以及工程标准实施的反馈,制定工程标准的初版或修改意见草案。 然后TOC委员将草案提交至DevOps TOC进行充分讨论,如果TOC会议通过,就进行标准修改的公示,同步修改研发工具中的对应规则。同时收集各团队反馈和实际研发数据进行分析,来验证标准实施的效果,并继续准备下一轮的规则更新。
工程能力白皮书的内容
- 百度软件工程类型
- 每种工程类型的工程能力地图
- 地图中每种实践的实施标准
分别介绍一下以上两个方面的内容:
百度软件工程类型:
百度公司的软件产品形态有多种,例如App,Browser,PC Client,SDK等。不同的产品类型其研发过程及优秀实践也不尽相同。在编纂标准的时候,我们将B/S类型产品的前端和所有类型产品的后端服务统称为Server类型;将Android, IOS的用户可访问的移动端代码称为APP类型,将打包成为移动端SDK的代码成为SDK类型。并根据以上三种类型(我们正在制订自动驾驶的工程类型)来统一工程实践,这就引出了下面的概念--工程能力地图:
工程能力地图:
在每一类软件工程类型中,规则的制定团队定义了此类工程类型从需求和设计的管理,到开发,测试,发布的标准生命周期;不同的工程类型维护不同的生命周期。另外,我们在生命周期的每个阶段,也定义了不同的工程实践,如下图:
Server类工程能力地图:
开发一个Server工程,需要经过需求、开发、代码准入、测试、上线&验证5个阶段; 在Server类的工程能力地图中,我们定义了33个标准的工程实践:
App类工程能力地图:
开发一个App工程,需要经过需求、开发、代码准入、测试、灰度、发版6个阶段。在App类工程能力地图中,我们定义了36个标准工程实践
SDK类工程能力地图
开发一个SDK工程,需要经过需求、开发、代码准入、测试、灰度、交付等阶段;在SDK工程能力地图中,我们定义了34个标准实践
工程实施标准:
我们按照团队采纳的深度,为上述地图中的每种工程实践定义了Average, Good, Excellent三种标准,在average的水平,我们要求团队在采纳广度上达标;但如果团队为了实现good, excellent的表现,就需要在采纳深度上进行努力: 上述是对工程能力地图内容的简单介绍,如果大家对具体的规则以及百度内部实施案例感兴趣,可以在文章最后找到完整版本下载的地址。
内部实施成果
通过不断修订工程标准、迭代工程工具落地优秀实践、收集研发数据并可视化工程能力,可以使研发团队快速实施优秀工程实践,提升工程能力,进而提高团队开发效率,提高产品质量。
我们观察了公司8个样本团队的工程实践落地进程和开发周期时间的变化。其中4个团队在观察期内按照本文的工程标准推进了若干工程实践的落地,另外4个团队工程实践做得很少且在观察期内没有推进新的工程实践落地。
我们发现在选定的时间范围内(横坐标),推进工程实践落地的4个团队(图中高亮的颜色),其开发周期的移动平均值(下图的散点)成稳定下降趋势;没有推进工程实践落地的4个团队(图中背景部分),其开发周期主要成发散上升趋势。同时这8个团队在观察期内的团队人数、开发习惯等团队特征以及产品质量均没有显著变化。这说明工程实践能够对开发周期的缩短产生积极影响。
为了在更大范围内进一步发现工程标准、工程工具对研发效率和产品质量的影响,我们对百度所有团队6个月时间段内的研发数据进行了定量分析后,得到如下三个结论:
- 团队采用的工程实践数量越多,其开发周期越短;
- 团队工程实践做得程度越深入,其开发周期也越短。
- 团队人数越多,实施工程实践对缩短开发周期的作用就越大。
以上分析结论进一步佐证了优秀的软件工程实践能够缩短开发周期
未来与展望
对于一个科技公司来说,保持并不断提升工程能力是最重要的。百度一直坚持培养工程师的工程素养,建设高效的工程工具,持续推动工程能力提升,Relentless Pursuit of Engineering Excellence,永无止境的追求工程卓越。本白皮书介绍了目前百度工程的标准和工程实践,希望作为软件工程的实践者为同行或研究机构提供一个参考样本,促进交流,共同提高。百度工程标准也必然会随着公司内外工程技术的不断革新而持续升级。百度软件工程标准希望及众家之所长,合众人之智慧,以实践为检验标准,促工程能力打造科技产品,用科技让复杂的世界更简单。
下载方式:
关注"百度效率云官方公众号", 在输入框中输入"工程能力白皮书",获取白皮书的网盘地址

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
测试人员为什么要深入到项目实现中去
(“马蜂窝技术”公众号原创内容,ID: mfwtech) 一个项目从需求确定到最后上线,通常来说流程是这样的: 「测试」作为一个项目质量保证角色,在上面的整个流程中均有参与。而用例设计、项目测试环节更像测试的主场,PRD 的评审测试人员也会发表很多自己的观点,对项目的技术评审虽然测试人员也有参与,但也不如前两个环节的参与程度深。 其实,一个优秀的测试人员应该深入到项目的每一个环节中去发现问题,提出自己的观点,保证项目质量。那么要真正深入到项目实现中,测试应该怎么做呢? 一、Review 接口定义结构 接口定义文档在测试过程是测试人员接触比较多的设计文档,尤其是与最外层面向用户的接口设计相关的部分。在参加接口文档评审、编写接口用例这些场景下,测试人员都会仔细阅读接口设计文档。 通过接口文档,可以帮助测试人员清晰了解到前端与后断是怎么交互的,每个页面哪些操作与后端存在交互,不同的接口之间是否存在关联,清楚这些可以帮助测试人员在测试过程中对出现的问题进行精准判断,确定导致问题出现的范围。 在阅读接口文档可以关注以下几个方面: 接口中定义字段是否考虑了扩展性; 字段是否必须有明确的说明;如果...
-
下一篇
Kubernetes身份认证和授权操作全攻略:上手操作Kubernetes授权
这是本系列文章中的第三篇,前两篇文章分别介绍了Kubernetes访问控制以及身份认证。本文将通过上手实践的方式,带你理解Kubernetes授权这一概念。 在文章正式开始之前,我们先快速回顾一下我们实操过程中的环境和场景。我们正在处理生产环境中的集群,其中每个部分都与命名空间相关联。现在,组里新来了一位同事叫Bob,我们在上篇教程中帮助Bob以engineering命名空间管理员的身份加入集群。并且他已经获得私钥以及签名证书来访问集群。 如果你还没有完成上述操作,请查看上篇教程,运行其中的命令以完成环境设置以及为Bob配置证书。 好,我们正式开始本篇教程。 现在我们要给Bob授权,以控制属于engineering命名空间的资源。 首先,我们要为kubectl创建一个上下文(context),方便它在不同的环境之间切换。 kubectl config set-context eng-context \ --cluster=minikube \ --namespace=engineering \ --user=bob Context "eng-context" created. 上面的命...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- SpringBoot2配置默认Tomcat设置,开启更多高级功能