程序员的福音,AI可以自动修复bug了!
人工智能完全學(xué)會(huì)自己編程,可能說起來還有一種科幻感,但 AI 幫程序員找 bug 這件事,已經(jīng)達(dá)到了不錯(cuò)的水平。
?
?
北京大學(xué)、微軟亞洲研究院和中國電子科技大學(xué)就一起嘗試著讓 AI 找 bug。微軟亞洲研究院的 Lily Sun 在微軟官方博客上介紹稱,他們開發(fā)的精確狀態(tài)系統(tǒng)(Accurate Condition System, ACS),能在人類不加干預(yù)的情況下自動(dòng)修復(fù)軟件系統(tǒng)中的 Bug。
?
他們關(guān)于 ACS 的論文 Precise Condition Synthesis for Program Repair 發(fā)表在世界軟件工程大會(huì) ICSE 2017 上。
ACS 會(huì)自動(dòng)修復(fù)什么樣的 bug 呢?Lily Sun 舉了個(gè)例子:
?
int lcm=Math.abs (mulAndCheck (a/gdc (a,b), b));return lcm;
?
這是 Apache Math 中的一段代碼,用來計(jì)算兩個(gè)數(shù)的最小公倍數(shù),并且引入了 Math.abs 來確保返回的值是正數(shù)。但是,這個(gè)程序有缺陷,有時(shí)候還是會(huì)返回負(fù)值。
?
我們可以創(chuàng)建一個(gè)測試來找到其中的錯(cuò)誤。測試的輸入是a=Integer.MIN_VALUE、b=1,預(yù)期的輸出是 throw ArithmeticException。
?
把這個(gè)程序和相應(yīng)的測試輸入到 ACS 中,ACS 會(huì)自動(dòng)生成第2、3 行的路徑,修復(fù)程序缺陷:
?
int lcm=Math.abs (mulAndCheck (a/gdc (a,b), b));+ if (lcm == Integer.MIN_VALUE) {
+ throw new ArithmeticException ();
+ }
return lcm;
?
讓算法自己改 bug 這件事,從 2009 年開始就有研究,弗吉尼亞大學(xué)計(jì)算機(jī)系的 Westley Weimer、新墨西哥大學(xué)的 Stephanie Forrest 和卡耐基梅隆大學(xué)的 Claire Le Goues,就一起開發(fā)了?Genprog。
?
而 ACS,在前人研究的基礎(chǔ)上大幅提升了準(zhǔn)確率。在 Defects4J 基準(zhǔn)上的測試結(jié)果顯示,ACS 生成的 23 個(gè)補(bǔ)丁中,有 18 個(gè)是正確的,準(zhǔn)確率近 80%。
?
ACS 準(zhǔn)確率的提升主要得益于有更多的信息來源,特別是網(wǎng)上的大量代碼。與以往的方法相比,ACS 有以下三種新的信息來源:
?
一是用局部性原則信息對補(bǔ)丁中的變量進(jìn)行排序;
?
二是用自然語言分析技術(shù)來分析 Javadoc,然后用 Javadoc 中的信息來過濾不正確的補(bǔ)丁;
?
三是通過對網(wǎng)上的開源程序進(jìn)行統(tǒng)計(jì)分析,發(fā)現(xiàn)對變量進(jìn)行操作的條件概率,進(jìn)而生成正確的補(bǔ)丁。
?
轉(zhuǎn)載于:https://www.cnblogs.com/gbin1/p/7410651.html
總結(jié)
以上是生活随笔為你收集整理的程序员的福音,AI可以自动修复bug了!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Codevs] 1001 舒适的路线
- 下一篇: windows2008 R2 如何建立F