Piranha是Uber开发的一种新的开源工具,可用于删除用Java、Object-C或Swift编写的Android和iOS移动应用程序中的陈旧代码。 Uber说,这一工具的诞生是为了偿还实施过程中产生的技术债务,并最终移除功能标志。
特征标志是实验新特征的一种很好的方法。 例如,使用功能标志,您可以以受控的方式推出新功能,或者可以向不同的用户组推出新功能的不同变体,以更好地评估他们的体验。 此外,功能标志使您能够快速回滚一个新的功能,该功能被证明是错误的,或者没有被您的用户群很好地接受。
Uber工程师Murali Krishna Ramanat han解释说,特征标志的一个重要方面是技术债务,当特征标志被广泛使用时,技术债务可能会变得相当大。 技术债务问题出现在功能标志结束时,例如,因为一个功能的逐步推出已经完成,或者因为一个功能最终被取消。 当一个特征标志变得陈旧时,所有实现它的代码,以及所有由于该标志移除而变得无法访问的代码都应该清理:
令人惊讶的是,重构代码和消除因陈旧标志而产生的技术债务可能是一项非平凡的任务。 我们的经验表明,这是由于各种问题交织在一起:
Ramanat han补充说,Uber的工程师已经管理了超过6000个应用程序的标志,清理与过时标志相关的代码所花费的时间可能会阻碍开发人员开发新的标志。
Piranha工作在抽象语法树(AST)级别,以检测一些通常与特征标志相关联的模式。 piranha是基于使用特定的注释来识别代码中的特征标志和标志管理系统来完全自动化陈旧代码清理过程。 为了简化工程师的流程,伊朗哈定期查询国旗管理系统,以了解哪些国旗已经过时,然后生成一个差异,发送给国旗所有者进行审查。
优步发现,超过75%的差异产生的皮兰哈有效地处理工程师。 奇怪的是,几乎95%的Objective-Cdiffs和75%的SWI FTdiffs被处理,而只有55%的Javadiffs是圆形的。 这可以解释为JavadiffsPiranha生成的需要比SWI FT或Objective-Cdiffs更多的人工努力。 此外,应用程序商店对空中更新施加的更严格的应用程序大小要求增加了iOS工程师减少应用程序二进制大小的动机。 同样,Piranha生成的diffs通过连续集成测试,其结果取决于语言,Objective-Cdiffs几乎总是(99.41%)正确,Java差异最小(71.46%)。
Piranha并不是一个解决陈旧旗问题的完美方案,根据其创建者的说法,它有一些改进的地方,但它在Uber的工程师中被证明是有效的,可以自动化支付技术性旗债的过程。