行业: 交通

使用的 JetBrains 产品: Qodana, IntelliJ IDEA

组织规模: 200 多名员工

团队规模: 6 个团队,共 60 名开发者

技术栈: Java、Spring、Jenkins

实现可靠交通之路:Moovit 如何通过 Qodana 的代码分析预防生产事故

Moovit 是排名第一的通勤者应用的创造者。Moovit 的 iOS、Android 和 Web 应用为用户提供智能出行体验,让他们可以使用任何公共和共享交通方式轻松到达目的地。乘客可以使用移动票务服务来规划、支付和乘坐交通服务。Moovit 于 2012 年推出,目前已进入 112 个国家/地区的 3500 多个城市,提供 45 种语言版本,服务用户超过 15 亿。

面临的挑战:检测 null 指针和其他可能导致中断的缺陷

公共交通是通往工作、教育、医疗等场所的生命线,但使用起来却充满挑战和压力。Moovit 是排名第一的通勤者应用的创造者,这款应用提供 iOS、Android 和 Web 版本,可为用户提供智能出行体验,让他们可以使用公共和共享交通工具轻松规划和到达目的地。Moovit 已进入 112 个国家/地区的 3500 多个城市,服务用户超过 15 亿。


由于很多人都依赖于交通信息和引导(包括实时信息),系统的稳定性至关重要。Moovit 的基础架构团队负责维护面向 B2C 和 B2B 项目的 Moovit 整套系统的稳定性。该团队面临的一项重大挑战是如何识别在生产中出现并且会干扰公司服务的问题。他们重点关注的问题之一是检测 NullPointerExceptions,这是造成中断的常见原因,大家认为它是导致 CrowdStrike 事故的原因之一。


为了降低服务操作的风险并保持较高的代码质量,Moovit 开始寻找一种符合以下标准的静态代码分析工具:

  • 通过快速扫描提早检测问题。团队需要一款能在开发周期早期发现问题并能与 Jenkins 质量门和 IntelliJ IDEA 集成的工具。
  • 能够创建自定义规则和配置。团队需要能够定义自定义规则,并实施其公司特有的编码约定。
  • 可扩缩性和性价比。解决方案需要处理 Moovit 的大型代码库,但不能有过大的性能开销或高昂的成本。

结果:生产问题减少,开发者信任度提高

目前,Moovit 的六个团队共 60 名开发者在使用 Qodana。由于 Qodana 基于与 IntelliJ IDEA 相同的分析引擎,Moovit 开发者在 IntelliJ IDEA 与 Qodana 之间同步了其检查配置文件。


最终流程涉及以下步骤:

  1. 开发者先在 IntelliJ IDEA 中运行预提交 Qodana 检查并修正任何问题。
  2. 他们随后会将合并请求 (MR) 推送到 Bitbucket 仓库。构建作业在 Jenkins 中开始,如果作业中的问题数超过某个数量或包含高严重性问题,则附加的 Qodana 质量门会阻止代码执行。
  3. 如果合并被 Qodana 质量门禁止,开发者会收到一条 Slack 消息,其中包含 Qodana Cloud 中报告的链接。接下来,他们会先使用 Open in IDE(在 IDE 中打开)功能在 IntelliJ IDEA 中应用建议的修正,然后再次提交代码。

“主要的优势是我们不需要预定义检查列表,因为 Qodana 会监视各种高严重性问题。我们只需检查其默认的严重问题列表并仅移除与需求不相关的问题。”

— Amit Weinblum,Moovit 基础架构团队负责人

减少了生产事故数量

基础架构团队报告的生产问题有所减少,特别是那些本可以在开发过程中发现的问题,这要归功于提早在流程中主动检测并解决问题。

“我们也是刚开始使用 Qodana,但已经出现的两个重大案例让我觉得‘Qodana 拯救了我的团队,让他们不必承受熬夜之苦’。它对我的工作产生了正面影响,因为我现在更加确信我们会在出现重要问题时收到警告。”

— Dor Rud,Moovit 后端团队负责人

更轻松地实施重要代码规则

Moovit 重视的功能包括可以创建自己的自定义规则(不同于标准 Qodana 检查)、自定义问题严重性、在其配置文件中轻松添加或移除检查,借助这些功能,Moovit 可以监控对他们真正重要的代码更改。

提高了开发者的工作效率以及对代码质量最佳做法的接受度

开发者对分析的准确性以及与 IntelliJ IDEA 的集成表示赞赏,这使他们能够更快地解决问题,并且对他们工作流的干扰也减少。

选择 Qodana 的另一个重要因素是 JetBrains 的品牌效应可以帮助说服开发者采用 Qodana 作为额外的代码分析步骤。他们已经是 IntelliJ IDEA 和其他 JetBrains 产品的忠实用户,因此会相信 Qodana 的结果。最后一个因素是 Qodana 的速度和可靠性提高了组织内对静态分析的认可度。

“坦白来讲,引入 Qodana 时,我们担心需要应对一些反对意见。让开发者执行某些公司政策的难度通常非常大。多亏了 JetBrains 积累的良好声誉以及 Qodana 能够报告真正关键的问题,开发者才没有忽视 Qodana 或寻找变通办法,而是解决问题。”

— Dor Rud,Moovit 后端团队负责人

“与任何代码分析工具一样,Qodana 增加了额外的管道步骤并减慢了开发速度,但这只是短期的不便。长远看来,这些举措可以确保生产系统稳定运行,并让开发者能够及时修正管道中的问题。我们看到了模式的转变,在 Qodana 的帮助下,开发团队遵循政策,并且不必承受数日的熬夜之苦。”

— Amit Weinblum,Moovit 基础架构团队负责人