前言
在11月召开的中国 DevOps 社区广州峰会上,无限极(中国)有限公司DIT开发与测试中心的测试与效能经理 陈顺生 分享了其团队在支持公司业务数字化转型中的 BizDevOps 建设实践,令在场听众受益匪浅。
一、背景与挑战
1. 灵魂三问
在工作中我们是不是经常听到这样几个问题?
“我的需求提交好久了,什么时候可以上线?”
“大家都说需求很急,排序怎么做合理?”
“大家很忙,但其他部门质疑我们工作量不饱和!”
第一个问题,业务部门关注客户需求并收集反馈给产研部门,却迟迟未能实现上线,询问进度时产研团队也无法明确承诺上线时间;
第二个问题,产品经理在面对一线业务提出的紧急需求时,无法权衡各个需求的价值,难以进行有效的排序和优先级设定,于是只能将这些需求传递给生产和研发部门;
第三个问题,研发团队的工作节奏常常被打乱,虽然看起来工作繁忙,但实际上效率低下。尽管其他部门也无法提供确凿的证据来支持他们的观点,但研发团队也难以拿出有力的证据来反驳这种状况。工作量的管理缺乏系统化的承载和度量方式,这使得生产和研发部门感到压抑和不满。
可见,业务、产品、研发三个角色各有痛点。无限极在业务指数式的爆炸增长下,引入 DevOps 前也面临着同样的挑战。于是交付效率的问题反复被提及,面临内部质疑,产研开始探索解决研发效能问题,证明自己。
2. 数字化转型过程中遇到的挑战
无限极在数字化转型中会经历三个阶段,分别是信息化、数字化与未来的全面智能化。在初期的信息化阶段,我们引入了数个单一工具以达成生产效率的初步提升,结果这些单一的工具形成了数据孤岛。到了基于云底座的数字化转型阶段,数据孤岛对数据闭环、分析造成了障碍。如果想实现数智化,数据孤岛也是需要治理的先决条件。
我们决心解决上述两类痛点与挑战,从组织文化、流程、工具、架构等层面进行改变。其中组织文化和人员技能就要求内部IT同学进行转变、并借助外部优秀的工具辅助提升效能,以满足快速迭代和交付产品价值。
二、 破局三板斧
破局?我们聚焦在三板斧!即敏捷文化宣导,组织流程优化、借助DevOps工具赋能以及技术容器化升级。这一切建立在数据层面分析驱动。
1. 打造数字化时代的高绩效研发组织
在组织文化和团队建设层面,以业务目标驱动,致力于打造数字化时代的高绩效研发组织,打破职能边界,转型为敏捷交付团队。
在实践过程中我们发现很多敏捷框架无法直接导入——在Scrum或LeSS里,PO的地位不上不下;Scrum Master 只是敏捷鼓吹手,不对交付结果负责,这与国内组织文化很不匹配。因此最终决定践行规模化敏捷框架ADAPT。
ADAPT框架包含5个部落级角色(部落长、业务负责人、测试分会长、架构师、版本经理),以及3个小队级角色(产品经理、小队长、研发小队成员)。部落可以是个虚拟组织,在不改变企业现有组织架构的情况下搭建而成。所以,这些角色定义的也可以是部落运行中的虚拟角色。
2. 有了组织,还要保证落地。这需要制定和贯彻流程管理规范。
3. 敏捷迭代需要统一的流程
在流程层面,基于APAPT和SCRUM框架完善IT团队实现敏捷交付,并制定和遵循一套完整的从backlog-迭代-发版-运营的流程。
三、工具赋能实践
1. 插上工具的翅膀
我们基于腾讯云CODING DevOps平台改善数据分散原状,通过使用项目集、项目协同、代码仓库、代码扫描、持续集成、测试管理、制品仓库、持续部署、应用管理等功能,迅速实现了完整的敏捷交付工作流。并将CODING和内部运维平台、CMDB、以及接口压测平台系统集成,把所有的研发协作沉淀在平台上,进而将工程数据上报,拥有了自己的研发数据驾驶舱。
分支类型 | 命名规则 |
---|---|
主干分支 | master |
发布分支 | release/devV20220105、release/testV20220106、release/stgV20220106、release/prd |
特性分支 | feature/CodingProjectId#CodingIssueId,如feature/ecp#152411,152411对应为需求ID;##如是该需求延伸出来的缺陷,在迭代未上线前,还是继续在原特性分feature/ecp#152411中修复。 ##如该需求有一个服务需多个人同时用不同分支开发的,可以以该需求创建的子工作项的coding id为起名分支名,并合并至feature/ecp#152411 |
非需求产生的缺陷分支 | bugfix/CodingProjectId#CodingIssueId,如bugfix/ecp#195167,195167对应为缺陷ID;##非需求产生的缺陷指的是生产缺陷、回归测试所发现的缺陷,不包括当前迭代缺陷 |
这些分支规范配置在CODING代码规范中,统一管理规范并将执行进行固化。目前配置规范包括:
a. F&S flow 分支规范:适用于多分支迭代并行的中大型开发团队使用快慢车发布,支持 master、feature/*、 release/*、bugfix/* 分支;
b. 允许创建规定分支类型以外的分支(CODING分支规范配置);合并方向:规范仓库分支间的合并方向,只允许创建列表中规定方向的合并请求,列表为空则不会对仓库中的合并请求方向做限制;
c. CD flow 分支规范:适用于开发与测试中心一般规模开发团队,支持 master、feature/、 release/、bugfix/* 分支;
d. 允许创建规定分支类型以外的分支(CODING分支规范配置);合并方向:规范仓库分支间的合并方向,只允许创建列表中规定方向的合并请求,列表为空则不会对仓库中的合并请求方向做限制。
注意!不存在一个分支模型适合所有场景的情况,选择研发分支模型时大家一定要根据不同模型的特点和团队规模、操作成熟度和业务特性来选择合适的分支模型。
在质量内建的层面,我们已经在需求、用例规范、单元测试和接口压测等方面做出了努力,以确保P0和P1级别的接口通过率,并且要求每次测试的通过率至少达到90%。然而,我们意识到可能仍存在未被发现的测试场景。因此,我们推出了质量内建2.0版本,其中产品和开发团队也承担了一部分质量保障工作,不再完全依赖测试人员。
a. 在新的版本中,我们在需求评审、技术评审和用例评审过程中增加了会前评论数的参考,以避免评审流于形式且效果不佳。这一改变取得了良好的效果。通过这种方式,我们在需求的完整度、设计的全面性和测试的颗粒度上发现了许多问题,并能够尽早地暴露和解决。
b. 为了提升代码质量,我们实施了质量左移策略,包括代码扫描、代码评审、接口开发自测和自助压测。我们提高了代码评审率和代码质量评分指标,并制定了开发接口自测的标准。我们还通过APIFOX对接口模型的设计、评审、mock、自测和自动化测试进行了集成。此外,我们实现了基于CICD效率提高的开发自助压测,压测环境能够在压测前自动扩容,结束后自动缩容。对于数据库,我们启用了云上的自动扩容功能,当CPU使用率达到50%以上时自动增加一倍的CPU和IO资源,当低于30%时自动缩容,这极大地提升了我们在接口功能和性能方面的质量左移。
c. 我们还引入了基于jacoco的测试覆盖率工具,并将代码覆盖率不低于80%作为测试通过的指标。在提测阶段,我们会收集该功能分支的代码差异,并通过CICD模板在应用中进行插桩操作。如果代码覆盖率未达到标准,测试人员需要与开发人员确认未覆盖的代码分支和路径,进行测试场景的确认和补充,以提高测试的完整性。
d. 除了上述措施,我们还根据需要进行兼容性测试和安全性测试。例如,我们可能会每季度或定期通过众测等方式进行这些测试,少量的兼容性测试则直接在腾讯Wetest 平台上进行调试。
借助工具优化了流程、规范了过程、提升了效率和质量,也实现了基于数据的持续改进。结合架构优化、变更管控和运维保障手段,构建了可靠稳定的业务支撑基石。
四、收益与总结
经过内部的数字化转型和DevOps效能提升的实际应用,IT团队已经取得了符合预期的收益:
最后,我们也期待未来能够借助开发工具的AIGC能力进一步加持无限极的研发效能提升。