[發明專利]一種基于語法結構變更分析的軟件缺陷溯源方法有效
| 申請號: | 202010574986.9 | 申請日: | 2020-06-22 |
| 公開(公告)號: | CN111913874B | 公開(公告)日: | 2021-12-28 |
| 發明(設計)人: | 劉烴;鄭慶華;賀安成;崔笛;馬雪;池劍磊 | 申請(專利權)人: | 西安交通大學 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36 |
| 代理公司: | 西安通大專利代理有限責任公司 61200 | 代理人: | 王艾華 |
| 地址: | 710049 *** | 國省代碼: | 陜西;61 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 語法 結構 變更 分析 軟件 缺陷 溯源 方法 | ||
1.一種基于語法結構變更分析的軟件缺陷溯源方法,其特征在于,包括如下步驟:
S1:通過對缺陷修復提交使用語法結構變更分析,解析出缺陷修復提交FixCommit修改的源文件在完成缺陷修復過程中的語法結構變更模塊CUSet;
S2:根據修復提交中解析出的源文件語法結構變更模塊內容,從中識別出導致缺陷產生的缺陷代碼集合BuggyRowSet;
S3:提取修改過缺陷文件的歷史提交,使用語法結構變更分析解析缺陷文件的歷史提交,得到缺陷文件在被修復之前演化過程中的語法結構變更模塊集合FHCUSeti;
S4:解析缺陷文件在被修復之前演化過程中的語法結構變更模塊集合FHCUSeti中的插入模塊,然后在缺陷文件對應的歷史版本中定位插入模塊,提取缺陷文件在每次歷史提交中插入代碼的內容;
S5:通過相似性分析比較缺陷代碼和缺陷文件歷史提交中插入代碼的相似性,如果相似性為1,則缺陷文件歷史提交為缺陷潛在引入提交,否則不是缺陷潛在引入提交;
S6:比較歷史提交創建時間與缺陷報告時間,如果歷史提交創建時間在缺陷報告時間之前,則歷史提交是缺陷引入提交,否則不是;
S7:在給定輸入下,判斷一次缺陷修復提交中是否存在缺陷代碼還未找到其對應引入提交,如果存在,則回到S4繼續算法,否則,停止算法。
2.根據權利要求1所述基于語法結構變更分析的軟件缺陷溯源方法,其特征在于,所述步驟S1中,通過對缺陷修復提交FixCommit使用語法結構變更分析,解析出缺陷修復提交修改的源文件在完成缺陷修復過程中的語法結構變更模塊CUSet;步驟S1具體包括:
S101:修改源文件提取;通過解析版本控制系統記錄,提取出缺陷修復提交FixCommit中修改的源文件集合FileSet,表示如下:
其中f表示本次提交中修改的源文件;在元組(fip,fic)中,fip表示缺陷修復提交修改之前的源文件內容,fic表示缺陷修復提交修改之后的源文件內容;k表示缺陷修復提交修改源文件的總數;
S102:源文件語法樹解析;使用語法解析工具Spoon,將缺陷修復提交FixCommit中修改的源文件集合FileSet解析為抽象語法樹形式ASTSet,表示如下:
其中k表示缺陷修復提交中修改源文件的個數;在元組中,表示缺陷修復提交修改之前源文件fi對應的抽象語法樹,ASTic表示缺陷修復提交修改之后源文件fi對應的抽象語法樹;
S103:語法樹映射和編輯動作推導;使用語法樹差異分析工具分別在ASTSet中的抽象語法樹元組進行映射匹配,在兩顆語法樹相似節點之間建立映射關系,然后根據建立的映射關系推導出兩棵語法樹轉換需要完成的編輯動作集合EASet,表示如下:
EASet={EA1,EA2,EA3,...,EAn}
其中EAk表示一個編輯動作,表示如下:
EAk={op,(na,linea,typea),(nb,lineb,typeb)}
其中op表示編輯動作類型,包括Add,Delete兩種類型,分別表示插入和刪除動作;(na,linea,typea)中的na表示抽象語法樹中被移除的節點,linea表示被移除節點在源文件中所在的行號,typea表示移除節點的結構類型;(nb,lineb,typeb)中的nb表示抽象語法樹中新插入的節點,lineb表示插入節點在源文件中所在的行號,typeb表示插入節點的結構類型;
S104:編輯動作聚簇;為了獲取源代碼的語法結構變更模塊,通過分析編輯動作集合EASet中編輯動作的類型和編輯動作所在語法樹節點位置,然后在編輯動作集合上使用聚簇規則,將相同類型的編輯動作聚簇,從而獲取缺陷提交中源文件的語法結構變更模塊CUSet,使用的聚簇規則有兩條,分別如下:
1)如果相同類型的編輯動作作用于源文件同一行代碼的語法樹節點,則源文件語法變更結構被識別為該代碼行對應的語法樹根節點的結構類型;
2)如果相同類型的編輯動作作用于源文件中相鄰代碼行的抽象語法樹節點,則源文件語法變更結構被識別為這些代碼行對應的語法樹根節點的結構類型;
通過對編輯動作集合EASet使用聚簇上述聚簇規則,獲取缺陷修復提交中源文件語法結構變更模塊CUSet,表示如下:
CUSet={CU1,CU2,...,CUm}
其中CUk表示一個語法結構變更模塊;表示如下:
CUk={op,utype,file,bline,eline}
其中op表示當前變更模塊的編輯動作類型,有Add和Delete兩種類型,分別表示插入和刪除動作;utype表示變更模塊的結構類型;file表示變更模塊所在的源文件;bline表示變更模塊在源文件中的起始行;eline表示變更模塊在源文件中的結束行,當編輯動作為Add時,bline和eline表示修改后的源代碼的位置信息,當編輯動作為Delete時,bline和eline表示修改前的源代碼的位置信息。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于西安交通大學,未經西安交通大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202010574986.9/1.html,轉載請聲明來源鉆瓜專利網。





