人工智慧完全學會自己寫程式,這句話可能說起來還有一種科幻感。不過,用 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%。
- 本文授權轉載自:36kr(36氪)
請注意!留言要自負法律責任,相關案例層出不窮,請慎重發文!