Uber 开源 Piranha,可自动删除过时代码
点击上方蓝色“程序猿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,可自动删除过时代码相关推荐
- elasticsearch 过期数据自动删除Java代码
es中的索引名为index-yyy-MM-dd 的形式的时候,可以根据直接日期判断来直接删除过期的整个索引 请尊重知识产权,博客原文地址http://blog.csdn.net/qq103235509 ...
- html段落自动删除,利用JS代码自动删除稿件的普通弹幕功能
事情的起因是在b站投稿了一个高级弹幕测试的视频(av9940487),但是由于b站的弹幕池机制是新的弹幕顶掉旧的弹幕,所以导致一些人发的高级弹幕很快就被顶掉了. 所以就想着写个脚本来自动删除属性为普通 ...
- Python 8行代码模拟鼠标自动删除微信收藏
上回我们提到了用 pyuserinput 进行模拟键盘鼠标操作,结果发现很多同学都回复无法安装成功,即便安装成功了还是存在很多问题.确实,pyuserinput存在不少问题,包括其安装的pymouse ...
- Excel文档VBA代码自动删除
有时候,不想让自己编写的代码让别人长期使用或换地方使用,又不想让文档自杀,就可以设计限期清除代码,或其他限制条件下清除.具体限制条件可参考作者<Excel文档自杀程序设计>Workbook ...
- Qt安装后要做的第一件事------Qt自动补全代码快捷键和输入法切换快捷键 的冲突解决 (附:fedora下查询 删除软件命令)...
遥想当年初接触qt,只要能要就心满意足了.随着不断学习,发现了越来越多的问题.在linux环境下,qt自动补全代码的快捷键是ctrl+space,而输入法的切换启动快捷键也是如此,这就冲突了!导致qt ...
- eslint 保存自动格式化_代码规范之理解ESLint、Prettier、EditorConfig
授权转载自:nowThen https://juejin.cn/post/6895889063111294990 前言 团队多人协同开发项目中困恼团队管理一个很大的问题是:无可避免地会出现每个开发者编 ...
- 一文告诉你如何用好uber开源的zap日志库
1. 引子 日志在后端系统中有着重要的地位,通过日志不仅可以直观看到程序的当前运行状态,更重要的是日志可以在程序发生问题时为开发人员提供线索. 在Go生态中,logrus[2]可能是使用最多的Go日志 ...
- 网页文件管理php源码,KODExplorer 开源的Web在线文件管理、代码编辑器 v4.40
KODExplorer是款开源的Web在线文件管理.代码编辑器.它提供了类windows经典用户界面,一整套在线文件管理.文件预览.编辑.上传下载.在线解压缩.音乐播放功能.让你直接在浏览器端实现we ...
- php上传文件后定时删除,PHP根据条件定时删除文件代码
这是一个根据文件的创建时间进行判断删除文件的,一般用于文件上传后定时删除文件. 是个很实用的东西(至少对于我来说是这样). 下面开始代码: /* 本文件用法:放到目录,在程序头部添加 include( ...
最新文章
- 我的总结SVN的使用
- wxWidgets:wxCheckListBox类用法
- tankwar的java坦克子弹撞墙_tankwar
- Android中文API(122) —— AudioRecord
- 计算器计算经纬距离_造价人如何熟练运用计算器来做题?
- php管理系统模板,自定义模块后台模板
- 天空机器人 联动存档_Wood R4 V1.38内核下载,自选存档大小,修正天空机器人美版等反烧录...
- 用虚拟化平台建NAS服务器,虚拟化之NAS存储
- 年末了,是该总结一波了,冲鸭2021
- 孩子不上学在家玩游戏打骂父母
- 物联网IoT应用技术有哪些?
- pycharm报错warning: iCCP: known incorrect sRGB profile
- Linux学习(课堂笔记 -可能不全)
- PHP 运行方式详解
- SparkStreaming之Offset管理、胖包和瘦包提交
- 免费使用识别身份证信息、银行卡、驾驶证、行驶证、车牌、营业执照、网络图片文字等
- 音频转文字软件有哪些?推荐几个录音转文字工具
- 中了敲诈者病毒,文件恢复有可能吗?你长着一张被勒索木马敲诈的脸?
- 【ZOJ】3822 Domination_天涯浪子_新浪博客
- 出版社给了些当当网计算机图书特优惠码
热门文章
- golang map 删除 清空
- java maven -DskipTests 和 -Dmaven.test.skip=true 区别
- linux gcc 宏定义 __GNUC__ __GNUC_MINOR__ 版本区分
- openssl 编译参数选项
- __cpuidex读取CPU序列号
- C++程序安装卸载WDM驱动
- windbg调试命令
- VMWare不能安装64位操作系统原因探析
- Linux2.6--虚拟文件系统
- Linux的mount命令简介