天天看點

讓AI自動修複程式中的bug:微軟亞洲研究院新研究 | 附論文

本文來自AI新媒體量子位(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舉了個例子:

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

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

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

讓算法自己改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(中)、北京大學熊英飛(右)

—— 完 ——

本文作者:李林 

原文釋出時間:2017-08-05

繼續閱讀