首页> 中国专利> 代码继承关系优化方法、装置、设备及存储介质

代码继承关系优化方法、装置、设备及存储介质

摘要

本发明涉及研发管理领域,公开了一种代码继承关系优化方法、装置、设备及存储介质。该方法包括:获取待优化的目标代码;提取所述目标代码中的多个类对象以及分别提取所述目标代码中每一所述类对象的多个关键字;根据每一所述类对象的多个关键字,分别对所述目标代码进行标识符识别和父子关系匹配,得到所述目标代码中的父类代码和子类代码;将所述父类代码和所述子类代码输入预置代码检测模型进行代码重写分析,输出所述目标代码中的重写代码;根据预置里氏替换原则,对所述重写代码进行继承关系优化,得到优化代码。本发明能够对代码进行自动优化,大大提高了代码优化效率,减小了代码错误率,提升了代码质量。

著录项

  • 公开/公告号CN113254024A

    专利类型发明专利

  • 公开/公告日2021-08-13

    原文格式PDF

  • 申请/专利权人 平安普惠企业管理有限公司;

    申请/专利号CN202110583765.2

  • 发明设计人 齐秀;

    申请日2021-05-27

  • 分类号G06F8/41(20180101);

  • 代理机构11321 北京市京大律师事务所;

  • 代理人姚维

  • 地址 518027 广东省深圳市前海深港合作区前湾一路1号A栋201室(入驻深圳市前海商务秘书有限公司)

  • 入库时间 2023-06-19 12:13:22

说明书

技术领域

本发明涉及研发管理领域,尤其涉及一种代码继承关系优化方法、装置、设备及存储介质。

背景技术

在程序的开发与迭代开发过程中,鉴于开发人员经验不足、工期短等因素,保障功能的同时提升移交速度,会造成代码质量会相对低下、出现逻辑糅杂等,因此,需要对代码进行优化。代码优化是指对程序代码进行等价(指不改变程序的运行结果)变换,程序代码可以是中间代码,也可以是目标代码。

在对程序代码进行代码优化时,通常需要对待优化的程序代码进行全盘检查,然后根据经验查找程序代码中的可以优化的代码,然后对查找到的代码进行优化。目前的代码优化,通常依赖于人工检查,不能达到自动检测,从而造成优化后的代码质量低,代码优化的效率很低。

发明内容

本发明的主要目的在于解决目前代码优化的错误率高且代码优化效率低的技术问题。

本发明第一方面提供了一种代码继承关系优化方法,所述代码继承关系优化方法包括:

获取待优化的目标代码;

提取所述目标代码中的多个类对象以及分别提取所述目标代码中每一所述类对象的多个关键字;

根据每一所述类对象的多个关键字,分别对所述目标代码进行标识符识别和父子关系匹配,得到所述目标代码中的父类代码和子类代码;

将所述父类代码和所述子类代码输入预置代码检测模型进行代码重写分析,输出所述目标代码中的重写代码;

根据预置里氏替换原则,对所述重写代码进行继承关系优化,得到优化代码。

可选的,在本发明第一方面的第一种实现方式中,在所述获取待优化的目标代码之前,还包括:

对所述里氏替换原则进行元素抽取,得到多个元素;

分别对各个所述元素进行标识,得到多个标识元素;

对各个所述标识元素进行量化建模,得到初始检测模型;

获取多个样本代码,并分别将各个所述样本代码输入所述初始检测模型进行模型训练,直至所述初始检测模型的吻合度超过预置吻合度阈值,得到代码检测模型。

可选的,在本发明第一方面的第二种实现方式中,所述提取所述目标代码中的多个类对象以及分别提取所述目标代码中每一所述类对象的多个关键字包括:

获取所述目标代码的编码语言类型,并根据所述编码语言类型,识别所述目标代码中的类标识符;

根据所述类标识符,提取所述目标代码中的类对象,得到多个类对象;

调用预置构造函数,分别计算各个所述类对象的对象返回值,得到多个类对象返回值;

