前言
Uber 开源了一款自动化工具 Piranha,该工具能够自动从应用程序代码库中删除过时的和未使用的代码。
![【开源资讯】Uber 开源 Piranha,可自动删除过时代码](http://p2.ttnews.xyz/loading.gif)
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,可自动删除过时代码](http://p2.ttnews.xyz/loading.gif)
上图展示了 Piranha 管道的架构图。Piranha 会先生成一个 diff,将其放入代码审查系统,该标识的原始作者为默认审查者。作者可以按原样接受 diff,根据需要对其进行修改,也可以拒绝并将其标记为 not being stale(未过时)。这个 管道还在任务管理系统中生成了一个清理任务,以跟踪每个 diff 的状态。另外, 由于开发人员并不总是能够及时地对它们采取行动,这里还引入了一个被称作 PiranhaTidy 的提醒机器人,以定期添加 Piranha 相关任务的提醒。
Piranha 管道采用启发式(heuristic)方法,将超过特定时间段未修改的标识视为过时,并为它们生成 diff。至于具体的时间段设置,可以自定义。根据 Uber 的说法,Piranha 能够处理数百万行代码,平均不到 3 分钟即可生成 diff。
接下来,Piranha 有可能会扩展至更多语言,Uber 号召更多开发人员来一起为它做出贡献。
源码地址:github.com/uber/piranha
閱讀更多 IT實戰聯盟 的文章
關鍵字: Objective-C Swift语言 技术