程序員的福音,AI可以自動修復bug了!

jopen 7年前發布 | 11K 次閱讀 程序員

程序員的福音,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));
return lcm;

這是 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));
+ if (lcm == Integer.MIN_VALUE) {
+  throw new ArithmeticException ();
+ }
return lcm;

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

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

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

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

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

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

論文地址

來自: 量子位

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!