根据各个所述类对象返回值,对所述目标代码进行关键词提取,得到每一所述类对象的多个关键字。

可选的,在本发明第一方面的第三种实现方式中,所述根据每一所述类对象的多个关键字,分别对所述目标代码进行标识符识别和父子关系匹配,得到所述目标代码中的父类代码和子类代码包括:

根据每一所述类对象的多个关键字,对所述目标代码进行标识符识别,得到多个代码标识符;

根据各个所述代码标识符,对所述目标代码进行关系分类和类别匹配,得到父类代码;

对所述父类代码进行递归查询,得到所述父类代码对应的子类代码。

可选的,在本发明第一方面的第四种实现方式中,所述将所述父类代码和所述子类代码输入预置代码检测模型进行代码重写分析,输出所述目标代码中的重写代码包括:

将所述父类代码和所述子类代码输入所述代码检测模型;

通过所述代码检测模型分别提取所述父类代码和所述子类代码的成员函数,得到所述父类代码的第一成员函数和所述子类代码的第二成员函数;

通过所述代码检测模型提取所述第二成员函数中与所述第一成员函数具有相同名称、相同参数和相同返回值类型的函数,得到重写成员函数;

通过所述代码检测模型将所述重写成员函数在所述目标代码中的代码段作为重写代码。

可选的,在本发明第一方面的第五种实现方式中,所述根据预置里氏替换原则,对所述重写代码进行继承关系优化,得到优化代码包括:

对所述重写代码进行复杂算子消除和/或循环冗余代码消除,得到简洁代码;

根据所述父类代码和所述子类代码生成所述简洁代码的继承关系,并根据所述继承关系,对所述简洁代码进行关系重组,得到组合代码;

根据所述组合代码,对所述重写代码进行填充和覆盖,得到优化代码。

可选的,在本发明第一方面的第六种实现方式中,在所述根据预置里氏替换原则,对所述重写代码进行继承关系优化,得到优化代码之后,还包括:

获取所述优化代码的属性数据,其中,所述属性数据包括空格数、注释数量以及代码量;

分别计算所述空格数、注释数量以及代码量和预置质量规范数据的比值,对应得到空格数比值、注释数量比值以及代码量比值;

根据所述空格数比值、所述注释数量比值以及所述代码量比值,生成所述优化代码的质量分析结果;

根据所述质量分析结果,对所述优化代码进行质量评级,得到所述优化代码的质量级别。

本发明第二方面提供了一种代码继承关系优化装置,所述代码继承关系优化装置包括:

获取模块,用于获取待优化的目标代码;

提取模块,用于提取所述目标代码中的多个类对象以及分别提取所述目标代码中每一所述类对象的多个关键字;

关系匹配模块,用于根据每一所述类对象的多个关键字,分别对所述目标代码进行标识符识别和父子关系匹配,得到所述目标代码中的父类代码和子类代码;

检测模块,用于将所述父类代码和所述子类代码输入预置代码检测模型进行代码重写分析,输出所述目标代码中的重写代码;

优化模块,用于根据预置里氏替换原则,对所述重写代码进行继承关系优化,得到优化代码。

可选的,在本发明第二方面的第一种实现方式中,所述代码继承关系优化装置还包括:

模型构建模块,用于对所述里氏替换原则进行元素抽取,得到多个元素;分别对各个所述元素进行标识,得到多个标识元素;对各个所述标识元素进行量化建模,得到初始检测模型;获取多个样本代码,并分别将各个所述样本代码输入所述初始检测模型进行模型训练,直至所述初始检测模型的吻合度超过预置吻合度阈值,得到代码检测模型。

可选的,在本发明第二方面的第二种实现方式中,所述提取模块具体用于:

获取所述目标代码的编码语言类型,并根据所述编码语言类型,识别所述目标代码中的类标识符;

根据所述类标识符,提取所述目标代码中的类对象,得到多个类对象;

