程序員的福音,微軟正在訓練AI自動Debug

對于軟件開發工程師來說,查找和修復代碼中的bug通常是一項非常折磨人的日常工作。微軟希望將開發工程師從Debug中解放出來,讓他們有更多的時間處理軟件開發中更關鍵也更有趣的部分。
如今正火熱的深度學習是否能夠幫助開發工程師解決這個問題以更快更好地交付軟件呢?微軟在2021年神經信息處理系統會議(NeurIPS 2021)上發表的一篇新論文《自我監督的bug檢測和修復》中,展示了一個有前途的深度學習模型,微軟將其稱為BugLab。BugLab可以通過“捉迷藏(hide and seek)“游戲來學習檢測和修復錯誤,而無需使用標記數據。
對于AI來說,要查找和修復代碼中的 bug,不僅需要對代碼的結構進行推理,還需要理解軟件開發人員在代碼注釋、變量名稱等之中留下的“模棱兩可“的自然語言提示。以下面的GitHub 開源項目中的代碼片段為例:

在這里,開發工程師的意圖通過自然語言注釋以及代碼的高級結構表現得很清楚。其中存在一個錯誤,使用了錯誤的比較運算符。在這個例子中,微軟的深度學習模型能夠正確識別此錯誤并提醒開發人員。
同樣地,在另一個開源項目中,AI檢測出代碼錯誤地檢查了變量write_partition是否為空,而不是正確的變量read_partitions。

為了解決缺乏訓練數據這個問題,微軟提出了BugLab,它使用兩種互相競爭的模型(bug選擇器與bug檢測器),通過玩“hide and seek“游戲來學習,該游戲會給一些假定為正確的現有代碼,bug選擇器模型決定它是否應該引入bug、在哪里引入,以及確切形式。然后,另一個bug檢測器模型會去檢查代碼中是否引入了bug,如果是,將其找到并修復。
這兩個模型在沒有標記數據的情況下進行聯合訓練,即以自我監督的方式,在數百萬個代碼片段上進行訓練。Bug選擇器學習盡量去隱藏錯誤,而bug檢測器越來越能夠檢測和修復錯誤。
目前的結果是有26%的錯誤可以自動找到并修復,并且存在許多誤報,在使其真正發揮作用之前,微軟還有很長的路要走。