2017.08.14 13:00

程式設計師的福音:AI可以自動幫你揪出哪裡寫錯了,準確率達80%!

ADVERTISEMENT

人工智慧完全學會自己寫程式,這句話可能說起來還有一種科幻感。不過,用 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,就一起開發了 。而 ACS,在前人研究的基礎上大幅提升了準確率。在 Defects4J 基準上的測試結果顯示,ACS 產生的23個修復中,有18個是正確的,準確率近80%。

 

  • 本文授權轉載自:

ADVERTISEMENT