调用预置构造函数,分别计算各个所述类对象的对象返回值,得到多个类对象返回值;

根据各个所述类对象返回值,对所述目标代码进行关键词提取,得到每一所述类对象的多个关键字。

可选的,在本发明第二方面的第三种实现方式中,所述关系匹配模块具体用于:

根据每一所述类对象的多个关键字,对所述目标代码进行标识符识别,得到多个代码标识符;

根据各个所述代码标识符,对所述目标代码进行关系分类和类别匹配,得到父类代码;

对所述父类代码进行递归查询,得到所述父类代码对应的子类代码。

可选的,在本发明第二方面的第四种实现方式中,所述检测模块具体用于:

将所述父类代码和所述子类代码输入所述代码检测模型;

通过所述代码检测模型分别提取所述父类代码和所述子类代码的成员函数,得到所述父类代码的第一成员函数和所述子类代码的第二成员函数;

通过所述代码检测模型提取所述第二成员函数中与所述第一成员函数具有相同名称、相同参数和相同返回值类型的函数,得到重写成员函数;

通过所述代码检测模型将所述重写成员函数在所述目标代码中的代码段作为重写代码。

可选的,在本发明第二方面的第五种实现方式中,所述优化模块具体用于:

对所述重写代码进行复杂算子消除和/或循环冗余代码消除,得到简洁代码;

根据所述父类代码和所述子类代码生成所述简洁代码的继承关系,并根据所述继承关系,对所述简洁代码进行关系重组,得到组合代码;

根据所述组合代码,对所述重写代码进行填充和覆盖,得到优化代码。

可选的,在本发明第二方面的第六种实现方式中,所述代码继承关系优化装置还包括:

质量评级模块,用于获取所述优化代码的属性数据,其中,所述属性数据包括空格数、注释数量以及代码量;分别计算所述空格数、注释数量以及代码量和预置质量规范数据的比值,对应得到空格数比值、注释数量比值以及代码量比值;根据所述空格数比值、所述注释数量比值以及所述代码量比值,生成所述优化代码的质量分析结果;根据所述质量分析结果,对所述优化代码进行质量评级,得到所述优化代码的质量级别。

本发明第三方面提供了一种计算机设备,包括:存储器和至少一个处理器,所述存储器中存储有指令;所述至少一个处理器调用所述存储器中的所述指令,以使得所述计算机设备执行上述的代码继承关系优化方法。

本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述的代码继承关系优化方法。

本发明提供的技术方案中,鉴于现有的代码优化通常依赖于人工经验,从而导致优化后的代码错误率较高,因此,本发明采用自动化的方法进行代码优化,具体为:首先获取待优化的目标代码;提取所述目标代码中的重要指标,即目标代码中的类对象,再提取类对象对应的关键字,得到多个关键字;因为关键字可以反映目标代码中父类和子类之间的关系,所以根据关键字对所述目标代码进行标识符识别和父子关系匹配,得到具有继承关系的父类代码和子类代码;对所述父类代码和所述子类代码进行代码检测,当检测结果中子类代码有重写父类代码的现象,则输出所述目标代码中的重写代码;最后根据代码设计原理的里氏替换原则,对所述重写代码按照里氏替换原则中的继承关系优化规则进行重写代码优化,得到优化代码。本发明能够对代码进行自动优化,大大提高了代码优化的效率,同时也减小了代码优化后的代码错误率,提升了代码质量。

附图说明

图1为本发明实施例中代码继承关系优化方法的第一个实施例示意图;

图2为本发明实施例中代码继承关系优化方法的第二个实施例示意图;

图3为本发明实施例中代码继承关系优化方法的第三个实施例示意图;

图4为本发明实施例中代码继承关系优化方法的第四个实施例示意图;

图5为本发明实施例中代码继承关系优化装置的一个实施例示意图;

图6为本发明实施例中计算机设备的一个实施例示意图。

具体实施方式

