微軟亞洲研究院新研究:AI自動修復程序中的bug

李林 編譯自 微軟官方博客

量子位 報道 | 公眾號 QbitAI

微軟亞洲研究院新研究:AI自動修復程序中的bug

人工智能完全學會自己編程,可能說起來還有一種科幻感,但AI幫程序員找bug這件事,已經達到了不錯的水平。

北京大學、微軟亞洲研究院和中國電子科技大學就一起嘗試著讓AI找bug。微軟亞洲研究院的Lily Sun在微軟官方博客上介紹稱,他們開發的精確狀態系統(Accurate Condition System, ACS),能在人類不加干預的情況下自動修復軟件系統中的Bug。

他們關於ACS的論文Precise Condition Synthesis for Program Repair發表在世界軟件工程大會ICSE 2017上。

ACS會自動修復什麼樣的bug呢?Lily Sun舉了個例子:

int lcm=Math.abs(mulAndCheck(a/gdc(a,b), b));

這是Apache Math中的一段代碼,用來計算兩個數的最小公倍數,並且引入了Math.abs來確保返回的值是正數。但是,這個程序有缺陷,有時候還是會返回負值。

我們可以創建一個測試來找到其中的錯誤。測試的輸入是a=Integer.MIN_VALUE、b=1,預期的輸出是throw ArithmeticException。

把這個程序和相應的測試輸入到ACS中,ACS會自動生成第2、3行的路徑,修復程序缺陷:

int lcm=Math.abs(mulAndCheck(a/gdc(a,b), b));

讓算法自己改bug這件事,從2009年開始就有研究,弗吉尼亞大學計算機系的Westley Weimer、新墨西哥大學的Stephanie Forrest和卡耐基梅隆大學的Claire Le Goues,就一起開發了Genprog(http://dijkstra.cs.virginia.edu/genprog/)。

微軟亞洲研究院新研究:AI自動修復程序中的bug

而ACS,在前人研究的基礎上大幅提升了準確率。在Defects4J基準上的測試結果顯示,ACS生成的23個補丁中,有18個是正確的,準確率近80%。

ACS準確率的提升主要得益於有更多的信息來源,特別是網上的大量代碼。與以往的方法相比,ACS有以下三種新的信息來源:

一是用局部性原則信息對補丁中的變量進行排序;

二是用自然語言分析技術來分析Javadoc,然後用Javadoc中的信息來過濾不正確的補丁;

三是通過對網上的開源程序進行統計分析,發現對變量進行操作的條件概率,進而生成正確的補丁。

論文地址:

https://www.microsoft.com/en-us/research/publication/precise-condition-synthesis-program-repair/

微軟亞洲研究院新研究:AI自動修復程序中的bug

論文部分作者:微軟亞洲研究院Shi Han(左一)、微軟亞洲研究院Lily Sun(中)、北京大學熊英飛(右)

—— ——

活動報名

8月9日(週三)晚,量子位邀請三角獸首席科學家王寶勳,分享基於對抗學習的生成式對話模型,歡迎報名 ▼

誠摯招聘

量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回覆“招聘”兩個字。

量子位 QbitAI

վ'ᴗ' ի 追蹤AI技術和產品新動態

相關推薦

推薦中...