自動檢索、修復(fù)Python代碼bug,微軟推出DeepDebug
來源:機(jī)器之心
還在為不斷的 debug 代碼煩惱嗎?


用于預(yù)訓(xùn)練的原始 python 代碼;
用于訓(xùn)練神經(jīng) bug 創(chuàng)建和 bug 修補(bǔ)程序的 commit 數(shù)據(jù);
從原始代碼中提取的方法,其中插入了神經(jīng) bug 以訓(xùn)練更強(qiáng)大的 bug 修補(bǔ)程序;
通過可執(zhí)行測試的方法。
將點訪問器替換為方括號訪問器;
將截斷鏈接的函數(shù)調(diào)用;
刪除返回行;
將返回值封裝在元組和字典等對象中然后忘記封裝對象;
將 IndexError 等精確錯誤替換為 ValueError 等不同的錯誤;
誤命名變量諸如 self.result 而不是 self._result;
錯誤地按引用復(fù)制而不是按值復(fù)制。研究者幾乎應(yīng)用了以前文獻(xiàn)中已報道的所有啟發(fā)式 bug。


追蹤法:除了使用測試對不正確的編輯進(jìn)行分類之外,還以三種不同的方式將來自測試的信息整合到訓(xùn)練中:將錯誤消息附加到 buggy 方法中,另外附加了棧追蹤,并進(jìn)一步使用測試框架 Pytest 提供了故障處的所有局部變量值;
收集通過測試法:為了以訓(xùn)練規(guī)模收集可執(zhí)行的測試,從用于預(yù)訓(xùn)練的 20 萬個庫開始,過濾到包含測試和 setup.py 或 requirements.txt 文件的 3.5 萬個庫。對于這些庫中的每一個,都在唯一的容器中執(zhí)行 Pytest,最終從 1 萬個庫中收集通過的測試;
合成 bug 測試法:在過濾通過可執(zhí)行測試的函數(shù)并插入神經(jīng) bug 之后,重新運行測試以收集 Pytest 追蹤,并濾除仍通過測試并因此實際上不是 buggy 的已編輯函數(shù)。





加入知識星球【我們談?wù)摂?shù)據(jù)科學(xué)】
500+小伙伴一起學(xué)習(xí)!
· 推薦閱讀 ·
在Python中操縱json數(shù)據(jù)的最佳方式
Python中JSON結(jié)構(gòu)數(shù)據(jù)的高效增刪改操作
