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

人工智慧完全學會自己寫程式,這句話可能說起來還有一種科幻感。不過,用 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%。

 

使用 Facebook 留言

發表回應

謹慎發言,尊重彼此。按此展開留言規則