CN111552638B - 一种代码检测方法及装置 - Google Patents

一种代码检测方法及装置 Download PDF

Info

Publication number
CN111552638B
CN111552638B CN202010326315.0A CN202010326315A CN111552638B CN 111552638 B CN111552638 B CN 111552638B CN 202010326315 A CN202010326315 A CN 202010326315A CN 111552638 B CN111552638 B CN 111552638B
Authority
CN
China
Prior art keywords
function
base class
source code
matching
code
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
CN202010326315.0A
Other languages
English (en)
Other versions
CN111552638A (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.)
Beijing QIYI Century Science and Technology Co Ltd
Original Assignee
Beijing QIYI Century Science and Technology Co Ltd
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 Beijing QIYI Century Science and Technology Co Ltd filed Critical Beijing QIYI Century Science and Technology Co Ltd
Priority to CN202010326315.0A priority Critical patent/CN111552638B/zh
Publication of CN111552638A publication Critical patent/CN111552638A/zh
Application granted granted Critical
Publication of CN111552638B publication Critical patent/CN111552638B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3628Software debugging of optimised code
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例提供了一种代码检测方法及装置,代码检测方法包括以下步骤:提取软件模块中包括的源代码;提取所述源代码中的函数;利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数,以检测所述源代码中的临时变量和执行分支中的一项或多项;标记冗余的临时变量和冗余的执行分支中的一项或多项。这样,本发明实施例通过利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数,以对源代码中的函数进行检测,从而能够检测出源代码中存在的冗余的临时变量或冗余的执行分支,以便进一步对源代码进行调整,降低了源代码中存在冗余的临时变量或冗余的执行分支的可能性,有助于提高应用程序的使用体验。

Description

