[發明專利]一種基于程序分析的Node.JS代碼片段環境依賴性的自動推斷方法在審
| 申請號: | 202011374137.5 | 申請日: | 2020-11-30 |
| 公開(公告)號: | CN114579130A | 公開(公告)日: | 2022-06-03 |
| 發明(設計)人: | 張衛豐;黃澤龍;周國強 | 申請(專利權)人: | 南京郵電大學 |
| 主分類號: | G06F8/41 | 分類號: | G06F8/41 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 210023 *** | 國省代碼: | 江蘇;32 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 程序 分析 node js 代碼 片段 環境 依賴性 自動 推斷 方法 | ||
1.一種基于程序分析的Node.JS代碼片段環境依賴性的自動推斷方法:首先,根據libraries.io數據集中的SourceRank構建已知npm包的知識庫;其次,使用靜態分析,動態分析和關聯規則挖掘的組合來發現有關包依賴性的信息,并根據其互相之間的關系建模為相互依賴圖,使用圖形數據庫存儲;然后,對于給出的新的Node.JS代碼片段,解析目標代碼并提取所有導入資源的列表,將其映射回一組可以安裝的軟件包,再利用一種用于遵循安裝順序的直接依賴和傳遞依賴性的推理算法,查找到的依賴項進行正確排序,得到最后的返回結果。
2.根據權利要求1所描述的一種基于程序分析的Node.JS代碼片段環境依賴性的自動推斷方法,其特征包括以下幾個步驟:
1)首先根據libraries.io數據集中的SourceRank的源級別選擇最常用的包。通過靜態分析枚舉包的已知資源以供以后檢索。
2)對于無法正確列出依賴項的軟件包,我們使用動態分析來解決。嘗試使用npminstall安裝軟件包,記錄成功安裝的資源,對于安裝失敗的資源,解析其錯誤輸出,并根據輸出,我們的動態分析過程將依賴記錄輸入知識庫。
3)我們將知識庫建模為相互依賴圖,使用圖形數據庫存儲。其中節點表示知識庫中的現有對象,有向邊表示它們之間的關系。
4)對于給出的新的Node.JS代碼片段,解析目標代碼并提取所有導入資源的列表,這一步主要通過構建源代碼的抽象語法樹(AST)來進行實現。知道了代碼的資源后,就可以將其映射回一組可以安裝的軟件包。我們通過查詢我們的知識庫和潛在匹配記錄的包管理系統來執行此反向查找。
5)在4)中得到所需的依賴包后,根據3)中的相互依賴圖,以包的直接依賴和傳遞依賴性來對查找到的依賴項進行正確排序,得到最后的返回結果。
3.根據權利要求2所述的基于程序分析的Node.JS代碼片段環境依賴性的自動推斷方法,其特征是步驟1)中,一種使用靜態分析生成的系統級傳遞依賴關系的知識源來計算包依賴關系的技術。根據libraries.io數據集中的SourceRank的源級別選擇最常用的包。通過靜態分析枚舉包的已知資源以供以后檢索,即建立一個脫機知識庫。
4.根據權利要求2所述的基于程序分析的Node.JS代碼片段環境依賴性的自動推斷方法,其特征是步驟2)中,對于無法正確列出依賴項的軟件包,我們使用動態分析來解決的方法。某些軟件包可能無法正確列出其依賴項,從而阻止npm在安裝期間自動處理解析。我們會在安裝失敗時,解析輸出以查找其錯誤輸出,例如:“no module namedname”、“cannotfindname”等,這表明依賴于某些不存在的包,并根據它的提示,將其依賴記錄輸入知識庫。
5.根據權利要求2所述的基于程序分析的Node.JS代碼片段環境依賴性的自動推斷方法,其特征是步驟3)中,將知識庫建模為相互依賴圖。對于相互依賴圖,我們主要使用的節點為包節點、版本節點、資源節點、關聯節點,具體參考附圖說明中的圖1。其中包的所有已知版本都表示為版本節點,版本標記有標簽版本并存儲包版本號。資源節點歸版本節點所有,由版本節點的有向邊指示。關聯節點表示各個關聯規則,節點標記為關聯并維護元數據以確保置信度,支持,提升和計數。
6.根據權利要求2所述的基于程序分析的Node.JS代碼片段環境依賴性的自動推斷方法,其特征是步驟4)中,對于給出的新的Node.JS代碼片段,解析目標代碼并提取所有導入資源的列表,通過查詢我們的知識庫和潛在匹配記錄的包管理系統來執行此反向查找。應用程序所需資源與可安裝程序包之間的匹配可以通過知識庫中的一個或多個已知資源的完全匹配或部分匹配來確定。此外,我們也檢查是否存在與所需資源同名的包,即在反向查找完成后,將包名稱規范化以匹配包管理系統上的名稱。
7.根據權利要求2所述的基于程序分析的Node.JS代碼片段環境依賴性的自動推斷方法,其特征是步驟5)中,一種用于遵循安裝順序的直接依賴和傳遞依賴性的推理算法。僅了解與頂級資源相對應的包通常不足以進行正確的環境配置,因為這些包本身可能依賴于其他包。假設相互依賴關系圖包含所有必要的關系,必須安裝的包的集合P是已解析的直接依賴關系的集合S與從S可到達的包集合R聯合。
然而,僅計算P是不夠的。我們還必須保持依賴關系的正確排序,以便每個包安裝在依賴于它的任何其他包之前。我們通過執行以每個包p∈S為根的深度優先搜索來執行此操作。
本發明基于程序分析,自動推斷Node.JS代碼片段環境依賴性的自動推斷。首先,本發明關注的是Node.JS代碼片段中的函數調用和包含該函數聲明的依賴包之間的關系。其次,本發明使用脫機知識庫來正確推斷目標腳本的依賴關系。此知識庫包含包,其版本和資源以及它們之間的關系。它是通過對Libraries.io數據集中的已知的包應用靜態和動態分析而構建的。其中,靜態分析枚舉包的已知資源以供以后檢索,動態分析收集有關傳遞依賴性的信息。然后,公共Python項目中依賴關系的關聯規則挖掘利用了開發人員生成的系統級傳遞依賴關系的知識。最后,針對給出的陌生的代碼片段,在脫機知識庫的基礎上,使用了遵循安裝順序的直接依賴和傳遞依賴的推理算法。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于南京郵電大學,未經南京郵電大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202011374137.5/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:灌料裝置
- 下一篇:蛋白質Ghd7在調控植物抗低氮性中的應用





