CN116680184A - 代码扫描方法、装置、电子设备和介质 - Google Patents

代码扫描方法、装置、电子设备和介质 Download PDF

Info

Publication number
CN116680184A
CN116680184A CN202310666984.6A CN202310666984A CN116680184A CN 116680184 A CN116680184 A CN 116680184A CN 202310666984 A CN202310666984 A CN 202310666984A CN 116680184 A CN116680184 A CN 116680184A
Authority
CN
China
Prior art keywords
code
defect
scanned
file
similarity
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.)
Pending
Application number
CN202310666984.6A
Other languages
English (en)
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.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
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 Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202310666984.6A priority Critical patent/CN116680184A/zh
Publication of CN116680184A publication Critical patent/CN116680184A/zh
Pending legal-status Critical Current

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/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/22Matching criteria, e.g. proximity measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/194Calculation of difference between files
    • 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
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/30Computing systems specially adapted for manufacturing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Biology (AREA)
  • Evolutionary Computation (AREA)
  • Investigating Materials By The Use Of Optical Means Adapted For Particular Applications (AREA)

Abstract

提供了一种代码扫描方法、装置、电子设备和介质,可以应用于信息安全和软件测试技术领域。所述方法包括:响应于代码扫描请求,获取待扫描的代码文件和预先存储于缺陷库中的缺陷代码文件;将待扫描的代码文件中的待扫描代码与缺陷代码文件中的缺陷代码进行比较;根据待扫描代码与缺陷代码比较的结果,计算待扫描代码与缺陷代码之间的相似度;以及响应于待扫描代码与缺陷代码之间的相似度大于预设的相似度阈值,确定所述待扫描代码存在缺陷,其中,将待扫描的代码文件中的待扫描代码与缺陷代码文件中的缺陷代码进行比较包括:计算待扫描代码与缺陷代码之间的编辑距离。通过相似度计算及缺陷判定,提高了静态代码扫描的缺陷准确率,提高了开发效率。

Description

