【开源资讯】Uber 开源 Piranha,可自动删除过时代码


前言

Uber 开源了一款自动化工具 Piranha,该工具能够自动从应用程序代码库中删除过时的和未使用的代码。

【开源资讯】Uber 开源 Piranha,可自动删除过时代码

Piranha 是一种自动重构过时标识相关代码的工具。在属性文件中指定与标识相关的 API 列表之后,该工具会输入标识名称和预期处理行为,并根据这些来自动重构代码。

特性标识(feature flags)通常用于启用逐步推出或尝试新功能。在某些情况下,即使在达到标识目的之后,与特性标识有关的代码也没有被删除,而这类标识就成为了过时标识,它存在以下缺点:

  • 不必要的代码混乱会增加维护的总体复杂性,从而降低开发人员的工作效率
  • 这些标识可能会干扰其他实验性标识
  • 源代码中还有未使用的代码以及二进制文件
  • 过时代码也会导致一些 bug

Piranha 可以通过扫描源代码来删除与过时的特性标识相关的代码,从而使代码库更清洁、更安全、性能更高,且更易于维护。

Piranha 包含三个独立的版本,分别支持三种不同的语言:Objective-C、Swift 和 Java。

原理

根据 Uber 官方博客的介绍,开发 Piranha 的初衷是消除过时代码带来的负面影响。当一项特性已 100% 推送给用户后,或某些实验性功能失败后,代码中的特性标识(feature flags)就已过时。而它可能导致技术债的产生,使应用程序变得更加臃肿,开发人员为此要执行更多不必要的操作,甚至可能影响到程序的整体性能。消除技术债不仅耗时,也会影响到新功能的开发。

为了使该过程自动化,Uber 开发了 Piranha,它可以通过扫描源代码,来删除与过时的特性标识相关的代码,从而使代码库更清洁、更安全、性能更高,且更易于维护。对于企业来说,Piranha 有助于加快开发周期、降低维护成本,并改善用户体验。

目前为止,Piranha 已经在 Uber 的 Android 和 iOS 代码库中运行了相当长一段时间,被用来删除了约两千个过时的特性标识及相关代码。开源后的 Piranha 包含三个独立的版本,分别支持三种不同的语言:Objective-C、Swift 和 Java。

Piranha 首先会输入标识的名称、预期的处理行为以及标识作者的名称,接着分析程序的抽象语法树(AST)以生成适当的重构,并将其打包到 diff 中,分配给对应的作者进一步检查,作者可以将更改提交到主代码库,或者在必要时执行其他重构。

Uber 表示,Piranha 作为独立工具可执行代码重构,也可作为工作流管道的一部分。该管道可定期自动生成 diff 和任务,以清除过时的特性标识。

【开源资讯】Uber 开源 Piranha,可自动删除过时代码

上图展示了 Piranha 管道的架构图。Piranha 会先生成一个 diff,将其放入代码审查系统,该标识的原始作者为默认审查者。作者可以按原样接受 diff,根据需要对其进行修改,也可以拒绝并将其标记为 not being stale(未过时)。这个 管道还在任务管理系统中生成了一个清理任务,以跟踪每个 diff 的状态。另外, 由于开发人员并不总是能够及时地对它们采取行动,这里还引入了一个被称作 PiranhaTidy 的提醒机器人,以定期添加 Piranha 相关任务的提醒。

Piranha 管道采用启发式(heuristic)方法,将超过特定时间段未修改的标识视为过时,并为它们生成 diff。至于具体的时间段设置,可以自定义。根据 Uber 的说法,Piranha 能够处理数百万行代码,平均不到 3 分钟即可生成 diff。

接下来,Piranha 有可能会扩展至更多语言,Uber 号召更多开发人员来一起为它做出贡献。

源码地址:github.com/uber/piranha


分享到:


相關文章: