优步拥有开源的Piranha,这是他们的工具,用于自动清理由不再需要的功能标志导致的陈旧代码。食人鱼可以在流水线内运行,以持续查找要删除的陈旧代码。目前,Piranha支持Java、SWIFT和Objective-C。
使用静态分析,Piranha执行三个关键任务:删除紧挨着特性标志API的代码,删除由于上一步而变得不可访问的代码,最后删除与该标志相关的所有测试。要执行食人鱼,需要三个输入:正在考虑的标志、治疗行为和标志的所有者。
公共类MyClass{私有XPTest表达式;.public void foo(){if(expt.flagEnabled(TestExperimentName.SAMPLE_STALE_FLAG)){System.out.println(";Hello World";);}}public void bar(){if(expt.flagDisabled(TestExperimentName.SAMPLE_STALE_FLAG)){System.out.println(";Hi World";);}}。
使用以下参数调用Piranha将导致其离开治疗条件(在功能启用的情况下),并移除控制条件(在功能未启用的情况下):
公共类MyClass{私有XPTest表达式;.public void foo(){System.out.println(";Hello World";);}public void bar(){}}。
在创建此工具时,Uber工程师观察到三种类型的标志API:布尔API、更新API和参数API。布尔API是返回布尔值的API,如上例所示。更新接口更新正在运行的系统中的功能标志值。最后,参数API返回一个非布尔原始值,以对应于从后端控制的实验值。食人鱼只处理前两种类型";,因为解决它们所需的工程工作量要大得多,而且它们在代码库中出现的频率也要低得多。
依赖团队主动运行Piranha可能仍然会导致不定期清理陈旧的代码。该团队创建了一条工作流管道,以规则的节奏运行食人鱼。在优步的例子中,食人鱼每周都在他们的代码库上运行。该管道还会在优步的任务管理系统中自动生成任务,用于跟踪创建的拉式请求。
自动生成陈旧标志列表以供审查的食人鱼工作流程(来源:Uber)食人鱼管道向其标志管理系统查询陈旧标志列表。每个团队都有能力为陈旧的含义设定自己的时间框架。一旦触发,食人鱼将生成一个拉取请求,并将其分配给旗帜的原始作者。为了确保这项工作得到处理,该团队还创建了一个提醒机器人PiranhaTidy,定期通知用户与打开的食人鱼相关的任务。
食人鱼在Apache2.0许可下是开源的。它目前支持Java、SWIFT和Objective-C。要添加对其他语言(如科特林、.NET和JavaScript)的支持还存在一些悬而未决的问题。该团队将在即将到来的第42届国际软件工程会议上发表一篇关于食人鱼的研究论文。
InfoQ上上周内容的综述每周二都会发布。加入一个超过25万名高级开发人员的社区。查看示例。
选择您的国家/地区我同意InfoQ.com按照本隐私声明中的说明处理我的数据。