[发明专利]一种基于知识图谱的程序自动修正方法有效
申请号: | 202011400929.5 | 申请日: | 2020-12-02 |
公开(公告)号: | CN112486568B | 公开(公告)日: | 2022-06-28 |
发明(设计)人: | 陈海波;韩咏男;田丰喻 | 申请(专利权)人: | 浙江理工大学 |
主分类号: | G06F8/72 | 分类号: | G06F8/72;G06F16/36;G06F8/41;G06F8/30 |
代理公司: | 杭州新源专利事务所(普通合伙) 33234 | 代理人: | 章琪超 |
地址: | 310018 浙江省杭州市江*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 知识 图谱 程序 自动 修正 方法 | ||
1.一种基于知识图谱的程序自动修正方法,其特征在于:包括包括以下步骤:
S1.获取网络上开放的源代码,通过代码知识图谱构建程序对获取的源代码进行分析,生成代码知识图谱;
所述代码知识图谱为RDF三元组结构,RDF三元组结构由代码实体和代码关系组成,代码实体为程序设计语言的所有语法成份,代码关系包括引用、包含、项、归属、值、别名、功能、输入和输出;
所述代码知识图谱的组成规则包括以下步骤:
(1).令R为一个实体关系构成的三元组el,r,er,构成代码知识图谱的基本元件,其中,er为导出实体节点,el为导入实体节点,r为关系节点;
(2).令R1=e1l,r1,e1r,R2=e1r,r2,e2r,则R1和R2构成一个关系链复合图;
(3).令R1=e1l,r1,e1r,R2=r1,r2,e2r,则R1和R2构成一个关系过渡复合图;
(4).令Ri=el,r,eir,则R=el,r,e1r|e2r|...|enr构成一个动态导出节点复合图;若令Ri=eil,r,er,则R=e1l|e2l|...|enl,r,er构成一个动态导入节点复合图;
(5).令Ri=el,r,eir,则R=el,r,e1r^e2r^...^enr构成一个超导出节点复合图;若令Ri=eil,r,er,则R=e1l^e2l^...^enl,r,er构成一个超导入节点复合图;
(6).令R1=e1l,r1,e1r,R2=e2l,r2,e2r,则R=R1,r,R2构成一个超节点复合图;
代码知识图谱的生成方法包括以下步骤:
(1).取代码图谱构建程序中的包和命名空间,生成三元组为:包名,项,包;对于存在上下级关系的包名,生成三元组为:上级包名,包含,下级包名^下级包名...^下级包名;
(2).取代码图谱构建程序中的类名和类型部分,生成三元组类名,项,类;并根据类所在的包名生成三元组为:包名,包含,类名;
(3).取代码图谱构建程序中全局变量的名称、类型、初始值,分别生成三元组为:变量名,归属,类型、变量名,项,变量、变量名,缺省,缺省值;
(4).取代码图谱构建程序中属性变量的名称、类型、初始值、及其所属的类名,分成生成三元组为:变量名,归属,类型、变量名,项,属性、变量名,缺省,缺省值、类名,包含,变量名;
(5).取代码图谱构建程序中函数的名称、函数说明、类名、返回参数,分别生成三元组为:函数名,项,函数,函数名,功能,函数说明,类名,包含,函数名,函数名,输入,传入参数1^传入参数2...,函数名,输出,返回说明,返回说明,归属,返回类型,传入参数名,归属,参数类型;
(6).按照代码知识图谱的组成规则对每一个开放的源代码生成代码知识图谱;
(7).对任意一个代码知识图谱,规定其中任意一个三元组R到任意一个节点C的距离D=e-x,其中x为三元组R的三个节点到节点C所经过路径中三元组个数的最小值;
S2.编写允许出现缺失或者错误的骨架程序;
S3.通过代码补全程序对骨架程序进行分析,利用代码知识图谱对骨架程序进行修正和补充,得到正常执行的完整程序,具体为:
(1).将骨架程序构造成骨架知识图谱;
(2).在代码知识图谱中寻找与骨架知识图谱相似的子图,令{G1,G2,...,GN}为所有代码知识图谱,T为骨架知识图谱,{C1,C2,...,CM}为有缺失或者错误的变量、函数或者类型的名称,对每一个Ci,分别计算其与Gj的相似度Sij;
相似度Sij的计算方法包括以下步骤:
(a).初始化Sij的值为0;
(b).在Gj中寻找是否有节点命名为Ci,若没有则记Sij=0,否则执行下一步;
(c).在Gj中查找所有包含Gj的三元组集,记为Pj,在T中查找所有包含Ci的三元组集,记为Q;
(d).令Y=Pj∩Q,U=Q-Pj∩Q,若Y为空集,则记Sij=0,否则对于Y中的每一个三元组Yk,记其中dk为三元组Yk到Ci的距离,对于U中的每一个三元组Ul,其中fl为三元组ul到Ci的距离,Sij=D/(D+F);
(3).对每一个Ci,选择与骨架知识图谱相似度Sij最大的图谱作为候选代码知识图谱;
(4).对每一个Ci,用候选代码知识图谱中的项目替换变量、函数或者类型的错误项和缺失项,得到正常执行的完整程序;
候选代码知识图谱中的替换方法包括以下步骤:
(a).对骨架程序中的全局变量v,检查候选代码知识图谱中是否存在三元组v,项,变量,若不存在,则默认全局变量v的类型为字符串,若存在,则检查是否存在v,归属,v1,若存在,则将v1作为全局变量v的类型,否则,将字符串作为全局变量v的类型;检查候选代码知识图谱中是否存在三元组v,缺省,v2,若存在,则将v2作为全局变量v的缺省值;
(b).对骨架程序中的类型t,检查候选代码知识图谱中是否存在三元组t,项,类,或者存在t1,使得存在三元组t1,项,类和三元组t1,别名,t,若存在,将t改为t1;
(c).对于骨架程序中类型t1中的属性变量p,检查候选代码知识图谱中是否存在三元组p,归属,p1、p,项,属性、p,缺省,p2、t1,包含,p,若存在,则将p1作为属性变量p的类型,p2作为属性变量p的缺省值;
(d).对于骨架程序中类型t1中的函数f,检查候选知识图谱中是否存在三元组f,项,函数、f,功能,f1、t1,包含,f、f,输入,fp1^fp2...^fpZ、f,输出,f2、f2,归属,返回类型、fp1,归属,fpt1,fp2,归属,fpt2、....或者fpz,归属,fptz,若存在,则将f1作为函数f的功能说明,fp1,fp2...,fpZ作为函数f的输入参数,fp1,fp2...,fpZ对应的类型分别为fpt1,fpt2,...,fptz,f2作为函数f的输出类型。
2.根据权利要求1所述的一种基于知识图谱的程序自动修正方法,其特征在于:S2中,骨架程序的编写包括:
(1).定义全局变量:给定变量的名称;
(2).定义类型:给定类型的名称、属性的名称和函数的名称。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江理工大学,未经浙江理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011400929.5/1.html,转载请声明来源钻瓜专利网。