CN112486568B - 一种基于知识图谱的程序自动修正方法 - Google Patents

一种基于知识图谱的程序自动修正方法 Download PDF

Info

Publication number
CN112486568B
CN112486568B CN202011400929.5A CN202011400929A CN112486568B CN 112486568 B CN112486568 B CN 112486568B CN 202011400929 A CN202011400929 A CN 202011400929A CN 112486568 B CN112486568 B CN 112486568B
Authority
CN
China
Prior art keywords
name
code
program
knowledge graph
type
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202011400929.5A
Other languages
English (en)
Other versions
CN112486568A (zh
Inventor
陈海波
韩咏男
田丰喻
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Sci Tech University ZSTU
Original Assignee
Zhejiang Sci Tech University ZSTU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang Sci Tech University ZSTU filed Critical Zhejiang Sci Tech University ZSTU
Priority to CN202011400929.5A priority Critical patent/CN112486568B/zh
Publication of CN112486568A publication Critical patent/CN112486568A/zh
Application granted granted Critical
Publication of CN112486568B publication Critical patent/CN112486568B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/36Creation of semantic tools, e.g. ontology or thesauri
    • G06F16/367Ontology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Animal Behavior & Ethology (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于知识图谱的程序自动修正方法,包括包括以下步骤:S1.获取网络上开放的源代码,通过代码知识图谱构建程序对获取的源代码进行分析,生成代码知识图谱;S2.编写允许出现缺失或者错误的骨架程序;S3.通过代码补全程序对骨架程序进行分析,利用代码知识图谱对骨架程序进行修正和补充,得到正常执行的完整程序。本发明可以对有问题的骨架程序自动修整得到完整的程序,具有简化程序编写、提高程序编写效率、减少人工劳动量的特点。

Description

一种基于知识图谱的程序自动修正方法
技术领域
本发明涉及一种程序自动修正方法,特别是一种基于知识图谱的程序自动修正方法。
背景技术
当前,程序设计的自动化开发技术正在从原来的组件化、模型驱动方法向基于深度学习、语义驱动的方法转变。目前,现有已经存在通过自然语言处理生成所需的程序片段的方法,然而这些方法需要神经网络的大规模计算支持,没有统一的标准,代码知识图谱的逻辑结构、构造方法和自动化实际应用并没有得到很好的解决,并能不提供一种完整的编程手段,程序员在编写程序时,需要非常严谨,不能有缺失和出错,一旦编写程序出现问题,就无法进行正常的运行,无法自动修正,程序编写复杂、麻烦,效率较低,人工劳动量大。
因此,现有的程序处理,存在编写复杂、效率较低、人工劳动量大的问题。
发明内容
本发明的目的在于,提供一种基于知识图谱的程序自动修正方法。本发明可以对有问题的骨架程序自动修整得到完整的程序,具有简化程序编写、提高程序编写效率、减少人工劳动量的特点。
本发明的技术方案:一种基于知识图谱的程序自动修正方法,包括包括以下步骤:
S1.获取网络上开放的源代码,通过代码知识图谱构建程序对获取的源代码进行分析,生成代码知识图谱;
S2.编写允许出现缺失或者错误的骨架程序;
S3.通过代码补全程序对骨架程序进行分析,利用代码知识图谱对骨架程序进行修正和补充,得到正常执行的完整程序。
前述的一种基于知识图谱的程序自动修正方法中,S1中,所述代码知识图谱为RDF三元组结构,RDF三元组结构由代码实体和代码关系组成,代码实体为程序设计语言的所有语法成份,代码关系包括引用、包含、项、归属、值、别名、功能、输入和输出。
前述的一种基于知识图谱的程序自动修正方法中,S1中,代码知识图谱的生成方法包括以下步骤:
(1).取代码图谱构建程序中的包和命名空间,生成三元组为:<包名,项,包>;对于存在上下级关系的包名,生成三元组为:<上级包名,包含,下级包名^下级包名...^下级包名>;
(2).取代码图谱构建程序中的类名和类型部分,生成三元组<类名,项,类>;并根据类所在的包名生成三元组为:<包名,包含,类名>;
(3).取代码图谱构建程序中全局变量的名称、类型、初始值,分别生成三元组为:<变量名,归属,类型>、<变量名,项,变量>、<变量名,缺省,缺省值>;
(4).取代码图谱构建程序中属性变量的名称、类型、初始值、及其所属的类名,分成生成三元组为:<变量名,归属,类型>、<变量名,项,属性>、<变量名,缺省,缺省值>、<类名,包含,变量名>;
(5).取代码图谱构建程序中函数的名称、函数说明、类名、返回参数,分别生成三元组为:<函数名,项,函数>,<函数名,功能,函数说明>,<类名,包含,函数名>,<函数名,输入,传入参数1^传入参数2...>,<函数名,输出,返回说明>,<返回说明,归属,返回类型>,<传入参数名,归属,参数类型>;
(6).按照代码知识图谱的组成规则对每一个开放的源代码生成代码知识图谱;
(7).对任意一个代码知识图谱,规定其中任意一个三元组R到任意一个节点C的距离D=e-x,其中x为三元组R的三个节点到节点C所经过路径中三元组个数的最小值。
前述的一种基于知识图谱的程序自动修正方法中,所述代码知识图谱的组成规则包括以下步骤:
(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>构成一个超节点复合图。
前述的一种基于知识图谱的程序自动修正方法中,S2中,骨架程序的编写包括:
(1).定义全局变量:给定变量的名称;
(2).定义类型:给定类型的名称、属性的名称和函数的名称。
前述的一种基于知识图谱的程序自动修正方法中,S3具体包括以下步骤:
(1).将骨架程序构造成骨架知识图谱;
(2).在代码知识图谱中寻找与骨架知识图谱相似的子图,令{G1,G2,...,GN}为所有代码知识图谱,T为骨架知识图谱,{C1,C2,...,CM}为有缺失或者错误的变量、函数或者类型的名称,对每一个Ci,分别计算其与Gj的相似度Sij
(3).对每一个Ci,选择与骨架知识图谱相似度Sij最大的图谱作为候选代码知识图谱;
(4).对每一个Ci,用候选代码知识图谱中的项目替换变量、函数或者类型的错误项和缺失项,得到正常执行的完整程序。
前述的一种基于知识图谱的程序自动修正方法中,所述步骤(2)中,相似度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,记
Figure BDA0002812294080000041
其中dk为三元组Yk到Ci的距离,对于U中的每一个三元组Ul
Figure BDA0002812294080000042
其中fl为三元组ul到Ci的距离,Sij=D/(D+F)。
前述的一种基于知识图谱的程序自动修正方法中,所述步骤(4)中,候选代码知识图谱中的替换方法包括以下步骤:
(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的输出类型。
与现有技术相比,本发明允许程序员编写有缺失、有错误的骨架程序,进一步通过代码知识图谱的构造和学习,自动对骨架程序进行修正,从而得到真实可以运行的程序,实现渐进式的程序设计自动化,提高了初始的骨架程序的容错率,可以简化初期程序的编写,降低程序员的编写负担,减少程序员的编写工作量,从而可以提高程序编写的效率。
因此,本发明可以对有问题的骨架程序自动修整得到完整的程序,具有简化程序编写、提高程序编写效率、减少人工劳动量的特点。
附图说明
图1是本发明的流程示意图;
图2是代码知识图谱的基本元件示意图;
图3是RDF三元组结构的关系复合链结构示意图;
图4是RDF三元组结构的关系过渡复合结构示意图;
图5是RDF三元组结构的动态导出复合结构示意图;
图6是RDF三元组结构的超导出节点复合结构示意图;
图7是RDF三元组结构的超节点复合结构示意图;
图8是代码知识图谱A;
图9是代码知识图谱B;
图10是骨架知识图谱。
具体实施方式
下面结合实施例对本发明作进一步的说明,但并不作为对本发明限制的依据。
实施例。
一种基于知识图谱的程序自动修正方法,如图1所示,具体包括以下步骤:
S1.获取网络上开放的源代码,通过代码知识图谱构建程序对获取的源代码进行分析,生成代码知识图谱;
S2.编写允许出现缺失或者错误的骨架程序;
S3.通过代码补全程序对骨架程序进行分析,利用代码知识图谱对骨架程序进行修正和补充,得到正常执行的完整程序。
所述S1.中,所述代码知识图谱为RDF三元组结构。所述RDF三元组结构由代码实体和代码关系组成。代码实体为程序设计语言的所有语法成份,代码关系包括引用、包含、项、归属、值、别名、功能、输入和输出。
代码知识图谱的组成规则包括:
(1).令R为一个实体关系构成的三元组<el,r,er>,构成代码知识图谱的基本元件,如图2所示。其中,er为导出实体节点,el为导入实体节点,r为关系节点。
(2).令R1=<e1l,r1,e1r>,R2=<e1r,r2,e2r>,则R1和R2构成一个关系链复合图,如图3所示。
(3).令R1=<e1l,r1,e1r>,R2=<r1,r2,e2r>,则R1和R2构成一个关系过渡复合图,如图4所示。
(4).令Ri=<el,r,eir>,i属于{1,2,...,N},则R=<el,r,e1r|e2r|...|enr>构成一个动态导出节点复合图。如图5所示,它表示在不同环境下,会有不同的三元组项成立。类似的,若令Ri=<eil,r,er>,i属于{1,2,...,N},则R=<e1l|e2l|...|enl,r,er>构成一个动态导入节点复合图。
(5).令Ri=<el,r,eir>,i属于{1,2,...,N},则R=<el,r,e1r^e2r^...^enr>构成一个超导出节点复合图。如图6所示,它表示所有Ri总是同时成立。类似的,若令Ri=<eil,r,er>,i属于{1,2,...,N},则R=<e1l^e2l^...^enl,r,er>构成一个超导入节点复合图。
(6).令R1=<e1l,r1,e1r>,R2=<e2l,r2,e2r>,则R=<R1,r,R2>构成一个超节点复合图,如图7所示。
s1中,代码知识图谱的具体生成方法包括以下步骤:
(1).取代码图谱构建程序中的包和命名空间(简称包名),生成三元组为:<包名,项,包>;对于存在上下级关系的包名,生成三元组为:<上级包名,包含,下级包名^下级包名...^下级包名>;
(2).取代码图谱构建程序中的类名和类型部分,生成三元组为:<类名,项,类>;并根据类所在的包名生成三元组为:<包名,包含,类名>;若程序中的类包含注释,则根据注释的意义分别生成三元组为:<类名,别名,注释>,<类名,时间戳,注释>,<类名,作者,注释>,<类名,版本,注释>;
(3).取代码图谱构建程序中全局变量的名称(简称变量名)、类型、初始值,分别生成三元组为:<变量名,归属,类型>、<变量名,项,变量>、<变量名,缺省,缺省值>;
(4).取代码图谱构建程序中属性变量的名称(简称变量名)、类型、初始值、及其所属的类名,分成生成三元组为:<变量名,归属,类型>、<变量名,项,属性>、<变量名,缺省,缺省值>、<类名,包含,变量名>;
(5).取代码图谱构建程序中函数的名称(简称函数名)、函数说明、类名、返回参数,包括返回参数的返回类型、返回说明、传入参数(可以有多个),包括每个参数的类型、参数名,分别生成三元组为:<函数名,项,函数>,<函数名,功能,函数说明>,<类名,包含,函数名>,<函数名,输入,传入参数1^传入参数2...>,<函数名,输出,返回说明>,<返回说明,归属,返回类型>,<传入参数名,归属,参数类型>;
(6).对上述(1)-(5)步骤得到的所有三元组,按照代码知识图谱的组成规则对每一个开放的源代码生成代码知识图谱;
(7).在任意一个代码知识图谱中,规定其中任意一个三元组R到任意一个节点C的距离D=e-x,其中x为三元组R的三个节点到节点C所经过路径中三元组个数的最小值。
所述S2中,骨架程序的编写是按照Python程序设计语言的语法编写,但是允许编写过程中出现缺失和错误,具体包括以下内容:
(1).定义全局变量:程序设计语言要求变量给出类型、名称、约束和初始值,而在骨架程序中只要给出变量的名称就可以,其余的通过后续的修正和补充方法得到。
(2).定义类型:程序设计语言要求类型给出类型的名称、约束、属性(包含属性类型、名称、约束、初始值)、函数(输入、输出)。在骨架程序中只要给出类型的名称,属性的名称、函数的名称,其余的通过后续的修正和补充方法得到。
编写好的骨架程序因为缺失或者错误并不能执行,需要通过对缺失或者错误进行修正,因此S3具体包括以下步骤:
(1).将骨架程序按照代码知识图谱的生成方法构造骨架知识图谱。
(2).在代码知识图谱中寻找与骨架知识图谱相似的子图,令{G1,G2,...,GN}为所有代码知识图谱,T为骨架知识图谱,{C1,C2,...,CM}为有缺失或者错误的变量、函数、类型的名称。对每一个Ci,i属于{1,2,...,M},分别计算其与Gj,j属于{1,2,...,N}的相似度Sij
Sij的计算方法如下:
(a).初始化Sij的值为0;
(b).在Gj中寻找是否有节点命名为Ci,若没有则记Sij=0,否则执行下一步;
(c).在Gj中查找所有包含Gj的三元组集,记为Pj,包含Ci的三元组集是指以Ci导入节点或导出节点或者关系节点的三元组集,在T中查找所有包含Ci的三元组集,记为Q;
(d).令Y=Pj∩Q,U=Q-Pj∩Q。若Y为空集,则记Sij=0,否则对于Y中的每一个三元组Yk,k属于{1,2,...,K},K为Y中元素的个数。记
Figure BDA0002812294080000091
其中dk为三元组Yk到Ci的距离。对于U中的每一个三元组Ul,l属于{1,2,...,L},
Figure BDA0002812294080000092
其中fl为三元组ul到Ci的距离。Sij=D/(D+F)。
(3).对每一个Ci,i属于{1,2,...,M},选择与骨架知识图谱相似度Sij最大的图谱作为候选代码知识图谱;
(4).对每一个Ci,i属于{1,2,...,M},用候选代码知识图谱中的项目替换变量、函数和类型的错误项和缺失项,得到正常执行的完整程序。候选代码知识图谱中的替换方法包括以下步骤:
(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的输出类型。
实际操作如下:
图8和图9分别是代码图谱构建程序生成的代码知识图谱A和代码知识图谱B。
现有一段骨架程序:
type账号=<id,账号,密码,有效期>;
type用户=<姓名,电话>
Global账户库;
function login(账号,密码){}
对以上程序按照本发明方法构造骨架知识图谱,如图10所示。
骨架程序中没有给定id,账号,密码,有效期的类型和约束,没有给定姓名,联系电话的类型和约束,也没有给定用户库的类型,以及login的参数和结果类型。
对这些缺失的内容按照上述方法计算相似度,选取相似度大的图谱进行匹配,匹配相似度计算结果和修补内容如下表所示:
Figure BDA0002812294080000111
骨架修正后的程序如下:
type账号=<id:整数,账号:字符串,密码:字符串,有效期:有效期>;
type用户=<姓名:String,电话:String>
Global用户库:集合<用户>=null;
function login(账号:字符串,密码:字符串):布尔{}
该程序是可以正常执行无报错的完整程序。

Claims (2)

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,记
Figure FDA0003621250090000021
其中dk为三元组Yk到Ci的距离,对于U中的每一个三元组Ul
Figure FDA0003621250090000022
其中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).定义类型:给定类型的名称、属性的名称和函数的名称。
CN202011400929.5A 2020-12-02 2020-12-02 一种基于知识图谱的程序自动修正方法 Active CN112486568B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011400929.5A CN112486568B (zh) 2020-12-02 2020-12-02 一种基于知识图谱的程序自动修正方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011400929.5A CN112486568B (zh) 2020-12-02 2020-12-02 一种基于知识图谱的程序自动修正方法

Publications (2)

Publication Number Publication Date
CN112486568A CN112486568A (zh) 2021-03-12
CN112486568B true CN112486568B (zh) 2022-06-28

Family

ID=74939200

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011400929.5A Active CN112486568B (zh) 2020-12-02 2020-12-02 一种基于知识图谱的程序自动修正方法

Country Status (1)

Country Link
CN (1) CN112486568B (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106355627A (zh) * 2015-07-16 2017-01-25 中国石油化工股份有限公司 一种用于生成知识图谱的方法及系统
CN108121829A (zh) * 2018-01-12 2018-06-05 扬州大学 面向软件缺陷的领域知识图谱自动化构建方法
CN109885691A (zh) * 2019-01-08 2019-06-14 平安科技(深圳)有限公司 知识图谱补全方法、装置、计算机设备及存储介质
CN110704634A (zh) * 2019-09-06 2020-01-17 平安科技(深圳)有限公司 知识图谱链接错误的查修方法、装置及存储介质
CN110825882A (zh) * 2019-10-09 2020-02-21 西安交通大学 一种基于知识图谱的信息系统管理方法
CN111177410A (zh) * 2019-12-27 2020-05-19 浙江理工大学 基于进化R-tree的知识图谱存储和相似性检索方法
CN111435367A (zh) * 2019-01-15 2020-07-21 阿里巴巴集团控股有限公司 知识图谱的构建方法、系统、设备及存储介质
CN111444181A (zh) * 2020-03-20 2020-07-24 腾讯科技(深圳)有限公司 知识图谱更新方法、装置及电子设备
CN111797242A (zh) * 2020-06-29 2020-10-20 哈尔滨工业大学 一种基于代码知识图谱和知识迁移的代码摘要生成方法
CN111949800A (zh) * 2020-07-06 2020-11-17 北京大学 一种开源项目知识图谱的建立方法和系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10606958B2 (en) * 2018-01-10 2020-03-31 International Business Machines Corporation Machine learning modification and natural language processing

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106355627A (zh) * 2015-07-16 2017-01-25 中国石油化工股份有限公司 一种用于生成知识图谱的方法及系统
CN108121829A (zh) * 2018-01-12 2018-06-05 扬州大学 面向软件缺陷的领域知识图谱自动化构建方法
CN109885691A (zh) * 2019-01-08 2019-06-14 平安科技(深圳)有限公司 知识图谱补全方法、装置、计算机设备及存储介质
CN111435367A (zh) * 2019-01-15 2020-07-21 阿里巴巴集团控股有限公司 知识图谱的构建方法、系统、设备及存储介质
CN110704634A (zh) * 2019-09-06 2020-01-17 平安科技(深圳)有限公司 知识图谱链接错误的查修方法、装置及存储介质
CN110825882A (zh) * 2019-10-09 2020-02-21 西安交通大学 一种基于知识图谱的信息系统管理方法
CN111177410A (zh) * 2019-12-27 2020-05-19 浙江理工大学 基于进化R-tree的知识图谱存储和相似性检索方法
CN111444181A (zh) * 2020-03-20 2020-07-24 腾讯科技(深圳)有限公司 知识图谱更新方法、装置及电子设备
CN111797242A (zh) * 2020-06-29 2020-10-20 哈尔滨工业大学 一种基于代码知识图谱和知识迁移的代码摘要生成方法
CN111949800A (zh) * 2020-07-06 2020-11-17 北京大学 一种开源项目知识图谱的建立方法和系统

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Triple Trustworthiness Measurement for Knowledge Graph;Shengbin Jia,Yang Xiang,Xiaojun Chen,Kun Wang,Shijia;《WWW "19: The World Wide Web Conference》;20190513;第2865–2871页 *
基于知识图谱的医疗知识搜索研究;刘崇;《中国优秀硕士学位论文全文数据库 经济与管理科学辑》;20180715;J152-711 *
王飞 ; 刘井平 ; 刘斌 ; 钱铁云 ; 肖仰华.代码知识图谱构建及智能化软件开发方法研究.《软件学报》.2019,47-66. *
陈海波 ; 董建明.可视化业务模型的设计与实现.《计算机工程》.2010, *

Also Published As

Publication number Publication date
CN112486568A (zh) 2021-03-12

Similar Documents

Publication Publication Date Title
Kappel et al. Model transformation by-example: a survey of the first wave
Barbau et al. OntoSTEP: Enriching product model data using ontologies
Garcés et al. Managing model adaptation by precise detection of metamodel changes
US7526503B2 (en) Interactive schema translation with instance-level mapping
Hidaka et al. GRoundTram: An integrated framework for developing well-behaved bidirectional model transformations
JP7206687B2 (ja) Apiパラメータのマッピング
WO2021073195A1 (zh) 生成电子表格公式的计算机实现的方法、设备和存储介质
CN104679511A (zh) 基于MDE模型转换的MapReduce代码生成方法
CN103049251A (zh) 一种数据库持久层装置及数据库操作方法
CN112306497A (zh) 一种将自然语言转化为程序代码的方法及系统
BR112017024159B1 (pt) Método implementado por computador e sistema que apresenta aplicações tipo software baseado em especificações de projeto
CN107330014A (zh) 一种数据表的创建方法与设备
Le et al. Domain-driven design using meta-attributes: A DSL-based approach
Jiang et al. Automatic building information model query generation
CN113655996B (zh) 一种基于需求模型的企业级系统生成方法
Tauscher et al. A modular graph transformation rule set for IFC‐to‐CityGML conversion
Tomingas et al. Data integration patterns for data warehouse automation
CN112486568B (zh) 一种基于知识图谱的程序自动修正方法
Lu et al. Zen-CC: An automated and incremental conformance checking solution to support interactive product configuration
Jovanovic et al. Ore: An iterative approach to the design and evolution of multi-dimensional schemas
Mancas MatBase–a Tool for Transparent Programming while Modelling Data at Conceptual Levels
CN110209699B (zh) 一种基于openEHR Composition模板的数据接口动态生成与执行方法
Kutter et al. Integrating domain specific language design in the software life cycle
Cicchetti et al. Towards propagation of changes by model approximations
Lin A model transformation approach to automated model evolution

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant