一種基于倒排索引技術的軟件缺陷代碼文件定位方法
【專利說明】
[0001]
技術領域
[0002] 本發(fā)明屬于計算機應用領域,具體涉及計算機軟件測試和維護過程中,根據(jù)缺陷 和問題報告,定位和檢索包含缺陷的代碼文件的方法。
【背景技術】
[0003] 計算機軟件系統(tǒng)在開發(fā)和維護過程中不可避免地產生軟件缺陷,缺陷定位是軟件 調試過程中一件很困難的工作,對大規(guī)模軟件系統(tǒng)更是如此。軟件缺陷定位多年來一直是 軟件工程研究領域中的一個熱點問題。缺陷定位利用程序執(zhí)行信息和缺陷(問題)報告,預 測缺陷代碼可能存在的范圍,輔助開發(fā)人員找到缺陷位置。當前軟件系統(tǒng)規(guī)模越來越大,代 碼文件越來越多,根據(jù)缺陷報告內容,從海量的代碼文件中定位到缺陷代碼的過程可謂是 大海撈針。此外,在軟件開發(fā)周期中,龐大的軟件規(guī)模和有限的開發(fā)和測試成本之間也形成 反差。因此,需要設計一種高效的軟件缺陷定位方法,基于缺陷報告,在大量的代碼文件中 快速檢索和定位包含缺陷的軟件代碼文件。
[0004] 目前,缺陷代碼定位仍然以人工定位和經驗判定為主,這類方法不僅耗費時間和 成本,且不可重復。傳統(tǒng)的自動軟件缺陷定位多利用交互式的調試工具,需要大量人工干 預,定位效率低,難以滿足和適應大規(guī)模軟件系統(tǒng)的調試需求。近年來,研究者分別提出基 于謂詞的統(tǒng)計學缺陷定位方法(Predicates Based Statistical Debugging)、基于程序譜 的缺陷定位方法、以及統(tǒng)計缺陷定位(Statistical Fault Localization)方法。這些方法 需要獲取測試執(zhí)行過程的動態(tài)信息,包括語句、謂詞、分支或信息流覆蓋數(shù)據(jù)等,適用于小 范圍語句級的軟件缺陷定位,尚不能滿足大規(guī)模軟件系統(tǒng)在代碼文件級的缺陷定位要求。
【發(fā)明內容】
[0005] 發(fā)明所要解決的技術問題是提供一種在大量代碼文件中快速檢索和定位包含缺 陷的軟件代碼文件的方法,進而提高軟件測試維護的性能和效率。
[0006] 本發(fā)明所述一種基于倒排索引技術的軟件缺陷代碼文件定位方法,包括以下步 驟, 步驟1)匯總軟件系統(tǒng)中的代碼文件,處理每個代碼文件,生成代碼文件記錄; 步驟2)對代碼文件記錄分詞,應用代碼分詞技術和工具,將代碼行內容分割成單詞; 過濾掉其中的無關詞;組織文件索引項,建立倒排索引表; 步驟3)讀入缺陷報告,應用分詞技術和工具,將缺陷報告內容分割成單詞;過濾掉無 關詞;將剩余的單詞作為缺陷的關鍵詞,輸出關鍵詞列表; 步驟4)在倒排索引表中檢索每一個關鍵詞,匯總檢索到的文件索引項;處理流程是: 首先對缺陷報告的每一個關鍵詞,檢索倒排索引表,得到對應的關鍵詞記錄;然后提取關鍵 詞記錄中的文件索引項,加入到文件索引項列表中;最后按照文件索引項中的文件路徑名 聚類,將針對同一個代碼文件的文件索引項組織在一起; 步驟5)根據(jù)關鍵詞評分對文件索引項排序,定位包含缺陷的代碼文件;處理流程是: 首先合并具有相同文件路徑名的文件索引項(指向同一個代碼文件),累加其中的相關度評 分,同時串接位置信息;然后根據(jù)相關度評分,按從大到小為合并后的文件索引項排序;最 后推薦具有高評分值的文件索引項對應的代碼文件,并提示關鍵詞在代碼文件中的位置。
[0007] 上述步驟1)中的代碼文件記錄CodeRecord可以定義為一個二元組:CodeRecord ::=〈PathName, [Line]〉,其中PathName是代碼文件的文件路徑名;[Line]表示一個或 多個Line,指文件中的所有代碼行;Line是一個二元組:Line ::=〈Offset, String〉,其 中Offset是代碼行相對于文件首部的偏移量,以字節(jié)為單位計數(shù);String表示代碼行的內 容,用字符串表示。
[0008] 上述步驟2)和3)中的無關詞包含以下五種類型:1)保留字:指代碼編程語言預 定義的保留字,例如C語言中的"int, float, class, public, return, while, include" 等;2)注釋標記:指標記代碼注釋內容的特殊字符,例如C語言中的"http://,/**/"等;3)標 點符號:指代碼行和注釋行中出現(xiàn)的標點符號,例如";,.!>="等;4)停用詞:指代碼 注釋內容中的助詞和連接詞,例如中文注釋中的"啊、的、比如、并且、不但"等;5)預定義符 或代碼簽名:指代碼編程語言中的宏定義標記或預編譯指令,例如C語言中的"Oparam,@ user, Oreturn ',等。
[0009] 上述步驟2)、4)和5)中的文件索引項指關鍵詞對于單個代碼文件的索引數(shù) 據(jù)結構 Filelnfo,F(xiàn)ileInfo 定義為一個三元組:FileInfo : : =〈PathName, Score, [Position]〉,其中PathName是代碼文件的文件路徑名;Score是關鍵詞對于該代碼文 件的相關度評分;[Position]是一個或多個Position,代表關鍵詞在代碼文件中的位 置,Position 定義為一個三元組:Position ::=〈isName,start, end>,其中 isName 指 Position針對代碼文件名稱(取值1),或者針對代碼文件內容(取值0) ;start和end分別 是關鍵詞的起始和終止位置,按字節(jié)計算。
[0010] 上述步驟2)中建立倒排索引表的處理流程分兩個步驟:第一個步驟是過濾掉無 關詞后,將代碼行中剩余的詞作為關鍵詞(Term),為每一個關鍵詞,建立針對單個代碼文件 的文件索引項FileInfo ;第二個步驟是在建立關鍵詞對每個代碼文件的文件索引項后,匯 總軟件系統(tǒng)中的所有代碼文件,建立以關鍵詞為檢索單位的倒排索引表;索引表由關鍵詞 記錄TermRecord組成,按照關鍵詞名稱的英文字母或者中文拼音順序排序;關鍵詞記錄 TermRecord 定義為一個二元組:TermRecord : : =〈Term, [FileInfo] >,其中 Term 是關鍵 詞的名稱;[Filelnfo]是一個或多個針對單個文件的文件索引項。
[0011] 上述步驟2)和5)中關鍵詞對于代碼文件的相關度評分Score的計算公式是:
其中isName表示關鍵詞是否出現(xiàn) 在代碼文件名中(1表示出現(xiàn)、〇表示未出現(xiàn));num_Content表示關鍵詞在代碼文件內容中 的出現(xiàn)次數(shù);num_File指有多少個不同的代碼文件中出現(xiàn)過該關鍵詞。
[0012] 與現(xiàn)有技術相比,本發(fā)明一種基于倒排索引技術的軟件缺陷代碼文件定位方法 的有益效果在于:1、本發(fā)明應用倒排索引、TF-IDF、以及MapReduce等技術,其中倒排索引 (Inverted index)是一種反向索引技術,存儲全文搜索環(huán)境下單詞(詞組)在多個文檔中 的位置映射,構成文件級檢索系統(tǒng)中常用的索引結構;TF-IDF (term frequency-inverse document frequency)是一種統(tǒng)計方法,用于評估單詞對于一個文擋(或文檔集合)的重要 (關聯(lián))程度,TF-IDF加權常被應用于搜索引擎,作為文件與用戶查詢之間相關程度的度量 或評級;MapReduce是大數(shù)據(jù)背景下的一種并行運算框架,包含Map (映射)和Reduce (歸 約)兩個階段,通過任務的分解和并行執(zhí)行,運用"分而治之"的思想,進而實現(xiàn)加快任務處 理速度的目的;2、本發(fā)明應用倒排索引技術和統(tǒng)計方法,通過關鍵詞查詢和統(tǒng)計推薦高 風險的代碼文件,能夠快速準確地定位包含缺陷的軟件代碼文件,適用于大型軟件系統(tǒng)的 測試和維護工作;同時本發(fā)明計算簡單,適用于不同類型的編程語言,以及不同規(guī)模的計算 機軟件,具有擴展性和適應性;便于使用并行算法,能快速有效地分析和處理大量的缺陷報 告信息,進而有效的提高軟件缺陷定位的效能。
【附圖說明】
[0013] 圖1是本發(fā)明的一種基于倒排索引技術的軟件缺陷代碼文件定位