每日最新頭條.有趣資訊

程式員們,現在你們終於可以放心寫bug了!

作者 | 琥珀、非主流

“如果 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 正訴諸於利用社區推進其圍繞自身機器學習軟體重新定位計算硬體生態系統的戰略,而這也有助於合作夥伴快速設計和優化新款芯片產品在人工智能和機器學習上的能力。

參考鏈接:

https://code.fb.com/developer-tools/finding-and-fixing-software-bugs-automatically-with-sapfix-and-sapienz/

獲得更多的PTT最新消息
按讚加入粉絲團