代码扫描方法、装置、电子设备和介质
技术领域
本发明涉及信息安全技术领域和软件测试技术领域,更具体地涉及一种代码扫描方法、装置、电子设备和介质。
背景技术
软件项目测试开发过程中,需要通过静态代码扫描来检查项目代码质量。其中,静态代码扫描指的是在不运行代码的方式下,通过文本分析和正则匹配等技术扫描程序代码,发现代码中存在的规范性、安全性问题的技术,输出项目代码的扫描报错。
然而,现有的静态代码扫描是基于语法解析进行代码扫描,以代码所匹配的语法规则模式去评估代码,需要逐行分析匹配代码与语法规则,计算量较大,需要耗费大量的计算资源,而且,容易产生误报和漏报。
发明内容
鉴于上述问题,根据本发明的第一方面,本发明的实施例提供了一种代码扫描方法,包括:响应于代码扫描请求,获取待扫描的代码文件和预先存储于缺陷库中的缺陷代码文件;将待扫描的代码文件中的待扫描代码与缺陷代码文件中的缺陷代码进行比较;根据待扫描代码与缺陷代码比较的结果,计算待扫描代码与缺陷代码之间的相似度;以及响应于待扫描代码与缺陷代码之间的相似度大于预设的相似度阈值,确定所述待扫描代码存在缺陷,其中,将待扫描的代码文件中的待扫描代码与缺陷代码文件中的缺陷代码进行比较包括:计算待扫描代码与缺陷代码之间的编辑距离。
根据本公开的实施例,将待扫描的代码文件中的待扫描代码与缺陷代码文件中的缺陷代码进行比较之前,还包括:提取待扫描的代码文件的变更代码行;以及删除变更代码行中的注释和空字符,以形成待扫描代码。
根据本公开的实施例,在扫描的代码文件中的待扫描代码与缺陷代码文件中的缺陷代码进行比较之前,还包括:删除缺陷代码文件中的注释和空字符,以形成缺陷代码。
根据本公开的实施例,根据待扫描代码与缺陷代码比较的结果,计算待扫描代码与缺陷代码之间的相似度包括:利用下列的公式,计算所述待扫描代码与所述缺陷代码之间的相似度,
SIM=(Max(n,m)-LD)/Max(n,m),
其中,SIM为所述待扫描代码与所述缺陷代码之间的相似度,n为所述待扫描代码的字符数,m为所述缺陷代码的字符数,Max(n,m)为n、m中的较大者,LD为所述待扫描代码与所述缺陷代码之间的编辑距离。
根据本公开的实施例,缺陷库中存储有多个缺陷代码文件;对于多个缺陷代码文件中的每一个缺陷代码文件,重复执行:将待扫描的代码文件中的待扫描代码与缺陷代码文件中的缺陷代码进行比较;以及根据待扫描代码与缺陷代码比较的结果,计算待扫描代码与缺陷代码之间的相似度。
根据本公开的实施例,响应于待扫描代码与缺陷代码之间的相似度大于预设的相似度阈值,确定待扫描代码存在缺陷,包括:确定待扫描代码与多个缺陷代码文件的缺陷代码之间的相似度的最大值;以及响应于待扫描代码与多个缺陷代码文件的缺陷代码之间的相似度的最大值大于预设的相似度阈值,所述待扫描代码存在缺陷。
根据本公开的实施例,缺陷库中存储有多个缺陷代码文件和多个缺陷信息,多个缺陷代码文件和多个缺陷信息分别对应;所述方法还包括:响应于待扫描代码与缺陷代码之间的相似度大于预设的相似度阈值,确定待扫描代码的缺陷信息,其中,待扫描代码的缺陷信息为存储于缺陷库中的与待扫描代码相似的缺陷代码对应的缺陷信息。
根据本发明的第二方面,还提供一种代码扫描装置,包括文件获取模块,用于响应于代码扫描请求,获取待扫描的代码文件和预先存储于缺陷库中的缺陷代码文件;代码比较模块,用于将待扫描的代码文件中的待扫描代码与缺陷代码文件中的缺陷代码进行比较,将待扫描的代码文件中的待扫描代码与所述缺陷代码文件中的缺陷代码进行比较包括:计算所述待扫描代码与所述缺陷代码之间的编辑距离。;相似度计算模块,用于根据待扫描代码与缺陷代码比较的结果,计算待扫描代码与缺陷代码之间的相似度;以及缺陷确定模块,用于响应于待扫描代码与缺陷代码之间的相似度大于预设的相似度阈值。
根据本发明的第三方面,提供一种电子设备,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行如上所述的方法。
根据本发明的第四方面,提供一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行如上所述的方法。
根据本发明的第五方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上所述的方法。
上述一个或多个实施例具有如下优点或有益效果:
根据本公开提供的代码扫描方法、装置、电子设备和介质,基于LD算法(Levenshtein Distance),确定待扫描代码与缺陷代码之间的编辑距离;基于编辑距离,计算待扫描代码与缺陷代码之间的相似度;基于相似度,确定待扫描代码是否存在缺陷。本公开通过上述相似度计算过程及缺陷判定流程,精确地量化了待扫描代码存在缺陷的指标,提高了静态代码扫描的缺陷准确率,可有效减少缺陷的误报和漏报,节省代码缺陷追踪、修复成本,从而提高开发效率。
附图说明
通过以下参照附图对本发明实施例的描述,本发明的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的代码扫描方法、装置的系统架构;
图2示意性示出了根据本公开实施例的代码扫描方法的流程图;
图3示意性示出了根据本公开实施例的待扫描的代码文件中的待扫描代码预处理的流程图;
图4示意性示出了根据本公开实施例的缺陷代码文件中的缺陷代码预处理的流程图;
图5示意性示出了根据本公开实施例的待扫描代码与缺陷代码之间的相似度计算过程的流程图;
图6示意性示出了根据本公开实施例的待扫描代码与缺陷库中所有缺陷代码之间的相似度计算过程的流程图;
图7示意性示出了根据本公开实施例的待扫描代码缺陷确定过程的流程图;
图8A示意性示出了根据本公开实施例的缺陷库的方框图;
图8B示意性示出了根据本公开实施例的缺陷库构建的流程图;
图9示意性示出了根据本公开实施例的代码扫描装置的方框图;
图10示意性示出了根据本公开实施例的代码扫描方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
附图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。本公开的技术可以硬件和/或软件(包括固件、微代码等)的形式来实现。另外,本公开的技术可以采取存储有指令的计算机可读存储介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。
在本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供、公开和应用等处理,均符合相关法律法规的规定,采取了必要保密措施,且不违背公序良俗。
在本公开的技术方案中,在获取或采集用户个人信息之前,均获取了用户的授权或同意。
首先,对本文中记载的技术术语作如下解释和说明。
编辑距离:即莱文斯坦距离或Levenshtein Distance,简称为LD距离。编辑距离算法概念是俄罗斯科学家弗拉基米尔·莱文斯坦(Levenshtein·Vladimir I)提出,具体的算法概念为:编辑距离指两个字串之间,由一个转换成另一个所需的最少编辑操作次数,其中,允许的编辑操作包括:将其中一个字符替换成另一个字符;插入一个字符;和删除一个字符。
软件项目测试开发过程中,需要通过静态代码扫描来检查项目代码质量。其中,静态代码扫描指的是在不运行代码的方式下,通过文本分析和正则匹配等技术扫描程序代码,发现代码中存在的规范性、安全性问题的技术,输出项目代码的扫描报错。然而,现有的静态代码扫描是基于语法解析进行代码扫描,以代码所匹配的语法规则模式去评估代码,需要逐行分析匹配代码与语法规则,计算量较大,需要耗费大量的计算资源,而且,容易产生误报和漏报。
基于此,本公开的实施例提供一种代码扫描方法、装置、电子设备和介质,涉及信息安全技术领域和软件测试技术领域,可用于其他领域。该方法包括:响应于代码扫描请求,获取待扫描的代码文件和预先存储于缺陷库中的缺陷代码文件;将待扫描的代码文件中的待扫描代码与缺陷代码文件中的缺陷代码进行比较;根据待扫描代码与缺陷代码比较的结果,计算待扫描代码与缺陷代码之间的相似度;以及响应于待扫描代码与缺陷代码之间的相似度大于预设的相似度阈值,确定所述待扫描代码存在缺陷,其中,将待扫描的代码文件中的待扫描代码与缺陷代码文件中的缺陷代码进行比较包括:计算待扫描代码与缺陷代码之间的编辑距离。本公开通过上述相似度计算过程及缺陷判定流程,精确地量化了待扫描代码存在缺陷的指标,提高了静态代码扫描的缺陷准确率,可有效减少缺陷的误报和漏报,节省代码缺陷追踪、修复成本,从而提高开发效率。
图1示意性示出了根据本公开实施例的代码扫描方法、装置的系统架构。要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。
如图1所示,根据该实施例的代码扫描方法及装置的系统架构100可以包括终端设备101、102、103、网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。
需要说明的是,本公开实施例所提供的代码扫描方法一般可以由服务器105执行。相应地,本公开实施例所提供的代码扫描装置一般可以设置于服务器105中。本公开实施例所提供的代码扫描方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的代码扫描装置也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
以下将基于图1描述的系统架构,通过图2~图8对本公开实施例的代码扫描方法进行详细描述。
如图2所示,该实施例的代码扫描方法可以包括操作S210~S240,该代码扫描方法可以由上述服务器105执行。
在操作S210,响应于代码扫描请求,获取待扫描的代码文件和预先存储于缺陷库中的缺陷代码文件。
在本公开的实施例中,待扫描的代码文件和缺陷代码文件可以是由各种计算机程序设计语言编制的代码文件,例如,所述计算机程序设计语言可以包括JavaScript语言,C++语言,Python语言,C语言等。需要说明的是,本公开的实施例不对计算机程序设计语言做特别的限制。
在本公开的实施例中,服务器105可以提供丰富多样的代码检测工具,以支持多样的代码检测需求,如:针对JavaScript语言编程代码的检测工具、针对C++语言编程代码的检测工具、针对Python语言编程代码的检测工具、针对C语言编程代码的检测工具等。
在操作S220,将待扫描的代码文件中的待扫描代码与缺陷代码文件中的缺陷代码进行比较。其中,将待扫描的代码文件中的待扫描代码与缺陷代码文件中的缺陷代码进行比较包括:计算待扫描代码与缺陷代码之间的编辑距离。
在操作S230,根据待扫描代码与缺陷代码比较的结果,计算待扫描代码与缺陷代码之间的相似度。
在操作S240,响应于待扫描代码与缺陷代码之间的相似度大于预设的相似度阈值,确定待扫描代码存在缺陷。
通过本公开的实施例,基于LD算法(Levenshtein Distance),确定待扫描代码与缺陷代码之间的编辑距离;基于编辑距离,计算待扫描代码与缺陷代码之间的相似度;基于相似度,确定待扫描代码是否存在缺陷。通过上述相似度计算过程及缺陷判定流程,精确地量化了待扫描代码存在缺陷的指标,提高了静态代码扫描的缺陷准确率,可有效减少缺陷的误报和漏报,节省代码缺陷追踪、修复成本,从而提高开发效率。
图3示意性示出了根据本公开实施例的待扫描的代码文件中的待扫描代码预处理的流程图。
图4示意性示出了根据本公开实施例的缺陷代码文件中的缺陷代码预处理的流程图。
在本公开实施例中,上述操作S220中的计算待扫描代码与缺陷代码之间的编辑距离,还包括:对待扫描的代码文件中的待扫描代码预处理和对缺陷代码文件中的缺陷代码预处理。
如图3所示,对待扫描的代码文件中的待扫描代码预处理包括操作S310~S320。
在操作S310,提取待扫描的代码文件的变更代码行。
在本公开的实施例中,代码开发人员可以从各类开源代码平台获取开源代码,或者基于已有的可运行代码文件进行修改。因此,只需要针对变更代码行进行代码扫描,在距离计算之前,本公开将非首次扫描的代码文件与修改前的代码文件比较,仅提取变更的代码行。
在操作S320,删除变更代码行中的注释和空字符,以形成待扫描代码。
在本公开的实施例中,将待扫描的代码文件的变更行提取出来并剔除所有注释、空字符,其结果计为s,s共包含n个字符。
如图4所示,对缺陷代码文件中的缺陷代码预处理包括操作S410~S420。
在操作S410,提取缺陷代码文件。
在操作S420,删除缺陷代码文件中的注释和空字符,以形成缺陷代码。
在本公开的实施例中,将缺陷代码文件剔除所有注释、空行,其结果计为t,t共包含m个字符。
通过本公开的实施例,通过对待扫描的代码文件中的待扫描代码和缺陷代码文件中的缺陷代码进行预处理,提取代码文件中的必要部分,减少了编辑距离的计算量,提高了静态代码扫描的效率。
图5示意性示出了根据本公开实施例的待扫描代码与缺陷代码之间的相似度计算过程的流程图。
如图5所示,待扫描代码与缺陷代码之间的相似度计算包括操作S510~S520。
在操作S510,计算待扫描代码与缺陷代码之间的编辑距离。
在本公开的实施例中,待扫描代码与缺陷代码之间的编辑距离通过LD算法计算得到。上述编辑距离指待扫描代码与缺陷代码相互转换所需的最少的操作次数,允许的编辑操作包括:将其中一个字符替换成另一个字符、插入一个字符和删除一个字符。
在操作S520,根据待扫描代码与缺陷代码比较的结果,计算待扫描代码与缺陷代码之间的相似度。
在本公开的实施例中,利用下列的公式,计算待扫描代码与缺陷代码之间的相似度:
SIM=(Max(n,m)-LD)/Max(n,m),
其中,SIM为待扫描代码与缺陷代码之间的相似度,n为待扫描代码的字符数,m为缺陷代码的字符数,Max(n,m)为n、m中的较大者,LD为待扫描代码与缺陷代码之间的编辑距离。
在本公开的实施例中。待扫描代码与缺陷代码之间的相似度越接近于1,待扫描的代码中包含缺陷的概率越高。例如,在一种极端情况下,假设待扫描代码的字符数n为100;缺陷代码的字符数m为100;待扫描代码与缺陷代码完全一致,则LD=0。可得SIM=(100-0)/100=1,即待扫描代码与缺陷代码中的相似度为100%,待扫描代码包含该缺陷代码中的缺陷。在另一种极端情况下,假设待扫描代码的字符数n为100;缺陷代码的字符数m为100;待扫描代码与缺陷代码完全不一致,则LD=100。可得SIM=(100-100)/100=0,即待扫描代码与缺陷代码中的相似度为0,待扫描代码不包含该缺陷代码中的缺陷。
通过本公开的实施例,通过LD算法计算待扫描代码与缺陷代码之前的编辑距离,基于编辑距离给出了待扫描代码与缺陷代码之间的相似度的具体计算方法,实现了相似度的精确计算,量化了待扫描代码存在缺陷的指标,提高了静态扫描的缺陷准确率,有效减少了缺陷的误报和漏报。
返回参照图2,在操作S240,响应于待扫描代码与缺陷代码之间的相似度大于预设的相似度阈值,确定待扫描代码存在缺陷。
如上所述,根据相似度公式计算出的相似度的取值在[0,1]之间,即,大于等于0且小于等于1。在一些示例性的实施例中,所述预设的相似度阈值可以设置为大于0.7,例如0.7、0.8、0.85、0.9等。
在一些示例性的实施例中,可以设置多个预设的相似度阈值,例如,可以设置第一相似度阈值和第二相似度阈值,第一相似度阈值小于第二相似度阈值。当待扫描代码与缺陷代码之间的相似度大于第一相似度阈值但小于第二相似度阈值时,可以确定待扫描代码存在缺陷的第一概率;当待扫描代码与缺陷代码之间的相似度大于第二相似度阈值时,可以确定待扫描代码存在缺陷的第二概率,其中,第二概率大于第一概率。例如,所述第一相似度阈值可以设置为大于0.6小于0.85,例如0.65、0.68、0.7、0.75等,所述第二相似度阈值可以设置为大于0.85,例如0.88、0.9、0.95等。
图6示意性示出了根据本公开实施例的待扫描代码与缺陷库中所有缺陷代码之间的相似度计算过程的流程图。
如图6所示,待扫描代码与缺陷库中所有缺陷代码之间的相似度计算过程包括操作S610~S650。
在操作S610,响应于代码扫描请求,获取待扫描的代码文件。
在操作S620,从缺陷库中获取缺陷代码文件。
在操作S630,将待扫描代码与缺陷代码进行比较,以及根据待扫描代码与缺陷代码比较的结果,计算待扫描代码与缺陷代码之间的相似度。
在操作S640,判断是否遍历缺陷库中所有缺陷代码文件。若否,重复执行操作S620~S630;若是,待扫描代码与缺陷库中所有缺陷代码之间的相似度计算过程结束。
通过本公开的实施例,本公开通过循环执行操作S620~S630完成一个待扫描文件与多个缺陷代码之间的比较,并计算待扫描代码与多个缺陷代码之间的相似度,进而确定待扫描代码是否存在多个缺陷代码中的缺陷。
图7示意性示出了根据本公开实施例的待扫描代码缺陷确定过程的流程图。
如图7所示,待扫描代码缺陷确定过程的流程图包括操作S710~S720。
在操作S610,确定待扫描代码与多个缺陷代码文件的缺陷代码之间的相似度的最大值。
在本公开的实施例中,待扫描代码与缺陷代码相似度越大,待扫描代码存在缺陷的可能性越高,因此确定待扫描代码是否存在缺陷需要先确定待扫描代码与缺陷代码相似度的最大值。
在操作S620,响应于待扫描代码与多个缺陷代码文件的缺陷代码之间的相似度的最大值大于预设的相似度阈值,待扫描代码存在缺陷。
在本公开的实施例中,根据不同的开发要求预设相似度阈值,当待扫描代码与缺陷代码之间的相似度的最大值大于预设的相似度阈值,表示待扫描代码与缺陷代码相似,则待扫描代码存在缺陷。
通过本公开的实施例,提供了一个待扫描代码与多个缺陷代码之间的相似度确定方法。即,一个待扫描代码与多个缺陷代码比较时,相似度是待扫描代码与每一个缺陷代码之间的相似度的最大值。通过上述方法,可以确定与待扫描代码最相似的缺陷代码,进一步地,通过相似度阈值判断,可以判断待扫描代码是否存在最相似的缺陷代码中的缺陷。
图8A示意性示出了根据本公开实施例的缺陷库的方框图。
在本公开的实施例中,缺陷库中存储有多个缺陷代码和多个缺陷信息,并且,多个缺陷代码与多个缺陷信息分别对应。如图8A所示,缺陷库中存储k个缺陷代码和k个缺陷信息,第1个缺陷代码与第1个缺陷信息对应,第2个缺陷代码与第2个缺陷信息对应,以此类推,第k个缺陷代码与第k个缺陷信息对应。例如,k可以为大于等于10的正整数。
示例性地,所述缺陷信息可以包括以下信息中的至少一个:表示缺陷类型的信息,描述缺陷代码中的缺陷的说明,缺陷的风险等级信息等。
在本公开的实施例中,所述方法还可以包括:响应于所述待扫描代码与所述缺陷代码之间的相似度大于预设的相似度阈值,确定所述待扫描代码的缺陷信息,其中,所述待扫描代码的缺陷信息为存储于所述缺陷库中的与所述待扫描代码相似的所述缺陷代码对应的缺陷信息。也就是说,在完成待扫描代码与多个缺陷代码的相似度计算后,根据缺陷库中存储的缺陷代码与缺陷信息的对应关系,可以进一步确定待扫描代码的缺陷信息。
图8B示意性示出了根据本公开实施例的缺陷库构建的流程图。
如图8B所示,在本公开的实施例中,缺陷库构建包括步骤S810~S820。
在操作S810中,获取已解决的缺陷代码文件。
在操作S820中,分析已解决的缺陷代码文件,将缺陷代码和缺陷信息与缺陷代码的对应关系存储到缺陷库中。
在本公开的实施例中,缺陷库中预先存储有缺陷代码和缺陷代码与缺陷信息的对应关系,上述存储数据可以来源于以往开发过程中已解决的缺陷代码文件或任何开源平台。另外,本公开的实施例还会将确定有缺陷的待扫描文件中的缺陷代码和缺陷代码与缺陷信息的对应关系动态地存储到缺陷库中,完成缺陷库的扩充。
通过本公开的实施例,通过构建存储有缺陷代码和缺陷代码与缺陷信息的对应关系的缺陷库,在判断待扫描代码存在缺陷后,可以从缺陷库中读取与待扫描代码相似度最高的缺陷代码的缺陷信息,从而确定待扫描代码的缺陷信息。
图9示意性示出了根据本公开实施例的代码扫描装置的方框图。
如图9所示,根据本公开的实施例的代码扫描装置900包括文件获取模块910、代码比较模块920、相似度计算模块930和缺陷确定模块940。
文件获取模块910,用于响应于代码扫描请求,获取待扫描的代码文件和预先存储于缺陷库中的缺陷代码文件。在一实施例中,文件获取模块910可以用于执行前文描述的操作S210,在此不再赘述。
代码比较模块920,用于将待扫描的代码文件中的待扫描代码与缺陷代码文件中的缺陷代码进行比较。在一实施例中,代码比较模块920可以用于执行前文描述的操作S220,在此不再赘述。
相似度计算模块930,用于根据待扫描代码与缺陷代码比较的结果,计算待扫描代码与缺陷代码之间的相似度。在一实施例中,相似度计算模块930可以用于执行前文描述的操作S230,在此不再赘述。
缺陷确定模块940,用于响应于待扫描代码与缺陷代码之间的相似度大于预设的相似度阈值,待扫描代码存在缺陷。在一实施例中,缺陷确定模块940可以用于执行前文描述的操作S240,在此不再赘述。
根据本公开的实施例,文件获取模块910、代码比较模块920、相似度计算模块930和缺陷确定模块940中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,文件获取模块910、代码比较模块920、相似度计算模块930和缺陷确定模块940中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,文件获取模块910、代码比较模块920、相似度计算模块930和缺陷确定模块940中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
根据本公开的实施例的代码扫描装置900还可以包括代码预处理模块。在一些示例性的实施例中,所述代码预处理模块可以用于提取待扫描的代码文件的变更代码行;以及删除变更代码行中的注释和空字符,以形成待扫描代码。在另一些示例性的实施例中,所述代码预处理模块还可以删除缺陷代码文件中的注释和空字符,以形成缺陷代码。
在一些示例性的实施例中,相似度计算模块930可以利用下列的公式,计算待扫描代码与缺陷代码之间的相似度:
SIM=(Max(n,m)-LD)/Max(n,m),
其中,SIM为待扫描代码与缺陷代码之间的相似度,n为所述待扫描代码的字符数,m为缺陷代码的字符数,Max(n,m)为n、m中的较大者,LD为待扫描代码与缺陷代码之间的编辑距离。
根据本公开的实施例的代码扫描装置900还可以包括循环执行模块,所述循环执行模块可以用于使文件获取模块910、代码比较模块920、相似度计算模块930重复执行操作S210~S230,使得待扫描代码与缺陷库中的每一个缺陷代码比较,计算待扫描代码与缺陷库中的每一个缺陷代码的相似度。在一些示例性的实施例中,缺陷确定模块940可以用于确定待扫描代码与多个缺陷代码文件的缺陷代码之间的相似度的最大值;以及响应于待扫描代码与多个缺陷代码文件的缺陷代码之间的相似度的最大值大于预设的相似度阈值,确定待扫描代码存在缺陷。在另一些示例性的实施例中,所述缺陷确定模块940还可以响应于待扫描代码与缺陷代码之间的相似度大于预设的相似度阈值,确定所述待扫描代码的缺陷信息,其中,待扫描代码的缺陷信息为存储于缺陷库中的与待扫描代码相似的缺陷代码对应的缺陷信息。
需要说明的是,本公开的实施例提供的代码扫描方法和代码扫描装置还具有如下效果和优点中的至少一个:
(1)本公开的实施例提供的代码扫描方法和代码扫描装置基于LD算法计算出待扫描代码与缺陷代码之间的编辑距离;基于编辑距离计算出待扫描代码与缺陷代码之间的相似度;基于相似度判断待扫描代码是否存在缺陷代码之间的缺陷。本公开的实施例通过上述方法提供了相似度的计算公式,量化了待扫描代码与缺陷代码的相似度,从而更精确地计算了待扫描代码中存在缺陷的可能性,提高了静态扫描的缺陷准确率,有效减少了缺陷的误报和漏报。
(2)本公开的实施例提供的代码扫描方法和代码扫描装置能够有效改善现有的基于语法解析的静态代码中计算量大的问题,本公开的实施例基于LD算法提供了无须语法解析的待扫描代码与缺陷代码之间的比较方法,并进一步地通过计算前对待扫描代码文件与缺陷代码文件的预处理降低了计算的工作量。
(3)本公开的实施例提供的代码扫描方法和代码扫描装置能够确定待扫描代码的缺陷。本公开的实施例中构建了存储缺陷代码与缺陷代码与缺陷关系的缺陷库,提供了待扫描代码与多个缺陷代码之间相似度的计算方法,因此可以从多个缺陷代码中确定与待扫描代码相似度最高的缺陷代码,并进一步从缺陷库中获取缺陷代码的缺陷。
图10示意性示出了适合实施根据本公开实施例的代码扫描方法的电子设备的方框图。
如图10所示,根据本公开实施例的电子设备1000包括处理器1001,其可以根据存储在只读存储器(ROM)1002中的程序或者从存储部分1008加载到随机访问存储器(RAM)1003中的程序而执行各种适当的动作和处理。处理器1001例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器1001还可以包括用于缓存用途的板载存储器。处理器1001可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 1003中,存储有电子设备1000操作所需的各种程序和数据。处理器1001、ROM 1002以及RAM 1003通过总线1004彼此相连。处理器1001通过执行ROM 1002和/或RAM1003中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 1002和RAM 1003以外的一个或多个存储器中。处理器1001也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备1000还可以包括输入/输出(I/O)接口1005,输入/输出(I/O)接口1005也连接至总线1004。电子设备1000还可以包括连接至I/O接口1 005的以下部件中的一项或多项:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的代码扫描方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 1002和/或RAM 1003和/或ROM 1002和RAM 1003以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的代码扫描方法。
在该计算机程序被处理器1001执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分1009被下载和安装,和/或从可拆卸介质1011被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被处理器1001执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