本发明实施例提供了一种代码继承关系优化方法、装置、设备及存储介质。本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图1,本发明实施例中代码继承关系优化方法的第一个实施例包括:

101、获取待优化的目标代码;

可以理解的是,本发明的执行主体可以为代码继承关系优化装置,还可以是终端或者服务器,具体此处不做限定。本发明实施例以服务器为执行主体为例进行说明。

本实施例中,目标代码可以是业务逻辑代码,业务逻辑代码为不同的项目有不同的功能,不同的功能需要不同的实现,实现这些核心功能的代码为业务逻辑。

例如:在实现某个功能时,随机给两个数,然后对这两个数求和,实现求和过程的代码,即为业务逻辑代码。

可选的,在一实施例中,在上述步骤101之前,还包括:

对所述里氏替换原则进行元素抽取,得到多个元素;

分别对各个所述元素进行标识,得到多个标识元素;

对各个所述标识元素进行量化建模,得到初始检测模型;

获取多个样本代码,并分别将各个所述样本代码输入所述初始检测模型进行模型训练,直至所述初始检测模型的吻合度超过预置吻合度阈值,得到代码检测模型。

本实施例中,建模的过程是基于里氏替换原则的定义、里氏替换原则的优缺点和里氏替换原则的适用场景作为特定的元素进行抽取,得到多个元素,通过原则中的一些字段进行标识,得到标识元素,对标识元素进行量化建模,形成一个初始检测模型,这个初始检测模型具有对里氏替换原则的唯一标识,即通过初始检测模型就知道是里氏替换原则。

本实施例中,建好模之后需要采用大量实例代码对初始检测模型进行训练,以便调整模型与应用的吻合度,提升初始检测模型的适配度,直至所述初始检测模型的吻合度超过预置吻合度阈值,得到代码检测模型。

102、提取所述目标代码中的多个类对象以及分别提取所述目标代码中每一所述类对象的多个关键字;

本实施例中,类对象是指具有相同属性、方法和关系的对象的抽象,它封装了数据和行为,是面向对象程序设计的基础,具有封装性、继承性和多态性等三大特性,是项目代码中基础的单元。类对象包含了类名、属性和操作,例如,定义一个“教师类”,这个教师的属性可以有姓名、年龄、所任教学校等,而这个“教师类”的操作可以理解为是所有教师都可以执行的方法,如教学指导、教研工作以及学习总结等。

本实施例中,类对象的提取只需按照程序语言的编写规则进行识别即可,同理,提取到类对象之后,用构造函数对类对象进行返回值计算,识别并提取类对象对应的关键词。

可选的,在一实施例中,上述步骤102包括:

获取所述目标代码的编码语言类型,并根据所述编码语言类型,识别所述目标代码中的类标识符;

根据所述类标识符,提取所述目标代码中的类对象,得到多个类对象;

调用预置构造函数,分别计算各个所述类对象的对象返回值,得到多个类对象返回值;

根据各个所述类对象返回值,对所述目标代码进行关键词提取,得到每一所述类对象的多个关键字。

本实施例中,不同的语言类型,对类对象的定义方式不同,在识别代码中的标识符之前,先对代码的语言类型进行检测,检测方式很多,可以是对代码文件的名称进行识别,通过名称中的后缀符确定语言类型,也可以是对具体代码进行扫描识别,通过代码的特性确定语言类型,等等。然后根据预置各个语言所对应的类对象的标识符,通过标识符识别的方式,就能识别出不同开发语言所独有的类定义方式,例如在JAVA语言中,“public classObjectName{}”就是一个名为ObjectName的类对象,标识符为“public class”。

本实施例中,构造函数的执行流程:立刻在堆内存中创建一个新的对象,将新建的对象设置为函数中的this,逐个执行函数中的代码,将新建的对象作为返回值。本实施通过判断构造函数的返回值进行目标代码的关键词提取,如果是一个关键词,则返回该关键词。

103、根据每一所述类对象的多个关键字,分别对所述目标代码进行标识符识别和父子关系匹配,得到所述目标代码中的父类代码和子类代码;

