CN106951228A - 版本迭代中差异的处理方法和装置 - Google Patents
版本迭代中差异的处理方法和装置 Download PDFInfo
- Publication number
- CN106951228A CN106951228A CN201710093758.8A CN201710093758A CN106951228A CN 106951228 A CN106951228 A CN 106951228A CN 201710093758 A CN201710093758 A CN 201710093758A CN 106951228 A CN106951228 A CN 106951228A
- Authority
- CN
- China
- Prior art keywords
- function
- code file
- sound code
- difference
- information
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明揭示了一种版本迭代中差异的处理方法和装置。所述方法包括:获得目标版本源码文件中相对旧版本源码文件的差异化信息;通过差异化信息中标识的匹配获得差异函数和差异函数自身的函数调用信息,所述标识用于标示所述差异函数;根据差异函数和差异函数自身的函数调用信息生成差异函数调用关系链。通过目标版本源码文件相对旧版本源码文件的差异函数调用关系链,获得由于版本迭代而产生的差异,以及此差异在目标版本源码文件产生的影响,即,差异函数以及随之所对应的函数调用信息,使得差异所产生影响定位是基于函数粒度的,在函数级上反映版本迭代而产生的影响,此外,由于用以反映版本迭代所产生影响的差异函数调用关系链不依赖于人工经验,存在非常高的准确性。
Description
技术领域
本发明涉及计算机应用技术领域,特别涉及一种版本迭代中差异的处理方法和装置。
背景技术
随着计算机应用的发展,任一开发过程,为实现应用程序版本迭代,将不断执行相应项目的版本迭代过程。也就是说,相应项目的版本迭代过程的执行,随着项目的不断发展,其代码信息也始终在发生变化,即产生多个版本的代码信息,进而形成多个版本的源码文件。
而这些版本之间变化的发生,对于整个项目而言,其所产生的影响是不透明的。测试人员只能通过经验来判断版本之间的变化会影响应用程序中的哪些模块,进而方能够对版本迭代中受到影响的模块执行测试。
也就是说,版本迭代中差异所产生的影响,仅仅能够定位到模块这样的粗粒度,并且是基于人工经验而定位得到,缺乏准确性。
因此,版本迭代中差异所产生的影响,存在着定位粒度非常粗且不准确的局限性。
发明内容
为了解决相关技术的版本迭代中差异所产生影响存在着定位粒度粗且不准确的技术问题,本发明提供了一种版本迭代中差异的处理方法和装置。
一种版本迭代中差异的处理方法,所述方法包括
获得目标版本源码文件中相对旧版本源码文件的差异化信息,所述目标版本源码文件是相对于所述旧版本源码文件的新版本源码文件;
通过所述差异化信息中标识的匹配获得差异函数和所述差异函数自身的函数调用信息,所述标识用于标示所述差异函数;
根据所述差异函数和所述差异函数自身的函数调用信息生成所述目标版本源码文件相对旧版本源码文件的差异函数调用关系链。
一种版本迭代中差异的处理装置,所述装置包括:
差异化信息获得模块,用于获得目标版本源码文件中相对旧版本源码文件的差异化信息,所述目标版本源码文件是相对于所述旧版本源码文件的新版本源码文件;
函数信息获得模块,用于通过所述差异化信息中标识的匹配获得差异函数和所述差异函数自身的函数调用信息,所述标识用于标示所述差异函数;
调用关系链生成模块,用于根据所述差异函数和所述差异函数自身的函数调用信息生成所述目标版本源码文件相对旧版本源码文件的差异函数调用关系链。
本发明的实施例提供的技术方案可以包括以下有益效果:
随着版本迭代的进行,将会产生多个版本的源码文件,对于一个版本的源码文件,即目标版本源码文件,将获得目标版本源码文件中相对旧版本源码文件的差异化信息,目标版本源码文件是相对于旧版本源码文件的新版本源码文件,通过差异化信息中标识的匹配获得差异函数和差异函数自身的函数调用信息,该标识用于标示差异函数,根据差异函数和差异函数自身的函数调用信息生成目标版本源码文件相对旧版本源码文件的差异函数调用关系链,进而通过目标版本源码文件相对旧版本源码文件的差异函数调用关系链,获得由于版本迭代而产生的差异,以及此差异在目标版本源码文件产生的影响,差异在目标版本源码文件产生的影响即为差异函数以及随之所对应的函数调用信息,使得差异所产生影响的定位是基于函数粒度的,即在函数级上反映版本迭代而产生的影响,此外,由于用以反映版本迭代所产生影响的差异函数调用关系链不依赖于人工经验,也不存在人工介入的可能性,因此,存在着非常高的准确性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并于说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的一种版本迭代中差异的处理方法的流程图;
图2是根据图1对应实施例示出的对获得目标版本源码文件中相对旧版本源码文件的差异化信息步骤的细节进行描述的流程图;
图3是根据图2对应实施例示出的对为语法树中的函数构建标识,通过标识形成差异化信息步骤的细节进行描述的流程图;
图4是根据图1对应实施例的通过差异化信息中构建的标识匹配获得差异函数和差异函数自身的函数调用信息步骤的细节进行描述的流程图;
图5是根据图1对应实施例示出的对通过差异化信息中构建的标识匹配获得差异函数和差异函数自身的函数调用信息步骤的细节进行描述的流程图;
图6根据一示例性实施例示出的版本迭代中获得差异化信息所涉及的流程图;
图7是根据一个示例性实施例示出的版本迭代中差异处理的简要示意图;
图8是根据一示例性实施例示出的差异函数的获得以及由此差异函数所实现的差异函数调用关系链生成的流程图;
图9是根据一示例性实施例示出的一种版本迭代中差异的处理装置的框图;
图10是根据图9对应实施例示出的对差异化信息获得模块的细节进行描述的框图;
图11是根据图10对应实施例示出的对信息形成单元的细节进行描述的框图;
图12是根据图9对应实施例示出的对函数信息获得模块的细节进行描述的框图;
图13是根据图9对应实施例示出的对函数信息获得模块的细节进行描述的框图;
图14是根据一示例性实施例示出的一种装置的框图。
具体实施方式
这里将详细地对示例性实施例执行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
图1是根据一示例性实施例示出的一种版本迭代中差异的处理方法的流程图。该版本迭代中差异的处理方法,如图1所示,可以包括以下步骤。
在步骤110中,获得目标版本源码文件中相对旧版本源码文件的差异化信息,目标版本源码文件是相对于旧版本源码文件的新版本源码文件。
其中,可以理解的,对于一应用程序而言,其版本迭代的实现是通过相应项目对源码文件执行版本迭代的结果。因此,随着版本迭代的执行,将获得多个版本的源码文件,并且在多个版本的源码文件中,可以将任一版本的源码文件作为目标版本源码文件,进而确定执行版本迭代而获得的目标版本源码文件中相对于旧版本源码文件产生的差异,以及此差异所造成的影响。
也就是说,目标版本源码文件,是根据版本迭代中所需要进行差异影响分析的版本而确定的。在一个示例性实施例中,目标版本源码文件,可以是执行版本迭代中产生的新版本源码文件。
目标版本源码文件和旧版本源码文件,是相对而言的。旧版本源码文件对应于目标版本源码文件的历史版本。具体的,旧版本源码文件所对应的版本,可以是目标版本源码文件的上一版本,也可以是其它的历史版本。
差异化信息,用于指示目标版本源码文件相对旧版本源码文件而在代码信息上产生的差异。无论是目标版本源码文件,还是旧版本源码文件,都包括了代码文件以及其它形式的文件,需由目标版本源码文件和旧版本源码文件二者之间的代码文件来获得目标版本源码文件相对于旧版本源码文件的差异化信息。
应当进一步补充说明的是,对于差异化信息,获得差异化信息的方式,至少包括两种。在一个示例性实施例中,差异化信息是以代码文件为单位进行对比所获得的;在另一个示例性实施例中,差异化信息也可以是直接进行所有代码信息的对比而获得。获得差异化信息所选用的方式,将根据运营是的场景以及需求确定,在此不进行限定。
在步骤130中,通过差异化信息中标识的匹配获得差异函数和差异函数自身的函数调用信息,该标识用于标示所述差异化信息中的差异函数和差异函数自身的函数调用信息。
其中,差异化信息一方面指示了目标版本源码文件在代码信息上相对旧版本源码文件的差异,另一方面,基于目标版本源码文件中代码信息的结构,也构建了相应的标识。
由于差异化信息指示了目标版本源码文件相对于旧版本源码文件在代码信息上的差异,因此,所构建的标识,便是对所存在的差异内容进行唯一标示的,此差异内容包括目标版本源码文件相对于旧版本源码文件而存在的差异函数和差异函数自身的函数调用信息。。
如前所述,由目标版本源码文件和旧版本源码文件之间代码文件的对比获得了差异化信息,即指示二者之间在代码信息上存在的差异而对应的差异化信息,而代码信息,其一方面是逐行存在的,每一行代码信息,都是所存在差异的一部分,另一方面,也构成各种实现特定功能的函数。
与之相对应的,差异化信息中构建的,用于标示所存在差异内容的标识,可以是对应于函数的,也可以是对应于每一行代码信息的,在此不进行限定,将在后续具体实现的描述中继续进行深入阐述。
通过差异化信息中标识的匹配,即可确定目标版本源码文件在代码信息上相对于旧版本而存在差异的函数,即差异函数;然后再基于差异函数所存在的调用关系而获得这一差异函数自身的函数调用信息。
函数调用信息用于标示差异函数所进行的函数调用情况。
在此应当说明的是,差异化信息中标识的匹配,是指通过构建的标识而匹配到目标版本源码文件相对于旧版本源码文件存在差异的函数上,具体实现,将是与前述步骤中获得差异化信息的方式相对应的,所获得差异化信息的方式决定了差异化信息中标识的匹配过程的具体实现。
在步骤150中,根据差异函数和差异函数自身的函数调用信息生成目标版本源码文件相对旧版本源码文件的差异函数调用关系链。
其中,差异函数调用关系链用于指示目标版本源码文件相对于旧版本源码文件存在的差异函数,以及由此差异函数所引发的函数调用关系。因此,将根据前述步骤所获得的差异函数和差异函数自身的函数调用信息按照指定的数据结构来生成差异函数调用关系链。
在此示例性实施例中,实现了版本迭代中差异的处理,版本之间的差异,即版本之间差异所造成的影响,得以基于函数粒度进行体现,精准且细致的定准了版本之间差异所造成的影响,进而对于版本迭代所引发的测试而言,测试人员能够基于此精确将测试的执行定位到版本迭代而影响的函数,为测试人员执行测试提供有力参考,保证了后续测试的执行覆盖至版本迭代而影响的函数,从而使得测试代码覆盖率检测精确到函数。
图2是根据图1对应实施例示出的对步骤110的细节进行描述的流程图。该步骤110,如图2所示,可以包括以下步骤。
在步骤111中,通过版本迭代的目标版本源码文件和旧版本源码文件,获得目标版本源码文件中相对旧版本源码文件的差异文件。
其中,首先应当说明的是,在此示例性实施例中,图1对应实施例中步骤110所获得的差异化信息,是以代码文件为单位在两个版本,即目标版本和旧版本之间进行代码文件的对比获得的。
源码文件,即为用于实现一应用程序的项目全部资源文件,除了存在代码文件之外,还存在着其它文件。
由此,将首先在目标版本和旧版本二者之间进行代码文件的比对,获得目标版本相对于旧版本所不同的代码文件,此目标版本相对于旧版本所不同的代码文件,即为目标版本源码文件中相对旧版本源码文件的差异文件。
换而言之,差异文件,是以代码文件的形式存在的,在两个版本之间以代码文件为单位进行内容上的比对得到。
在一个示例性实施例的具体实现中,对于目标版本源码文件相对旧版本源码文件的差异文件获得,将首先根据目标版本源码文件中各文件的后缀格式而获取得到存在的所有代码文件;然后通过差异指令的执行获得相对于旧版本源码文件的版本差异名单,此版本差异名单,即为差异文件的名单。也就是说,在此具体实现中,差异文件,是所获得差异文件名单上的代码文件。
首次差异文件的获取将无法通过差异指令,而是直接读取指定后缀格式的代码文件作为差异文件。
在步骤113中,解析差异文件中的代码信息生成语法树。
其中,所生成的语法树是差异文件中代码信息本身映射得到的,差异文件中,代码信息形成了各种语法结构,每一语法结构都对应于语法树中的一个节点。
以代码文件形式存在的差异文件,其内容是纯文本内容,对于机器而言,无法读取。解析差异文件中代码信息而生成语法树的过程,是将纯文本的差异文件解析成机器可读取代码的数据结构,即语法树。此语法树是对应于差异文件中代码信息的语法树数据结构,比如,抽象语法树(abstract syntax code,简称AST)。
在一个示例性实施例中,步骤113包括:通过差异文件以及由目标版本源码文件而获得的源码根路径触发进行差异文件中代码信息的解析生成语法树。
其中,源码根路径,即sourcepath,是由目标版本源码文件中源码根路径计算所获得。语法树的解析生成,是编译过程中语义分析的执行而实现的,源码根路径和差异文件,将作为编译过程中语义分析执行的必要条件。
在一个示例性实施例的具体实现中,语法树的解析生成,可以通过开源工具javacc(语法和词法分析器的生成程序)、antrl(开源语法分析器)和astparser等的解析来实现,也可以使用eclipse(开放源代码且Java的可扩展开发平台)开源框架jdt(javadevelopment tooling,eclipse提供的接口函数)编写的解析工具实现。
进一步的,编译过程中语义分析的执行,包括词法分析和语法分析。首先,差异文件是纯文本的代码文件,在此差异文件中,对由字符组成的单词进行处理,从左至右逐个字符的进行扫描,产生一个个的单词符号,以将字符串改造成单词符号串;然后进行语法分析,即分析单字符号串是否形成符合语法规则的语法单位,如表达式、赋值和循环等;最后确定是否构成一个程序,按照相应语言使用的语法是规则分析每条语句是否有正确的逻辑结构,以此类推,即可输出机器可读的语法树,准确的说,所输出的语法树即为语法树结构数据。
这一过程,是将线文本的代码文件读取成机器可以识别的最简单的结构。
在一个示例性实施例中,步骤113之前,该版本迭代中差异的处理方法,还包括:
对目标版本源码文件进行源码根路径计算获得源码根路径的步骤。
其中,通过对目标版本源码文件执行的源码根路径计算,来获得目标版本源码文件的所有源码根路径。源码根路径计算的实现,将首先解析目标版本源码文件所对应的全量代码中的包信息(package信息),在一个示例性实施例的具体实现中,可以通过文本正则读取得到包信息;然后基于包信息和代码文件所在绝对路径,反推得到该代码文件所在源码根路径。
对于由此所对应的进一步实现,不同语言代码有其所不同的处理方式。在此,将以JAVA语言为例来对源码根路径计算的具体实现进行说明。
JAVA语言所对应的代码文件中,代码正文最初行会出现字段“packagexx.xx.xx…”通过文本正则获取单词package后面的字段,即package信息,将该字段与代码文件所在绝对路径相结合,推算出源码根目录。
例如,所获取到的字段为“com.tencent.sng”,而所在的绝对路径为“d:/source/src/com/tencent.sng”,通过字符串处理可以得到该代码文件处于源码根目录中路径为“d:/source/src”这一文件夹中,则路径“d:/source/src”即为进行源码根路径计算所获得的源码根路径。
在此实现中,当多个代码文件对应于同一个源码根路径,将仅会对获取到的第一个代码文件进行源码根路径的计算,后续的代码文件由于已智能自身处于此计算得到的源码根路径时,将不再做重复处理,进而实现了性能优化。
在另一个示例性实施例中,步骤113之前,该版本迭代中差异的处理方法,还包括:
进行差异文件中的筛选得到有效代码信息,差异文件中的有效代码信息用于解析生成语法树。
其中,差异文件的筛选,包括代码文件的筛选和代码文件中有效代码的筛选,进而提高执行效率,减少解析无效代码八所浪费的时间。
具体的,通过差异文件的筛选,从差异文件中筛选出非代码文件以及无效代码文件。无效代码文件是指代码文件中为空或者纯为注释的文件。
在步骤115中,为语法树中的函数构建标识,通过标识形成差异化信息。
其中,如前所述的,差异化信息中构建的标识,用于进行差异内容的标识。语法树中由于每一节点都对应了一语法结构,而语法结构中的数据包括了函数信息或者类中的函数信息,因此,对语法树中的数据进行提取,由所提取的内容为语法树中的函数构建标识,进而得到以标识形式存在的差异函数以及以标识形式构建的函数调用信息,并随之形成差异化信息。
在一个示例性的实施例中,对语法树中的数据所进行的内容提取,是针对每一函数执行的。而为每一函数所提取的内容,包括此函数的关键信息、所调用函数的关系信息和函数内容。
进而对所提取的内容,分别构建其标识,以所构建的标识来形成差异化信息。由此,与之相对应的,所构建的标识,包括三大类,一类为函数标识,二类为此函数的内容标识,三类为所调用函数标识。
在此需要说明的是,对于一函数而言,内容标识是对其函数内容在数值上进行的唯一标示。两个函数之间,内容标识的不同将说明其所对应的函数内容是不相同的,因此,在后续的具体实现中可以通过内容标识来确定差异函数。
差异函数是相对于旧版本源码文件中的函数而言的,因此,对于旧版本源码文件,至少为各个函数构建了相应的内容标识,以便于后续使用。
基于此,可以理解的,对于由本示例性实施例而获得的差异化信息,是由标识所形成并且标识之间存在有关系的数据结构。
图3是根据图2对应实施例示出的对步骤115的细节进行描述的流程图。该步骤115,如图2所示,可以包括以下步骤。
在步骤1151中,为语法树中的函数获取关键信息,所调用函数的关键信息和函数内容。
其中,语法树中函数的关键信息,或者所调用函数的关键信息,是指用于标识所对应函数的各种关键性的信息。例如,关键信息可以是相应函数所拥有的函数详细属性,其可包括:函数名、所在类名、所在包名、参数名和返回类型等。在此不进行限定,将根据具体运营的情况进行灵活调整。
关键信息和函数内容,均是作为函数的详细信息而存在的,并且由于被调用函数的可见的信息较少,因此,需要通过特殊手段来获取函数的详细信息,具体而言,可以通过JDT.ASTParser实现。
具体的,基于开源框架eclipse.JDT.ASTParser实现一工具,通过此工具来解析代码信息获得函数的关键信息和内容,特别是其所对应的函数体内调用函数的详细信息。
应当指出的,函数体内调用函数的详细信息,并不能简单从代码文件中获得,需要借用类似于编译器的处理方式,即在源码根路径目录中自主寻找函数的定义位置,再通过语法树来解析此函数定义的代码信息,进而方可获得相应函数体内调用函数的详细信息。
在步骤1153中,分别通过关键信息、所调用函数的关键信息和函数内容进行标识构建,获得函数对应的函数标识、所调用函数标识和内容标识。
其中,为函数所实现的标识构建,是指针对相应信息,例如,关键信息或者函数内容进行数值化运算的过程,以此来为函数构建其所对应的函数标识、所调用函数标识和内容标识。
在一个示例性实施例的具体实现中,针对相应信息而进行的数值化运算,是指对相应信息执行信息摘要运算的过程。例如,对相应信息运算Hash(哈希)值,以通过此过程,来获得唯一标识码,即函数标识、所调用函数标识和内容标识。
进一步举例的,对于所获得的关键信息或函数内容,可参考字节码中的格式进行拼接,然后进行Hash值的运算得到一个16位的编码。所参考字节码码中的格式,可以是“包名+编译单元名$类名”的格式。函数内容将由此过程也相应运算得到一16位的字符串。
在步骤1155中,通过函数对应的函数标识、所调用函数标识和内容标识形成指示函数调用关系的差异化信息。
通过如上所述的示例性实施例,来为差异文件中存在的函数均构建标识,进而形成此差异文件所对应的差异化信息,也就是说,相对于旧版本源码文件,目标版本源码文件中存在着与之不同的代码文件,这些代码文件构成了差异文件,进而通过上述示例性实施例而为此差异文件进行其中函数的标识构建,通过构建的标识方能够获得指示了函数以及函数所存在调用关系的差异化信息。
图4是根据图1对应实施例的步骤130的细节进行描述的流程图。在图3对应实施例的基础上,该步骤130,如图4所示,可以包括以下步骤。
在步骤131中,获取旧版本源码文件中函数的内容标识。
其中,旧版本源码文件中,其代码文件所包含的代码信息存在着各种函数,预先对每一函数构建内容标识,以用于后续版本迭代中差异的处理。
也就是说,对于每一版本源码文件,将在其通过版本迭代而产生之后,为此版本源码文件中的各个函数构建内容标识,以便于在后续的版本迭代中,此版本源码文件作为旧版本源码文件而确定新版本源码文件中差异的影响。
旧版本源码文件中各函数的内容标识构建,与前述所指的差化信息的形成中内容标识的构建过程相同,在此不再进行重复说明。
在一个示例性实施例的具体实现中,所获取旧版本源码文件中函数的内容标识,将是按照前述所指的目标版本源码文件中要对旧版本源码文件的差异文件来执行的。
具体而言,仅针对差异文件来获取旧版本源码文件中函数的内容标识,此函数的内容标识所在的代码文件,在旧版本源码文件中的存在,是与差异文件中的代码文件对应了相同的文件名,但是在内容上存在着差异。
按照差异文件来实现旧版本源码文件中函数的内容标识的获取,具备非常高的针对性,将有助于极大的提高处理效率。
在步骤133中,在目标版本源码文件和旧版本源码文件之间,进行差异化信息中内容标识的比对计算,获得目标版本源码文件的差异化信息中与旧版本源码文件不相匹配的内容标识。
其中,可以理解的,差异化信息是基于差异文件所获得的,因此,差异化信息仅仅是以文件为单位定位目标版本源码文件中的差异,需要进一步精确定位目标版本源码文件中差异的存在,即基于内容标识来确定目标版本源码文件相对于旧版本源码文件所存在的差异函数。
如前述步所描述的,旧版本源码文件,预先为其所存在的函数构建了内容标识,并存储。此时,可通过相应的数据库查询来获得旧版本源码文件中各函数的内容标识,然后将差异化信息中每一内容标识与旧版本源码文件中各函数的内容标识进行匹配,以最终得到差异化信息中与旧版本源码文件不相匹配的内容标识。
在步骤135中,由内容标识对应函数获得对应的函数标识,函数标识指示目标版本源码文件中差异信息存在的差异函数。
其中,如前述标识的构建过程可知,对于一函数而言,为其构建了函数标识、所调用函数标识和内容标识。因此,可以理解的,函数标识、所调用函数标识和内容标识,均是对应于一函数的。因此,在通过步骤133确定与旧版本源码文件不相匹配的内容标识之后,便可以由此内容标识对应的函数而获得函数标识,进而相应确定目标版本源码文件中存在的差异函数。
在步骤137中,由差异函数在指示函数调用关系的差异化信息中获得差异函数自身的函数调用信息。
其中,通过步骤135获得目标源码文件中的差异函数之后,便为此差异函数按照其函数标识在差异化信息递归获取与其具有函数调用关系的其它函数标识,进而得到差异函数自身的函数调用信息。差异函数自身的函数调用信息中,通过函数标识的形式标示了差异函数所存在的函数调用关系。
通过如上所述的过程,实现了目标版本源码文件中差异函数的确定以及各差异函数自身函数调用信息的获得,进而保证了目标版本源码文件中差异定位至函数。
在一个示例性实施例中,图1对应实施例中的步骤150,可以包括以下步骤。
对差异函数和差异函数自身的函数调用信息进行拼接,生成目标版本源码文件相对旧版本源码文件的差异函数调用关系链。
其中,如前所述的,差异函数调用关系链,用于指示目标版本源码文件相对旧版本源码文件而存在的差异函数,以及此差异函数自身的函数调用信息。因此,与之相对应于,对差异函数和差异函数自身的函数调用信息进行拼接即可获得差异函数调用关系链。
在另一个示例性实施例中,如前述描述所指出的,差异化信息可以是以代码文件为单位而对比获得的,也可以是直接进行代码信息的对比获得。对于直接直接代码信息对比而获得的差异化信息,其包括了来自于相应代码文件,且相对于旧版本源码文件的所有代码信息。
基于此,对于图1对应实施例中的步骤110,其包括以下步骤。
对目标版本源码文件和旧版本源码文件中的代码信息进行差分处理,获得目标版本源码文件相对于旧版本源码文件的版本差异化详情,版本差异化详情构成差异化信息。
其中,对于目标版本源码文件和旧版本源码文件,将基于代码文件来获得代码信息的变化,即目标版本源码文件相对于旧版本源码文件的版本差异化详情,此版本差异化详情便构成了差异化信息。
与之相对应的,图5是根据图1对应实施例示出的对步骤130的细节进行描述的流程图。标识为代码信息的行号标识,该步骤130,如图5所示,包括以下步骤。
在步骤201中,在差异化信息中获得目标版本源码文件的新增行号和目标版本源码文件相对于旧版本源码文件删除的行号标识。
在步骤203中,根据新增行号标识和删除的行号标识,在目标版本源码文件的语法树中逐一对比,获得目标版本源码文件相对旧版本源码文件的差异函数和差异函数自身的函数调用信息。
其中,区别于图2、图3和图5所对应实施例的,在本示例性实施例中,差异化信息直接指示了目标版本源码文件相对于旧版本源码文件而存在的代码信息变化。
相对于旧版本源码文件,所发生的代码信息变化,包括新增的代码信息、删除的代码信息和修改的代码信息,随之也将带来代码信息的行号标识变化。因此,可将代码文件中代码信息对应的行号来作为差异化信息中构建的标识。
与前述描述相类似的,可以通过目标版本源码文件中代码信息的解析生成目标版本源码文件的语法树,进而在此基础之上为由新增行号标识和删除的行号标识来对其在语法树中的逐一比对来定位差异函数,由此差异函数随之在语法树中获得函数调用信息。
具体的,通过在语法树中的比对,如果一新增行号标识位于一函数体内,则可确定此函数内容相对于旧版本是被添加的,在此基础上,如果此新增行号位于函数体定义行号,则确定此函数为新建函数,是一差异函数。
与之相类似的,由删除的行号标识,可以确定相对于旧版本的函数删除信息,即通过目标版本和旧版本之间代码信息的整合,来确定被删除的旧函数和被相应添加的新函数,此时,则可确定被相应添加的新函数,在内容上发生了变化,也是一差异函数。
通过此示例性实施例,为差异函数和差异函数的函数调用信息的获得提供了本地处理方案。
结合具体应用场景,描述该版本迭代中差异的处理方法。根据前述示例性实施例中的描述,可以知道,对于版本迭代中差异的处理,大致可分为两大部分,即:一部分为差异化信息的获得,另一部分则为差异函数的获得以及由此差异函数所实现的差异函数调用关系链生成。
在此首先应当说明的是,对于版本迭代的执行,是在版本控制器,例如,SVN(Subversion,开放源代码的版本控制系统)或者GIT(开源的分布式版本控制系统)的控制下实现的。基于此,任一版本的源码文件都可通过相应的版本控制器地址获得。
图6根据一示例性实施例示出的版本迭代中获得差异化信息所涉及的流程图。随着版本迭代的进行,对于所获得的新版本,需要确定新版本中差异所产生的影响。在此,新版本的源码文件,即为目标版本源码文件,而旧版本的源文件,则是前述所指的旧版本源码文件,因此,将相应提供目标版本源码文件和旧版本源码文件所分别对应的版本控制器地址。
通过版本控制器地址,便可链接到相应的源码文件。图7是根据一个示例性实施例示出的版本迭代中差异处理的简要示意图。
通过图7所示的步骤可知,对于一项目的版本迭代,在由版本控制器地址链接到相应的源码文件,即执行步骤410之后,一方面,需要执行差差函数的提取过程,如步骤430所示的,以输出差异函数名单,另一方面,则执行步骤450,进行全量数据或者差量数据的入库,在此,所指的全量数据或者差量数据,则是前述所指的差异化信息。
对于首次执行而言,所获得的差异化信息为全量数据,后续的执行过程中,差异化信息则是差量数据。
最终便可以基于步骤430输出的差异函数名单和步骤450中存入数据库的差异信息来生成差异函数调用关系链,即如步骤470所示。
具体的,对于差异化信息的获得,如图6所示的,首先执行步骤510,为目标版本源码文件和旧版本源码文件获取各自所分别对应的版本控制器地址,进而即可执行步骤520,从版本控制器拉取新版本所对应的全量数据,即目标版本源码文件,并相对旧版本源码文件获得目标版本源码文件的差异文件名单。
此时,一方面执行步骤530进行源码根路径计算得到源码根路径集,另一方面执行步骤540,进行代码文件的筛选得到差异文件中的有效代码。
以源码根路径集和差异文件中的有效代码作为必要条件,进行AST解析,如步骤550所示的,输出AST抽象语法树。在此AST抽象语法树中执行步骤560,获取各个函数的相关信息,如步骤560中为各个函数所输出函数关键信息、所调用函数的有关键信息以及函数内容。
执行步骤570进行Hash得到基于函数关键信息、所调用函数的有关键信息以及函数内容的各种标识,即函数标识、所调用函数标识和内容标识,进而形成具有唯一标识,有关系的数据结构,即为前述所指的差异化信息,并执行步骤580,将差异化信息存储至数据库中。
图8是根据一示例性实施例示出的差异函数的获得以及由此差异函数所实现的差异函数调用关系链生成的流程图。
可以理解的,对于旧版本源码文件,在所执行的版本迭代中,也曾作为新版本而在数据库中存储着其所包含函数的内容标识,因此,可根据差异文件名单,在数据库中查询出此差异文件名单所指示的代码文件在旧版本所存在的函数,即内容标识,此过程,即为步骤610的执行,输出旧版本函数的内容标识。
在此,将对新版本,即目标版本,将其差异文件中每一函数的内容标识与旧版本函数的内容标识进行对比计算,如步骤620,进而输出差异函数名单,此差异函数名单中,是以函数标识来指示所存在的差异函数的。
如步骤630,按照差异函数名单中指示的函数标识孙静雅数据库,递归获取每一差异函数自身的函数调用信息,进而如步骤640所示,由差异函数和差异函数自身的函数调用夜生成差异函数调用关系链。
通过如上所述的应用场景,便可确定版本迭代中差异所影响的函数,此过程的执行,由机器实现,而不需要依赖于人工,执行效率能够得到保障,有效性和扩展性极强。
下述为本发明装置实施例,可以用于执行本发明上述版本迭代中差异的处理方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明版本迭代中差异的处理方法实施例。
图9是根据一示例性实施例示出的一种版本迭代中差异的处理装置的框图。该版本迭代中差异的处理装置,如图9所示,可以包括但不限于:差异化信息获得模块710、函数信息获得模块730和调用关系链生成模块750。
差异化信息获得模块710,用于获得目标版本源码文件中相对旧版本源码文件的差异化信息,目标版本源码文件是相对于旧版本源码文件的新版本源码文件。
函数信息获得模块730,用于通过差异化信息中标识的匹配获得差异函数和差异函数自身的函数调用信息,该标识用于标示差异函数。
调用关系链生成模块750,用于根据差异函数和差异函数自身的函数调用信息生成目标版本源码文件相对旧版本源码文件的差异函数调用关系链。
图10是根据图9对应实施例示出的对差异化信息获得模块的细节进行描述的框图。该差异化信息获得模块710,如图10所示,可以包括但不限于:差异文件获得单元711、代码解析单元713和信息形成单元715。
差异文件获得单元711,用于通过版本迭代的目标版本源码文件和旧版本源码文件,获得目标版本源码文件中相对旧版本源码文件的差异文件。
代码解析单元713,用于解析差异文件中的代码信息生成语法树。
信息形成单元715,用于为语法树中的函数构建标识,通过标识形成差异化信息。
图11是根据图10对应实施例示出的对信息形成单元的细节进行描述的框图。该信息形成单元715,如图11所示,可以包括但不限于:详细信息获取子单元7151、标识构建子单元7153和信息形成执行子单元7155。
详细信息获取子单元7151,用于为语法树中的函数获取关键信息、所调用函数的关键信息和函数内容。
标识构建子单元7153,用于分别通过所述关键信息、所调用函数的关键信息和函数内容进行标识构建,获得函数对应的函数标识、所调用函数标识和内容标识。
信息形成执行子单元7155,用于通过函数对应的函数标识、所调用函数标识和内容标识形成指示函数调用关系的差异化信息。
图12是根据图9对应实施例示出的对函数信息获得模块的细节进行描述的框图。该函数信息获得模块730,如图12所示,可以包括但不限于:旧版本内容标识获取单元731、比对计算单元733、差异函数确定单元735和调用信息获得单元737。
旧版本内容标识获取单元731,用于获取旧版本源码文件中函数的内容标识。
比对计算单元733,用于在目标版本源码文件和旧版本源码文件之间,进行差异信息中内容标识的对比计算,获得目标版本源码文件的差异化信息中与旧版本源码文件不相匹配的内容标识。
差异函数确定单元735,用于由内容标识对应函数获得对应的函数标识,函数标识指示目标版本源码文件中差异信息存在的差异函数。
调用信息获得单元737,用于由差异函数在指示函数调用关系的差异化信息中获得差异函数自身的函数调用信息。
在一个示例性实施例中,调用关系链生成模块750进一步用于对差异函数和差异函数自身的函数调用信息进行拼接,生成目标版本源码文件相对旧版本源码文件的差异函数调用关系链。
在另一个示例性实施例中,差异化信息获得模块710进一步用于对目标版本源码文件和旧版本源码文件中的代码信息进行差分处理,获得目标版本源码文件相对于旧版本源码文件的版本差异化详情,版本差异化详情构成差异化信息。
图13是根据图9对应实施例示出的对函数信息获得模块的细节进行描述的框图。该标识为代码信息的行号标识,函数信息获得模块730,如图13所示,可以包括但不限于:行号标识获取单元801和对比执行单元803。
行号标识获取单元801,用于在差异化信息中获得目标版本源码文件中的新增行号标识和目标版本源码文件相对于旧版本源码文件删除的行号标识。
对比执行单元803,用于根据新增行号标识和删除的行号标识,在目标版本源码文件的语法树中进行逐一对比,获得目标版本源码文件相对旧版本源码文件的差异函数和差异函数自身的函数调用信息。
图14是根据一示例性实施例示出的一种装置900的框图。参照图14,装置900可以包括以下一个或多个组件:处理组件902,存储器904,电源组件906,多媒体组件908,音频组件910,传感器组件914以及通信组件916。
处理组件902通常控制装置900的整体操作,诸如与显示,电话呼叫,数据通信,相机操作以及记录操作相关联的操作等。处理组件902可以包括一个或多个处理器918来执行指令,以完成下述的方法的全部或部分步骤。此外,处理组件902可以包括一个或多个模块,便于处理组件902和其他组件之间的交互。例如,处理组件902可以包括多媒体模块,以方便多媒体组件908和处理组件902之间的交互。
存储器904被配置为存储各种类型的数据以支持在装置900的操作。这些数据的示例包括用于在装置900上操作的任何应用程序或方法的指令。存储器904可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static RandomAccess Memory,简称SRAM),电可擦除可编程只读存储器(Electrically ErasableProgrammable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(ErasableProgrammable Read Only Memory,简称EPROM),可编程只读存储器(Programmable Red-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。存储器904中还存储有一个或多个模块,该一个或多个模块被配置成由该一个或多个处理器918执行,以完成下述图1、图2、图3、图4和图5任一所示方法中的全部或者部分步骤。
电源组件906为装置900的各种组件提供电力。电源组件906可以包括电源管理系统,一个或多个电源,及其他与为装置900生成、管理和分配电力相关联的组件。
多媒体组件908包括在所述装置900和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(Liquid Crystal Display,简称LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。屏幕还可以包括有机电致发光显示器(Organic Light Emitting Display,简称OLED)。
音频组件910被配置为输出和/或输入音频信号。例如,音频组件910包括一个麦克风(Microphone,简称MIC),当装置900处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器904或经由通信组件916发送。在一些实施例中,音频组件910还包括一个扬声器,用于输出音频信号。
传感器组件914包括一个或多个传感器,用于为装置900提供各个方面的状态评估。例如,传感器组件914可以检测到装置900的打开/关闭状态,组件的相对定位,传感器组件914还可以检测装置900或装置900一个组件的位置改变以及装置900的温度变化。在一些实施例中,该传感器组件914还可以包括磁传感器,压力传感器或温度传感器。
通信组件916被配置为便于装置900和其他设备之间有线或无线方式的通信。装置900可以接入基于通信标准的无线网络,如WiFi(WIreless-Fidelity,无线保真)。在一个示例性实施例中,通信组件916经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件916还包括近场通信(Near FieldCommunication,简称NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RadioFrequency Identification,简称RFID)技术,红外数据协会(Infrared DataAssociation,简称IrDA)技术,超宽带(Ultra Wideband,简称UWB)技术,蓝牙技术和其他技术来实现。
在示例性实施例中,装置900可以被一个或多个应用专用集成电路(ApplicationSpecific Integrated Circuit,简称ASIC)、数字信号处理器、数字信号处理设备、可编程逻辑器件、现场可编程门阵列、控制器、微控制器、微处理器或其他电子元件实现,用于执行下述方法。
可选的,本发明还提供一种智能终端,执行图1、图2、图3、图4和图5任一所示的版本迭代中差异的处理方法的全部或者部分步骤。所述装置包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行:
获得目标版本源码文件中相对旧版本源码文件的差异化信息,所述目标版本源码文件是相对于所述旧版本源码文件的新版本源码文件;
通过所述差异化信息中标识的匹配获得差异函数和所述差异函数自身的函数调用信息,所述标识用于标示所述差异函数;
根据所述差异函数和所述差异函数自身的函数调用信息生成所述目标版本源码文件相对旧版本源码文件的差异函数调用关系链。
该实施例中的装置的处理器执行操作的具体方式已经在有关该版本迭代中差异的处理方法的实施例中执行了详细描述,此处将不做详细阐述说明。
在示例性实施例中,还提供了一种存储介质,该存储介质为计算机可读存储介质,例如可以为包括指令的临时性和非临时性计算机可读存储介质。该存储介指例如包括指令的存储器904,上述指令可由装置900的处理器918执行以完成上述版本迭代中差异的处理方法。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围执行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
Claims (14)
1.一种版本迭代中差异的处理方法,其特征在于,所述方法包括
获得目标版本源码文件中相对旧版本源码文件的差异化信息,所述目标版本源码文件是相对于所述旧版本源码文件的新版本源码文件;
通过所述差异化信息中标识的匹配获得差异函数和所述差异函数自身的函数调用信息,所述标识用于标示所述差异函数;
根据所述差异函数和所述差异函数自身的函数调用信息生成所述目标版本源码文件相对旧版本源码文件的差异函数调用关系链。
2.根据权利要求1所述的方法,其特征在于,所述获得目标版本源码文件中相对旧版本源码文件的差异化信息,包括:
通过版本迭代的目标版本源码文件和旧版本源码文件,获得所述目标版本源码文件中相对所述旧版本源码文件的差异文件;
解析所述差异文件中的代码信息生成语法树;
为所述语法树中的函数构建标识,通过所述标识形成差异化信息。
3.根据权利要求2所述的方法,其特征在于,所述为所述语法树中的函数构建标识,通过所述标识形成差异化信息,包括:
为所述语法树中的函数获取关键信息、所调用函数的关键信息和函数内容;
分别通过所述关键信息、所调用函数的关键信息和函数内容进行标识构建,获得所述函数对应的函数标识、所调用函数标识和内容标识;
通过所述函数对应的函数标识、所调用函数标识和内容标识形成指示函数调用关系的差异化信息。
4.根据权利要求3所述的方法,其特征在于,所述通过所述差异化信息中标识的匹配获得差异函数和所述差异函数自身的函数调用信息,包括:
获取所述旧版本源码文件中函数的内容标识;
在所述目标版本源码文件和旧版本源码文件之间,进行差异信息中内容标识的对比计算,获得所述目标版本源码文件的差异化信息中与旧版本源码文件不相匹配的内容标识;
由所述内容标识对应函数获得对应的函数标识,所述函数标识指示所述目标版本源码文件中差异信息存在的差异函数;
由所述差异函数在所述指示函数调用关系的差异化信息中获得所述差异函数自身的函数调用信息。
5.根据权利要求2所述的方法,其特征在于,所述根据所述差异函数和所述差异函数自身的函数调用信息生成所述目标版本源码文件相对旧版本源码文件的差异函数调用关系链,包括:
对所述差异函数和所述差异函数自身的函数调用信息进行拼接,生成所述目标版本源码文件相对旧版本源码文件的差异函数调用关系链。
6.根据权利要求1所述的方法,其特征在于,所述获得目标版本源码文件中相对旧版本源码文件的差异化信息,包括:
对所述目标版本源码文件和旧版本源码文件中的代码信息进行差分处理,获得所述目标版本源码文件相对于所述旧版本源码文件的版本差异化详情,所述版本差异化详情构成所述差异化信息。
7.根据权利要求6所述的方法,其特征在于,所述标识为代码信息的行号标识,所述通过所述差异化信息中标识的匹配获得差异函数和所述差异函数自身的函数调用信息,包括:
在所述差异化信息中获得所述目标版本源码文件中的新增行号标识和所述目标版本源码文件相对于所述旧版本源码文件删除的行号标识;
根据所述新增行号标识和删除的行号标识,在所述目标版本源码文件的语法树中进行逐一对比,获得所述目标版本源码文件相对旧版本源码文件的差异函数和所述差异函数自身的函数调用信息。
8.一种版本迭代中差异的处理装置,其特征在于,所述装置包括:
差异化信息获得模块,用于获得目标版本源码文件中相对旧版本源码文件的差异化信息,所述目标版本源码文件是相对于所述旧版本源码文件的新版本源码文件;
函数信息获得模块,用于通过所述差异化信息中标识的匹配获得差异函数和所述差异函数自身的函数调用信息,所述标识用于标示所述差异函数;
调用关系链生成模块,用于根据所述差异函数和所述差异函数自身的函数调用信息生成所述目标版本源码文件相对旧版本源码文件的差异函数调用关系链。
9.根据权利要求8所述的装置,其特征在于,所述差异化信息获得模块包括:
差异文件获得单元,用于通过版本迭代的目标版本源码文件和旧版本源码文件,获得所述目标版本源码文件中相对所述旧版本源码文件的差异文件;
代码解析单元,用于解析所述差异文件中的代码信息生成语法树;
信息形成单元,用于为所述语法树中的函数构建标识,通过所述标识形成差异化信息。
10.根据权利要求9的装置,其特征在于,所述信息形成单元包括:
详细信息获取子单元,用于为所述语法树中的函数获取关键信息、所调用函数的关键信息和函数内容;
标识构建子单元,用于分别通过所述关键信息、所调用函数的关键信息和函数内容进行标识构建,获得所述函数对应的函数标识、所调用函数标识和内容标识;
信息形成执行子单元,用于通过所述函数对应的函数标识、所调用函数标识和内容标识形成指示函数调用关系的差异化信息。
11.根据权利要求10所述的装置,其特征在于,所述函数信息获得模块包括:
旧版本内容标识获取单元,用于获取所述旧版本源码文件中函数的内容标识;
比对计算单元,用于在所述目标版本源码文件和旧版本源码文件之间,进行差异信息中内容标识的对比计算,获得所述目标版本源码文件的差异化信息中与旧版本源码文件不相匹配的内容标识;
差异函数确定单元,用于由所述内容标识对应函数获得对应的函数标识,所述函数标识指示所述目标版本源码文件中差异信息存在的差异函数;
调用信息获得单元,用于由所述差异函数在所述指示函数调用关系的差异化信息中获得所述差异函数自身的函数调用信息。
12.根据权利要求9所述的装置,其特征在于,所述调用关系链生成模块进一步用于对所述差异函数和所述差异函数自身的函数调用信息进行拼接,生成所述目标版本源码文件相对旧版本源码文件的差异函数调用关系链。
13.根据权利要求8所述的装置,其特征在于,所述差异化信息获得模块进一步用于对所述目标版本源码文件和旧版本源码文件中的代码信息进行差分处理,获得所述目标版本源码文件相对于所述旧版本源码文件的版本差异化详情,所述版本差异化详情构成所述差异化信息。
14.根据权利要求13所述的装置,其特征在于,所述标识为代码信息的行号标识,所述函数信息获得模块包括:
行号标识获取单元,用于在所述差异化信息中获得所述目标版本源码文件中的新增行号标识和所述目标版本源码文件相对于所述旧版本源码文件删除的行号标识;
对比执行单元,用于根据所述新增行号标识和删除的行号标识,在所述目标版本源码文件的语法树中进行逐一对比,获得所述目标版本源码文件相对旧版本源码文件的差异函数和所述差异函数自身的函数调用信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710093758.8A CN106951228B (zh) | 2017-02-21 | 2017-02-21 | 版本迭代中差异的处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710093758.8A CN106951228B (zh) | 2017-02-21 | 2017-02-21 | 版本迭代中差异的处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106951228A true CN106951228A (zh) | 2017-07-14 |
CN106951228B CN106951228B (zh) | 2023-07-18 |
Family
ID=59466747
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710093758.8A Active CN106951228B (zh) | 2017-02-21 | 2017-02-21 | 版本迭代中差异的处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106951228B (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577476A (zh) * | 2017-08-07 | 2018-01-12 | 中国科学院软件研究所 | 一种基于模块划分的安卓系统源码差异性分析方法、服务器及介质 |
CN108108962A (zh) * | 2018-02-02 | 2018-06-01 | 联合建管(北京)国际工程科技有限责任公司 | 建筑信息模型bim版本差异的在线展示方法及装置 |
CN109918286A (zh) * | 2018-12-28 | 2019-06-21 | 北京奇安信科技有限公司 | 一种静态代码分析的处理方法及装置 |
CN110515944A (zh) * | 2019-08-16 | 2019-11-29 | 出门问问(苏州)信息科技有限公司 | 基于分布式数据库的数据存储方法、存储介质和电子设备 |
CN110659293A (zh) * | 2019-09-24 | 2020-01-07 | 支付宝(杭州)信息技术有限公司 | 基于变更代码的数据表确定方法以及装置 |
CN111078559A (zh) * | 2019-12-18 | 2020-04-28 | 广州品唯软件有限公司 | java代码中函数调用的提取方法、装置、介质及计算机设备 |
WO2020131125A1 (en) * | 2018-12-21 | 2020-06-25 | Didi Research America, Llc | Tree delta encoding |
CN111382070A (zh) * | 2020-03-03 | 2020-07-07 | 腾讯科技(深圳)有限公司 | 兼容性测试方法、装置、存储介质和计算机设备 |
CN111506342A (zh) * | 2020-04-23 | 2020-08-07 | 北京奇艺世纪科技有限公司 | 版本差异检测方法、装置、电子设备及存储介质 |
CN111736869A (zh) * | 2020-06-19 | 2020-10-02 | 浙江大搜车软件技术有限公司 | 服务端接口的版本更新方法和服务端接口的调用方法 |
CN111752819A (zh) * | 2019-03-29 | 2020-10-09 | 广州市百果园信息技术有限公司 | 一种异常监控方法、装置、系统、设备和存储介质 |
CN112099838A (zh) * | 2019-06-17 | 2020-12-18 | 腾讯科技(深圳)有限公司 | 确定版本差异的方法、装置及存储介质 |
CN112698850A (zh) * | 2019-10-22 | 2021-04-23 | 北京华为数字技术有限公司 | 一种优化的升级方法和相关设备 |
CN113419739A (zh) * | 2021-06-22 | 2021-09-21 | 网易(杭州)网络有限公司 | 节点图差异检测方法、装置、电子设备及存储介质 |
CN113568834A (zh) * | 2021-07-28 | 2021-10-29 | 南方电网数字电网研究院有限公司 | Sdk代码的兼容性检测方法、装置、计算机设备和介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103198010A (zh) * | 2012-01-06 | 2013-07-10 | 腾讯科技(深圳)有限公司 | 软件测试方法、装置及系统 |
CN104035772A (zh) * | 2014-06-09 | 2014-09-10 | 中国科学院软件研究所 | 基于静态分析的源码多版本函数调用关系差异性标识方法 |
US20160062765A1 (en) * | 2014-09-02 | 2016-03-03 | International Business Machines Corporation | Identifying semantic differences between source code versions |
-
2017
- 2017-02-21 CN CN201710093758.8A patent/CN106951228B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103198010A (zh) * | 2012-01-06 | 2013-07-10 | 腾讯科技(深圳)有限公司 | 软件测试方法、装置及系统 |
CN104035772A (zh) * | 2014-06-09 | 2014-09-10 | 中国科学院软件研究所 | 基于静态分析的源码多版本函数调用关系差异性标识方法 |
US20160062765A1 (en) * | 2014-09-02 | 2016-03-03 | International Business Machines Corporation | Identifying semantic differences between source code versions |
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107577476A (zh) * | 2017-08-07 | 2018-01-12 | 中国科学院软件研究所 | 一种基于模块划分的安卓系统源码差异性分析方法、服务器及介质 |
CN108108962A (zh) * | 2018-02-02 | 2018-06-01 | 联合建管(北京)国际工程科技有限责任公司 | 建筑信息模型bim版本差异的在线展示方法及装置 |
US11163555B2 (en) | 2018-12-21 | 2021-11-02 | Beijing Voyager Technology Co., Ltd. | Tree delta encoding |
US11137999B2 (en) | 2018-12-21 | 2021-10-05 | Beijing Voyager Technology Co., Ltd. | Tree delta encoding |
US11138000B2 (en) | 2018-12-21 | 2021-10-05 | Beijing Voyager Technology Co., Ltd. | Tree delta encoding |
WO2020131125A1 (en) * | 2018-12-21 | 2020-06-25 | Didi Research America, Llc | Tree delta encoding |
WO2020131114A1 (en) * | 2018-12-21 | 2020-06-25 | Didi Research America, Llc | Tree delta encoding |
WO2020131124A1 (en) * | 2018-12-21 | 2020-06-25 | Didi Research America, Llc | Tree delta encoding |
CN109918286A (zh) * | 2018-12-28 | 2019-06-21 | 北京奇安信科技有限公司 | 一种静态代码分析的处理方法及装置 |
CN111752819A (zh) * | 2019-03-29 | 2020-10-09 | 广州市百果园信息技术有限公司 | 一种异常监控方法、装置、系统、设备和存储介质 |
CN111752819B (zh) * | 2019-03-29 | 2024-04-05 | 广州市百果园信息技术有限公司 | 一种异常监控方法、装置、系统、设备和存储介质 |
CN112099838A (zh) * | 2019-06-17 | 2020-12-18 | 腾讯科技(深圳)有限公司 | 确定版本差异的方法、装置及存储介质 |
CN112099838B (zh) * | 2019-06-17 | 2023-08-15 | 腾讯科技(深圳)有限公司 | 确定版本差异的方法、装置及存储介质 |
CN110515944A (zh) * | 2019-08-16 | 2019-11-29 | 出门问问(苏州)信息科技有限公司 | 基于分布式数据库的数据存储方法、存储介质和电子设备 |
CN110659293A (zh) * | 2019-09-24 | 2020-01-07 | 支付宝(杭州)信息技术有限公司 | 基于变更代码的数据表确定方法以及装置 |
CN110659293B (zh) * | 2019-09-24 | 2022-02-11 | 支付宝(杭州)信息技术有限公司 | 基于变更代码的数据表确定方法以及装置 |
CN112698850A (zh) * | 2019-10-22 | 2021-04-23 | 北京华为数字技术有限公司 | 一种优化的升级方法和相关设备 |
CN112698850B (zh) * | 2019-10-22 | 2023-06-20 | 北京华为数字技术有限公司 | 一种优化的升级方法和相关设备 |
CN111078559A (zh) * | 2019-12-18 | 2020-04-28 | 广州品唯软件有限公司 | java代码中函数调用的提取方法、装置、介质及计算机设备 |
CN111078559B (zh) * | 2019-12-18 | 2023-10-13 | 广州品唯软件有限公司 | java代码中函数调用的提取方法、装置、介质及计算机设备 |
CN111382070A (zh) * | 2020-03-03 | 2020-07-07 | 腾讯科技(深圳)有限公司 | 兼容性测试方法、装置、存储介质和计算机设备 |
CN111506342A (zh) * | 2020-04-23 | 2020-08-07 | 北京奇艺世纪科技有限公司 | 版本差异检测方法、装置、电子设备及存储介质 |
CN111736869A (zh) * | 2020-06-19 | 2020-10-02 | 浙江大搜车软件技术有限公司 | 服务端接口的版本更新方法和服务端接口的调用方法 |
CN113419739A (zh) * | 2021-06-22 | 2021-09-21 | 网易(杭州)网络有限公司 | 节点图差异检测方法、装置、电子设备及存储介质 |
CN113568834A (zh) * | 2021-07-28 | 2021-10-29 | 南方电网数字电网研究院有限公司 | Sdk代码的兼容性检测方法、装置、计算机设备和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106951228B (zh) | 2023-07-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106951228A (zh) | 版本迭代中差异的处理方法和装置 | |
CN104133772B (zh) | 一种自动生成测试数据的方法 | |
KR102317535B1 (ko) | 소프트웨어 개발 키트로 데이터 추적을 구현하는 방법 및 시스템 | |
CN106649100A (zh) | 一种自动化测试方法及系统 | |
US9652441B2 (en) | System and method for creation of templates | |
Bockermann et al. | The streams framework | |
US8352913B2 (en) | Generating and resolving component names in an integrated development environment | |
CN106776633B (zh) | 用户可配置的自动生成a2l文件的装置和方法 | |
JP6090850B2 (ja) | ソースプログラム解析システム、ソースプログラム解析方法およびプログラム | |
CN103207779A (zh) | 用于源代码补丁的装置和方法 | |
CN106873952B (zh) | 移动端网页开发的数据处理系统和方法、及应用装置 | |
CN104050161B (zh) | 应用和数据服务器的动态桥接 | |
US9442718B1 (en) | System for assisting in locating changes in source code version control system | |
CN103955429B (zh) | 确定回归测试范围的方法及装置 | |
CN111488155B (zh) | 着色语言翻译方法 | |
CN107766036B (zh) | 一种模块的构建方法、构建装置及终端设备 | |
CN103235757B (zh) | 基于自动化造数对输入域测试对象进行测试的装置和方法 | |
WO2021022703A1 (zh) | 软件项目重构方法、装置、计算机装置及存储介质 | |
CN107797805A (zh) | 一种代码封装方法、装置及计算机可读存储介质 | |
CN104484156B (zh) | 多语言公式的编辑方法、编辑系统和多语言公式编辑器 | |
CN112527738A (zh) | 项目描述文件优化方法、系统及存储介质 | |
CN112328612A (zh) | 字段一致性验证测试数据的生成方法、系统、设备及介质 | |
CN105493033A (zh) | 声明性配置元素 | |
US11977473B2 (en) | Providing a pseudo language for manipulating complex variables of an orchestration flow | |
CN110716914A (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 |