Claims (11)

1.一种代码扫描方法,其特征在于,所述方法包括:
响应于代码扫描请求,获取待扫描的代码文件和预先存储于缺陷库中的缺陷代码文件;
将所述待扫描的代码文件中的待扫描代码与所述缺陷代码文件中的缺陷代码进行比较;
根据所述待扫描代码与所述缺陷代码比较的结果,计算所述待扫描代码与所述缺陷代码之间的相似度;以及
响应于所述待扫描代码与所述缺陷代码之间的相似度大于预设的相似度阈值,确定所述待扫描代码存在缺陷,
其中,所述将所述待扫描的代码文件中的待扫描代码与所述缺陷代码文件中的缺陷代码进行比较包括:计算所述待扫描代码与所述缺陷代码之间的编辑距离。
2.根据权利要求1所述的方法,其特征在于,在将所述待扫描的代码文件中的待扫描代码与所述缺陷代码文件中的缺陷代码进行比较之前,所述方法还包括:
提取所述待扫描的代码文件的变更代码行;以及
删除所述变更代码行中的注释和空字符,以形成待扫描代码。
3.根据权利要求2所述的方法,其特征在于,在将所述待扫描的代码文件中的待扫描代码与所述缺陷代码文件中的缺陷代码进行比较之前,所述方法还包括:
删除所述缺陷代码文件中的注释和空字符,以形成缺陷代码。
4.根据权利要求1-3中任一项所述的方法,其特征在于,根据所述待扫描代码与所述缺陷代码比较的结果,计算所述待扫描代码与所述缺陷代码之间的相似度包括:利用下列的公式,计算所述待扫描代码与所述缺陷代码之间的相似度:
SIM=(Max(n,m)-LD)/Max(n,m),
其中,SIM为所述待扫描代码与所述缺陷代码之间的相似度,n为所述待扫描代码的字符数,m为所述缺陷代码的字符数,Max(n,m)为n、m中的较大者,LD为所述待扫描代码与所述缺陷代码之间的编辑距离。
5.根据权利要求4所述的方法,其特征在于,所述缺陷库中存储有多个缺陷代码文件;
对于所述多个缺陷代码文件中的每一个缺陷代码文件,重复执行:将所述待扫描的代码文件中的待扫描代码与所述缺陷代码文件中的缺陷代码进行比较;以及根据所述待扫描代码与所述缺陷代码比较的结果,计算所述待扫描代码与所述缺陷代码之间的相似度。
6.根据权利要求5所述的方法,其特征在于,所述响应于所述待扫描代码与所述缺陷代码之间的相似度大于预设的相似度阈值,确定所述待扫描代码存在缺陷,包括:
确定所述待扫描代码与所述多个缺陷代码文件的缺陷代码之间的相似度的最大值;以及
响应于所述待扫描代码与所述多个缺陷代码文件的缺陷代码之间的相似度的最大值大于预设的相似度阈值,确定所述待扫描代码存在缺陷。
7.根据权利要求1-3中任一项所述的方法,其特征在于,所述缺陷库中存储有多个缺陷代码文件和多个缺陷信息,所述多个缺陷代码文件和所述多个缺陷信息分别对应;
所述方法还包括:响应于所述待扫描代码与所述缺陷代码之间的相似度大于预设的相似度阈值,确定所述待扫描代码的缺陷信息,其中,所述待扫描代码的缺陷信息为存储于所述缺陷库中的与所述待扫描代码相似的所述缺陷代码对应的缺陷信息。
8.一种代码扫描装置,其特征在于,所述装置包括:
文件获取模块,用于响应于代码扫描请求,获取待扫描的代码文件和预先存储于缺陷库中的缺陷代码文件;
代码比较模块,用于将所述待扫描的代码文件中的待扫描代码与所述缺陷代码文件中的缺陷代码进行比较;
相似度计算模块,用于根据所述待扫描代码与所述缺陷代码比较的结果,计算所述待扫描代码与所述缺陷代码之间的相似度;以及
缺陷确定模块,用于响应于所述待扫描代码与所述缺陷代码之间的相似度大于预设的相似度阈值,确定所述待扫描代码存在缺陷,
其中,所述将所述待扫描的代码文件中的待扫描代码与所述缺陷代码文件中的缺陷代码进行比较包括:计算所述待扫描代码与所述缺陷代码之间的编辑距离。
9.一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行根据权利要求1~7中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求1~7中任一项所述的方法。
11.一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现根据权利要求1~7中任一项所述的方法。
CN202310666984.6A 2023-06-06 2023-06-06 代码扫描方法、装置、电子设备和介质 Pending CN116680184A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310666984.6A CN116680184A (zh) 2023-06-06 2023-06-06 代码扫描方法、装置、电子设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310666984.6A CN116680184A (zh) 2023-06-06 2023-06-06 代码扫描方法、装置、电子设备和介质