一种代码检测方法及装置
技术领域
本发明涉及计算机术领域,特别是涉及一种代码检测方法。
背景技术
应用程序随着功能的不断迭代,会不断增加新的代码,这些代码中可能存在一些没有执行的冗余代码,这些冗余代码在应用程序使用过程中不会被执行。相关技术中通常通过静态扫描的方式对代码进行检测,然而这些冗余代码无法在静态扫描中被检测到,可能导致应用程序中的代码数量增加,影响应用程序的运行性能。
发明内容
本发明实施例的目的在于提供一种代码检测方法及装置,已解决现有扫描方式可能无法检测到冗余代码,导致应用程序中的代码数量增加,影响应用程序的运行性能的问题。具体技术方案如下:
在本发明实施的第一方面,首先提供了一种代码检测方法,包括以下步骤:
提取软件模块中包括的源代码;
提取所述源代码中的函数;
利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数,以检测所述源代码中的临时变量和执行分支中的一项或多项;
标记冗余的临时变量和冗余的执行分支中的一项或多项。
可选的,所述提取软件模块中包括的源代码之后,还包括:
将所述源代码根据编程语言划分为不同的类型;
获取每一种编程语言的子类函数和基类函数的对应关系作为所述编程语言对应的基类模板。
可选的,所述利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数,包括:
标记所述函数中的参数、临时变量和全局变量;
根据参数、所述临时变量和所述全局变量所述利用字符串匹配算法匹配所述函数中的子类函数和所述基类模板对应的基类函数;
根据匹配结果获取所述基类函数的函数声明,所述函数声明中包括对于所述子类函数中的临时变量和执行分支中的一项或多项的检测结果。
可选的,所述将所述源代码根据编程语言的类型划分为不同的类型,包括:
识别所述源代码的文件后缀,并根据所述文件后缀将所述源代码划分至不同的匹配模板;
提取所述源代码中函数的返回值类型、函数名和参数列表,以及函数的属性和协议,以区分同一匹配模板中的源代码对应的编程语言。
可选的,所述利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数之前,包括:
根据预设映射关系建立所述子类函数对应的第一缩写特征表;
基于所述预设映射关系建立基类函数的对应的第二缩写特征表作为所述基类模板。
在本发明实施的第二方面,提供了一种代码检测装置,包括:
第一提取模块,用于提取软件模块中包括的源代码;
第二提取模块,用于提取所述源代码中的函数;
匹配模块,用于利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数,以检测所述源代码中的临时变量和执行分支中的一项或多项;
标记模块,用于标记冗余的临时变量和冗余的执行分支中的一项或多项。
可选的,还包括:
划分模块,用于将所述源代码根据编程语言划分为不同的类型;
基类模板获取模块,用于获取每一种编程语言的子类函数和基类函数的对应关系作为所述编程语言对应的基类模板。
可选的,所述匹配模块包括:
标记子模块,用于标记所述函数中的参数、临时变量和全局变量;
匹配子模块,用于根据参数、所述临时变量和所述全局变量所述利用字符串匹配算法匹配所述函数中的子类函数和所述基类模板对应的基类函数;
获取子模块,用于根据匹配结果获取所述基类函数的函数声明,所述函数声明中包括对于所述子类函数中的临时变量和执行分支中的一项或多项的检测结果。
在本发明实施的又一方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现以上任一所述的代码检测方法的步骤。
在本发明实施的又一方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如以上任一所述的代码检测方法。
这样,本发明实施例通过利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数,以对源代码中的函数进行检测,从而能够检测出源代码中存在的冗余的临时变量或冗余的执行分支,以便进一步对源代码进行调整,降低了源代码中存在冗余的临时变量或冗余的执行分支的可能性,有助于提高应用程序的使用体验。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明一实施例中代码检测方法的流程图;
图2为本发明一实施例中又一代码检测方法的流程图;
图3为本发明一实施例中又一代码检测装置的结构示意图;
图4为本发明一实施例中电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
本发明提供了一种代码检测方法。
如图1所示,在一个实施例中,该代码检测方法包括以下步骤:
步骤101:提取软件模块中包括的源代码。
本实施例中,首先提取软件模块中的源代码(或称代码),应当理解的是,一个应用程序可能包括一个或多个软件模块,这些软件模块中包括源代码、图片、文本、视频文件、音频文件等多种文件。
由于本实施例的技术方案针对应用程序中源代码进行检测,所以需要过滤其他非代码文件并提取源代码,以进一步进行检测操作。
步骤102:提取所述源代码中的函数。
源代码实际上是由多个函数组成的,检测源代码是否存在异常,实际上就是检测是否存在某一函数存在异常,因此,本实施例中进一步提取源代码中的函数,以便进一步进行检测。
在一个具体实施方式中,在步骤101之后还包括步骤:
将所述源代码根据编程语言划分为不同的类型;
获取每一种编程语言的子类函数和基类函数的对应关系作为所述编程语言对应的基类模板。
应当理解的是,一个应用程序可能包括多个源代码文件,这些源代码所使用的编程语言可能存在不同。而不同的程序语言在表达同一函数时,其具体的代码是不同的,所以在代码检测过程中,针对不同的编程语言需要设置不同的检测方式。
本实施例中,首先根据编程语言的不同将源代码划分为不同的类型,进一步的,确定相应的基类模板。
本实施例中,基类模板指的是确定一种编程语言的子类函数和基类函数(或称父类函数)的对应关系的模板,通过建立该基类模板,能够根据该基类模板对源代码中的函数进行匹配以实现对于源代码中函数的检测,从而确定是否存在异常代码。
在一个可选的具体实施方式中,所述将所述源代码根据编程语言的类型划分为不同的类型,包括:
识别所述源代码的文件后缀,并根据所述文件后缀将所述源代码划分至不同的匹配模板;
提取所述源代码中函数的返回值类型、函数名和参数列表,以及函数的属性和协议,以区分同一匹配模板中的源代码对应的编程语言。
该具体实施方式中,首先根据文件的后缀名进行一次初步的划分,一般来说,不同的编程语言编写的源代码文件的后缀名是不同的,根据源代码文件的后缀名可以实现初步区分不同的编程语言编写的源代码文件。例如,.cpp为C++代码,.c的为C语言代码,.java的为java语言代码,.m的为OC语言等。
进一步的,相同后缀名的源代码文件还可能是不同的变成语言编写的,例如.cpp(C++文件)可能包含C语言内容,objective-C可能会和swift文件一起编译,因此,需要进一步对函数提取返回值类型、函数名和参数列表进行构建函数列表,对属性、协议建立相应的映射列表,从而确定后缀名相同的文件所使用的编程语言。
这样,本实施例中,通过线根据后缀名进行初步区分,然后提取返回值类型、函数名和参数列表进行构建函数列表,对属性、协议建立相应的映射列表,能够确定各源代码所使用的编程语言,以便后续进一步进行检测。
步骤103:利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数,以检测所述源代码中的临时变量和执行分支中的一项或多项。
与函数的类型相对应指的是编程语言相通,例如,如果检测C语言编写的代码中的函数,则选择C语言对应的基类模板进行匹配。通过利用子类函数和基类模板进行匹配,能够实现对于源代码中临时变量和执行分支进行检测,从而确定是否存在冗余的临时变量或执行分支。
在一个可选的具体实施方式中,该步骤103具体包括:
标记所述函数中的参数、临时变量和全局变量;
根据参数、所述临时变量和所述全局变量所述利用字符串匹配算法匹配所述函数中的子类函数和所述基类模板对应的基类函数;
根据匹配结果获取所述基类函数的函数声明,所述函数声明中包括对于所述子类函数中的临时变量和执行分支中的一项或多项的检测结果。
实施时,首先获取不同类中函数的方法列表、协议列表、属性列表,接下来,通过具体的,例如可以选用Sunday(星期天)等字符串匹配算法进行扫描和匹配。
字符串匹配算法,用于匹配源代码文件中类的函数、形参和临时变量等。
其工作原理为,如果需要对于主串mString:“qyabcdiqiyi.com”和模式串pString:“qiyi”的扫描匹配,模式串长度为L=4。
定义两个指针p0,p1分别指向mString和pString的第一个字符,发现在第二个不相等后关注mSrtring的“c”,但pString不包含“c”,将p0增加L+1的长度指向“d”,发现第一个字符不匹配,将p0增加L+1的长度指向“y”,从右向左扫描pString,发现右边第二个“y”匹配上,移动pString位置发现前后字符串都相等,则匹配成功。
这样,基于字符串匹配算法,建立类的函数缓存列表,利用面向对象类的继承关系,在子类中注入基类的函数列表,利用位运算获取函数名映射,减少匹配次数加快扫描效率。
具体的,基类函数映射后,放入函数列表中按照0x0001、0x0010、0x0100的顺序排列,取出来直接通过一个变量向左移位即可,不同的模板对字符串匹配算法基础给出的值是不同的。
通过class(子类)关键字匹配到类的声明和其superClass(基类),注入superClass的方法列表、协议列表、属性列表;定义mask变量初始值为1,通过函数列表&mask的值即可获取基类对应的函数声明。
例如,对于源代码:
48行代码开始的函数是对于两个int型数的求和,49行定义了临时变量c,但是未使用,这就造成代码包大小体积问题,如果是堆空间的申请的变量,还在程序运行过程中造成内存的浪费,最终检测结果为49行的代码存在异常。
又如,对于源代码:
上述代码中,在62行对传入的tempView类型进行了判断,但由于满足面向对象的继承原理,这个if条件是固定满足的,该代码产生了冗余代码,因此可在函数入口进行标记。
步骤104:标记冗余的临时变量和冗余的执行分支中的一项或多项。
当检测到存在冗余的临时变量或者冗余的执行分支时,标记这些临时变量和执行分支,进一步的,还可以将这些内容写入日志,以导出并进行后续处理操作。具体的,日志中还可以进一步包括代码最后提交的诗句、代码位置、代码存在的问题、代码作者等,以便后续对存在问题的代码进行处理,修复可能存在的异常问题。
这样,本发明实施例通过利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数,以对源代码中的函数进行检测,从而能够检测出源代码中存在的冗余的临时变量或冗余的执行分支,以便进一步对源代码进行调整,降低了源代码中存在冗余的临时变量或冗余的执行分支的可能性,有助于提高应用程序的使用体验。
在上述步骤103之前,本实施例的技术方案还可以包括步骤:
根据预设映射关系建立所述子类函数对应的第一缩写特征表;
基于所述预设映射关系建立基类函数的对应的第二缩写特征表作为所述基类模板。
应当理解的是,函数原本的名称通常较长,如果以函数原本的名称进行匹配,会增加所需的运算量,因此,本实施例中建立第一缩写特征表,以缩减各个数据的长度。
在一个具体实施方式中,整型数据int映射为I,双精度浮点型数据double映射为D,无类型数据void映射为V,字节数据byte映射为B,短型数据short映射为S,长型数据long映射为L,单精度型浮点数据float映射为F,字符指针char映射为C。
这样,进一步的通过添加函数名称、参数个数、参数缩减字节数等其他数据之后,即可构成映射后的函数声明,以减少函数的名称长度。例如,函数的属性包括一般分为私有属性(private)和公有(public)属性,在相应归类的属性中加上前缀做以区分,例如,私有属性int_age映射后为I_pri_age。
例如,基类int sum(int a,double b)映射之后即为主串I_s12:I:D,这样,能够减少所需匹配的字符的数量,从而提高查找效率。
这样,首先建立子函数对应的第一缩写特征表,然后基于相同的预设映射关系建立基类函数对应的第二缩写特征表,利用第一缩写特征表和第二缩写特征表相匹配,即可实现将所查找的函数与基类模板进行匹配。
如图2所示,本实施例的技术方案可以概况为,首先,将输入的软件模块进行过滤获得软件模块中的源代码,进一步的,根据编程语言将源代码分类。
接下来,获取类中函数、协议、属性的映射关系并保存,将保存的结果与基类函数模板进行匹配,具体的,可以通过字符串匹配算法进行匹配,以实现对于源代码中函数的检测。
当源代码中存在异常时,标记存在异常的代码,直至完成检测。
进一步的,则可以重新执行上述过程,进行其他代码的检测。
本发明实施例还提供了一种代码检测装置300,如图3所示,包括:
第一提取模块301,用于提取软件模块中包括的源代码;
第二提取模块302,用于提取所述源代码中的函数;
匹配模块303,用于利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数,以检测所述源代码中的临时变量和执行分支中的一项或多项;
标记模块304,用于标记冗余的临时变量和冗余的执行分支中的一项或多项。
可选的,还包括:
划分模块,用于将所述源代码根据编程语言划分为不同的类型;
基类模板获取模块,用于获取每一种编程语言的子类函数和基类函数的对应关系作为所述编程语言对应的基类模板。
可选的,所述匹配模块303包括:
标记子模块,用于标记所述函数中的参数、临时变量和全局变量;
匹配子模块,用于根据参数、所述临时变量和所述全局变量所述利用字符串匹配算法匹配所述函数中的子类函数和所述基类模板对应的基类函数;
获取子模块,用于根据匹配结果获取所述基类函数的函数声明,所述函数声明中包括对于所述子类函数中的临时变量和执行分支中的一项或多项的检测结果。
可选的,所述划分模块包括:
识别子模块,用于识别所述源代码的文件后缀,并根据所述文件后缀将所述源代码划分至不同的匹配模板;
提取子模块,用于提取所述源代码中函数的返回值类型、函数名和参数列表,以及函数的属性和协议,以区分同一匹配模板中的源代码对应的编程语言。
可选的,还包括:
特征表建立模块,用于根据预设映射关系建立所述子类函数对应的第一缩写特征表;
模板确定模块,用于基于所述预设映射关系建立基类函数的对应的第二缩写特征表作为所述基类模板。
本实施例的代码检测装置能够实现上述代码检测方法实施例的各个步骤,并能实现基本相同的技术效果,此处不再赘述。
本发明实施例还提供了一种电子设备,该电子设备具体可以是上述终端设备,也可以是上述数据服务器,如图4所示,包括处理器41、通信接口42、存储器43和通信总线44,其中,处理器41,通信接口42,存储器44通过通信总线44完成相互间的通信,
存储器43,用于存放计算机程序;
当该电子设备为上述终端设备时,处理器41,用于执行存储器上所存放的程序时,实现以上任一所述的代码检测方法的步骤。
在本发明实施的又一方面,还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如以上任一所述的代码检测方法。
上述终端提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述终端与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(NetworK Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的建模方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的建模方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State DisK(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (6)

1.一种代码检测方法,其特征在于,包括以下步骤:
提取软件模块中包括的源代码;
提取所述源代码中的函数;
利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数,以检测所述源代码中的临时变量和执行分支中的一项或多项;
标记冗余的临时变量和冗余的执行分支中的一项或多项;
其中,所述提取软件模块中包括的源代码之后,还包括:
将所述源代码根据编程语言划分为不同的类型;
获取每一种编程语言的子类函数和基类函数的对应关系作为所述编程语言对应的基类模板;
其中,所述利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数,包括:
标记所述函数中的参数、临时变量和全局变量;
根据参数、所述临时变量和所述全局变量利用字符串匹配算法匹配所述函数中的子类函数和所述基类模板对应的基类函数;
根据匹配结果获取所述基类函数的函数声明,所述函数声明中包括对于所述子类函数中的临时变量和执行分支中的一项或多项的检测结果。
2.如权利要求1所述的代码检测方法,其特征在于,所述将所述源代码根据编程语言划分为不同的类型,包括:
识别所述源代码的文件后缀,并根据所述文件后缀将所述源代码划分至不同的匹配模板;
提取所述源代码中函数的返回值类型、函数名和参数列表,以及函数的属性和协议,以区分同一匹配模板中的源代码对应的编程语言。
3.如权利要求1所述的代码检测方法,其特征在于,所述利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数之前,包括:
根据预设映射关系建立所述子类函数对应的第一缩写特征表;
基于所述预设映射关系建立基类函数的对应的第二缩写特征表作为所述基类模板。
4.一种代码检测装置,其特征在于,包括:
第一提取模块,用于提取软件模块中包括的源代码;
第二提取模块,用于提取所述源代码中的函数;
匹配模块,用于利用与所述函数的类型相对应的基类模板匹配所述函数中的子类函数,以检测所述源代码中的临时变量和执行分支中的一项或多项;
标记模块,用于标记冗余的临时变量和冗余的执行分支中的一项或多项;
其中,所述装置还包括:
划分模块,用于将所述源代码根据编程语言划分为不同的类型;
基类模板获取模块,用于获取每一种编程语言的子类函数和基类函数的对应关系作为所述编程语言对应的基类模板;
其中,所述匹配模块包括:
标记子模块,用于标记所述函数中的参数、临时变量和全局变量;
匹配子模块,用于根据参数、所述临时变量和所述全局变量利用字符串匹配算法匹配所述函数中的子类函数和所述基类模板对应的基类函数;
获取子模块,用于根据匹配结果获取所述基类函数的函数声明,所述函数声明中包括对于所述子类函数中的临时变量和执行分支中的一项或多项的检测结果。
5.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1至3任一所述的代码检测方法步骤。
6.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时,实现权利要求1至3任一所述的代码检测方法步骤。
CN202010326315.0A 2020-04-23 2020-04-23 一种代码检测方法及装置 Active CN111552638B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010326315.0A CN111552638B (zh) 2020-04-23 2020-04-23 一种代码检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010326315.0A CN111552638B (zh) 2020-04-23 2020-04-23 一种代码检测方法及装置

Publications (2)

Publication Number Publication Date
CN111552638A CN111552638A (zh) 2020-08-18
CN111552638B true CN111552638B (zh) 2023-08-18

Family

ID=72007695

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010326315.0A Active CN111552638B (zh) 2020-04-23 2020-04-23 一种代码检测方法及装置

Country Status (1)

Country Link
CN (1) CN111552638B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114331396A (zh) * 2021-12-28 2022-04-12 中国科学技术大学 面向以太坊智能合约的协议安全属性自动提取方法及系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102231134A (zh) * 2011-07-29 2011-11-02 哈尔滨工业大学 基于静态分析的冗余代码缺陷检测方法
CN107038058A (zh) * 2017-02-08 2017-08-11 阿里巴巴集团控股有限公司 一种代码处理方法及装置
CN109840093A (zh) * 2018-12-24 2019-06-04 苏州蜗牛数字科技股份有限公司 一种任意函数适配器实现方法
CN109976991A (zh) * 2017-12-27 2019-07-05 北京奇虎科技有限公司 一种程序代码的处理方法和装置
CN110502443A (zh) * 2019-08-22 2019-11-26 深圳前海环融联易信息科技服务有限公司 冗余代码检测方法、检测模块、电子设备及计算机存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8495606B2 (en) * 2008-11-14 2013-07-23 Oracle America, Inc. Redundant exception handling code removal
US10127133B2 (en) * 2016-04-08 2018-11-13 Oracle International Corporation Redundant instance variable initialization elision

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102231134A (zh) * 2011-07-29 2011-11-02 哈尔滨工业大学 基于静态分析的冗余代码缺陷检测方法
CN107038058A (zh) * 2017-02-08 2017-08-11 阿里巴巴集团控股有限公司 一种代码处理方法及装置
CN109976991A (zh) * 2017-12-27 2019-07-05 北京奇虎科技有限公司 一种程序代码的处理方法和装置
CN109840093A (zh) * 2018-12-24 2019-06-04 苏州蜗牛数字科技股份有限公司 一种任意函数适配器实现方法
CN110502443A (zh) * 2019-08-22 2019-11-26 深圳前海环融联易信息科技服务有限公司 冗余代码检测方法、检测模块、电子设备及计算机存储介质

Also Published As

Publication number Publication date
CN111552638A (zh) 2020-08-18

Similar Documents

Publication Publication Date Title
CN110162296B (zh) 应用程序编程接口文档的生成方法、装置及终端设备
CN114090671A (zh) 数据导入方法、装置、电子设备及存储介质
CN113961768B (zh) 敏感词检测方法、装置、计算机设备和存储介质
CN111124479B (zh) 配置文件的解析方法、系统及电子设备
CN112035480A (zh) 数据表管理方法、装置、设备及存储介质
CN110333872A (zh) 一种应用的处理方法、装置、设备和介质
CN111552638B (zh) 一种代码检测方法及装置
CN112181430A (zh) 代码变更统计方法、装置、电子设备及存储介质
CN113434582B (zh) 业务数据处理方法、装置、计算机设备和存储介质
CN114201756A (zh) 一种智能合约代码片段的漏洞检测方法和相关装置
CN114880523A (zh) 字符串处理方法、装置、电子设备及存储介质
CN115599388A (zh) 一种api接口文档生成方法、存储介质及电子设备
CN115729752A (zh) 一种寄存器检查方法及装置、存储介质
CN111444456B (zh) 一种样式编辑方法、装置及电子设备
CN111831659B (zh) 一种检查索引的方法、装置及计算设备
CN112579061B (zh) 一种安卓组件间数据传递方法、设备、系统及存储介质
CN111752570B (zh) 一种编译方法、装置、终端及计算机可读存储介质
CN111695327B (zh) 一种乱码修复方法、装置、电子设备及可读存储介质
CN114462381A (zh) 数据处理方法、装置、设备及存储介质
CN113296854A (zh) 一种数据加载方法、系统、电子设备及存储介质
CN111881220A (zh) 列表存储下的数据操作方法、装置、电子设备和存储介质
CN112540755A (zh) 一种基于前端的组件处理方法、装置、设备及存储介质
CN112433943A (zh) 基于抽象语法树的环境变量检测方法、装置、设备及介质
CN112783755B (zh) 一种基于自然语言理解函数原型发现内存破坏漏洞的方法
CN113535710B (zh) 一种搜索方法、装置、终端设备及存储介质

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