Facebook的bug終結者!程式設計師再也不用加班熬夜了!
原創 AI科技大本營
“如果 Facebook 沒有 AI,那它將失去根基。”去年@Scale軟體工程大會上,Facebook AML 實驗室負責人 Joaquin Candela 在演講中坦露。
Scale,顧名思義,即規模化設計 AI。由 Joaquin Candela 領導的 AML 實驗室主要負責的,就是將 AI 應用在 Facebook 的各種產品上。值得一提的是,Facebook 另一支由 Yann LeCun 領導的 FAIR 實驗室,更專注於 AI 的基礎研究。兩支隊伍相輔相成,共同推動著 AI 在 Facebook的發展和應用。如今,Facebook 利用 AI 再推新款程式碼除錯工具 SapFix。
近日,在加州舊金山灣區的聖何塞舉辦的 Facebook @Scale 2018 大會上,Facebook 宣佈了它的新款工具 SapFix,可針對特定的 bug 自動生成修復程式,然後將其提交給工程師,經確認之後,然後再部署到生產環境中。相比其一年前已投入大規模使用的智慧自動化軟體測試工具 Sapienz,SapFix 能夠在沒有 Sapienz 的情況下執行,主要用於修復 Sapienz 在生產前發現的程式 bug。不過,目前SapFix 仍在開發階段。
▌SapFix 是如何 debug 的呢?
從發現 bug 到修復 bug,Facebook 有一套完整的流程:首先 Sapienz 以及 Facebook 的靜態分析工具 Infer,會幫助定位程式碼中需要修補的點;一旦 Sapienz 和 Infer 精確定位與崩潰相關的特定程式碼部分之後,就會將該資訊傳遞給 SapFix;最後,SapFix 會參考幾種不同的策略,自動生成補丁。

SapFix如何為軟體bug生成補丁
為了解決高觸發錯誤,SapFix 會建立修補程式,該修補程式可以完全或部分恢復原來提交的程式碼。對於更復雜的崩潰錯誤,SapFix 系統會通過根據模板修復集合中來生成補丁。這些模板是從人類工程師基於過去的修復庫建立的模板中自動獲取的。
當人類設計的模板不適合時,SapFix 將嘗試基於突變的修復,從而對導致崩潰的語句的抽象語法樹(AST)執行小的程式碼修改,對補丁進行調整,直到找到潛在的解決方案。
▌自主驗證和人工稽核
找到特定的補丁,並不意味著 SapFix 的工作已經結束。SapFix 會針對每個 bug 生成多個可能的修復程式,然後通過下面三個問題來評估他們的質量:
是否存在編譯錯誤?
崩潰是否依然存在?
修復程式是否引入新的崩潰?
為了解決以上後兩個問題,SapFix 會在修補後的版本上執行現有的開發人員編寫的以及 Sapienz 建立的測試程式。和前面的補丁生成步驟一樣,這個驗證過程是自主進行的,而且會與更大的程式碼庫隔離開來。這個過程相當於人們目前所做的除錯工作,但是它並不是為了自己將修復程式部署到生產程式碼中。
當修補程式經過全面測試之後,SapFix 會將它們傳送給人類審查者進行稽核。這非常類似於人工生成的報告由其他開發人員檢查和批准的方式,除了系統自動跟蹤審閱者的反饋外,它還會接受經批准的補丁,然後清理其他補丁。在某些情況下,SapFix 可以從幾個選項中選擇最佳解決方案,並向工程師提出建議。

SapFix如何基於生成的補丁尋求工程師的反饋
雖然 SapFix 還不能自己部署自己提出的修復方案,但它幫助工程師節省了大量的時間和精力,且具備很大的技術潛力。
根據 Facebook 的資料,Sapienz 報告的大約四分之三的錯誤都需要開發者來修復。自 Facebook 今年 8 月開始測試 SapFix 之後,該工具已經成功生成了被人類稽核者接受並部署於生產的補丁。
▌寫在最後
據 Facebook 的開發人員稱,“這標誌著機器生成的修復程式(具有自動端到端測試和修復)首次被部署到 Facebook 規模的程式碼庫中。這是 AI 與人類工程師結合的一個重要里程碑。SapFix 的成功也表明基於搜尋的軟體工程可以減少軟體開發中的阻礙。”
作為可以處理不同型別的錯誤和軟體的工具, SapFix 有可能改變程式碼生成的速度和質量。該款工具不僅適用於大規模運營的公司,也適用於需要程式設計的個人或小公司。無論是一起使用還是單獨使用, SapFix 和 Sapienz 都可以讓開發人員花更少的時間進行除錯。
接下來,Facebook團隊將與工程社群分享 SapFix,因為這是自動化除錯發展的下一步,有為廣泛的公司和研究組織提高新程式碼的生產和穩定性的巨大潛力。
此次@Scale 2018 大會上,除了公佈 SapFix 外,Facebook 還宣佈了與頂級晶片製造商的合作,包括Cadence、Esperanto、Intel、 Marvell、高通,它們承諾將在未來晶片產品的製造上提供支援 Facebook 機器學習編輯器 Glow 的解決方案。這反映出 Facebook 正訴諸於利用社群推進其圍繞自身機器學習軟體重新定位計算硬體生態系統的戰略,而這也有助於合作伙伴快速設計和優化新款晶片產品在人工智慧和機器學習上的能力。
對於此神器,大家有何想法呢?
感謝大家在百忙之中看完了小編的文章,喜歡的就點個訂閱吧。小編都會分享程式設計師的那些事,還有乾貨!
這裡推薦一下我的前端學習交流群: 731771211 ,裡面都是學習前端的,群裡會不定期更新最新的教程和學習方法(進群送2018web前端程式設計學習教程,web前端的大型網際網路技術教學視訊),有想學習web前端的,或是轉行,或是大學生,還有工作中想提升自己能力的web前端黨歡迎加入。點選: ofollow,noindex">加入
