中国科技产业网
楚留香
您当前的位置:中国科技产业网 > 资讯

主动删去旧代码Uber开源利器食人鱼

放大字体  缩小字体 2020-03-20 14:21:46  阅读:1439 作者:责任编辑NO。邓安翔0215

编者按:本文来自微信大众号“HyperAI超神经”(ID:HyperAI),作者:神经小刀,36氪经授权发布。

场景描绘:开发人员必需求面临的一个问题,便是要处理在不断完善中堆集的过期代码,近来 Uber 开源了一个主动删去旧代码的东西,它能够寻觅代码库中抛弃的功用标志模块,在合作开发者的情况下,进行代码删去或许重构操作。

要害词:Uber代码收拾开源东西

收拾代码是一件艺术,关于一些过期的陈腐代码,怎么高雅又快速地删去,是一件让无数人伤神的作业,但在最近, Uber 给出了一种处理的方案。

近来,Uber 推出了一款能够扫描源代码并删去过期代码的东西,形象地命名为 了 Piranha(食人鱼)。

Uber 官方推文介绍Piranha

Piranha 能够在 Uber 的 Android 和 iOS 代码库中运转,现在支撑 Objective-C、Swift 和 Java 三种编程言语。

项目地址:

https://github.com/uber/piranha

功用标志引发的陈腐代码之痛

Piranha删去过期代码,究竟是怎么完成的呢?这还要从 Uber 代码的一个规范说起。

为了便利体系的更新的开发,Uber 选用了功用标志(Feature Flag),也称为功用切换,这是一种答应操控线上功用敞开或封闭的办法,在互联网大厂中被广泛选用。

功用标志的长处举例

运用这个办法具有许多长处,它能够将新功用测验完善之后,再将其发布为全面可用,还能够针对不同用户定制差异化服务(A/B 测验),当呈现 Bug 时支撑回滚,工程师还能够长途禁用运用程序的毛病部分。

据介绍,在 Uber 一切的程序代码库中,就有超越 6000 个功用标志。

但功用标志的增多,也会导致代码库的复杂性增加,一旦该标志过期,则需求将其删去,否则会带来技能层面的担负。

过期的标志会形成编程担负

但这个看似简略的整理进程,往往会被许多开发者疏忽,进而在代码容量、测验周期等多个维度上影响软件的开发。

为了处理这样的一个问题,Uber 规划并推出了代码优化东西 Piranha。它能够剖析并找出过期的代码标志,将可删去的部分反馈给原作者,合作其他的东西做处理或删去。

用Piranha主动检测并删去

详细来说,Piranha需求主动检测出过期标志,并删去其相关代码,这样的一个进程的难点在于,要确认标志是否被人运用,以及该标志的一切者,而且要了解代码的详细细节。

考虑到 Piranha 的运用布景,Uber 选用了运用静态剖析,即经过代码检查,来查找因过期标志遗留下来的废旧代码。

运用 Piranha 能够删去或重构代码

其间可整理的三个要害维度分别是:

  • 删去紧邻功用标志 API 的代码。

  • 删去因为履行上一步而无法访问的代码,称为深度清洁。

  • 删去与功用标志有关的测验代码。

其间的要害在于,依据在代码库中调查到的编码形式,挑选了迭代规划技能的有用办法,以调查和确认三种标志 API:

  • 回来布尔值的布尔型 API ,用于确认履行所选用的操控途径。

  • 更新 API ,用于更新正在运转的体系中的功用标志值。

  • 回来非布尔值原始值(整数、双精度等)的参数 API 。

经过重构技能解析输入源代码的 AST(笼统语法树),以检测运用功用标志 API 的存在。

假如符号注释与输入处理行为匹配,只需删去测验的注释,假如不匹配,则要丢掉整个测验以处理符号注释测验。

运用 Piranha精简代码示例

经过这套方案的施行,能够从代码中找出过期的功用标志,并进行删去或许重构。

已删去2000 多过期的标志

这个办法在 Uber 的代码库中被证明是广泛有用的,现已用来删去了 2000 多个功用标志及相关的代码。

Piranha 现已在 Objective-C、Swift 和 Java 程序中运转杰出,但为了让其作业更高效,以完成 Piranha 主动进行标志铲除,还需求建立一个更完善的体系。

所以 Uber 建立了作业流 pipeline,该 pipeline 可定时生成差异和使命,以铲除陈腐的功用标志。

Pipeline 的结构示意图

Piranha pipeline 在标志办理体系中,主动查询陈腐标志列表,并对每个标志,经过输入陈腐标志的称号、其一切人以及预期的输出行为(处理或操控),以发动Piranha。

经过算法剖析和处理之后,Piranha 生成一个 diff (即拉取恳求),并将其放入代码审理体系中,该标志的原始作者为默许审理者。

作者能够承受 diff ,或许依据需求对其进行修正,也能够回绝修正并将该标志符号为未过期。pipeline 还在使命办理体系中生成了一个整理使命,以盯梢每个生成 diff 的状况。

此外,体系该装备了提示机器人PiranhaTidy,可定时增加翻开 Piranha 相关使命的提示。现在运用 Piranha 主动生成 diff 的时刻不超越 3 分钟。

经过这一系列的操作,即可轻松完成对代码的审理和处理,将过期的代码一扫而光。

Piranha 的特性和长处总结

删去旧代码,就用食人鱼吧

当然,在上述的介绍中可知,要运用 Piranha,代码需满意以下条件:

  • 广泛运用功用标志;

  • 具有特定的 API 以操控功用标志的行为;

  • 代码用 Java、Swift 或 Objective-C 完成;

此外,Piranha 还有一些方案正在进行中,比方改善 Piranha 发生的重构代码,扩大 Piranha 以援助 Kotlin 和 Go 等其他言语。

现在项目现已开源,可在以下地址获取,你想要试试吗?

https://github.com/uber/piranha

“如果发现本网站发布的资讯影响到您的版权,可以联系本站!同时欢迎来本站投稿!