[發明專利]一種Github開源平臺數據的獲取方法及源代碼缺陷修復系統有效
| 申請號: | 202110312352.0 | 申請日: | 2021-03-24 |
| 公開(公告)號: | CN113127339B | 公開(公告)日: | 2023-02-10 |
| 發明(設計)人: | 房鼎益;范子茜;徐榕澤;趙佳琪;葉貴鑫;湯戰勇 | 申請(專利權)人: | 西北大學 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36;G06F8/41;G06N3/08;G06N3/0464 |
| 代理公司: | 西安恒泰知識產權代理事務所 61216 | 代理人: | 史玫 |
| 地址: | 710069 *** | 國省代碼: | 陜西;61 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 github 平臺 數據 獲取 方法 源代碼 缺陷 修復 系統 | ||
本發明公開了一種Github開源平臺數據的獲取方法及源代碼缺陷修復系統,所公開的方法包括:首先對Github平臺中的數據集進行預處理,得到符合要求的變更記錄及其對應的Bug?Fix文件對;然后根據變更記錄提取Bug?Fix函數對;對Bug?Fix函數根據控制流切片以擴充訓練數量,之后對網絡進行訓練獲得缺陷分類模型和補丁生成模型。對于待修復的缺陷文件,處理得到該目標文件缺陷所在函數的向量后,先輸入到缺陷相似性分類模型,得到和目標代碼最相似的分類集合,然后選擇該集合訓練的補丁生成模型生成對應的修復補丁。解決了目前基于源碼進行學習的缺陷修復技術中面臨的數據集過小、數據集質量低下導致模型泛化能力差的問題;且能夠達到更高的正確補丁生成率。
技術領域
本發明屬于源代碼審計領域,具體涉及一種Github開源平臺數據的獲取方法及源代碼缺陷修復系統。
背景技術
軟件缺陷,是指在計算機軟件或程序中存在的某種破壞正常運行能力的問題、錯誤,或者隱藏的功能缺陷,又稱為bug。
Github開源平臺是目前流行的開源項目托管平臺,Github中包含豐富的源代碼數據、項目歷史變更信息、缺陷修復信息等,并且具有實時更新的特點,使用Github上的數據可以為缺陷修復任務提供大量的缺陷修復信息。
現有從開源項目托管平臺Github中獲取數據的常用方法:根據簡單的規則獲取相關代碼倉庫的數據收集方法,例如Michele等人直接使用Google BigQuery APIs從Github中提取包含“fix”、“error”等簡單關鍵字的數據,從而實現過濾其他不相關數據的目的。
現有技術僅使用API篩選的數據結果并不準確,由于Github中存在很多不規范的命名以及描述,關鍵詞之間并不一定有聯系,因此使用這種簡單的模式匹配方法篩選數據無法避免一些低質量的數據,導致缺陷修復模型學習的特征有限,修復效率低下。
發明內容
針對現有技術的缺陷或不足,本發明一方面提供了一種Github開源平臺數據的獲取方法。為此,所提供的方法包括:
步驟1,獲取Github開源平臺的數據作為源數據,并篩選出源數據中的Type類型為“fix”的commit記錄;
步驟2,刪除Type類型為“fix”的commit記錄中不符合缺陷修復正則表達式規則的commit記錄;
步驟3,采用commit記錄分類網絡對步驟2獲得的commit記錄進行分類,獲取包含單一修改意圖的commit message的commit記錄;所述commit記錄分類網絡是將commit記錄分為包含單一修改意圖的commit message的commit記錄和包含多個修改意圖的commitmessage的commit記錄;
步驟4,刪除步驟3所獲得的commit記錄中變更方法涉及多個項目文件的commit記錄及變更范圍大于1M的commit記錄,并去重后得到獲取的數據。
可選的,步驟1中根據fork數排序獲取Github開源平臺的數據作為源數據。
可選的,所述commit記錄分類網絡采用Bi-LSTM網絡。
本發明還提供了一種源代碼缺陷修復模型的構建方法。為此,本發明提供的構建方法包括:
Step1,采用上述方法獲取數據;
Step2,對所獲取的數據中的commit記錄進行缺陷類型分類;
Step3,獲取各種缺陷類型commit記錄的變更前的文件對象Bug file和變更后的文件對象Fix file;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于西北大學,未經西北大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202110312352.0/2.html,轉載請聲明來源鉆瓜專利網。
- 數據顯示系統、數據中繼設備、數據中繼方法、數據系統、接收設備和數據讀取方法
- 數據記錄方法、數據記錄裝置、數據記錄媒體、數據重播方法和數據重播裝置
- 數據發送方法、數據發送系統、數據發送裝置以及數據結構
- 數據顯示系統、數據中繼設備、數據中繼方法及數據系統
- 數據嵌入裝置、數據嵌入方法、數據提取裝置及數據提取方法
- 數據管理裝置、數據編輯裝置、數據閱覽裝置、數據管理方法、數據編輯方法以及數據閱覽方法
- 數據發送和數據接收設備、數據發送和數據接收方法
- 數據發送裝置、數據接收裝置、數據收發系統、數據發送方法、數據接收方法和數據收發方法
- 數據發送方法、數據再現方法、數據發送裝置及數據再現裝置
- 數據發送方法、數據再現方法、數據發送裝置及數據再現裝置