本实施例中,子类代码可以扩展父类的功能,但不能改变父类代码原有的功能,因此,根据父类和子类的关系进行代码提取,通过识别extend识别出父类和子类。

例如:给定代码段{class Bronkiwi extend bird}中extend前是子类,后是父类。

104、将所述父类代码和所述子类代码输入预置代码检测模型进行代码重写分析,输出所述目标代码中的重写代码;

本实施例中,代码检测模型通过读取父类代码和子类代码的成员函数,再分析子类代码的成员函数中是否有重写现象,如果子类代码的成员函数有重写父类代码的成员函数,则输出目标代码中的重写代码。

可选的,在一实施例中,上述步骤104包括:

将所述父类代码和所述子类代码输入所述代码检测模型;

通过所述代码检测模型分别提取所述父类代码和所述子类代码的成员函数,得到所述父类代码的第一成员函数和所述子类代码的第二成员函数;

通过所述代码检测模型提取所述第二成员函数中与所述第一成员函数具有相同名称、相同参数和相同返回值类型的函数,得到重写成员函数;

通过所述代码检测模型将所述重写成员函数在所述目标代码中的代码段作为重写代码。

本实施例中,成员函数是指一个函数作为类的成员,公有成员、私有成员或者保护成员,成员函数包括:构造函数、析构函数、拷贝初始化构造函数等。

本实施例中,判断子类代码的成员函数是否有重写现象,例如:假设代码中Bird是父类,拥有一个成员变量flySpeed和两个成员方法setSpeed和getFlyTime;燕子类Swallow继承Bird父类;几维鸟类Brown Kiwi继承Bird父类并重写了setSpeed方法,即可判断代码违反了里氏替换原则。

105、根据预置里氏替换原则,对所述重写代码进行继承关系优化,得到优化代码。

本实施例中,对重写代码进行提示,并提供解决实例与错误原因,对继承关系优化时,首先对所述重写代码进行复杂算子消除和/或循环冗余代码消除,再生成所述简洁代码的继承关系,根据继承关系,对所述简洁代码进行关系重组,最后对重写代码进行填充和覆盖,得到优化代码。

本发明实施例中,鉴于现有的代码优化通常依赖于人工经验,从而导致优化后的代码错误率较高,因此,本发明采用自动化的方法进行代码优化,具体为:首先获取待优化的目标代码;提取所述目标代码中的重要指标,即目标代码中的类对象,再提取类对象对应的关键字,得到多个关键字;因为关键字可以反映目标代码中父类和子类之间的关系,所以根据关键字对所述目标代码进行标识符识别和父子关系匹配,得到具有继承关系的父类代码和子类代码;对所述父类代码和所述子类代码进行代码检测,当检测结果中子类代码有重写父类代码的现象,则输出所述目标代码中的重写代码;最后根据代码设计原理的里氏替换原则,对所述重写代码按照里氏替换原则中的继承关系优化规则进行重写代码优化,得到优化代码。本发明能够自动对代码进行优化,大大提高了代码优化的效率,减小了代码优化后的错误率。

请参阅图2,本发明实施例中代码继承关系优化方法的第二个实施例包括:

201、获取待优化的目标代码;

202、提取所述目标代码中的多个类对象以及分别提取所述目标代码中每一所述类对象的多个关键字;

203、根据每一所述类对象的多个关键字,对所述目标代码进行标识符识别,得到多个代码标识符;

204、根据各个所述代码标识符,对所述目标代码进行关系分类和类别匹配,得到父类代码;

本实施例中,根据每一所述类对象的多个关键字,定位目标代码的标识符,对所述目标代码进行标识符识别,得到多个代码标识符根据各个语言所对应的代码标识符,通过标识符识别的方式,就能识别出不同开发语言所独有的类定义方式。

例如:在JAVA语言中,“public class ObjectName{}”就是一个名为ObjectName的类对象,标识符为“public class”。

