天天看點

BugBuilder: 高品質大規模缺陷庫自動建構方法

作者:華為雲開發者聯盟

本文分享自華為雲社群《BugBuilder: 高品質大規模缺陷庫自動建構方法-雲社群-華為雲》,作者:華為雲軟體分析Lab 。

1. 問題場景

由于各種原因,例如錯誤定位、軟體測試、程式修複和缺陷預測,軟體工程界的研究迫切需要大規模高品質的缺陷庫。首先,現實世界的缺陷及其精準修複更新檔對于嚴格評估許多自動或半自動的錯誤語句定位、軟體缺陷數量預測以及錯誤應用修複方法必不可少。我們希望這些方法在現實世界的應用程式上能很好地工作,是以在這些方法廣泛應用之前,必須使用大量現實世界的缺陷及其修複更新檔進行評估。

雖然可以通過自動變異或手動注入缺陷也可以用于評估,但他們可能與現實世界的缺陷有本質的不同,是以,根據它們得出的結論可能不适用于現實世界的缺陷。其次,有了實際缺陷及修複更新檔,也可以激勵研究人員提出發現、定位和修複軟體缺陷的新方法。例如,通過分析大量現實世界的缺陷,研究人員可能可以找出什麼樣的語句更容易出錯,是以他們可以在自動修複時嘗試先修複此類語句,以提高程式修複的效率。

再如,通過閱讀人工編寫的更新檔,研究人員已經發現了許多常見的修複模式,并反過來利用這些模式顯著提高了自動修複能力。最後,資料驅動和基于學習的程式自動修複和缺陷檢測方法通常依賴大量不同的真實缺陷及精準更新檔。值得注意的是,這些缺陷的品質,例如缺陷的多樣性和更新檔的準确性,可能會顯著影響此類資料驅動方法的效果。

現有手動或半自動建構的缺陷庫(如SIR、BugBench、Defects4J等)建構成本較高,缺陷規模和多樣性非常有限。而全自動建構的缺陷庫(如iBUGS和ManyBugs)所包含的缺陷的修複更新檔品質存疑,往往包含與缺陷無關的代碼變更(如重構)。

2. 我們的貢獻

為解決上述問題,我們聯合北京理工大學的劉輝老師團隊合作共同提出并開發了高品質大規模缺陷庫全自動建構方法BugBuilder,自動從版本控制系統中的人為編寫的更新檔中提取完整且精準的缺陷修複更新檔。其工作流程如下圖所示。

BugBuilder: 高品質大規模缺陷庫自動建構方法

具體而言,對于每個缺陷修複送出,它的工作原理如下。

• 首先,識别重構操作。通過現有工具(即RefactoringMiner)識别缺陷修複送出中的重構操作,并将識别的重構操作重新應用于有缺陷的版本來去除重構。

• 其次,構造可能的修複更新檔。通過枚舉其餘非重構變更的所有可能組合,自動生成所有潛在更新檔。

• 最後,驗證并選擇更新檔。通過執行測試用例來驗證更新檔的正确性,過濾掉那些未能通過測試的更新檔。如果最終隻有一個是有效更新檔,則将其作為精準更新檔。如果有多個更新檔通過驗證,則利用一系列啟發式方法來選擇最有可能的更新檔(詳細做法請參照論文[1])。

值得注意的是,如果人工編寫的更新檔由重構和缺陷修複組成,則BugBuilder會将其拆分為兩個有序的更新檔:重構更新檔和缺陷修複更新檔。這一點與Defects4J類似,Defects4J将人類編寫的更新檔拆分為與缺陷無關的更新檔和缺陷修複更新檔。

3. 方法有效性評估

本文從兩個方面評估BugBuilder的有效性。

• 其一,将BugBuilder應用于Defects4J收集的809個真實缺陷修複送出中。對每一個送出,利用BugBuilder來自動提取精準更新檔,如果得到了一個更新檔,則将其與Defects4J中手動構造的更新檔進行對比。在809個缺陷修複更新檔中,BugBuilder自動生成了350個更新檔,其中334個與Defects4J中手動構造的更新檔完全相同。經人工分析,在剩下16個自動生成的更新檔中有12個比Defects4J人工構造的更新檔更完整更精确。隻有4個是不準确的,主要原因是重構操作的檢測不完整。可見,BugBuilder可以準确提取缺陷修複執行個體。

• 其二,應用上述方法構造了大規模的缺陷庫GrowingBugs(https://github.com/liuhuigmail/GrowingBugRepository ),包含從169個廣為人知的Java應用中自動收集的1916個真實缺陷及精準修複更新檔。缺陷數量是著名缺陷庫Defects4J的2倍多,且在持續增長中。

4. 總結

本工作所提出的方法使得全自動構造高品質大規模缺陷庫成為可能。基于該方法建構的缺陷庫也可以作為Benchmark來促進缺陷相關研究。

參考文獻:

[1] Jiang Y, Liu H, Luo X, Zhu Z, Chi X, Niu N, Zhang Y, Hu Y, Bian P, and Zhang L. BugBuilder: An Automated Approach to Building Bug Repository[J]. IEEE Transactions on Software Engineering, 2022.

文章來自 PaaS技術創新Lab,PaaS技術創新Lab隸屬于華為雲,緻力于綜合利用軟體分析、資料挖掘、機器學習等技術,為軟體研發人員提供下一代智能研發工具服務的核心引擎和智慧大腦。我們将聚焦軟體工程領域硬核能力,不斷構築研發利器,持續傳遞高價值商業特性!加入我們,一起開創研發新“境界”!(詳情歡迎聯系 mayuchi1@huawei.com;guodongshuo@huawei.com)

PaaS技術創新Lab首頁連結:https://www.huaweicloud.com/lab/paas/home.html

關注#華為雲開發者聯盟# 點選下方,第一時間了解華為雲新鮮技術~

華為雲部落格_大資料部落格_AI部落格_雲計算部落格_開發者中心-華為雲