Publications (1)

Publication Number Publication Date
CN116680184A true CN116680184A (zh) 2023-09-01

Family

ID=87786825

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310666984.6A Pending CN116680184A (zh) 2023-06-06 2023-06-06 代码扫描方法、装置、电子设备和介质

Country Status (1)

Country Link
CN (1) CN116680184A (zh)

Similar Documents

Publication Publication Date Title
CN115061874A (zh) 日志信息验证方法、装置、设备及介质
CN113535577B (zh) 基于知识图谱的应用测试方法、装置、电子设备和介质
CN113507419B (zh) 流量分发模型的训练方法、流量分发方法及装置
CN110895587B (zh) 用于确定目标用户的方法和装置
CN110737820B (zh) 用于生成事件信息的方法和装置
CN116560661A (zh) 代码优化方法、装置、设备及存储介质
CN113626558B (zh) 一种基于智能推荐的字段标准化的方法和系统
CN115292187A (zh) 无编码的页面自动测试方法、装置、电子设备和介质
CN116680184A (zh) 代码扫描方法、装置、电子设备和介质
CN113052509A (zh) 模型评估方法、模型评估装置、电子设备和存储介质
CN111400623A (zh) 用于搜索信息的方法和装置
CN116452208B (zh) 变更交易码的确定方法、装置、设备及介质
CN113535568B (zh) 应用部署版本的验证方法、装置、设备和介质
CN116450416A (zh) 软件测试用例的冗余校验方法、装置、电子设备及介质
CN116401319B (zh) 数据同步方法及装置、电子设备和计算机可读存储介质
CN116661857A (zh) 数据提取方法、装置、设备及存储介质
CN117785205A (zh) 一种数据评估方法、装置、电子设备及计算机可读介质
CN114817007A (zh) 信息处理方法及装置、电子设备和计算机可读存储介质
CN109525630B (zh) 发送数据分析委托请求的方法、装置、介质及电子设备
CN115238278A (zh) 一种运维脚本的风险检测方法、装置、设备及介质
CN116594886A (zh) 测试脚本生成方法、装置、电子设备和存储介质
CN113935334A (zh) 文本信息处理方法、装置、设备和介质
CN116737588A (zh) 应用测试方法、装置、设备及存储介质
CN116541840A (zh) 恶意软件同源分析方法、装置、设备和介质
CN116578566A (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