205、对所述父类代码进行递归查询,得到所述父类代码对应的子类代码;

本实施例中,对目标代码进行关系分类和类别匹配,得到父类代码。

例如:给定代码段{class Bronkiwi extend bird}中extend后是父类,对父类代码递归查询,父类统计子数值,对得到的数据进行存储,最终“父亲找到儿子”得到子类代码。

206、将所述父类代码和所述子类代码输入预置代码检测模型进行代码重写分析,输出所述目标代码中的重写代码;

207、根据预置里氏替换原则,对所述重写代码进行继承关系优化,得到优化代码。

本发明实施例中,里氏替换原则中子类可以扩展父类的功能,但不能改变父类原有的功能,因此,根据关键词爬取目标代码的标识符并通过标识符分析子类及父类,得到父类代码和子类代码。通过提取目标代码中的父类代码和子类代码,有效提高了代码检测模型的识别速度,提高了检测效率。

请参阅图3,本发明实施例中代码继承关系优化方法的第三个实施例包括:

301、获取待优化的目标代码;

302、提取所述目标代码中的多个类对象以及分别提取所述目标代码中每一所述类对象的多个关键字;

303、根据每一所述类对象的多个关键字,分别对所述目标代码进行标识符识别和父子关系匹配,得到所述目标代码中的父类代码和子类代码;

304、将所述父类代码和所述子类代码输入预置代码检测模型进行代码重写分析,输出所述目标代码中的重写代码;

305、对所述重写代码进行复杂算子消除和/或循环冗余代码消除,得到简洁代码;

本实施例中,按照里氏替换原则去除重写代码中复杂算子和/或循环冗余代码,具体为去除对同一变量进行重复赋值的代码、去除利用寄存器进行重复赋值的代码等。例如:给定重复代码段中存在多条赋值代码a=3,但变量a在赋值后没有进行其他处理,则可以仅保留一条代码,去除其他重复赋值的代码。

306、根据所述父类代码和所述子类代码生成所述简洁代码的继承关系,并根据所述继承关系,对所述简洁代码进行关系重组,得到组合代码;

307、根据所述组合代码,对所述重写代码进行填充和覆盖,得到优化代码。

本实施例中,按照继承关系重新调整/修改对应的代码,以保障代码的正常执行,在对代码进行重组时,根据代码执行逻辑,相应的调整代码模块对应的代码在整个代码中的位置,将代码移动至合适的位置处;或者,还需要根据代码执行逻辑,如if else分支执行逻辑,在对应的else分支代码模块前增加else代码语句,将else分支代码模块包含在else代码语句所在的执行逻辑下,以便正常执行等。代码重组包括对代码进行的顺序调整、代码语句的删除、修改、添加等操作,具体需要根据实现代码执行逻辑、分支处理等情况进行重组,此处不作限定。对代码进行重组后,对所述重写代码进行填充和覆盖,可以得到优化后的代码。

本发明实施例中,里氏替换原则强调的是子类代码可以扩展父类代码的功能,但不能改变父类代码原有的功能,也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法,因此,在对重写代码进行优化时,需要去除其中不影响正常执行但对代码造成混淆的复杂算子和/或循环冗余代码,再根据父类代码和子类代码的继承关系进行继承关系重组,从而自动进行代码优化,提高代码优化效率。

请参阅图4,本发明实施例中代码继承关系优化方法的第四个实施例包括:

401、获取待优化的目标代码;

402、提取所述目标代码中的多个类对象以及分别提取所述目标代码中每一所述类对象的多个关键字;

403、根据每一所述类对象的多个关键字,分别对所述目标代码进行标识符识别和父子关系匹配,得到所述目标代码中的父类代码和子类代码;

404、将所述父类代码和所述子类代码输入预置代码检测模型进行代码重写分析,输出所述目标代码中的重写代码;

405、根据预置里氏替换原则,对所述重写代码进行继承关系优化,得到优化代码;

406、获取所述优化代码的属性数据,其中,所述属性数据包括空格数、注释数量以及代码量;

本实施例中,根据里氏替换原则,对优化代码文件进行分析以得到代码文件的属性数据,其中,所述属性数据包括空格数、注释数量以及代码量。

407、分别计算所述空格数、注释数量以及代码量和预置质量规范数据的比值,对应得到空格数比值、注释数量比值以及代码量比值;

本实施例中,质量规范数据根据所述开发阶段标识确定当前的开发阶段,并根据开发阶段在所述质量规范包中选择匹配的目标质量规范,例如:当优化代码中的空格数为25,注释数量为15,代码量为40,质量规范数据中空格数为25,注释数量为20,代码量为50,分别计算比值对应得到空格数比值1、注释数量比值0.75以及代码量比值0.8。

408、根据所述空格数比值、所述注释数量比值以及所述代码量比值,生成所述优化代码的质量分析结果;

本实施例中,根据质量规范数据预设阈值,并根据预设阈值分析得到所述代码文件的质量分析结果。例如,可以对空格数比值、所述注释数量比值以及所述代码量比值设置阈值,当空格数比值、所述注释数量比值以及所述代码量比值超过阈值,则可认为优化代码的可读性好,生成质量分析结果为好。

409、根据所述质量分析结果,对所述优化代码进行质量评级,得到所述优化代码的质量级别。

本实施例中,若质量分析结果为好,则对应优化代码的质量评级为优;若质量分析结果为不好,则对应优化代码的质量评级为差。

本发明实施例中,质量规范是根据开发阶段选择的,降低了由于人为变更质量规范发生错误造成的分析错误,或是由于未及时变更质量规范造成的分析错误导致程序无法成功运行的可能性。本发明通过对优化代码的质量进行检测并评级,针对优化后的代码进一步的验证,使得优化后的目标代码能够正常的运行,进一步的发现代码中隐藏的错误和缺陷。

上面对本发明实施例中代码继承关系优化方法进行了描述,下面对本发明实施例中代码继承关系优化装置进行描述,请参阅图5,本发明实施例中代码继承关系优化装置一个实施例包括:

获取模块501,用于获取待优化的目标代码;

提取模块502,用于提取所述目标代码中的多个类对象以及分别提取所述目标代码中每一所述类对象的多个关键字;

关系匹配模块503,用于根据每一所述类对象的多个关键字,分别对所述目标代码进行标识符识别和父子关系匹配,得到所述目标代码中的父类代码和子类代码;

检测模块504,用于将所述父类代码和所述子类代码输入预置代码检测模型进行代码重写分析,输出所述目标代码中的重写代码;

优化模块505,用于根据预置里氏替换原则,对所述重写代码进行继承关系优化,得到优化代码。

可选的,在一实施例中,所述代码继承关系优化装置还包括:

模型构建模块506,用于对所述里氏替换原则进行元素抽取,得到多个元素;分别对各个所述元素进行标识,得到多个标识元素;对各个所述标识元素进行量化建模,得到初始检测模型;获取多个样本代码,并分别将各个所述样本代码输入所述初始检测模型进行模型训练,直至所述初始检测模型的吻合度超过预置吻合度阈值,得到代码检测模型。

可选的,在一实施例中,所述提取模块502具体用于:

获取所述目标代码的编码语言类型,并根据所述编码语言类型,识别所述目标代码中的类标识符;

根据所述类标识符,提取所述目标代码中的类对象,得到多个类对象;

调用预置构造函数,分别计算各个所述类对象的对象返回值,得到多个类对象返回值;

根据各个所述类对象返回值,对所述目标代码进行关键词提取,得到每一所述类对象的多个关键字。

可选的,在一实施例中,所述关系匹配模块503具体用于:

根据每一所述类对象的多个关键字,对所述目标代码进行标识符识别,得到多个代码标识符;

根据各个所述代码标识符,对所述目标代码进行关系分类和类别匹配,得到父类代码;

对所述父类代码进行递归查询,得到所述父类代码对应的子类代码。

可选的,在一实施例中,所述检测模块504具体用于:

将所述父类代码和所述子类代码输入所述代码检测模型;

通过所述代码检测模型分别提取所述父类代码和所述子类代码的成员函数,得到所述父类代码的第一成员函数和所述子类代码的第二成员函数;

通过所述代码检测模型提取所述第二成员函数中与所述第一成员函数具有相同名称、相同参数和相同返回值类型的函数,得到重写成员函数;

通过所述代码检测模型将所述重写成员函数在所述目标代码中的代码段作为重写代码。

可选的,在一实施例中,所述优化模块505具体用于:

对所述重写代码进行复杂算子消除和/或循环冗余代码消除,得到简洁代码;

根据所述父类代码和所述子类代码生成所述简洁代码的继承关系,并根据所述继承关系,对所述简洁代码进行关系重组,得到组合代码;

根据所述组合代码,对所述重写代码进行填充和覆盖,得到优化代码。

可选的,在一实施例中,所述代码继承关系优化装置还包括:

质量评级模块507,用于获取所述优化代码的属性数据,其中,所述属性数据包括空格数、注释数量以及代码量;分别计算所述空格数、注释数量以及代码量和预置质量规范数据的比值,对应得到空格数比值、注释数量比值以及代码量比值;根据所述空格数比值、所述注释数量比值以及所述代码量比值,生成所述优化代码的质量分析结果;根据所述质量分析结果,对所述优化代码进行质量评级,得到所述优化代码的质量级别。

本发明实施例中,鉴于现有的代码优化通常依赖于人工经验,从而导致优化后的代码错误率较高,因此,本发明采用自动化的方法进行代码优化,具体为:首先获取待优化的目标代码;提取所述目标代码中的重要指标,即目标代码中的类对象,再提取类对象对应的关键字,得到多个关键字;因为关键字可以反映目标代码中父类和子类之间的关系,所以根据关键字对所述目标代码进行标识符识别和父子关系匹配,得到具有继承关系的父类代码和子类代码;对所述父类代码和所述子类代码进行代码检测,当检测结果中子类代码有重写父类代码的现象,则输出所述目标代码中的重写代码;最后根据代码设计原理的里氏替换原则,对所述重写代码按照里氏替换原则中的继承关系优化规则进行重写代码优化,得到优化代码。本发明能够自动对代码进行优化,大大提高了代码优化的效率,减小了代码优化后的错误率。

上面图5从模块化功能实体的角度对本发明实施例中的代码继承关系优化装置进行详细描述,下面从硬件处理的角度对本发明实施例中计算机设备进行详细描述。

图6是本发明实施例提供的一种计算机设备的结构示意图,该计算机设备600可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessing units,CPU)610(例如,一个或一个以上处理器)和存储器620,一个或一个以上存储应用程序633或数据632的存储介质630(例如一个或一个以上海量存储设备)。其中,存储器620和存储介质630可以是短暂存储或持久存储。存储在存储介质630的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对计算机设备600中的一系列指令操作。更进一步地,处理器610可以设置为与存储介质630通信,在计算机设备600上执行存储介质630中的一系列指令操作。

计算机设备600还可以包括一个或一个以上电源640,一个或一个以上有线或无线网络接口650,一个或一个以上输入输出接口660,和/或,一个或一个以上操作系统631,例如Windows Serve,Mac OS X,Unix,Linux,FreeBSD等等。本领域技术人员可以理解,图6示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

本发明还提供一种计算机设备,所述计算机设备包括存储器和处理器,存储器中存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行上述各实施例中的所述代码继承关系优化方法的步骤。

本发明还提供一种计算机可读存储介质,该计算机可读存储介质可以为非易失性计算机可读存储介质,该计算机可读存储介质也可以为易失性计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在计算机上运行时,使得计算机执行所述代码继承关系优化方法的步骤。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号