【開源資訊】Uber 開源 Piranha,可自動刪除過時代碼


前言

Uber 開源了一款自動化工具 Piranha,該工具能夠自動從應用程序代碼庫中刪除過時的和未使用的代碼。

【開源資訊】Uber 開源 Piranha,可自動刪除過時代碼

Piranha 是一種自動重構過時標識相關代碼的工具。在屬性文件中指定與標識相關的 API 列表之後,該工具會輸入標識名稱和預期處理行為,並根據這些來自動重構代碼。

特性標識(feature flags)通常用於啟用逐步推出或嘗試新功能。在某些情況下,即使在達到標識目的之後,與特性標識有關的代碼也沒有被刪除,而這類標識就成為了過時標識,它存在以下缺點:

  • 不必要的代碼混亂會增加維護的總體複雜性,從而降低開發人員的工作效率
  • 這些標識可能會干擾其他實驗性標識
  • 源代碼中還有未使用的代碼以及二進制文件
  • 過時代碼也會導致一些 bug

Piranha 可以通過掃描源代碼來刪除與過時的特性標識相關的代碼,從而使代碼庫更清潔、更安全、性能更高,且更易於維護。

Piranha 包含三個獨立的版本,分別支持三種不同的語言:Objective-C、Swift 和 Java。

原理

根據 Uber 官方博客的介紹,開發 Piranha 的初衷是消除過時代碼帶來的負面影響。當一項特性已 100% 推送給用戶後,或某些實驗性功能失敗後,代碼中的特性標識(feature flags)就已過時。而它可能導致技術債的產生,使應用程序變得更加臃腫,開發人員為此要執行更多不必要的操作,甚至可能影響到程序的整體性能。消除技術債不僅耗時,也會影響到新功能的開發。

為了使該過程自動化,Uber 開發了 Piranha,它可以通過掃描源代碼,來刪除與過時的特性標識相關的代碼,從而使代碼庫更清潔、更安全、性能更高,且更易於維護。對於企業來說,Piranha 有助於加快開發週期、降低維護成本,並改善用戶體驗。

目前為止,Piranha 已經在 Uber 的 Android 和 iOS 代碼庫中運行了相當長一段時間,被用來刪除了約兩千個過時的特性標識及相關代碼。開源後的 Piranha 包含三個獨立的版本,分別支持三種不同的語言:Objective-C、Swift 和 Java。

Piranha 首先會輸入標識的名稱、預期的處理行為以及標識作者的名稱,接著分析程序的抽象語法樹(AST)以生成適當的重構,並將其打包到 diff 中,分配給對應的作者進一步檢查,作者可以將更改提交到主代碼庫,或者在必要時執行其他重構。

Uber 表示,Piranha 作為獨立工具可執行代碼重構,也可作為工作流管道的一部分。該管道可定期自動生成 diff 和任務,以清除過時的特性標識。

【開源資訊】Uber 開源 Piranha,可自動刪除過時代碼

上圖展示了 Piranha 管道的架構圖。Piranha 會先生成一個 diff,將其放入代碼審查系統,該標識的原始作者為默認審查者。作者可以按原樣接受 diff,根據需要對其進行修改,也可以拒絕並將其標記為 not being stale(未過時)。這個 管道還在任務管理系統中生成了一個清理任務,以跟蹤每個 diff 的狀態。另外, 由於開發人員並不總是能夠及時地對它們採取行動,這裡還引入了一個被稱作 PiranhaTidy 的提醒機器人,以定期添加 Piranha 相關任務的提醒。

Piranha 管道採用啟發式(heuristic)方法,將超過特定時間段未修改的標識視為過時,併為它們生成 diff。至於具體的時間段設置,可以自定義。根據 Uber 的說法,Piranha 能夠處理數百萬行代碼,平均不到 3 分鐘即可生成 diff。

接下來,Piranha 有可能會擴展至更多語言,Uber 號召更多開發人員來一起為它做出貢獻。

源碼地址:github.com/uber/piranha


分享到:


相關文章: