CN113467978A - 检测和修复代码缺陷的方法及装置 - Google Patents

检测和修复代码缺陷的方法及装置 Download PDF

Info

Publication number
CN113467978A
CN113467978A CN202010234912.0A CN202010234912A CN113467978A CN 113467978 A CN113467978 A CN 113467978A CN 202010234912 A CN202010234912 A CN 202010234912A CN 113467978 A CN113467978 A CN 113467978A
Authority
CN
China
Prior art keywords
code
codes
program source
repair
repairing
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
CN202010234912.0A
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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN202010234912.0A priority Critical patent/CN113467978A/zh
Publication of CN113467978A publication Critical patent/CN113467978A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • 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/366Software debugging using diagnostics

Landscapes

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

Abstract

本公开实施例提供一种检测和修复代码缺陷的方法和装置。该方法包括:构建代码缺陷库,所述代码缺陷库存储有曾经产生过代码缺陷的代码及当时采用的修复方案;将程序源代码与所述代码缺陷库中的代码比对,以确定所述程序源代码中是否包含相同的代码;如果所述程序源代码中包含相同的代码,则根据用户选择,确定是否按照当时采用的修复方案进行修复,并据此执行。该方法借鉴了曾经的代码修复实践,虽然仍旧需要人工判断是否采用在先采用的修复方案修复程序源代码中的相同代码,但具体修复过程无需人工干预,从而实现对代码缺陷的自动修复。

Description

检测和修复代码缺陷的方法及装置
技术领域
本公开涉及计算机研发领域,具体而言,涉及一种检测和修复代码缺陷的方法及装置。
背景技术
通常,由于研发人员个体所限,软件系统的代码缺陷往往不可避免。典型的软件系统可包括:分析、开发、测试和发布四个阶段。基本上,开发和测试阶段一般能够修复90%以上的代码缺陷,但仍旧可能有部分代码缺陷会随着系统发布进入到生产环境,并造成软件系统的运行错误,甚至影响到正常处理。因此,对于代码缺陷,及时地定位和快速修复对软件系统能否成功至关重要。
发明内容
本公开提出一种检测和修复代码缺陷的方法及装置,以实现及时地定位和快速修复代码缺陷。
为了达到这个目的,根据本公开的第一方面,提供一种检测和修复代码缺陷的方法,包括:
构建代码缺陷库,所述代码缺陷库存储有曾经产生过代码缺陷的代码及当时采用的修复方案;
将程序源代码与所述代码缺陷库中的代码比对,以确定所述程序源代码是否包含相同的代码;
如果所述程序源代码中包含相同的代码,则根据用户选择,确定是否按照当时采用的修复方案进行修复,并据此执行。
可选地,与所述代码对应的代码缺陷详情也存储在所述代码缺陷库中,在所述用户选择之前,将所述代码缺陷详情提供给用户参考。
可选地,还包括:如果所述程序源代码中包含有相同的代码,则向用户提出告警。
可选地,还包括:如果所述程序源代码中包含相同的代码,则判断所述代码是否会影响数据库表内的数据,如果所述代码影响数据库表信息内的数据,则将被影响到的数据库表提供给用户。
可选地,所述将程序源代码与所述代码缺陷库中的代码比对,以确定所述程序源代码中是否包含相同的代码包括:
将程序源代码解析为第一抽象语法树;
将代码缺陷库中产生缺陷的多个代码分别解析成多个第二抽象语法树;以及
将所述第一抽象语法树与每个所述第二抽象语法树进行比对,当所述第一抽象语法树与所述第二抽象语法树匹配时,确定程序源代码与对应的代码相同。
可选地,还包括:将所述第一抽象语法树和匹配的第二抽象语法树提供给用户参考。
可选地,所述方法在将所述程序源代码的可执行代码发布到生产环境之前执行。
可选地,所述构建代码缺陷库包括:根据缺陷管理系统的代码缺陷数据,将在多个软件系统中重复产生的、并对应有相同修复方案的代码缺陷添加到所述代码缺陷库中。
可选地,在所述代码中,将每个变量替换为通配符。
第二方面,本公开实施例提供一种检测和修复代码缺陷的装置,包括:
构建模块,用于构建代码缺陷库,所述代码缺陷库存储有产生代码缺陷的代码及当时采用的修复方案;
检测模块,用于将程序源代码与所述代码缺陷库中的代码比对,以确定所述程序源代码是否包含相同的代码;
修复模块,用于如果所述程序源代码包含相同的代码,则根据用户选择,确定是否按照当时采用的修复方案进行修复,并据此执行。
第三方面,本公开实施例提供一种代码缺陷的修复装置,包括:
构建模块,用于构建代码缺陷库,所述代码缺陷库存储有产生代码缺陷的代码及当时采用的修复方案;
检测模块,用于将程序源代码与所述代码缺陷库中的代码比对,以确定所述程序源代码中是否包含相同的代码;
修复模块,用于如果所述程序源代码中包含相同的代码,则根据用户选择,确定是否按照当时采用的修复方案进行修复,并据此执行。
第四方面,本公开实施例提供一种终端设备,包括存储器和处理器,所述存储器还存储有可由所述处理器执行的计算机指令,所述计算机指令被执行时,实现上述任一项所述的方法。
第五方面,本公开实施例提供一种计算机可读介质,所述计算机可读介质存储有可由终端设备执行的计算机指令,所述计算机指令被执行时,实现上述任一项所述的方法。
本公开提供的检测和修复代码缺陷的方法,包括两种方案:对于一些代码缺陷,如果程序源代码包含了相同代码,则采用当时采用的修复方案修复程序源代码中的相同代码,由此可以借鉴曾经的代码修复实践,并实现对代码缺陷的自动修复;对于另一些代码缺陷,虽然仍旧需要人工判断是否采用当时采用的修复方案修复程序源代码中的相同代码,但具体修复过程无需人工干预,从而实现对代码缺陷的自动修复。
附图说明
通过参考以下附图对本公开实施例的描述,本公开的上述以及其它目的、特征和优点将更为清楚,在附图中:
图1是适用于本公开实施例的一个软件研发投产流程;
图2是本公开一实施例提供的检测和修复代码缺陷的方法的流程图;
图3是本公开一实施例提供的检测和修复代码缺陷的方法的流程图;
图4是本公开另一实施例提供的检测和修复代码缺陷的方法的流程图;
图5是本公开一实施例提供的代码缺陷的修复装置的结构图;
图6是根据本公开实施例提供的终端设备的示意图。
具体实施方式
以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
在详细描述本公开实施例之前,介绍发明人对于本公开实施例所要解决的技术问题的发现过程。
云计算平台向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。通过云计算平台,可进行一种快速、完全托管的GB/TB/PB级数据仓库解决方案。在数据仓库解决方案之前,必须确保数据质量,因此通常情况下,需根据设定规则对数据进行监控。然而目前已有的能够对数据进行监控的软件工具只监控数据质量并报警,但不对数据产出进行处理,需要报警接收人判断如何处理。具体地,该软件工具将数据监控规则分为强规则和弱规:强规则,一旦触发报警就会阻断任务的执行(将任务置为失败状态,使下游任务不会被触发执行);弱规则:只报警但不阻断任务的执行。该软件工具提供常用的规则模板,包括表行数较N天前波动率、表空间大小较N天前波动率、字段最大/最小/平均值相比N天前波动率、字段空值/唯一个数等。也就是说,利用该软件工具,即使在监控到数据存在问题的情况下,也需要研发人员花费大量时间核查产生数据的程序源代码,并定位和修复代码缺陷。由此,本公开实施例提供一种检测和修复代码缺陷的方法及装置,以达到能够及时地定位和快速修复代码缺陷的目的。
图1是适用于本公开实施例的一个软件研发投产流程。该软件研发投产流程包括以下内容。
在系统开发11和测试阶段12中,研发人员利用各种研发工具进行代码开发,并将开发好的功能模块进行各种测试,例如单元测试、集成测试、性能测试等,测试不通过的功能模块返回给研发人员继续修改。当所有功能模块都测试通过后,在功能模块中添加注释,提交代码到版本库。在代码检测和缺陷修复阶段14中,研发人员或测试人员对提交的代码进行代码检测,如果在提交的代码中检测到代码缺陷,则可以根据用户选择,确定是否采用一键修复功能修复代码缺陷。在生产环境发布15和测试阶段16中,将做完代码检测和缺陷修复的代码部署到生产环境中进行测试,当在生长环境中测试不通过时,则要求研发人员或测试人员继续进行修复。
该软件研发投产流程和典型的软件研发投产流程的不同之处在于,该软件研发投产流程还包括了用于实施本公开实施例的代码检测和缺陷修复阶段。应该理解,虽然图上将代码检测和缺陷修复阶段14放在了提交代码13和发布到生产环境15之间,但是本公开并不以此为限。例如,实施本公开实施例的代码检测和缺陷修复阶段14还可以放在系统开发11和本地测试12之间,或者放在本地测试12与提交代码13之间。
下面结合附图对本公开实施例提供的检测和修复代码缺陷的方法进行详细描述。
图2是本公开一实施例提供的检测和修复代码缺陷的方法的流程图。如图2所示的方法具体包括以下步骤。其中步骤S202-S204会重复执行N次,N表示代码缺陷库存储的代码缺陷的记录数量。
在步骤S201中,构建代码缺陷库。代码缺陷库存储有曾经产生代码过代码缺陷的代码及当时采用的修复方案。
程序源代码是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。在研发领域,不同或相同研发人员在编写程序源代码时有很大可能会犯一些相同错误,从而导致相同或类似的代码缺陷在不同软件系统中不断产生,因此曾经发生过的代码缺陷对研发人员具有参考和借鉴价值。对于本步骤,可以采用以下两种方式将此类代码缺陷收集到代码缺陷库中:第一是经由缺陷管理系统汇总在多个软件系统的代码缺陷数据,以找出那些曾经发生的、且修复方案相同的代码缺陷;第二是研发人员上报自己遇到的此类代码缺陷,然后由数据维护人员进行汇总和过滤;第三是将前两者结合构建代码缺陷库。
在步骤S202中,将程序源代码与代码缺陷库中的代码比对。
在步骤S203中,判断程序源代码是否与代码缺陷库包含相同的代码。
在步骤S202-S203中,从程序源代码中提取代码,并与代码缺陷库中的产生代码缺陷的代码进行比对,以确定程序源代码是否与代码缺陷库包含相同的代码,如果包含相同的代码,则执行步骤S204,如果不包含相同的代码,则跳转到步骤S202。
作为可选的实施方式,本步骤可以将代码缺陷库中的产生代码缺陷的每个代码作为一个个检索词,全文检索程序源代码,以确定程序源代码中是否包含相同代码。
作为可选的实施方式,在步骤之前,可以对程序源代码进行全面筛选,只保留部分源代码以和代码缺陷库进行比对。例如,可以过滤掉变量定义的源代码、过滤掉表示注释的源代码、过滤掉表示方法或函数定义的源代码,等等,以保留较少数量的源代码与代码缺陷库进行比对,提高比对效率。
在步骤S204中,如果程序源代码与代码缺陷库包含相同的代码,则根据用户选择,确定是否按照当时采用的修复方案进行修复,并据此执行。
在本步骤中,用户选择是用户主动提供的操作指示。用户可以浏览代码缺陷库中的修复方案,根据修复方案推算该代码缺陷在什么情况下产生,并结合该代码在当前的程序源代码中的使用情况,确定是否按照当时采用的修复方案进行修复,然后可以通过键盘、触控设备、移动终端等将选择发送给流程处理。流程处理接收到选择之后,有两种分支操作:第一种如果用户选择是指示按照当时采用的修复方案进行修复,则从代码缺陷库获得修复方案并进行修复;第二种是如果用户选择是指示不按照当时采用的修复方案进行修复,则不进行修复。
举例说明。在离线数据分析时,通常会从表中取出一年或多年的历史数据进行数据挖掘。例如,从表instance读出指定年之前一年的历史数据,正确的做法是从输入的时间变量${bizdate}里得到指定年的信息,但在实际的程序源代码中,从数据库的系统时间中得到该信息,由此可能导致从表instance读出的历史数据不为预期数据。更具体地说,假设${bizdate}为2020年1月29日,从${bizdate}得到的年信息为2020年,按照上述条件从instance取出的应为2019年至2020年之间的历史数据,在实际的程序源代码中,由于数据库的系统时间为2020年3月29日,则从系统时间得到的年信息也为2020年,按照上述条件,仍旧能够得到从instance中取出2019至2020年之间的历史数据。但是如果${bizdate}为2019年1月29日,从${bizdate}得到的年信息为2019年,按照上述条件从instance取出的应是2018至2019年之间的历史数据,而实际上由于系统时间仍旧为2020年3月29日,得到的年信息仍旧为2020年,则实际上从instance中取出的仍旧是2019年至2020年之间的历史数据。这个代码缺陷对应的修复方案是将从系统时间获取年信息修改为从输入的时间变量${bizdate}获取年信息。由于这个代码缺陷由于没有逻辑上的错误且能够在一些情况下输出正确结果,因此在实际运行中并不容易察觉。根据上述实施例,则可以将这个代码缺陷和对应的修复方案存储到代码缺陷库中,在发现相同代码时,由用户决定是否采用代码缺陷库中的修复方案。
图3是本公开一实施例提供的检测和修复代码缺陷的方法的流程图。该实施例的步骤S301-S303与上述步骤S201-S203相同,这里就不再赘述。步骤S304是如果程序源代码与代码缺陷库包含相同的代码,则直接按照当时采用的修复手段进行对相同的代码进行修复。
举例说明。在程序源代码中,将关系运算符“==”被写成了赋值运算符“=”。更具体地说,条件语句(if)中,将判断两个字符串是否相等(str1==str2)写成将一个字符串赋值给另一个字符串(str1=str2)。毫无疑问,这个代码缺陷是研发人员编码时的笔误,但是由于没有逻辑上的错误且能够在一些情况下输出正确结果,因此也不容易察觉。而根据上述实施例,可以将这个代码缺陷和对应的修复方案存储到代码缺陷库中,在发现相同代码的情况下,直接替换为代码缺陷库中的修复方案。
进一步地,将上述代码缺陷表征为:if(xx=xx),对应的修复方案为:将”=”替换为“==”,其中xx表示通配符,能够匹配任意数量的字符和数字。这样,当将程序源代码与代码缺陷库中的代码缺陷逐一比对时,可避免由于变量名称不同无法比较出相同的代码。
进一步地,结合图2和图3可形成新的实施例,包括:判断代码缺陷,针对无需人工介入的代码缺陷,即如果程序源代码包含相同代码,则肯定会产生相同的代码缺陷,则直接使用当时采用的修复方案进行修复,而对于需要人工介入的代码缺陷,则等待用户选择,以确定是否采用当时采用的修复方案进行修复。代码缺陷库的每个代码缺陷都可以对应一个是否需要人工介入的标识,如果程序源代码包含了相同代码,则根据该标识确定是否等待用户决定。
需要强调的是,一方面,本公开的代码缺陷库并不是一个大而全的代码缺陷库,它的数据量要远远少于缺陷管理系统的代码缺陷的数据量,应尽量避免使代码缺陷库成为缺陷管理系统的数据副本。为此,可以采用以下规则:可以设定代码缺陷库中只包含在软件系统发布到生产环境之后产生的代码缺陷,即从软件系统发布到生产环境之后产生的代码缺陷中挑选出若干个代码缺陷并整理到本公开的代码缺陷库中,这样做可以仅仅将比较隐蔽的代码缺陷收录到代码缺陷库中,从而有助于提高整体方案的可用性,隐蔽的代码缺陷为那些在大部分条件都不会影响流程正常处理,只有在很特定的条件下才会表现出问题的代码缺陷;可以限定修复方案必须简单明确,例如文本和/或代码描述不超过设定行数,基本上能够达到研发人员大致浏览一下就能够明白的地步,如此,研发人员才能够在短时间内确定是否按照修复方案进行修复。另一方面,本公开的代码缺陷库中应集成前辈研发人员在开发过程中积累的优秀实践,可以很好的帮助后辈研发人员规避他们之前的错误,以此提高研发效率,确保交付质量。
综上,本公开提供的检测和修复代码缺陷的方法,能够借鉴曾经的代码修复实践,并实现对代码缺陷的自动的修复。
图4是本公开另一实施例提供的检测和修复代码缺陷的方法的流程图。具体包括步骤以下步骤。其中步骤S404-S406会重复执行N次,N表示代码缺陷库存储的代码缺陷的数量。
在步骤S401中,构建代码缺陷库。所述代码缺陷库存储有曾经产生代码过代码缺陷的代码及当时采用的修复方案。
在步骤S402中,将程序源代码解析为第一抽象语法树。抽象语法树(AbstractSyntax Tree,AST)是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
在步骤S403中,将代码缺陷库中产生缺陷的多个代码分别解析成多个第二抽象语法树。即将每个产生代码缺陷的代码解析成一个第二抽象语法树。
在步骤S404中,逐一将第一抽象语法树与多个第二抽象语法树比对。
在步骤S405中,判断第一抽象语法树与第二抽象语法树是否相同。如果相同执行步骤S406,否则执行步骤S404。
在步骤S406中,根据用户选择,确定是否按照当时采用的修复手段进行修复,并据此执行。可选地,步骤S406可被步骤S304替换以形成新的实施例。
在本实施例中,将程序源代码和代码缺陷库中的每个代码解析为抽象语法树,然后利用抽象语法树进行程序源代码和代码缺陷库中的每个代码的比对,通过提高程序源代码和代码缺陷库的比对精度,从而实现对程序源代码的更准确的检测。
在一个实施例中,如果第一抽象语法树与其中一个第二抽象语法树匹配,则将第一抽象语法树和匹配的第二抽象语法树提供给用户参考,以帮助用户确定是否按照当时采用的修复方案进行修复。
在一个实施例中,如果程序源代码中包含相同的代码,则判断该代码是否会影响数据库表内的数据,如果代码影响数据库表内的数据,则将被影响到的数据库表信息提供给用户。
在一个实施例中,代码缺陷库包含了代码缺陷详情,用于提供给用户参考,从而使得用户可以根据代码缺陷详情确定是否按照当时采用的修复方案进行修复。进一步地,代码缺陷库还包含了报警信息,如果程序源代码中包含有与代码缺陷库相同的代码,则向用户提供报警信息,以提示用户关注问题的严重程度。
作为示例,代码缺陷库可以采用如表格1数据结构。
表格1
Figure BDA0002430655800000091
Figure BDA0002430655800000101
图5是本公开一实施例提供的代码缺陷的修复装置的结构图。该装置包括构建模块501、检测模块502和修复模块503以及代码缺陷库41。
构建模块501用于构建代码缺陷库41,代码缺陷库41内存储有产生代码缺陷的代码及当时采用的修复方案。可以采用以下两种方式将代码缺陷收集到代码缺陷库中:第一经由缺陷管理系统汇总在多个软件系统的代码缺陷数据,以找出那些曾经发生的、修复方案相同的代码缺陷;第二研发人员上报自己遇到的此类代码缺陷,然后由数据维护人员进行汇总和过滤。此外,最好为代码缺陷库提供一份代码缺陷规范,用于规定收入到代码缺陷库中的代码缺陷需要满足的条件,以此避免代码缺陷库成为缺陷管理系统的数据副本。
检测模块502的输入是程序源代码和代码缺陷库中的数据,检测模块502将程序源代码与代码缺陷库中的代码比对,以确定程序源代码中是否包含相同的代码。检测模块502找到相同的代码之后,可以将位置信息发送给修复模块503。
修复模块503接收到相同代码的位置信息,确定程序源代码中包含相同的代码,此时,修复模块503可根据用户选择确定是否按照当时采用的修复方案进行修复,并据此执行。具体地,当程序源代码包含有与代码缺陷库包含相同的代码时,研发人员可以浏览代码缺陷库中的修复方案,根据修复方案推算该代码缺陷在什么情况下产生,并结合该代码在当前的程序源代码中的使用情况以确定是否按照当时采用的修复方案进行修复,并据此执行。此外,针对特定代码缺陷,修复模块503还可以无需等待用户选择,而是直接按照当时采用的修复方案修复当前代码。
本实施例提供的代码缺陷的修复装置,确定程序源代码中是否包含有曾经产生过代码缺陷的代码,并在包含有曾经产生过代码缺陷的代码时,由用户判断或者不由用户判断是否采用当时采用的修复方案修复程序源代码中的相同代码,但具体修复过程都无需人工干预,从而实现对代码缺陷的自动修复。进一步地,代码缺陷库表征代码缺陷库表征了前辈研发人员在开发过程中积累的优秀实践,因此利用代码缺陷库进行代码检测和缺陷修复,可以很好的帮助后辈研发人员规避他们之前的错误,以此提高研发效率,确保交付质量。
与上述实施例相对应,如图6所示,本公开还提供一种终端设备60,在硬件层面,包括存储器602和处理器601,除此之外,一些情况下还包括输入输出设备603和其他硬件604。存储器602例如为高速随机存取存储器(Random-Access Memory,RAM),也可能是非易失性存储器(non-volatile memory),例如为至少1个磁盘存储器等。输入输出设备603例如为显示器、键盘、鼠标、网络控制器等设备。处理器601可以基于目前市场上各种型号的处理器构建。处理器601、存储器602、输入输出设备603和其他硬件604通过总线相互连接,该总线可以是ISA(Ind ustry Standard Architecture,工业标准体系结构)总线、PCI (PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图6中仅用一个线条表示,但并不表示仅有一根总线或一种类型的总线。
存储器602用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机指令。存储器可以包括内存和非易失性存储器,并向处理器601提供计算机指令和数据。处理器601从存储器602中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成检测和修复代码缺陷的方法,并具体用于执行以下操作:构建代码缺陷库,所述代码缺陷库存储有曾经产生过代码缺陷的代码及当时采用的修复方案;将程序源代码与所述代码缺陷库中的代码比对,以确定所述程序源代码中是否包含相同的代码;如果所述程序源代码中包含相同的代码,则根据用户选择,确定是否按照当时采用的修复方案进行修复,并据此执行。
本领域的技术人员能够理解,本公开可以实现为系统、方法和计算机程序产品。因此,本公开可以具体实现为以下形式,即完全的硬件、完全的软件(包括固件、驻留软件、微代码),还可以实现为软件和硬件结合的形式。此外,在一些实施例中,本公开还可以实现为一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如但不限于为电、磁、光、电磁、红外线或半导体的系统、装置或器件,或其他任意以上的组合。计算机可读存储介质的更具体的例子包括:具体一个或多个导线的电连接,便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或者闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器、磁存储器或者上述任意合适的组合。在本文中,计算机可读的存储介质可以是任意包含或存储程序的有形介质,该程序可以被处理单元、装置或者器件使用,或者与其结合使用。
计算机可读信号介质可以包括在基带中或者作为截波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或者其他任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质之外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令系统、装置或器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,以及上述任意合适的组合。
可以以一种或者多种程序设计语言或者组合来编写用于执行本公开实施例的计算机程序代码。所述程序设计语言包括面向对象的程序设计语言,例如JAVA、C++,还可以包括常规的过程式程序设计语言,例如C。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网(LAN)或广域网(WAN)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
以上所述仅为本公开的优选实施例,并不用于限制本公开,对于本领域技术人员而言,本公开可以有各种改动和变化。凡在本公开的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

Claims (13)

1.一种检测和修复代码缺陷的方法,包括:
构建代码缺陷库,所述代码缺陷库存储有曾经产生过代码缺陷的代码及当时采用的修复方案;
将程序源代码与所述代码缺陷库中的代码比对,以确定所述程序源代码是否包含相同的代码;以及
如果所述程序源代码包含相同的代码,则根据用户选择,确定是否按照当时采用的修复方案进行修复,并据此执行。
2.根据权利要求1所述的方法,其中,与所述代码对应的代码缺陷详情也存储在所述代码缺陷库中,在所述用户选择之前,将所述代码缺陷详情提供给用户参考。
3.根据权利要求1所述的方法,还包括:如果所述程序源代码中包含有相同的代码,则向用户提出告警。
4.根据权利要求1所述的方法,还包括:如果所述程序源代码包含相同的代码,则判断所述代码是否会影响数据库表内的数据,如果所述代码影响数据库表内的数据,则将被影响到的数据库表信息提供给用户。
5.根据权利要求1所述的方法,其中,所述将程序源代码与所述代码缺陷库中的代码比对,以确定所述程序源代码中是否包含相同的代码包括:
将所述程序源代码解析为第一抽象语法树;
将所述代码缺陷库中产生缺陷的多个代码分别解析成多个第二抽象语法树;以及
将所述第一抽象语法树与每个所述第二抽象语法树进行比对,当所述第一抽象语法树与一个所述第二抽象语法树匹配时,确定程序源代码与对应的代码相同。
6.根据权利要求5所述的方法,还包括:将所述第一抽象语法树和匹配的第二抽象语法树提供给用户参考。
7.根据权利要求1所述的方法,其中,所述方法在将所述程序源代码的可执行代码发布到生产环境之前执行。
8.根据权利要求1所述的方法,其中,所述构建代码缺陷库包括:根据缺陷管理系统的代码缺陷数据,将在多个软件系统中重复产生的、并对应有相同修复方案的代码缺陷添加到所述代码缺陷库中。
9.根据权利要求1所述的方法,其中,在所述代码中,将每个变量替换为通配符。
10.一种检测和修复代码缺陷的方法,包括:
构建代码缺陷库,所述代码缺陷库存储有曾经产生过代码缺陷的代码及当时采用的修复方案;
将程序源代码与所述代码缺陷库中的代码比对,以确定所述程序源代码是否包含相同的代码;以及
如果所述程序源代码包含相同的代码,则按照当时采用的修复方案进行修复。
11.一种检测和修复代码缺陷的装置,包括:
构建模块,用于构建代码缺陷库,所述代码缺陷库存储有产生代码缺陷的代码及当时采用的修复方案;
检测模块,用于将程序源代码与所述代码缺陷库中的代码比对,以确定所述程序源代码是否包含相同的代码;
修复模块,用于如果所述程序源代码包含相同的代码,则根据用户选择,确定是否按照当时采用的修复方案进行修复,并据此执行。
12.一种终端设备,包括存储器和处理器,所述存储器还存储有可由所述处理器执行的计算机指令,所述计算机指令被执行时,实现如权利要求1至10任一项所述的方法。
13.一种计算机可读介质,所述计算机可读介质存储有可由终端设备执行的计算机指令,所述计算机指令被执行时,实现如权利要求1至10任一项所述的方法。
CN202010234912.0A 2020-03-30 2020-03-30 检测和修复代码缺陷的方法及装置 Pending CN113467978A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010234912.0A CN113467978A (zh) 2020-03-30 2020-03-30 检测和修复代码缺陷的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010234912.0A CN113467978A (zh) 2020-03-30 2020-03-30 检测和修复代码缺陷的方法及装置

Publications (1)

Publication Number Publication Date
CN113467978A true CN113467978A (zh) 2021-10-01

Family

ID=77864749

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010234912.0A Pending CN113467978A (zh) 2020-03-30 2020-03-30 检测和修复代码缺陷的方法及装置

Country Status (1)

Country Link
CN (1) CN113467978A (zh)

Similar Documents

Publication Publication Date Title
CN109376166B (zh) 脚本转换方法、装置、计算机设备及存储介质
US8132156B2 (en) Methods and systems for testing tool with comparative testing
Panichella et al. Would static analysis tools help developers with code reviews?
US9898280B2 (en) Automatic code review and code reviewer recommendation
KR101051600B1 (ko) 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템
US8010946B2 (en) Apparatus for analysing and organizing artifacts in a software application
US20140109053A1 (en) Identifying high impact bugs
US20120116561A1 (en) Program testing apparatus, method of testing a program, and program testing program
WO2020154604A1 (en) Systems and methods for automating and monitoring software development operations
US9292410B2 (en) Using traceability links strength for software development integrity monitoring
CN108804326B (zh) 一种软件代码自动检测方法
CN113396395A (zh) 有效评估日志模式的方法
CN113434395B (zh) 测试用例的自动化生成方法、装置、设备及介质
US20070245327A1 (en) Method and System for Producing Process Flow Models from Source Code
US8874598B2 (en) Method and system for an executable specification
CN115658452A (zh) 埋点校验方法、埋点校验装置、可读存储介质、电子设备
JP2019194818A (ja) ソフトウェア不具合予測装置
CN117632710A (zh) 测试代码的生成方法、装置、设备及存储介质
CN113467978A (zh) 检测和修复代码缺陷的方法及装置
WO2023277802A2 (en) Device and method for identifying errors in a software application
US7844627B2 (en) Program analysis method and apparatus
CN114691197A (zh) 代码分析方法、装置、电子设备和存储介质
CN115310011A (zh) 页面展示方法、系统以及可读存储介质
US20160328441A1 (en) Search token mnemonic replacement
JP2011175446A (ja) 要件・バグレポート処理システム及びその方法

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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40063907

Country of ref document: HK