CN114968817A - 代码改动影响范围的评估方法、装置、设备及存储介质 - Google Patents
代码改动影响范围的评估方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114968817A CN114968817A CN202210731113.3A CN202210731113A CN114968817A CN 114968817 A CN114968817 A CN 114968817A CN 202210731113 A CN202210731113 A CN 202210731113A CN 114968817 A CN114968817 A CN 114968817A
- Authority
- CN
- China
- Prior art keywords
- code
- branch
- evaluated
- file
- signature set
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
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是本公开实施例提供的电子设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本公开实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本公开。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本公开的描述。
如前文背景技术的内容,在业务系统的软件开发的过程中,开发人员需要根据软件开发的需要对软件代码进行修改。部分代码在变更后可能会对其他的代码部分造成影响,开发人员需要对代码变更影响范围进行测试,以确保代码的正确性。在很多场景下,研发人员需要对现有代码进行变更,但是由于业务系统本身越来越复杂,而且很多代码之间还具有调用与被调用的关系,导致研发人员在变更代码后不能确定修改内容是否会对软件其他部分造成影响,因此需要测试人员考虑代码变更的影响范围并进行回归测试,如果测试不全面,可能导致系统上线后出现问题。现有技术中,对代码改动影响范围的评估一般采用以下几种方式,具体描述如下:
第一种方式,通过Jacoco等工具,统计代码测试覆盖率,但覆盖率是基于代码是否被执行过,并不能体现出和代码改动之间的关系,只能提供一个参考。
第二种方式,通过IDE提供的代码引用功能,查找某个方法或者变量被哪些地方引用,但是这种方式有几个缺点:1)只能手动进行查找,改动多的话很繁琐,而且会有遗漏;2)无法递归展示多级的调用关系,比如改动了A类的am方法,通过引用功能,可以查找到B类的bm和C类的cm会受影响,但是不能递归的查找到bm和cm会影响到的范围。
第三种方式,通过接口和功能的自动化测试,同时进行全量场景回归,这种方式没有针对性,实际情况可能会导致部分接口或者功能因为安全、权限、依赖方等关系而无法自动化;其次,每次改动都进行全量回归,成本太高不现实。
第四种方式,通过强化设计、评审、CodeReview(代码审查)等流程和规范,这种方式的缺点是效果取决于具体执行人对系统的熟悉程度、个人能力和经验,若开发人员基于不够准确的代码改动影响范围进行测试核查,还可能会导致软件代码出现问题。
有鉴于上述现有技术中存在的问题,本公开提供了一个从代码角度,自动分析可能造成影响范围的评估方法,能够帮助开发和测试人员圈定重点回归测试的范围。本公开基于Git上的代码提交记录,拉取代码改动的文件和行号,并通过JavaParser工具解析出对应的类和方法定义集合,然后遍历项目中的源文件,查找所有调用了集合中方法的地方(即类+方法组成的信息),记录调用关系,并把对应的方法加到集合中进行递归查找,最后通过Neo4j图形数据库展示完整的依赖关系。
下面结合附图以及具体实施例,对本公开实施例提供的代码改动影响范围的评估方法的整体处理流程进行说明。图1是本公开实施例提供的代码改动影响范围的评估方法的整体处理流程示意图。图1的代码改动影响范围的评估方法可以由项目开发服务器执行。如图1所示,该代码改动影响范围的评估方法的整体处理流程具体可以包括以下步骤:
步骤1:确定需要评估影响的代码分支,一般可以选择准备提测的featuers分支(特性分支)和master分支(主分支);
步骤2:JavaParser工具自动拉取代码分支对应的分支代码,并通过Git diff命令比较两个代码分支的代码差异,从中筛选出涉及到的所有Java文件的改动位置,形成“文件+行号”的代码文件改动列表;
步骤3:初始化JavaParser工具的配置,通过MVN项目管理工具获取项目的所有依赖项,并将所有依赖项设置到JavaParser工具中;
步骤4:遍历步骤2生成的代码文件改动列表中的所有Java文件,生成待评估的方法签名列表;
步骤5:遍历项目中除了代码文件改动列表中的每个Java文件(即遍历改动后的代码源文件),用JavaParser工具解析代码源文件中的每个方法调用,如果调用的方法在步骤4生成的待评估方法签名列表中,则表明代码源文件中的方法与待评估方法签名列表中的方法之间存在调用关系,记录方法之间的调用关系;
步骤6:重复步骤4,直至没有新的待评估方法签名,之后基于待评估的方法签名集合中所记录的所有方法调用关系,通过Neo4j图形数据库进行绘图,展示记录的所有方法调用关系。
需要说明的是,本公开以下实施例是以业务系统的项目开发场景为例,对代码改动影响范围的评估方法流程进行展开描述,但是本公开实施例针对的应用场景不限于业务系统的项目开发场景,其他应用程序或者软件项目的开发场景同样适用。上述应用场景不构成对本公开技术方案的限定。
图2是本公开实施例提供的代码改动影响范围的评估方法的流程示意图。图2的代码改动影响范围的评估方法可以由业务系统的项目开发服务器执行。
如图2所示,该代码改动影响范围的评估方法具体可以包括:
S201,确定需要评估的代码分支,并从分布式版本控制系统中拉取代码分支对应的分支代码,其中,代码分支包括第一代码分支和第二代码分支;
S202,调用代码比较命令,比较第一代码分支与第二代码分支之间的代码差异,基于代码差异确定发生改动的代码文件,并生成代码文件改动列表;
S203,利用代码解析工具遍历代码文件改动列表中的所有代码文件,并生成待评估的方法签名集合,对项目中的源文件进行遍历,以便解析源文件中的每个方法调用,当调用的方法在待评估的方法签名集合中时,记录方法调用关系;
S204,基于方法调用关系及调用的方法,对待评估的方法签名集合进行更新,依次对所有的方法调用进行递归查找,直至没有新的调用方法对待评估的方法签名集合进行更新时,根据记录的所有方法调用关系对代码改动影响范围进行评估。
具体地,本公开实施例的代码解析工具采用JavaParser工具,JavaParser是一种可以把Java源码转换成JavaParser定义的Statement对象的工具,JavaParser可以将Java源码解析为一棵语法树(AST),然后基于这棵树对Java代码进行分析和修改,它还能够操纵源代码的底层结构,然后可以将其写入文件,为开发人员提供构建自己的代码生成软件的工具。在本公开实施例中,JavaParser可用于解析Java中的类、方法、变量等,支持Java语言生成AST,在AST基础上进行类型推断分析,支持修改AST从而生成新的Java文件内容。
根据本公开实施例提供的技术方案,通过确定需要评估的代码分支,并从分布式版本控制系统中拉取代码分支对应的分支代码,其中,代码分支包括第一代码分支和第二代码分支;调用代码比较命令,比较第一代码分支与第二代码分支之间的代码差异,基于代码差异确定发生改动的代码文件,并生成代码文件改动列表;利用代码解析工具遍历代码文件改动列表中的所有代码文件,并生成待评估的方法签名集合,对项目中的源文件进行遍历,以便解析源文件中的每个方法调用,当调用的方法在待评估的方法签名集合中时,记录方法调用关系;基于方法调用关系及调用的方法,对待评估的方法签名集合进行更新,依次对所有的方法调用进行递归查找,直至没有新的调用方法对待评估的方法签名集合进行更新时,根据记录的所有方法调用关系对代码改动影响范围进行评估。本公开能够自动对改动过的代码文件进行解析,降低评估代码改动影响范围的耗时,提升影响范围评估的准确性和效率,有效避免存在调用关系时的遗漏。
在一些实施例中,确定需要评估的代码分支,并从分布式版本控制系统中拉取代码分支对应的分支代码,包括:基于分布式版本控制系统中的代码提交记录,确定需要评估的代码分支,并利用代码解析工具从分布式版本控制系统中拉取代码分支对应的分支代码,其中,第一代码分支包括特性分支,第二代码分支包括主分支。
具体地,首先选择需要评估影响的代码分支,例如可以选择featuers分支和master分支,featuers分支也可以称为特性分支或者功能分支,master分支也可以称为主分支。在实际应用中,featuers分支对应上述第一代码分支,master分支对应上述第二代码分支;在选择需要评估的代码分支之后,基于分布式版本控制系统Git中的代码提交记录,利用代码解析工具JavaParser从分布式版本控制系统Git中拉取每个代码分支对应的分支代码。
在一些实施例中,调用代码比较命令,比较第一代码分支与第二代码分支之间的代码差异,基于代码差异确定发生改动的代码文件,并生成代码文件改动列表,包括:调用分布式版本控制系统中的diff命令,通过diff命令对特性分支与主分支之间进行比较,确定特性分支与主分支之间的代码差异,基于代码差异确定涉及改动的所有代码文件的改动位置,根据代码文件的改动位置生成代码文件改动列表,其中,代码文件改动列表中包含代码文件及代码文件对应的行号。
具体地,在拉取代码分支对应的分支代码之后,通过调用分布式版本控制系统Git中的diff命令,比较featuers分支(即特性分支)与master分支(即主分支)之间的代码差异,根据两个分支代码之间的代码差异,从中筛选出涉及的所有Java文件的改动位置,并根据代码文件以及代码文件对应的行号生成代码文件改动列表。代码文件改动列表中的代码文件用于表征哪些代码发生了改动或者变更,行号用于表征发生改动的代码对应的改动位置。
在一些实施例中,在利用代码解析工具遍历代码文件改动列表中的所有代码文件之前,该方法还包括:对代码解析工具的配置进行初始化操作,通过MVN项目管理工具获取项目对应的所有依赖项,将依赖项设置到代码解析工具中,其中,代码解析工具采用JavaParser工具。
具体地,在利用代码解析工具JavaParser遍历代码文件改动列表中的所有代码文件之前,首先初始化JavaParser的配置,通过MVN项目管理工具获取项目的所有依赖项,将所有依赖项设置到JavaParser中。其中,MVN是一个项目构建和管理工具,用于将项目管理规范化和自动化,帮助管理项目编译构建、文档、依赖管理和发布。
在一些实施例中,利用代码解析工具遍历代码文件改动列表中的所有代码文件,并生成待评估的方法签名集合,包括:利用代码解析工具对每个代码文件中的方法进行解析,得到每个方法的签名和方法体对应的开始位置及结束位置,根据代码提交记录以及代码文件改动列表中的代码文件及行号,查找所有修改过的代码对应的方法和签名,根据代码对应的方法和签名生成待评估的方法签名集合。
具体地,利用代码解析工具JavaParser遍历代码文件改动列表中的所有Java文件,生成待评估的方法签名列表。在实际应用中,使用JavaParser解析出每个代码文件中的方法对应的签名以及方法体的开始位置、结束位置;结合代码文件改动列表中的文件和行号,即可得到对应的Java类和方法签名列表。
进一步地,Java类如果有父类或者接口的话,需要递归进行解析并记录对应方法签名,原因是流行的开发框架基本都提供了IOC机制,不会在代码中直接引用具体实现类。
在一些实施例中,对项目中的源文件进行遍历,以便解析源文件中的每个方法调用,当调用的方法在待评估的方法签名集合中时,记录方法调用关系,包括:遍历项目对应的代码改动后的源文件,利用代码解析工具对源文件中的每个方法调用进行解析,以便从源文件中查找所有调用了待评估的方法签名集合中的方法的节点;当节点对应方法的开始行号和结束行号,与待评估的方法签名集合中的方法体对应的开始位置及结束位置具有包含关系时,则确定节点对应方法与待评估的方法签名集合中的方法具有调用关系,其中,源文件中的节点包括类和方法组成的信息。
具体地,在生成待评估的方法签名列表之后,对项目中除了代码文件改动列表中的所有Java文件外的每个Java文件,用JavaParser解析每个方法调用,判断调用的方法是否在待评估的方法签名集合中。在实际应用中,在判断调用的方法是否在待评估的方法签名集合中时,可以根据每个方法的文件中的开始行号和结束行号,通过开始行号和结束行号去查找列表(即待评估的方法签名列表)中的位置,如果待评估的方法签名列表中包含该方法的开始行号和结束行号,那么就认定该调用的方法与待评估的方法签名集合中的方法具有调用关系。
进一步地,对于具有调用关系的方法进行记录,通过记录方法调用关系,以便后续通过图形展示调用链路;并且根据本次方法调用所在文件和行号,反向解析出对应的方法签名,记录新的待评估方法签名列表(即对待评估方法签名列表进行更新)。
在一些实施例中,在根据记录的所有方法调用关系对代码改动影响范围进行评估之后,方法包括:在进行递归查找后没有新的待评估的方法签名时,根据待评估的方法签名集合中所记录的所有方法调用关系,利用Neo4j图形数据库对方法调用关系进行处理,并将处理后的方法调用关系进行展示。
具体地,重复执行前述实施例的操作,对待评估的方法签名列表中每个方法与源文件中的方法进行调用关系的判断,直至找到所有具有调用关系的方法,即直到没有新的待评估方法签名,最终便可得到包含了所有方法调用关系的待评估的方法签名集合。通过Neo4j图形数据库基于待评估的方法签名集合中的所有方法调用关系进行绘图,从而对所有方法调用关系进行展示。
其中,Neo4j是一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络上(即存储在图中),而不是表中。
根据本公开实施例提供的技术方案,本公开代码改动影响范围的评估方法中主要采用以下原理:
1)通过mvn dependency:copy-dependencies,把项目依赖的所有jar复制到指定目录;
2)初始化JavaParser,指定代码源文件的目录,和上个上述1)中的所有jar文件;
3)解析Java源文件为AST语法树,记录所有方法签名(type为MethodDeclaration类型的所有Node),以及对应的开始、结束位置;
4)根据代码提交记录,对应的代码文件和行号,结合上述3),找出所有修改过的方法签名集合;
5)解析所有Java源文件,记录所有的方法调用(type为MethodCallExpr类型的所有Node)以及代码行号;
6)结合上述4)和5)对应的两点内容,记录所有受影响的方法调用关系,并更新上述4)的方法签名集合,直至处理完成。
本公开实施例通过代码的提交记录,自动对改动过的代码文件进行解析,分析出改动过的类和方法,以及使用了这些方法的关联代码,从而评估出每次提交的代码,所影响的代码范围;和依赖流程、经验评估的方式不同,本公开实施例提供了一个自动化、可复用的工具,可以帮助开发、测试人员更准确的评估出代码改动所影响的范围。
下述为本公开装置实施例,可以用于执行本公开方法实施例。对于本公开装置实施例中未披露的细节,请参照本公开方法实施例。
图3是本公开实施例提供的代码改动影响范围的评估装置的结构示意图。如图3所示,该代码改动影响范围的评估装置包括:
拉取模块301,被配置为确定需要评估的代码分支,并从分布式版本控制系统中拉取代码分支对应的分支代码,其中,代码分支包括第一代码分支和第二代码分支;
比较模块302,被配置为调用代码比较命令,比较第一代码分支与第二代码分支之间的代码差异,基于代码差异确定发生改动的代码文件,并生成代码文件改动列表;
解析模块303,被配置为利用代码解析工具遍历代码文件改动列表中的所有代码文件,并生成待评估的方法签名集合,对项目中的源文件进行遍历,以便解析源文件中的每个方法调用,当调用的方法在待评估的方法签名集合中时,记录方法调用关系;
评估模块304,被配置为基于方法调用关系及调用的方法,对待评估的方法签名集合进行更新,依次对所有的方法调用进行递归查找,直至没有新的调用方法对待评估的方法签名集合进行更新时,根据记录的所有方法调用关系对代码改动影响范围进行评估。
在一些实施例中,图3的拉取模块301基于分布式版本控制系统中的代码提交记录,确定需要评估的代码分支,并利用代码解析工具从分布式版本控制系统中拉取代码分支对应的分支代码,其中,第一代码分支包括特性分支,第二代码分支包括主分支。
在一些实施例中,图3的比较模块302调用分布式版本控制系统中的diff命令,通过diff命令对特性分支与主分支之间进行比较,确定特性分支与主分支之间的代码差异,基于代码差异确定涉及改动的所有代码文件的改动位置,根据代码文件的改动位置生成代码文件改动列表,其中,代码文件改动列表中包含代码文件及代码文件对应的行号。
在一些实施例中,图3的解析模块303在利用代码解析工具遍历代码文件改动列表中的所有代码文件之前,对代码解析工具的配置进行初始化操作,通过MVN项目管理工具获取项目对应的所有依赖项,将依赖项设置到代码解析工具中,其中,代码解析工具采用JavaParser工具。
在一些实施例中,图3的解析模块303利用代码解析工具对每个代码文件中的方法进行解析,得到每个方法的签名和方法体对应的开始位置及结束位置,根据代码提交记录以及代码文件改动列表中的代码文件及行号,查找所有修改过的代码对应的方法和签名,根据代码对应的方法和签名生成待评估的方法签名集合。
在一些实施例中,图3的解析模块303遍历项目对应的代码改动后的源文件,利用代码解析工具对源文件中的每个方法调用进行解析,以便从源文件中查找所有调用了待评估的方法签名集合中的方法的节点;当节点对应方法的开始行号和结束行号,与待评估的方法签名集合中的方法体对应的开始位置及结束位置具有包含关系时,则确定节点对应方法与待评估的方法签名集合中的方法具有调用关系,其中,源文件中的节点包括类和方法组成的信息。
在一些实施例中,图3的评估模块304在根据记录的所有方法调用关系对代码改动影响范围进行评估之后,在进行递归查找后没有新的待评估的方法签名时,根据待评估的方法签名集合中所记录的所有方法调用关系,利用Neo4j图形数据库对方法调用关系进行处理,并将处理后的方法调用关系进行展示。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本公开实施例的实施过程构成任何限定。
图4是本公开实施例提供的电子设备4的结构示意图。如图4所示,该实施例的电子设备4包括:处理器401、存储器402以及存储在该存储器402中并且可以在处理器401上运行的计算机程序403。处理器401执行计算机程序403时实现上述各个方法实施例中的步骤。或者,处理器401执行计算机程序403时实现上述各装置实施例中各模块/单元的功能。
示例性地,计算机程序403可以被分割成一个或多个模块/单元,一个或多个模块/单元被存储在存储器402中,并由处理器401执行,以完成本公开。一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序403在电子设备4中的执行过程。
电子设备4可以是桌上型计算机、笔记本、掌上电脑及云端服务器等电子设备。电子设备4可以包括但不仅限于处理器401和存储器402。本领域技术人员可以理解,图4仅仅是电子设备4的示例,并不构成对电子设备4的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如,电子设备还可以包括输入输出设备、网络接入设备、总线等。
处理器401可以是中央处理单元(Central Processing Unit,CPU),也可以是其它通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器402可以是电子设备4的内部存储单元,例如,电子设备4的硬盘或内存。存储器402也可以是电子设备4的外部存储设备,例如,电子设备4上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器402还可以既包括电子设备4的内部存储单元也包括外部存储设备。存储器402用于存储计算机程序以及电子设备所需的其它程序和数据。存储器402还可以用于暂时地存储已经输出或者将要输出的数据。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。
在本公开所提供的实施例中,应该理解到,所揭露的装置/计算机设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/计算机设备实施例仅仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本公开实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可以存储在计算机可读存储介质中,该计算机程序在被处理器执行时,可以实现上述各个方法实施例的步骤。计算机程序可以包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、电载波信号、电信信号以及软件分发介质等。需要说明的是,计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如,在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
以上实施例仅用以说明本公开的技术方案,而非对其限制;尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本公开各实施例技术方案的精神和范围,均应包含在本公开的保护范围之内。
Claims (10)
1.一种代码改动影响范围的评估方法,其特征在于,包括:
确定需要评估的代码分支,并从分布式版本控制系统中拉取所述代码分支对应的分支代码,其中,所述代码分支包括第一代码分支和第二代码分支;
调用代码比较命令,比较所述第一代码分支与第二代码分支之间的代码差异,基于所述代码差异确定发生改动的代码文件,并生成代码文件改动列表;
利用代码解析工具遍历所述代码文件改动列表中的所有代码文件,并生成待评估的方法签名集合,对项目中的源文件进行遍历,以便解析所述源文件中的每个方法调用,当调用的方法在所述待评估的方法签名集合中时,记录方法调用关系;
基于所述方法调用关系及所述调用的方法,对所述待评估的方法签名集合进行更新,依次对所有的方法调用进行递归查找,直至没有新的调用方法对所述待评估的方法签名集合进行更新时,根据记录的所有方法调用关系对代码改动影响范围进行评估。
2.根据权利要求1所述的方法,其特征在于,所述确定需要评估的代码分支,并从分布式版本控制系统中拉取所述代码分支对应的分支代码,包括:
基于所述分布式版本控制系统中的代码提交记录,确定需要评估的代码分支,并利用所述代码解析工具从所述分布式版本控制系统中拉取所述代码分支对应的分支代码,其中,所述第一代码分支包括特性分支,所述第二代码分支包括主分支。
3.根据权利要求2所述的方法,其特征在于,所述调用代码比较命令,比较所述第一代码分支与第二代码分支之间的代码差异,基于所述代码差异确定发生改动的代码文件,并生成代码文件改动列表,包括:
调用所述分布式版本控制系统中的diff命令,通过diff命令对所述特性分支与所述主分支之间进行比较,确定所述特性分支与所述主分支之间的代码差异,基于所述代码差异确定涉及改动的所有代码文件的改动位置,根据所述代码文件的改动位置生成代码文件改动列表,其中,所述代码文件改动列表中包含所述代码文件及所述代码文件对应的行号。
4.根据权利要求1所述的方法,其特征在于,在所述利用代码解析工具遍历所述代码文件改动列表中的所有代码文件之前,所述方法还包括:
对所述代码解析工具的配置进行初始化操作,通过MVN项目管理工具获取所述项目对应的所有依赖项,将所述依赖项设置到所述代码解析工具中,其中,所述代码解析工具采用JavaParser工具。
5.根据权利要求1所述的方法,其特征在于,所述利用代码解析工具遍历所述代码文件改动列表中的所有代码文件,并生成待评估的方法签名集合,包括:
利用所述代码解析工具对每个所述代码文件中的方法进行解析,得到每个所述方法的签名和方法体对应的开始位置及结束位置,根据代码提交记录以及所述代码文件改动列表中的所述代码文件及所述行号,查找所有修改过的代码对应的方法和签名,根据所述代码对应的方法和签名生成待评估的方法签名集合。
6.根据权利要求1所述的方法,其特征在于,所述对项目中的源文件进行遍历,以便解析所述源文件中的每个方法调用,当调用的方法在所述待评估的方法签名集合中时,记录方法调用关系,包括:
遍历所述项目对应的代码改动后的源文件,利用所述代码解析工具对所述源文件中的每个方法调用进行解析,以便从所述源文件中查找所有调用了所述待评估的方法签名集合中的方法的节点;
当所述节点对应方法的开始行号和结束行号,与所述待评估的方法签名集合中的方法体对应的开始位置及结束位置具有包含关系时,则确定所述节点对应方法与所述待评估的方法签名集合中的方法具有调用关系,其中,所述源文件中的节点包括类和方法组成的信息。
7.根据权利要求1所述的方法,其特征在于,在所述根据记录的所有方法调用关系对代码改动影响范围进行评估之后,所述方法包括:
在进行递归查找后没有新的待评估的方法签名时,根据所述待评估的方法签名集合中所记录的所有方法调用关系,利用Neo4j图形数据库对所述方法调用关系进行处理,并将处理后的所述方法调用关系进行展示。
8.一种代码改动影响范围的评估装置,其特征在于,包括:
拉取模块,被配置为确定需要评估的代码分支,并从分布式版本控制系统中拉取所述代码分支对应的分支代码,其中,所述代码分支包括第一代码分支和第二代码分支;
比较模块,被配置为调用代码比较命令,比较所述第一代码分支与第二代码分支之间的代码差异,基于所述代码差异确定发生改动的代码文件,并生成代码文件改动列表;
解析模块,被配置为利用代码解析工具遍历所述代码文件改动列表中的所有代码文件,并生成待评估的方法签名集合,对项目中的源文件进行遍历,以便解析所述源文件中的每个方法调用,当调用的方法在所述待评估的方法签名集合中时,记录方法调用关系;
评估模块,被配置为基于所述方法调用关系及所述调用的方法,对所述待评估的方法签名集合进行更新,依次对所有的方法调用进行递归查找,直至没有新的调用方法对所述待评估的方法签名集合进行更新时,根据记录的所有方法调用关系对代码改动影响范围进行评估。
9.一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210731113.3A CN114968817A (zh) | 2022-06-24 | 2022-06-24 | 代码改动影响范围的评估方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210731113.3A CN114968817A (zh) | 2022-06-24 | 2022-06-24 | 代码改动影响范围的评估方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114968817A true CN114968817A (zh) | 2022-08-30 |
Family
ID=82965538
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210731113.3A Pending CN114968817A (zh) | 2022-06-24 | 2022-06-24 | 代码改动影响范围的评估方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114968817A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117009240A (zh) * | 2023-08-18 | 2023-11-07 | 广州Tcl互联网小额贷款有限公司 | 代码分析方法、系统、装置、电子设备及存储介质 |
-
2022
- 2022-06-24 CN CN202210731113.3A patent/CN114968817A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117009240A (zh) * | 2023-08-18 | 2023-11-07 | 广州Tcl互联网小额贷款有限公司 | 代码分析方法、系统、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11221832B2 (en) | Pruning engine | |
Prowell et al. | Cleanroom software engineering: technology and process | |
US10831456B1 (en) | External code integrations within a computing environment | |
US8527452B2 (en) | Construction of rules for use in a complex event processing system | |
US11307975B2 (en) | Machine code analysis for identifying software defects | |
CN108255837B (zh) | 一种sql解析器及方法 | |
US10445225B2 (en) | Command coverage analyzer | |
US9311345B2 (en) | Template based database analyzer | |
US7203671B1 (en) | System and method for validating the technical correctness of an OLAP reporting project | |
US20140298290A1 (en) | Identification of code changes using language syntax and changeset data | |
CN105389262A (zh) | 一种针对界面测试生成测试建议的方法和装置 | |
US20220188084A1 (en) | Call Graph Enhancement Using Stitching Algorithm | |
US10146530B1 (en) | Simulating and evaluating code branch merge | |
US10915302B2 (en) | Identification and visualization of associations among code generated from a model and sources that affect code generation | |
US11734159B2 (en) | Ranking test cases specific to changes in software code | |
CN114968817A (zh) | 代码改动影响范围的评估方法、装置、设备及存储介质 | |
CN110659063A (zh) | 软件项目重构方法、装置、计算机装置及存储介质 | |
CN112650526B (zh) | 版本一致性的检测方法、装置、电子设备和介质 | |
KR20070058943A (ko) | 소프트웨어 아키텍처 평가 장치 및 방법 | |
US11977473B2 (en) | Providing a pseudo language for manipulating complex variables of an orchestration flow | |
Oliveira | pytest Quick Start Guide: Write better Python code with simple and maintainable tests | |
CN112464636B (zh) | 约束文件的比较方法、装置、电子设备和存储介质 | |
CN113504904A (zh) | 用户定义函数实现方法、装置、计算机设备和存储介质 | |
US7562055B2 (en) | Resolve trace minimization | |
Azhan | Automated Generation of Executable Cucumber Scenarios from a RDBMS Schema |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20221202 Address after: 518054 cable information transmission building 25f2504, no.3369 Binhai Avenue, Haizhu community, Yuehai street, Nanshan District, Shenzhen City, Guangdong Province Applicant after: Shenzhen Xumi yuntu Space Technology Co.,Ltd. Address before: No.103, no.1003, Nanxin Road, Nanshan community, Nanshan street, Nanshan District, Shenzhen City, Guangdong Province Applicant before: Shenzhen Jizhi Digital Technology Co.,Ltd. |