[发明专利]一种基于程序分析的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.vipzhuanli.com/pat/books/202011374137.5/1.html,转载请声明来源钻瓜专利网。
- 上一篇:灌料装置
- 下一篇:蛋白质Ghd7在调控植物抗低氮性中的应用