导读
在当今快速发展的科技环境中,工程代码质量与迭代效率的提升已成为企业保持竞争力的关键因素。随着快手业务快速发展、代码量的迅猛增长,内部代码准入流水线检查质效已长期面临较大压力和挑战。过去两年时间里,为了提升准入流水线检查质量、合码效率,快手基础架构团队推出「Mulan 通用代码分析服务」,针对检查质效长期面临的痛点问题一一突破。本文将从快手流水线检查曾经面临的问题、Mulan 定位及演进思路、Mulan 流水线质效提升实践、总结及展望等几个方面,讲述 Mulan 在快手准入流水线检查质效提升上的实践思路。
1.1 流水线检查质效提升的意义
1.2 流水线检查质效面临的问题
快手业务复杂,客户端双端并行开发人员众多,尤其封版当天各端 MR 合入数量占比高达 40% ~ 50%,机器算力不足导致任务排队,造成封版前代码准入流水线压力剧增。NPS 反馈中,研发对于流水线执行效率有较大意见,认为耗时过长、节点多且乱、流程繁琐,整体体感不佳。
静态检查阶段为双端流水线主要的耗时阶段,此前双端平均耗时均在 30 分钟左右,这意味着开发合入代码前需要至少预留出半小时以上时间!
不同技术栈、不同使用场景、不同检查阶段都有各自的一套静态检查基建,框架多但并没有形成合力,各自为战,导致业务新增、维护检查规则的成本非常高。当涉及到多端规则开发时,需要去熟悉不同框架不同语言、来回切换多个工程,规则也无法复用。
以上这些成本问题导致规则开发需要大量人日,而在实际业务发展中我们发现非常多代码稳定性、安全性、规范性问题都需要依靠检查规则来保障,规则开发受限导致规则需求堆积严重,无法快速支撑业务发展过程中提出的检查需求,尤其是稳定性相关规则,这也间接给工程质量造成了一定的隐患。此前快手客户端规则加起来仅有 100+ 条,相较业界其他公司存在一定差距,规则开发成本过高,增长趋势较为缓慢。
快手核心工程代码准入虽然都开启了静态检查,但基建混乱不成体系,对于检查规则的执行耗时、稳定性、误报率、修复率等均没有数据统计,也没有监控体系,整个代码检查完全是个黑盒。规则质量无法保证,服务质量更没有保障,没有全盘衡量静态检查质量、代码质量的能力。
从下图可以看到,以前的检查服务出问题,基本要靠开发反馈,效率低且用户体验不好:
基于以上3个突出问题,我们在不断思考,是否能提供一种通用代码分析服务?能够统一掉各技术栈、各应用场景、各检查阶段的代码检查基建,将规则统一管理起来,提供高效简洁的开发模式,并在框架内部集中实施优化策略去提升检查效率?于是,Mulan 应运而生。
3.1 检查效率提升
3.2 规则开发成本优化
一般来说,开发一个检查规则有以下4个阶段:
输入分析:包括 MR 分析、工程分析、目标文件分析、配置解析等内容。
代码扫描:根据规则需求,以文件、文本、Git Diff、AST 语法树等不同维度扫描代码,获取想要的代码信息。
规则检查:根据上述输入信息,选择合适维度扫描代码,编写规则,识别代码问题。
问题上报:将问题统一组织成不同形式上报,例如上报至流水线、生成 Json 格式报告等。
原来的规则开发,基本需要自行实现上述整个流程,包括代码扫描等复杂阶段,十分耗时。Mulan 设计之初,便将这些阶段清晰划分,每个阶段都支持自定义扩展,并支持灵活组合,以满足不同的需求场景。有了通用稳定的输入分析服务、各类不同场景的代码扫描器和问题上报器,规则开发者只需要选择合适的扩展进行组合,核心关注规则检查逻辑的开发即可,最大限度做到阶段复用,大大节省开发成本。
3.3 检查度量与监控体系
- END -