[發明專利]一種基于深度學習的軟件代碼行級缺陷檢測方法有效
| 申請號: | 201911092161.7 | 申請日: | 2019-11-11 |
| 公開(公告)號: | CN110825642B | 公開(公告)日: | 2021-01-01 |
| 發明(設計)人: | 楊小虎;曹靖;劉力華;張昕東;鄢萌;夏鑫 | 申請(專利權)人: | 浙江大學 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36 |
| 代理公司: | 杭州求是專利事務所有限公司 33200 | 代理人: | 邱啟旺 |
| 地址: | 310058 浙江*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 深度 學習 軟件 代碼 缺陷 檢測 方法 | ||
本發明公開了一種基于深度學習的軟件代碼行級缺陷檢測方法,屬于軟件代碼缺陷檢測領域,該方法具體包括:(1)master分支中基于類的ATS提取,(2)ATS集合預處理,(3)LSTM模型訓練,(4)開發分支ATS集合提取與檢測,(5)ATS異常概率排序。該方法的模型代碼處理粒度可達代碼行級別,可對代碼片段做缺陷檢測,能夠有效捕捉代碼中相關Token的前后關聯,可利用已有其他代碼倉庫中的相關代碼信息。
技術領域
本發明屬于軟件代碼缺陷檢測領域,具體地涉及一種基于深度學習的軟件代碼行級缺陷檢測方法。
背景技術
代碼缺陷檢測一直是軟件工程領域的研究熱點。FindBugs是一種基于規則匹配的缺陷檢測工具,其通過檢查類或jar文件,將字節碼與一組缺陷模式進行對比以發現可能的問題。Commit Guru是一種基于特征的變更級缺陷檢測工具,其通過人工定義特征,通過機器學習建模,從而判斷新提交的代碼變更缺陷的可能性。Bugram是一種基于代碼統計特性的代碼行級缺陷檢測工具,其通過N-gram算法計算源代碼中Token的異常概率,以檢測代碼缺陷。但這些方法都有其各自的缺點
1.規則難以覆蓋所有缺陷情況;
2.代碼處理粒度太大,無法對代碼片段做缺陷檢測;
3.無法有效捕捉代碼中Token關聯;
4.無法有效利用其他代碼倉庫代碼信息;
這些問題廣泛存在于其他的代碼克隆檢測工具中。
發明內容
針對現有技術存在的問題,本發明提供了一種基于深度學習的軟件代碼行級缺陷檢測方法。
本發明是通過以下技術方案實現的:一種基于深度學習的軟件代碼行級缺陷檢測方法,具體包括如下步驟:
步驟一:master分支中基于類的ATS提取
master分支中的每一個Java文件通過AST解析為一棵語法樹,Java文件中的每一個方法為所述語法樹上的一棵子樹,記為MST,通過遍歷MST,得到MST所代表該部分源代碼的API執行流程。針對指定類,從解析到的代碼執行流程中提取出指定類在MST中的所有API使用序列,即ATS;多個ATS構成ATS集合。
步驟二:ATS集合預處理
使用基于Skip-gram算法的分布式語義模型,將步驟一指定類下的所有APIToken訓練為d維的詞向量,以此來捕捉所述ATS集合中各API token在向量空間下的關聯。
步驟三:LSTM模型訓練
將步驟一中提取到的ATS集合,按所屬類分類,得到若干個ATS集,針對每一個ATS集訓練一個LSTM模型,直到所述LSTM模型訓練至損失函數收斂為止。
步驟四:開發分支ATS集合提取與檢測
將Git倉庫切換至開發分支,使用步驟一和二中的方法從開發分支中提取指定類所屬的ATS集合,將得到的ATS集合輸入步驟三中訓練好的對應LSTM模型,得到各ATS的異常概率結果,具體過程為:
ATSc={api1,api2,…,apik,EOF} (3)
其中,EOF為結束標識符,
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于浙江大學,未經浙江大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201911092161.7/2.html,轉載請聲明來源鉆瓜專利網。





