天天看點

使用AI大規模删除Google二十多年累積下來十億行中的無效程式代碼。任何一個大型項目都一定會積累很多死碼,即是那些不再

作者:電腦新視野

使用AI大規模删除Google二十多年累積下來十億行中的無效程式代碼。任何一個大型項目都一定會積累很多死碼,即是那些不再使用的子產品,或者存在多年無效的程式。據Google介紹,該項目非常成功,每個星期可送出超過1000個待删除的變更清單,而且截至目前已經删除Google整個C++程式代碼中的5%。

這些死碼會不斷産生成本,自動化測試系統并不知道哪些程式代碼不需要再測試,同時也需要耗費大量時間維護。那麼,能不能在減少程式代碼量來降低維護成本,如何清除程式代碼庫裡面不再使用的死碼。

Google與其他公司不同的地方,就是它隻有一個程式代碼庫,全公司的程式代碼都放在這個庫裡面,二十多年來,幾萬名軟體工程師為同一個包含數十億行的程式代碼庫送出貢獻。這套程式代碼庫存儲在Piper系統中,與編碼相關的共享庫原始碼、生産服務、實驗程式、診斷和調試工具等都聚集在這裡。

這樣單一程式代碼庫,最壞的情況就是不小心删除原始碼,Google SRE首席軟體工程師說,這意味着Google使用的每個資料中心、每個工作站都會突然停止運作,不僅是關閉,甚至連存儲也無法使用。

那麼,他們是怎麼清理這些死碼,Google在其部落格中介紹Sesenmann「自動删除程式代碼」項目,該項目的目标是自動辨識出無效程式代碼,再發送程式代碼審查請求以将其删除。

Google建立的Blaze系統是完成這個目标的重點:它會以一緻且可造訪的方式表示二進制目标、庫、測試和源檔案之間的互相關系,維護者跟據此建立關系圖找到未連接配接至任何二進制檔案的庫,并将其視為潛在的删除對象。

那麼二進制檔案又如何處理,對于内部二進制檔案,程式在運作時會寫入一個日志條目,記錄下時間和對應的特定二進制檔案。通過彙總,獲得Google内部使用的各個二進制檔案的活躍度訊号。如果某個程式有一段很長時間都沒有被使用,該項目就會嘗試發送相應的删除以變更清單。

Source:Sensenmann: Code Deletion at Scale

使用AI大規模删除Google二十多年累積下來十億行中的無效程式代碼。任何一個大型項目都一定會積累很多死碼,即是那些不再
使用AI大規模删除Google二十多年累積下來十億行中的無效程式代碼。任何一個大型項目都一定會積累很多死碼,即是那些不再
使用AI大規模删除Google二十多年累積下來十億行中的無效程式代碼。任何一個大型項目都一定會積累很多死碼,即是那些不再

繼續閱讀