点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

作者 | xplanet

来源 | https://www.oschina.net/news/114195/uber-opensources-piranha

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

▲Piranha,意为“食人鱼”

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

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

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

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

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

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

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

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

有关 Piranha 的更多信息可查看 Uber 博客原文: https://eng.uber.com/piranha/

往期推荐

大厂的 404 页面都长啥样?最后一个绝了...

如何快速让你的站点进入灰白哀悼模式?

盘点:35 个 Java 代码优化魔鬼细节

这四个问题场景你会排查原因吗?

Code Review 是一场苦涩但有意思的修行

扫一扫,关注我

一起学习,一起进步

Uber 开源 Piranha,可自动删除过时代码相关推荐

  1. elasticsearch 过期数据自动删除Java代码

    es中的索引名为index-yyy-MM-dd 的形式的时候,可以根据直接日期判断来直接删除过期的整个索引 请尊重知识产权,博客原文地址http://blog.csdn.net/qq103235509 ...

  2. html段落自动删除,利用JS代码自动删除稿件的普通弹幕功能

    事情的起因是在b站投稿了一个高级弹幕测试的视频(av9940487),但是由于b站的弹幕池机制是新的弹幕顶掉旧的弹幕,所以导致一些人发的高级弹幕很快就被顶掉了. 所以就想着写个脚本来自动删除属性为普通 ...

  3. Python 8行代码模拟鼠标自动删除微信收藏

    上回我们提到了用 pyuserinput 进行模拟键盘鼠标操作,结果发现很多同学都回复无法安装成功,即便安装成功了还是存在很多问题.确实,pyuserinput存在不少问题,包括其安装的pymouse ...

  4. Excel文档VBA代码自动删除

    有时候,不想让自己编写的代码让别人长期使用或换地方使用,又不想让文档自杀,就可以设计限期清除代码,或其他限制条件下清除.具体限制条件可参考作者<Excel文档自杀程序设计>Workbook ...

  5. Qt安装后要做的第一件事------Qt自动补全代码快捷键和输入法切换快捷键 的冲突解决 (附:fedora下查询 删除软件命令)...

    遥想当年初接触qt,只要能要就心满意足了.随着不断学习,发现了越来越多的问题.在linux环境下,qt自动补全代码的快捷键是ctrl+space,而输入法的切换启动快捷键也是如此,这就冲突了!导致qt ...

  6. eslint 保存自动格式化_代码规范之理解ESLint、Prettier、EditorConfig

    授权转载自:nowThen https://juejin.cn/post/6895889063111294990 前言 团队多人协同开发项目中困恼团队管理一个很大的问题是:无可避免地会出现每个开发者编 ...

  7. 一文告诉你如何用好uber开源的zap日志库

    1. 引子 日志在后端系统中有着重要的地位,通过日志不仅可以直观看到程序的当前运行状态,更重要的是日志可以在程序发生问题时为开发人员提供线索. 在Go生态中,logrus[2]可能是使用最多的Go日志 ...

  8. 网页文件管理php源码,KODExplorer 开源的Web在线文件管理、代码编辑器 v4.40

    KODExplorer是款开源的Web在线文件管理.代码编辑器.它提供了类windows经典用户界面,一整套在线文件管理.文件预览.编辑.上传下载.在线解压缩.音乐播放功能.让你直接在浏览器端实现we ...

  9. php上传文件后定时删除,PHP根据条件定时删除文件代码

    这是一个根据文件的创建时间进行判断删除文件的,一般用于文件上传后定时删除文件. 是个很实用的东西(至少对于我来说是这样). 下面开始代码: /* 本文件用法:放到目录,在程序头部添加 include( ...

最新文章

  1. 我的总结SVN的使用
  2. wxWidgets:wxCheckListBox类用法
  3. tankwar的java坦克子弹撞墙_tankwar
  4. Android中文API(122) —— AudioRecord
  5. 计算器计算经纬距离_造价人如何熟练运用计算器来做题?
  6. php管理系统模板,自定义模块后台模板
  7. 天空机器人 联动存档_Wood R4 V1.38内核下载,自选存档大小,修正天空机器人美版等反烧录...
  8. 用虚拟化平台建NAS服务器,虚拟化之NAS存储
  9. 年末了,是该总结一波了,冲鸭2021
  10. 孩子不上学在家玩游戏打骂父母
  11. 物联网IoT应用技术有哪些?
  12. pycharm报错warning: iCCP: known incorrect sRGB profile
  13. Linux学习(课堂笔记 -可能不全)
  14. PHP 运行方式详解
  15. SparkStreaming之Offset管理、胖包和瘦包提交
  16. 免费使用识别身份证信息、银行卡、驾驶证、行驶证、车牌、营业执照、网络图片文字等
  17. 音频转文字软件有哪些?推荐几个录音转文字工具
  18. 中了敲诈者病毒,文件恢复有可能吗?你长着一张被勒索木马敲诈的脸?
  19. 【ZOJ】3822 Domination_天涯浪子_新浪博客
  20. 出版社给了些当当网计算机图书特优惠码

热门文章

  1. golang map 删除 清空
  2. java maven -DskipTests 和 -Dmaven.test.skip=true 区别
  3. linux gcc 宏定义 __GNUC__ __GNUC_MINOR__ 版本区分
  4. openssl 编译参数选项
  5. __cpuidex读取CPU序列号
  6. C++程序安装卸载WDM驱动
  7. windbg调试命令
  8. VMWare不能安装64位操作系统原因探析
  9. Linux2.6--虚拟文件系统
  10. Linux的mount命令简介