喲,寫Bug呢?Facebook發佈AI代碼調試工具SapFix

選自code.Facebook,做者:Yue Jia、Ke Mao、Mark Harman,機器之心編譯。api

請注意:這不是你寫 Bug 的理由。app

調試代碼是件很無聊的事,可是由 Facebook 工程師建立的新型人工智能混合工具——SapFix 能夠大大節約工程師的時間,同時還加快了新軟件的推出過程。該工具能夠爲特定 Bug 自動生成修復程序,而後將其提交給工程師批准並部署到生產中。工具

SapFix 被用來加速向裝有 Facebook Android 應用程序的數百萬設備傳輸穩定代碼更新的過程,這是人工智能測試和調試工具在此類大規模生產中的首次應用。Facebook 打算與工程界分享 SapFix,由於這是自動化調試發展的下一步,可能爲不少公司和研究機構促進新代碼的產量和穩定性。測試

SapFix 被設計成一個獨立的工具,不管有或沒有 Sapienz(Facebook 的一款智能自動化軟件測試工具,在 F8 版本時發佈,已部署到生產中),它均可以運行。在目前的概念驗證狀態,SapFix 在部署到生成前專一於修復 Sapienz 發現的 Bug。此過程從 Sapienz 開始,連同 Facebook 的推斷靜態分析工具一塊兒,能幫助定位代碼中須要修復的 Bug。一旦 Sapienz 發現並推斷出與 Bug 相關的特定部分代碼,它就能夠將該信息傳遞給 SapFix,後者會自動參考一些策略並生成補丁。人工智能

SapFix 是如何 debug 的

上圖說明 SapFix 如何爲軟件 Bug 生成補丁。debug

爲了解決高觸發 bug,SapFix 建立的補丁能夠徹底或部分還原初始代碼。對於更復雜的問題,SapFix 經過從模板修復集合中提取素材生成補丁。這些模板是從人類工程師建立的模板中自動獲取的,然後者則是基於過去的修復庫建立的。設計

當之前用過的由人類設計的模板不合適時,SapFix 將嘗試基於突變進行修復。爲此,它將對致使崩潰的語句的抽象語法樹(AST)執行小型代碼修復,調整補丁,直到找到可能的解決方案。3d

自主驗證和人工審批

即便 SapFix 找到了特定的補丁,它的工做還遠遠沒有結束。該工具爲每一個 Bug 生成多個潛在的補丁,並經過三個問題評價補丁的質量。便是否存在編譯錯誤、程序是否仍然會崩潰,以及補丁是否引入了新的衝突?調試

爲了解決最後兩個問題,SapFix 在修復版本上運行已存的、開發者編寫的測試,同時還會運行由 Sapienz 建立的測試。與以前補丁生成步驟同樣,驗證過程會自動執行,且與更大的代碼庫實現分離。SapFix 正在複製目前由人工完成的調試工做,但它並非爲了將補丁部署到產品代碼中而設計的。code

當自動生成的補丁通過全面測試後,SapFix 會將它們發送給人工評審員進行批准。這有些相似於人工生成的報告須要由其餘開發者進行檢查與審批,此外系統除了會自動追蹤評審者的反饋外,它還會接受經批准的補丁、清理其它未經批准的補丁。在某些狀況下,SapFix 能夠從多個候選補丁中選擇最佳的解決方案,並向工程師提出建議。

該工做流展現了 SapFix 如何基於它生成的補丁尋求工程師的反饋。

若是修補方案被拒絕,它將丟棄補丁,若是被接受,則加載。因爲 SapFix 的底層技術很是強大,且自動運行節省了大量時間和精力,所以 SapFix 沒法實現本身提出的補丁。工程師一般比較專業,該工具依賴工程師的專業知識來確認是否應該部署提出的補丁。

因爲 SapFix 仍在開發階段,所以它沒法像 Sapienz 那樣投入大規模使用,Sapienz 如今每個月生成數百個 Bug 報告,精準定位有 Bug 的代碼行,它審覈與安卓設備上的 Facebook、Instagram、Workplace 和 Messenger 等 app 相關的代碼。Sapienz 的報告中大約有 3/4 的 bug 是由開發者修復的。而 Facebook 八月份開始測試 SapFix,該工具能夠成功生成可以被人類工程師接受的補丁,並進入生產階段。

爲徹底自動化 debug 奠基基礎

Facebook 稱,這標誌着機器生成的補丁(通過自動化端到端測試和修補)首次部署到 Facebook 規模的代碼庫。這是 AI 技術的重要里程碑,進一步證實了基於搜索的軟件工程能夠減小軟件開發中的問題。Facebook 開發 SapFix 用於處理不一樣種類的 bug 和軟件,所以該工具備可能改變代碼生成的速度和質量。這不只適用於大規模運營的企業,還適用於幾乎全部寫代碼的我的。不論是用於組織仍是個體,SapFix 和 Sapienz 都能幫開發者減小花在 debug 上的時間,把精力用在生成更多的代碼上。

即便有了這項工做,Facebook 仍想鼓勵社區繼續研究自動調整、改進代碼。在這一領域,已經有了不少激動人心的研究,包括技術的實證研究、供社區研究解決的開放性難題與挑戰,以及對近期自動改進代碼的調查。做爲在 Facebook 規模下部署的首個工具,SapFix 將爲此挑戰性研究提供新的動力與能量。

Facebook 稱,將在完成額外的工程部分後,開源 Sapienz 和 SapFix。而有關這些工具的反饋會幫助相關研究者,也會幫助更普遍的 AI 社區改進自動尋找、修改代碼 Bug 的任務。Facebook 目前聚焦在 SapFix 如何自動制止代碼崩潰,但更長期的應用應該包括如何讓軟件更快、反應更敏捷。這些系統提供了極大的基線收益,開發者使用它們時效果是多變、寬泛的。

原文連接: code.fb.com/developer-t…
相關文章
相關標籤/搜索