火狐浏览器开发代码质量管理实践

Firefox火狐浏览器是世界上最大的浏览器之一 , 很多人对这样的大型软件项目开发和管理充满了好奇 。 近日火狐工程团队开发者 , 发布了其内部代码质量管理的一些实践 , 请跟着虫虫一起来学习学习 。
火狐浏览器开发代码质量管理实践
文章图片
概述
多年前Mozilla的工程团队就引入了用于代码质量的工具链 。 工具链中的各个工具分别适用于Firefix开发生命周期的各个阶段 , 这些工具主要包括静态分析、代码校验、编码风格和代码覆盖率等几类 。
通常构建一个小的开发项目 , 简单的CI(持续集成)作业相对更容易设置和配置 , 他们使用的目标语言有限 。 开发人员可以根据需要任意选择配置和CI工具 。 但是火狐浏览器项目是一个庞大的开源软件项目 , 其来源于20多年前的Netscape浏览器 , 项目历史久 , 代码积累丰富 , 据统计目前计共2100万行代码 , 使用多种语言 , 包括C++ , Rust , JavaScript , Python等 , 每天更新的代码达数百项、几千M 。
火狐浏览器开发代码质量管理实践
文章图片
Firefox开发人员网站的有详细火狐工程管对使用质量工具 , 本文中主要立足工具选择 , 如何使用这些工具解决痛点的 。
火狐浏览器开发代码质量管理实践
文章图片
主要挑战
不同类型的故障
当测试质量时 , 会出现不同类型的故障 。 这是第一个挑战:
有些问题总是会破坏CI , 而不会产生误报 , 这些问题包括生成错误 , 某些强制格式设置规则未得到遵守等 。 比如代码库的自定义C++检查器 , 会导致产品出现问题 。
潜在的错误:根据通常的看法C/C++要么太复杂 , 要么就是有问题的语言 。 因此 , 已经开发了一些工具(静态分析仪)来防止出现问题 。 但是 , 这些检查器很多也有误报:
火狐浏览器开发代码质量管理实践
文章图片
完善的工具:可以在代码库中带来更多一致性的检查器 。 这些使代码更具可读性 , 并减轻了技术负担 。
代码仓库的规模
另一个主要的挑战是要处理2100万行代码 。 在启用新检查程序之前 , 无法解决所有数百个现有问题 , 并且无法强迫开发人员解决所有由于其提议的更改而未存在的现有问题 。 因此 , 对这种规模进行操作 , 不得不提出不同的解决方案 。
为了解决这个问题 , 工程质量团队确定并部署了两个解决方案 。 当问题很容易解决(例如eslint , flake8等)时 , 创建并维护了可以在其中运行的目录/文件的列表 , 并逐步修复了越来越多的目录中的问题 。
对于C++静态分析器等更复杂的检查器 , 开发了一些启发式方法来确定问题是否是新问题 。 做法是先创建一个先前允许的使用情况列表(例如 , 不赞成使用的线程使用情况) , 或者如果缺陷是新的或已经存在 , 将通过启发式方法进行评估 。
架构
当前基础架构的最大优势是 , 使用了Mozilla优秀的工程团队构建的现有工具 。 使用Taskcluster , 这一个内部的CI系统 , 用于对Firefox进行大量测试和构建 。 此外 , 还依赖于自建的的Phabricator实例在每个Firefox补丁发布之前对其进行检查 。
火狐浏览器开发代码质量管理实践
文章图片
工作流程
每个补丁程序遵循相同的工作流程:
1.Phabricator通知Web服务新补丁需要分析 。
2.Web服务使用工作池将修补程序及其依赖应用到预先克隆的存储库中 。
3.应用后 , 该补丁将推送到Try服务器上 。 Try服务器是Mozilla开发人员用于触发CI构建(尝试构建)的Mercurial服务器 。
4.Try服务器在Taskcluster上创建一组代码分析任务:这些任务及触发规则由开发人员自己在源代码中定义 。
5.每个代码分析任务都会生成一个JSON有效载荷 , 其中会列出了堆栈中发现的所有潜在缺陷 。
6.最后 , 发布任务将分析、汇总和过滤所有问题 。 然后 , 它将相关文章发布到Phabricator和Web服务中 。 这样 , 开发人员可以随时查看它们 , 并在出现问题时得到通知 。
对于大多数补丁程序 , 通常会在12至15分钟内执行此工作流程 。 一些修改了许多文件的补丁程序可能会触发更多的分析器 , 因此处理速度较慢 。
优点
这种方法的主要优点:能够使用许多现有的工具 , 这些工具也可供开发人员在自己的电脑用 。
另一个优势是 , 无需维护自己的分析器 , 也不需要维护它们的依赖项 。 根据Firefox代码库中的定义 , 分析器可以与最新版本连续运行 , 并供世界各地的开发人们协同进行维护 。 目前支持特定的分析器包括:clang-tidy , clang-format , rustfmt , mozlint等 , 这样任何Firefox开发人员都可以轻松扩展系统的功能 。
系统流程
以下是有关Phabricator问题的一些屏幕截图 。 这些是Mozilla的大多数Firefox开发人员可能看到的工作流视图 。
在修订中发现的所有问题:
火狐浏览器开发代码质量管理实践
文章图片
代码审查commit总结:
火狐浏览器开发代码质量管理实践
文章图片
修补程序本身报告的问题:
火狐浏览器开发代码质量管理实践
文章图片
未来展望
Firefox代码质量工作流项目是由相对较小的团队在过去几年中构建的 , 在去年达到了出色的稳定性 。 现在 , Firefox开发人员的每个补丁包在15分钟内处理完成 。
【火狐浏览器开发代码质量管理实践】该平台支持其他几个Mozilla项目:NSS(Firefox中的主要加密库) , 一些CI内部项目 , 并且预计在将来会有新的项目 。


    推荐阅读