程式員的福音,AI可以自動修複bug了!

來源:互聯網
上載者:User
人工智慧完全學會自己編程,可能說起來還有一種科幻感,但 AI 幫 程式員找 bug 這件事,已經達到了不錯的水平。   北京大學、 微軟亞洲研究院和中國電子科技大學就一起嘗試著讓 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%。   ACS 準確率的提升主要得益於有更多的資訊來源,特別是網上的大量代碼。與以往的方法相比,ACS 有以下三種新的資訊來源:   一是用局部性原則資訊對補丁中的變數進行排序;   二是用自然語言分析 技術來分析 Javadoc,然後用 Javadoc 中的資訊來過濾不正確的補丁;   三是通過對網上的開來源程式進行統計分析,發現對變數進行操作的條件機率,進而產生正確的補丁。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.