CN103262047A - 使用代码克隆检测的智能代码差分 - Google Patents
使用代码克隆检测的智能代码差分 Download PDFInfo
- Publication number
- CN103262047A CN103262047A CN2010800707050A CN201080070705A CN103262047A CN 103262047 A CN103262047 A CN 103262047A CN 2010800707050 A CN2010800707050 A CN 2010800707050A CN 201080070705 A CN201080070705 A CN 201080070705A CN 103262047 A CN103262047 A CN 103262047A
- Authority
- CN
- China
- Prior art keywords
- code
- function
- source code
- versions
- 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
Images
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/75—Structural analysis for program understanding
- G06F8/751—Code clone detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
- G06F8/62—Uninstallation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
- G06F8/63—Image based installation; Cloning; Build to order
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及用于利用代码克隆检测技术来进行智能代码差分的系统和方法。大而复杂的源代码改变(例如,跨越源文件来移动和重命名函数)可涉及多个源文件中的编辑。如此,使用现有代码差分工具,开发者和/或代码审阅者可能难以标识大而复杂的改变,以及确定哪些改变是最重大的。使用代码克隆检测技术,可以确定不同类型的改变(跨越源文件或者在特定源文件内)。改变可被归类为新的、复制的、以及删除了的代码片段或函数、以及移动了的、重命名了的或修改了的函数。对于被归类为复制的或修改了的改变,可以按照改变的重要性级别来进行进一步归类。例如,改变可以是琐碎的、次要的以及重大的。改变的可视化进一步提供对改变的直观理解。
Description
技术领域
本发明一般涉及代码差分(differencing)系统,或者“区分(diffing)”系统,所述系统智能地生成并输出语义信息。
背景
代码审阅的常见任务是能够确定并理解源代码的前一版本和源代码的当前版本之间的改变。传统的代码差分(或区分)系统仅仅标识源代码中或者源代码的各版本之间的改变。这些系统通常提供基本信息,诸如在一个源代码文件中添加和/或删除了行的地方。审阅传统区分系统的结果的代码审阅者因此没有直观的或其他的描述信息,其中针对所述信息来关注对文件的改变的本质,例如,是否发生了语义或词汇的改变。
软件开发通常利用多个软件开发者来并行合作开发或修改源代码。为了便于这样的开发,相同的源代码或源代码库(例如,包含源代码的一组文件)经常由不同开发者修改。此外,在一些情况下,一个开发者可修复源代码中的隐错(bug),而另一开发者可以并行通过在不同文件内或跨不同文件移动源代码的行来修改同一源代码。而且,由于由不同开发者在两个或更多个不同分支中的并行处理,可能产生同一源代码的不同版本。各个前述方法均产生同一代码的不同版本。各版本的代码因此可能非常相似,而且,因此,理解各版本源代码之间的改变的任务可能非常困难。
尽管上面描述的区分系统为开发者提供了有限程度的支持,然而如同所提到的,它们的信息并不是特别丰富。当今的代码区分系统的上述缺点仅旨在提供常规系统的一些问题的概览,并且不旨在是穷尽性的。传统系统的其他问题以及此处所描述的各非限制性实施例的对应的益处可以在审阅以下描述后变得更显而易见。
概述
此处提供了简化的概述以帮助能够对以下更详细的描述和附图中的示例性、非限制性实施例的各方面有基本或大体的理解。然而,本概述并不旨在是详尽的或穷尽的。相反,本概述的唯一目的在于,以简化的形式提出与一些示例性、非限制性实施例相关的一些概念,作为以下各实施例的更详细的描述的序言。
本文所提供的各实施例是针对其中可利用代码克隆检测技术的集成开发环境(IDE)的。各个实施例还针对利用代码克隆检测方法的系统和技术。代码克隆检测技术可被用作生成被输出到代码审阅者的语义信息中的初步步骤。也构想了可能受益于本文描述的差分技术的其他环境和上下文。
各个实施例利用代码克隆检测技术来生成关于各版本代码间的改变的语义信息。所述语义信息可以是各版本间的改变的表征。所述表征可以被输出到代码审阅者并由此一般性地帮助软件开发,具体而言是帮助代码审阅过程。在一些实施例中,信息可被输出到开发者以审阅由该开发者他/她本人所做的改变,并且因此本文所述的实施例可以帮助对开发者先前输入的改变的自我审阅和/或对第三方所输入并且仅由该开发者审阅的改变的审阅。
在一些实施例中,可以生成可视化信息,诸如架构图或颜色编码信息来显示关于各版本间的改变的信息。所述可视化信息被输出到代码审阅者以在视觉上帮助理解所述改变。
而且,在一些实施例中,本文描述的其他系统和方法包括克隆检测核心和重要性引擎。克隆检测组件或核心被配置成生成指示对在至少两个版本的源代码之间的内容改变的类型的确定的信息。重要性引擎被配置成确定与该内容改变的类型相关联的重要性级别,并且输出指示所述重要性级别的信息。在一些实施例中,重要性级别与所述改变的表征有关。在其他实施例中,重要性级别与所述改变的类型有关,例如是格式、词汇还是逻辑改变。重要性级别可被表达成一个值,例如整数、分数、百分比等,或被表达成可视化,例如颜色编码。
这些和其他实施例在下文中更详细地描述。
附图简述
参考附图进一步描述各非限制性实施例,在附图中:
附图1是根据一个或多个实施例的示出智能代码区分系统的示例性非限制性实现的框图;
附图2是根据一个或多个实施例的示出智能代码区分系统的示例性非限制性实现的另一框图;
附图3是根据一个或多个实施例的示出智能代码区分系统的示例性非限制性实现的另一框图;
图4是示出用于使用代码克隆检测技术的智能代码区分的示例性非限制性过程的流程图;
图5是示出用于使用代码克隆检测技术的智能代码区分的示例性非限制性过程的另一流程图;
图6是示出用于使用代码克隆检测技术的智能代码区分的示例性非限制性过程的另一流程图;
图7是示出用于使用代码克隆检测技术的智能代码区分的示例性非限制性过程的另一流程图;
图8是示出用于使用代码克隆检测技术的智能代码区分的示例性非限制性截屏的框图;
图9是示出用于使用代码克隆检测技术的智能代码区分的示例性非限制性截屏的另一框图;
图10是示出用于使用代码克隆检测技术的智能代码区分的示例性非限制性截屏的另一框图;
图11是示出用于使用代码克隆检测技术的智能代码区分的示例性非限制性截屏的另一框图;
图12是示出用于使用代码克隆检测技术的智能代码区分的示例性非限制性截屏的另一框图;
图13是示出用于使用代码克隆检测技术实现智能代码区分的系统体系结构的示例性非限制性实现的框图;
图14是表示其中可实现在此处所述的各个实施例的示例性、非限制性联网环境的框图;以及
图15是表示其中可实现此处所述的各个实施例的一个或多个方面的示例性、非限制性计算系统或操作环境的框图。
详细描述
概览
通过介绍的方式,为了编程效率,软件开发者经常在编程项目内的多个位置中复制源代码的各部分。在做出或不做出一定程度的修改或适应的情况下重用一部分源代码被称为“代码克隆(code cloning)”,而所得到的在不同精确度下彼此匹配或对应的代码部分被称为“代码克隆(code clone)”或更简单地被称为“克隆”。而且,在一些实施例中,被用来构造特定功能、组件或应用的源代码的一组一个或多个文件在各文件内或文件之间做出或不做出某种程度的修改的情况下被重用。该组一个或多个文件被称为“代码库”。尽管在本文中为了一致性而使用了术语“代码”,然而应当理解,该术语在适用时可应用于“代码库”。
代码克隆检测技术解决标识并分析源代码中、或跨越源代码的各文件的代码克隆的问题。典型的代码克隆检测系统接收源代码,对源代码的文本进行预处理以将各行分拆成令牌(token),并且移除非关键差别,并且分析余下的代码的相似性。
代码区分系统通常生成关于两个源代码文件之间的差别的信息。例如,两个源代码文件之间的差别可被输出。然而,这些系统通常仅输出基本信息,诸如描述已经被添加或删除的行的信息。
本文所提供的各实施例是针对其中可利用代码克隆检测技术的集成开发环境的。各个实施例还针对利用代码克隆检测方法的系统和技术。代码克隆检测技术可被用作生成被输出到代码审阅者的语义信息中的初步步骤。
在一个实施例中,一种利用代码克隆检测技术来执行智能源代码处理的方法包括:接收至少两个版本的源代码;以及使用代码克隆检测技术来处理所述源代码的所述版本。基于代码克隆检测技术,可以针对各版本间彼此对应的不同部分做出确定。
本文描述的系统和方法利用代码克隆检测技术来生成关于各版本代码间的改变的语义信息。所述语义信息是各版本间的改变的表征。所述表征被输出到代码审阅者并由此一般性地显著帮助软件开发,具体而言是帮助代码审阅过程。
在一个实施例中,利用代码克隆检测技术来执行智能源代码处理的方法包括:接收指示至少两个版本的源代码之间的对应性的信息。确定版本之间的对应性的表征。所述表征指示各版本之间的语义差别,并且是基于所述对应性的。指示所述表征的信息被输出。在一些实施例中,所述信息被输出到软件开发站,所述软件开发站可被代码审阅者访问。
在一些实施例中,所述系统和方法还生成可视化信息,诸如体系结构图或颜色编码信息来显示关于各版本间的改变的信息。所述可视化信息被输出到代码审阅者以在视觉上帮助理解所述改变。
而且,本文所述的其他系统和方法产生指示对代码的各版本之间的一个或多个改变的重要性级别的信息。在一些实施例中,重要性级别与所述改变的表征有关。在其他实施例中,重要性级别与所述改变的类型有关,例如是例如格式、词汇还是逻辑改变。重要性级别可被表达成一个值(例如整数、分数、百分比等)或被表达成可视化(例如颜色编码)。
在一个实施例中,利用代码克隆检测技术来执行智能源代码处理的方法包括:生成指示至少两个版本的源代码之间的内容改变的类型的确定的信息。确定与所述内容改变相关联的重要性级别。指示所述重要性级别的信息被输出。在一些实施例中,所述改变的重要性级别的可视化被输出。所述输出可被提供到代码审阅者可访问的软件开发站。
在本文中,上面已经呈现了用于实现智能代码区分的实施例中的一些的概览。作为接下来的内容的向导,更详细地描述智能代码区分的各示例性、非限制性实施例和特征。随后,为了附加说明,给出一些非限制性实现和示例,之后是其中可实现这些实施例和/或特征的代表性网络和计算环境。
使用代码克隆检测的智能代码区分
然而,可以理解,本文提供的实施例不旨在受限于任何具体数据库或系统实现。而且,除非另外说明,否则各实施例不旨在受限于任何具体的代码区分或代码克隆实现。
通过对可被用于生成关于不同版本源代码之间的改变的语义信息的智能代码区分设计的一个或多个非限制性方面的进一步描述,现在描述可实现的与示例性方案相关联的非限制性特征。例如,图1是示出智能代码差分系统102的示例性非限制性实现的框图。如在图1中所示,代码差分系统102与一个或多个代码库存储库104、106相关联。在一实施例中,代码库存储库104、106存储一个或多个代码库。
在一个实施例中,代码库存储库104存储源代码的第一版本,而代码库存储库106存储源代码的第二版本。如此,源代码的第一版本110和源代码的第二版本120可被代码差分系统102从代码库存储库104、106接收。然而,所述代码库不需要被存储,而且,例如,两个版本的代码库可以存储在同一代码存储库104或106中或从其接收。
此外,尽管在一些实施例中将源代码的版本的数量指示为2个,然而在一些非限制性实施例中源代码的不同数量的版本可被同时或并行处理。例如,可使用本文描述的系统和方法来并行或依序处理源代码的三个或更多个版本。
而且,源代码的各版本可作为不同类型处理的结果而生成。例如,源代码的所述两个版本可以是由不同开发者在两个不同分支中处理过的同一源代码。作为另一示例,在另一实施例中,源代码的两个版本可以是在时刻t创建的源代码的第一版本,以及在时刻t+x通过修改源代码的第一版本创建的源代码的第二版本。例如,源代码的第一版本可以被创建,而源代码的第二版本可以在稍后基于修改该第一版本以解决源代码中的隐错或者提供其他改进来创建。
代码差分系统102包括预处理器130,预处理器130被配置成预处理源代码的第一和第二版本110、120来准备该源代码以进行代码克隆检测.例如,源代码的第一和第二版本110、120可以被代码差分系统102接收而预处理器130可以将行打断为令牌并且移除源代码的版本110、120之间的非关键差异。
代码差分系统102包括代码克隆检测核心140。代码克隆检测核心140可以执行代码克隆检测和处理的功能。
在一个非限制性实施例中,执行如在2010年4月1日提交的题为“CODE-CLONE DETECTION AND ANALYSIS(代码克隆检测和分析)”的美国专利申请号12/752,942中所描述的代码克隆检测,通过引用将该申请整体纳入于此,然而为了避免疑问,本文描述的各实施例不限于任何特定的代码克隆检测技术。对特定代码克隆检测技术的唯一要求是:能够检测精确的代码克隆和近似差错(near miss)的代码克隆。近似差错的代码克隆是其中在复制后对源代码执行诸如添加、删除和/或编辑等修改的那些代码克隆。
在另一实施例中,代码克隆检测包括标识源代码的这两个版本中彼此相似的一个或多个部分。如此,所述代码克隆检测就能够检测彼此不相同而且彼此仅相似的部分。通过进一步的澄清,代码克隆检测核心140被配置成标识具有不同相似度的代码。如此,代码克隆检测核心140能够检测代码的所述版本中的不同但相似的代码部分(例如,片段)。
例如,在一些实施例中,彼此相似的部分是相对于彼此带有如下修改的部分:删除的代码片段或函数、新的代码片段或函数、复制的代码片段或函数、移动了的函数、重命名了的函数、移动且重命名了的函数、修改了的函数等等。
在一个实施例中,标识相似的代码块包括输出两个代码片段,一个代码片段来自所述代码版本中的一个。然而,本文的实施例不限于此,并且标识相似的代码块可包括输出指示这两个代码块内的这两个代码片段的位置或描述的信息。如图1中所示,相似的代码块(或标识相似代码块的位置或其他信息)被从代码差分协同102输出。在一个实施例中,相似的代码块或标识相似代码块的位置或其他信息被输出到软件开发站150。
在一个实施例中,软件开发站150位于代码差分系统102附近。在其他实施例中,软件开发站150远离代码差分系统102。例如,在某些情况下,代码差分系统102与服务器相关联而软件开发站150与客户机相关联,该客户机通过网络访问代码差分系统102。
访问软件开发站150的代码审阅者可以分析所检测到的代码片段以使该代码审阅者能够关注代码的各版本中已经被改变了的部分。在大代码库或大代码文件中,关注所选部分的能力可以明显减少时间和资源的支出。
在一些实施例中,代码克隆检测核心140还被配置成生成与源代码的两个版本110、120之间的相似度相对应的值。所述值可以是整数、分数或者百分比值。
图2是示出智能代码差分系统202的示例性非限制性实现的另一框图。如参考图1所描述的那样,代码差分系统202包括预处理器130和代码克隆检测核心140。代码差分系统202接收源代码的第一和第二版本110、120。在一个非限制性实施例中,如图2中所示,从代码库存储库104、106接收源代码的第一和第二版本110、120。
如图2中所示,代码差分系统202还包括表征引擎210,该表征引擎210确定源代码的两个版本110、120之间的对应性。所述对应性指示源代码的这两个版本110、120之间的改变,并且与表征相关联。所述表征包括关于源代码的这两个版本110、120之间的改变的信息。
如此,代码克隆检测核心140标识源代码的相似部分并将此信息输出到表征引擎210。表征引擎210提炼该信息以提取描述这两个代码之间的改变的语义含义。所述语义含义由所述表征来描述,所述表征是从表征引擎210输出的。
在各实施例中存在多种不同类型的可能表征。例如,在一种情况下,存在在源代码的第一和第二版本之间的改变的大概6个不同的表征。在一个实施例中,所述不同的表征是:新代码片段或函数(例如,相对于代码的另一个版本,新代码片段或函数被添加到代码的一个版本是所述改变);复制的代码片段或函数(例如,通过复制粘贴复制新代码片段或函数);删除的代码片段或函数(例如,相对于代码的另一版本,在代码的一个版本中删除函数);移动了的函数(例如,函数被从用于代码的一个版本的源文件移动到用于代码的另一版本的源文件);重命名了的函数(例如,签名在该代码中被改变但是内容没有改变);或修改了的函数(例如,签名相同但是内容已经在该代码中被改变)。在各实施例中,表征还可指示已经移动并且重命名了代码摘要或函数的代码摘要或函数。本文中使用的术语“代码摘要”是指函数中连续语句的片段。
上面六个表征被从代码差分系统202输出到软件开发站150。表征引擎210因此可以向软件开发站150(以及访问该软件开发站150的代码审阅者)提供关于源代码的第一和第二版本110、120之间发生了什么类型的改变的信息,而不是仅向代码审阅者提供所述改变并且需要代码审阅者来评估所发生的改变的类型。代码审阅体验因此得以提升并且更高效。
在一个实施例中,如图2中所示,代码差分系统202还包括可视化引擎220。可视化引擎220生成所述表征的可视化。所述可视化是描述表征的文件、以图形方式显示源代码的版本110、120之间的改变或所述表征的体系结构图、和/或与由代码克隆检测核心140所标识的源代码的第一和第二版本110、120之间的改变相关联的函数的颜色编码的列表。
指示所述表征的信息和/或所述表征的可视化分别被从表征引擎210输出到软件开发站150和/或可视化引擎220。
图3是示出智能代码差分系统302的示例性非限制性实现的另一框图。如参考图1所描述的那样,代码差分系统302包括预处理器130和代码克隆检测核心140。代码差分系统302接收源代码的第一和第二版本110、120。在一个非限制性实施例中,如图3中所示,从代码库存储库104、106接收源代码的第一和第二版本110、120。
如在图2中所示,代码差分系统302包括表征引擎210,并且在一些实施例中包括可视化引擎220。如图3中所示,代码差分系统302还包括重要性引擎310,该重要性引擎310被配置成将重要性级别与源代码的两个版本110、120之间的内容改变额类型相关联和/或使重要性级别基于表征引擎210所生成的表征。
在其中内容改变的类型是所述改变的表征的一些非限制性实施例中,重要性级别是从相关联的表征映射的。例如,移动了的函数可以是一表征,该表征随后被映射到重要性级别为琐碎的改变,由此被分配最低的重要性级别。作为另一示例,重命名了的函数可被映射到次要改变,由此被分配中等的重要性级别。作为另一示例,修改了的函数可被映射到重大改变,由此被分配最大的重要性级别。参考先前描述的表征,可以针对复制的代码片段或函数、移动了的函数、重命名了的函数或修改了的函数表征来提供重要性级别信息。
在一些实施例中,代替或附加于基于所述表征来生成重要性级别信息,可基于从源代码的第一到第二版本110、120的内容改变的类型来生成该重要性级别。
例如,在一个实施例中,内容改变的类型是格式改变或评论改变。格式和评论改变可与琐碎改变程度相关联,并且因此被分配最低的重要性级别。
在另一实施例中,内容改变的类型是词汇改变(例如,变量重命名)。词汇改变可与中等改变程度相关联并且因此被分配中等重要性级别。
在另一实施例中,内容改变的类型是逻辑改变。逻辑改变可与重大改变程度相关联并且因此被分配最高的重要性级别。
在一些非限制性实施例中,重要性级别是基于向内容改变的类型分配数字(例如,百分比或其他数值)并且根据所述数字值来将重要性级别分类来确定的。例如,5%改变这一数值将代表琐碎改变,其将被分配最低的重要性级别,而50%(或更多)这一数值将是重大改变,其将被分配最大的重要性级别。此外,在各实施例中,所述数值(例如,上面的数值5%)与其他代码度量结合使用来进一步提升传递重要性级别的能力。例如,在一个非限制性实施例中,如果5%的代码已经在语义上改变但是已经改变的部分是该应用的关键路径(基于测试结果),则该代码的已经改变的实际部分的相对重要性可以通过如下方式来传递:为与该部分代码相关联的代码度量设置值和/或选择特定度量、度量的值、度量的重要性级别等来传递已经改变的那部分代码的重要性。
该重要性级别被从重要性引擎310输出到软件开发站140。在一个实施例中,尽管在图3中未示出,然而可视化引擎220接收重要性引擎310所生成的关于重要性级别的信息,并且将该重要性级别生成为视觉表示并将该视觉表示输出。
图4是示出用于使用代码克隆检测技术来执行智能代码区分的示例性非限制性过程的流程图。在400,在智能代码区分系统处接收源代码的至少两个版本。在410,使用代码克隆检测技术来处理源代码的所述两个版本,并且标识相似的源代码块。通过进一步的澄清,代码克隆检测技术被配置成标识具有不同相似度的源代码。如此,所述代码克隆检测技术能够检测源代码的不同但相似的片段。
在一个实施例中,标识相似的源代码块包括输出两个源代码片段,一个源代码片段来自所述源代码的版本中的一个。然而,本文的实施例不限于此,并且标识相似的源代码块可包括输出指示这两个源代码块内的这两个源代码片段的位置或描述的信息。
在420,通过所述代码区分系统来处理所述源代码片段(或者指示所述源代码片段的位置或描述的信息)。执行对相似源代码块的语义分析以确定这两个源代码块之间的差别的表征。
在一个非限制性实施例中更详细地将步骤420描述如下。在一个实现中,该代码克隆检测工具输出克隆对集合{Pi},i=1,2,…,N,其中Pi=[SAi,SBi],SAi是来自源文件的一个版本的一个代码片段(或函数),而SBi是来自源文件的另一版本的一个代码片段(或函数)。随后,在420,进一步分析每一克隆对Pi。
具体而言,在一种情况下,如果SAi和SBi是完全相同的并且具有相同的位置上下文(例如,在同一源文件中并且具有相同的相邻函数),则忽略此对。
在另一情况下,如果SAi和SBi是完全相同的函数,但是具有不同的位置上下文(例如,在不同源文件中或者具有不同的相邻函数),则将SAi和SBi表征(characterize)为移动了的函数。
在另一情况下,如果SAi和SBi是近似差错克隆函数,则将它们进一步表征如下:如果它们的签名不同但是具有相同的主体内容,则将它们表征为重命名了的函数。如果它们的主体内容不同,但是具有相同的签名,则将它们表征为修改了的函数。进一步,如果它们具有不同的位置上下文,则将它们表征为移动了的函数。如果它们还具有不同的主体内容,则将它们表征为移动且修改了的函数。
此外,也是在420,不在集合{Pi}的列表中的代码片段和函数被进一步分析以获得删除和/或添加的代码片段或函数。删除和/或添加的代码片段或函数被进一步针对13213(例如,通过本地代码库的索引)或1334(例如,通过服务器端的代码库集合的索引)进行搜索来确定它们是否是从当前代码库中的其他地方或甚至从其他代码库中复制来的。
返回图4,如上所述,在一些实施例中,所述表征是基于源代码的这两个版本中的改变的复杂程度和/或类型的。
如此,图4的过程提供了关于发生了什么类型的改变的信息,而不仅仅是向代码审阅者提供所述改变并且要求代码审阅者来评估所发生的改变的类型。因此提升了代码审阅体验。
尽管在图4中未示出,然而在一些实施例中,所述表征作为文件被输出,所述文件描述源代码的各版本之间的差别。然而,文件是一个非限制性示例。
在其他非限制性实施例中,例如,所述表征(或所述表征所指示的改变)被视觉输出。例如,所述可视化可以是体系结构图的可视化,所述体系结构图以图形方式示出对导致所述表征的源代码的两个版本的操作。例如,可以通过指示感兴趣的函数或者示出从源代码的第一版本中的函数到源代码的第二版本中的函数的箭头来在视觉上描绘移动操作。作为另一示例,所述可视化可以是颜色编码图,所述颜色编码图示出来自源代码的这两个版本的不同的颜色编码的代码片段或函数或源代码块。与代码片段或函数或源代码块相关联的颜色被分配给不同的表征(例如,红色可表示移动了的函数,而黄色表示例如复制的代码片段或函数)。代码审阅者可以在视觉上标识源代码的两个版本之间的改变的类型。
尽管描述了6个不同的表征,然而这些表征是非限制性的而且仅仅是示例性的。其他表征也是可能的,并且在一些情况下,根据系统设计者所确定的并且根据代码审阅者的需要,更小数量(或者更大数量)的表征是可能的,其可随时间改变。
图4的过程可以被分为不同的过程,其中每个过程相对于一般而言的代码克隆检测技术(具体而言是代码区分)的传统方法和用途均具有新颖性和独特优势。
例如,图5是示出用于促进智能代码区分的示例性非限制性过程的流程图。在500,接收源代码的两个版本。在510,使用代码克隆检测技术来处理源代码的所述两个版本。在520,使用所述代码克隆检测技术,确定源代码的彼此对应的不同部分。在非限制性实施例中,彼此对应的源代码块是相同的源代码块或相似的源代码块。如此,图5的过程利用代码克隆检测技术来检测源代码的近似匹配(而不仅是源代码的完全匹配)。
所检测到的源代码可从智能代码区分系统输出并由代码审阅者访问。
作为另一示例,图6是示出用于促进智能代码区分的示例性非限制性过程的流程图。在600,接收指示源代码的两个版本之间的对应性的信息。在610,确定所述对应性的表征。在一个非限制性实施例中,所述对应性是指示源代码的所述两个版本之间的实际差别的信息,所述信息被抽象以确定表征。例如,在一个非限制性实施例中,所述对应性是指示代码片段或函数被从第一版本删除以及代码片段或函数添加到第二版本中的信息。作为对比,表征是对所述添加和删除了的代码片段或函数之下的语义含义的抽象。例如,如果所述添加的以及删除的代码片段或函数是相同的代码片段或函数,则所述删除和添加的语义含义被确定为是从一个版本到另一版本的移动,而所述表征随后被确定为上面参考图4所描述的移动(而不仅仅是输出跨越这两个版本的第一文件的删除以及第二文件的添加而没有关于所添加和删除的内容是否相同的附加信息或与之相关联的任何其他语义信息。)
在620,生成所述表征的可视化。如前所述,所述表征是描述版本之间的改变的表征的文件、以图形方式显示版本之间的改变的体系结构图和/或代表源代码的一个版本相对于源代码的另一版本的改变的代码片段或函数的颜色编码的列表。
在630处,输出所述表征。在一些实施例中,驱动表征的标识的改变也被输出。
作为另一示例,图7是示出用于促进智能代码区分的示例性非限制性过程的流程图。在700,生成指示源代码的各版本之间的内容改变的类型的信息。在不同非限制性实施例中,内容改变的类型可以是格式改变或者评论改变;词汇改变(例如,变量重命名)或逻辑改变。进一步,在一些非限制性实施例中,内容改变的类型是源代码的各版本之间的差别的表征。如此,内容改变的类型是移动了的函数、删除了的代码片段或函数或例如上面参考图4-6描述的任意数量的其他类型的代码片段和/或函数。
在710,确定与所述内容改变相关联的重要性级别。在其中内容改变的类型是所述改变的表征的一些非限制性实施例中,重要性级别是从相关联的表征映射的。例如,移动了的函数可以是一表征,该表征被映射到重要性级别为琐碎的改变,由此被分配最低的重要性级别。作为另一示例,重命名了的函数可被映射到次要改变,由此被分配中等的重要性级别。作为另一示例,修改了的函数可被映射到重要改变,由此被分配最大的重要性级别。参考先前描述的表征,可以针对复制的代码片段或函数、移动了的函数、重命名了的函数或修改了的函数表征来提供重要性级别信息。
在一些非限制性实施例中,重要性级别可以是基于向内容改变的类型分配数字(例如,百分比或其他数值)并且根据所述数字值来将重要性级别分类来确定的。例如,5%改变这一数值将代表琐碎改变,其将被分配最低的重要性级别,而50%(或更多)这一数值将表示重大改变,其将被分配最大的重要性级别。
在720,指示所述重要性级别的信息被输出。如参考图4和6描述的,可视觉描绘重要性级别。
转向图8-12,示出了用于智能代码区分的示例性截屏的框图。图8是示出用于使用代码克隆检测技术的智能代码区分的示例性非限制性截屏的框图。如图8中所示,开发者对源代码的多个文件做出了改变。将这些文件与先前的版本进行比较并且在针对每个所编辑的文件的截屏中指示了指示所述改变的信息。此外,相对于先前版本被添加的新文件被指示为“添加的”。
图9是示出用于使用代码克隆检测技术的智能代码区分的示例性非限制性截屏的另一框图。具有本文描述的实施例的代码区分系统输出指示对源代码的各版本的函数层次的、直观的改变的信息,如图9中所示。所述改变被标记为本文中先前描述的六个表征之一。如本文描述的,在各实施例中,该代码区分系统还可指示改变的量。作为示例,在一些实施例中,将版本之间的改变的百分比(或者版本之间的相似度的百分比)连同所述表征一起指示。
图10是示出用于使用代码克隆检测技术的智能代码区分的示例性非限制性截屏的另一框图。该代码区分系统可接收选择文件的输入,诸如如图10所示的对NewFile.cs的选择。在函数、直观层次描述各版本之间的详细改变。例如,对于复制的代码片段或函数(诸如文件newFile.cs中的函数NewFile::CopiedMethod1),该代码区分系统示出复制后的详细改变,包括签名(例如函数定义)改变和内容(例如主体)改变(91%相似度)。
通过点击图标(或感兴趣的文件),还可以以直观的、语义的方式输出详细改变,如图11中所示。在此实施例中,所述改变是隐错修复。
图12是示出用于使用代码克隆检测技术的智能代码区分的示例性非限制性截屏的另一框图。图12示出了一函数(图10中示出的文件newFile.cs中的NewFile::CopiedMethod1)及其复制版本之间的详细改变。
图13是示出用于使用代码克隆检测技术实现智能代码区分的系统体系结构的示例性非限制性实现的框图。如图13中所示,该系统包括代码克隆分析核心1310、集成开发环境(IDE)1320以及应用服务器1350。
代码克隆分析核心1310包括索引器(indexer)1312和解析器(parser)1314来分别执行与代码克隆分析核心1310所接收的代码相关联的索引和解析。提供解析器接口1315。代码克隆分析核心1310包括代码克隆检测器1316,该代码克隆检测器1316被配置成检测相似的代码块。在一个非限制性实施例中,如所提到的,代码克隆检测器1316被配置成参考2010年4月1日提交的题为“CODE-CLONE DETECTION AND ANALYSIS(代码克隆检测和分析)”的美国专利申请号12/752,942所描述的代码克隆检测和处理。除了代码克隆检测能力外,代码克隆检测器1316可被配置成在语义层次上表征代码的不同版本之间的改变和/或一般性地执行本文参考图2的表征引擎210和/或图3的重要性引擎310所描述的任何功能。
代码克隆分析核心1310还包括差别视觉化器1318,该差别视觉化器被配置成生成用于将表征和/或重要性级别视觉化的信息,如先前参考图2的视觉化引擎220所述的。
IDE1320包括扩充的代码审阅用户界面(UI)1322、代码克隆提供器1324,该代码克隆提供器1324包括分析驱动器1326和代码克隆分析核心1328。语言服务组件1340,并且还在1342处提供用于从其他数据提供器接收信息的功能。
现在转向应用服务器1350,如同上面指出的,在一些实施例中,该系统还包括作为应用服务器1350的一部分的代码克隆分析服务1330。代码克隆分析服务1330包括在服务器处的用于提供智能代码区分的代码克隆分析核心1332、代码克隆搜索引擎1334、以及代码克隆检测引擎1336。应用服务器1350还可包括现有服务1350以及任务管理器1354。
当应用服务器1350包括代码克隆分析服务1330时,大规模代码库(例如,来自多个代码库的数千万或数亿行代码)的索引可被处理并且用户可在更大范围内搜索代码克隆。这允许了以下可能性:确定其他解决方案中作为该源代码的复制的代码片段或函数,尽管该代码片段或函数在当前解决方案中可能是新的。这进一步便利了开发者/代码审阅者更好地理解代码改变的上下文的能力。在没有代码克隆分析服务1330的情况下,利用代码克隆分析核心1310和IDE1320在客户机处执行智能代码区分,并且可以处理相对小的代码库,然而,这样的解决方案特别轻量且方便。
示例性联网以及分布式环境
本领域技术人员能够理解,此处所述的智能代码区分系统和方法的各实施例可结合任何计算机或其他客户机或服务器设备来实现,该任何计算机或其他客户机或服务器设备可作为计算机网络的一部分来部署或者被部署在分布式计算环境中,并且可连接到任何种类的数据存储。在这一点上,此处描述的各实施例可在具有任何数量的存储器或存储单元的、并且任何数量的应用和进程跨任何数量的存储单元发生的任何计算机系统或环境中实现。这包括但不限于具有部署在具有远程或本地存储的网络环境或分布式计算环境中的服务器计算机和客户机计算机的环境。
分布式计算通过计算设备和系统之间的通信交换提供了计算机资源和服务的共享。这些资源和服务包括信息的交换、对于诸如文件等对象的高速缓存存储和盘存储。这些资源和服务还包括多个处理单元之间的处理能力共享以便进行负载平衡、资源扩展、处理专门化,等等。分布式计算利用网络连接,从而允许客户机利用它们的集体力量来使整个企业受益。就此,各种设备可具有可如参考本发明的各实施例描述地参与所述机制的应用、对象或资源。
图14提供了示例性的联网或分布式计算环境的示意图。该分布式计算环境包括计算对象1410、1412等以及计算对象或设备1420、1422、1424、1426、1428等,这些计算对象或设备可包括如应用1430、1432、1434、1436、1438所表示的程序、方法、数据存储、可编程逻辑等。可以理解,计算对象1410、1412等以及计算对象或设备1420、1422、1424、1426、1428等可包括不同的设备,诸如个人数字助理(PDA)、音频/视频设备、移动电话、MP3播放器、个人计算机、膝上型计算机等。
每一个计算对象1410、1412等以及计算对象或设备1420、1422、1424、1426、1428等可通过通信网络1440直接或间接与一个或多个其他计算对象1410、1412等以及计算对象或设备1420、1422、1424、1426、1428等进行通信。即使在图14中被示为单个元件,但通信网络1440可包括向图14的系统提供服务的其他计算对象或计算设备,和/或可表示多个互连网络(未示出)。每个计算对象1410、1412等或计算对象或设备1420、1422、1424、1426、1428等还可以包含应用,诸如可以利用API或其他对象、软件、固件和/或硬件的、适于与本发明的各实施例通信或实现本发明的各实施例的应用1430、1432、1434、1436、1438。
存在支持分布式计算环境的各种系统、组件和网络配置。例如,计算系统可由有线或无线系统、本地网络或广泛分布的网络连接在一起。当前,许多网络被耦合至因特网,后者为广泛分布的计算提供了基础结构并包含许多不同的网络,但任何网络基础结构都可用于便于与如各实施例中所描述的代码差分系统的示例性通信。
由此,可使用诸如客户机/服务器、对等、或混合体系结构之类的网络拓扑结构和网络基础结构的主机。“客户机”是使用与它无关的另一类或组的服务的一个类或组中的成员。客户机可以是进程,即大致上是请求由另一程序或进程提供的服务的一组指令或任务。客户机进程利用所请求的服务,而不必“知道”有关其他程序或服务本身的任何工作细节。
在客户机/服务器体系结构中,尤其在联网系统中,客户机通常是访问另一计算机(例如,服务器)所提供的共享网络资源的计算机。在图14的图示中,作为非限制性示例,计算对象或设备1420、1422、1424、1426、1428等可被认为是客户机而计算对象1410、1412等可被认为是服务器,其中计算对象1410、1412等担当提供数据服务的服务器,诸如从客户机计算对象或设备1420、1422、1424、1426、1428等接收数据、存储数据、处理数据、向客户机计算对象或设备1420、1422、1424、1426、1428发送数据等,但任何计算机都可取决于环境而被认为是客户机、服务器或两者。这些计算设备中的任一个可以处理数据,或请求可指示如此处参考一个或多个实施例描述的差分技术的业务服务或任务。
服务器通常是可通过诸如因特网或无线网络基础结构之类的远程网络或本地网络访问的远程计算机系统。客户机进程可在第一计算机系统中活动,而服务器进程可在第二计算机系统中活动,它们通过通信介质相互通信,由此提供分布式功能并允许多个客户机利用服务器的信息收集能力。按照此处所描述的技术来利用的任何软件对象可以被单独提供或分布在多个计算设备或对象上。
在其中通信网络1440或总线例如是因特网的网络环境中,计算对象1410、1412等可以是其他计算对象或设备1420、1422、1424、1426、1428等通过诸如超文本传输协议(HTTP)等多种已知协议中的任一种与其通信的web服务器。担当服务器的计算对象1410、1412等还可用作客户机,例如计算对象或设备1420、1422、1424、1426、1428等,这是分布式计算环境的特性。
示例性计算设备
如上所述,有利的是,此处所描述的技术可适用于其中期望执行代码差分的任何设备。因此,应当理解,构想了结合各实施例使用的所有种类的手持式、便携式和其它计算设备和计算对象。因此,以下在图15中所述的通用远程计算机只是计算设备的一个示例。
尽管并非所需,但各实施例可部分地经由操作系统来实现,以供设备或对象的服务开发者使用和/或被包括在用于执行此处所述的各实施例的一个或多个功能方面的应用软件内。软件可以在由诸如客户机工作站、服务器或其它设备等一个或多个计算机执行的诸如程序模块等计算机可执行指令的通用上下文中描述。本领域的技术人员可以理解,计算机系统具有可用于传递数据的各种配置和协议,并且由此没有特定配置或协议应当被认为是限制性的。
因此,附图15示出了其中可实现各实施例的一个或多个方面的合适的计算系统环境1500的一个示例,尽管如上所述,计算系统环境1500仅为合适的计算环境的一个示例,并非对使用范围或功能提出任何限制。也不应当将计算系统环境1500解释为对在示例性计算系统环境1500中所示的组件中的任何一个或其组合有任何依赖或要求。
参考图15,用于实现一个或多个实施例的示例性远程设备包括计算机1510形式的通用计算设备。计算机1510的组件可包括,但不限于,处理单元1520、系统存储器1530、以及将包括系统存储器的各种系统组件耦合到处理单元1522的系统总线1520。
计算机1510通常包括各种计算机可读介质,并且可以是可由计算机1510访问的任何可用介质。系统存储器1530可包括诸如只读存储器(ROM)和/或随机存取存储器(RAM)之类的易失性和/或非易失性存储器形式的计算机存储介质。计算机可读介质还可以包括但不限于磁存储设备(例如,硬盘、软盘、磁带)、光盘(例如,紧致盘(CD)、数字多功能盘(DVD))、智能卡、以及闪存设备(例如,卡、棒、钥匙驱动器)。作为示例而非限制,系统存储器1530还可包括操作系统、应用程序、其他程序模块、以及程序数据。
用户可通过输入设备1540向计算机1510输入命令和信息。监视器或其他类型的显示设备也经由诸如输出接口1550之类的接口连接到系统总线1522。除监视器以外,计算机还可包括诸如扬声器和打印机之类的其他外围输出设备,它们可通过输出接口1550连接。
计算机1510可使用到一个或多个其他远程计算机(诸如远程计算机1570)的逻辑连接在联网或分布式环境中操作。远程计算机1570可以是个人计算机、服务器、路由器、网络PC、对等设备或其他常见网络节点、或者任何其他远程媒体消费或传输设备,并且可包括以上关于计算机1510所述的任何或全部元件。图15所示的逻辑连接包括诸如局域网(LAN)或广域网(WAN)之类的网络1572,但也可包括其他网络/总线。这些联网环境在家庭、办公室、企业范围的计算机网络、内联网和因特网中是常见的。
如上所述,尽管结合各种计算设备和网络体系结构描述了各示例性实施例,但底层概念可被应用于任何网络系统和任何计算设备或系统。
而且,存在实现相同或相似功能的多种方法,例如适当的应用编程接口(API)、工具箱、驱动器源代码、操作系统、控件、独立或可下载软件对象等,它们使得应用和服务能够使用此处提供的技术。由此,此处的各实施例从API(或其他软件对象)的观点以及从实现如本文描述的区分技术的一个或多个方面的软件或硬件对象构想。由此,此处所述的各实施例可具有完全采用硬件、部分采用硬件并且部分采用软件、以及采用软件的方面。
本文中所使用的词语“示例性”意味着用作示例、实例、或说明。为避免疑惑,本文所公开的主题不限于这些示例。另外,在此所述的被描述为“示例性”的任意方面或设计并不一定要被解释为相比其它方面或设计更优选或有利。此外,在使用术语“包括”、“具有”、“包含”和其他相似词语的程度上,为避免疑惑,这些术语旨在以相似于术语“包括”作为开放的过渡词的方式是包含性的而不排除任何附加或其他元素。
如所述的,此处所述的各种技术可结合硬件或软件或,在适当时,以两者的组合来实现。如此处所使用的,术语“组件”、“系统”等同样旨在指计算机相关实体,或者是硬件、硬件和软件的组合、软件或者是执行中的软件。例如,组件可以是,但不限于是,在处理器上运行的进程、处理器、对象、可执行码、执行的线程、程序和/或计算机。作为说明,在计算机上运行的应用和计算机都可以是组件。一个或多个组件可以驻留在进程和/或执行线程中,并且组件可以位于一个计算机内和/或分布在两个或更多计算机之间。
如前所述的系统已经参考若干组件之间的交互来描述。可以理解,这些系统和组件可包括组件或指定的子组件、某些指定的组件或子组件和/或附加的组件,并且根据上述内容的各种置换和组合。子组件还可作为通信地耦合到其他组件的组件来实现,而不是被包括在父组件内(层次性)。另外,应注意到一个或多个组件可被组合成提供聚集功能的单个组件,或被分成若干单独的子组件,且诸如管理层等任何一个或多个中间层可被设置成通信耦合到这样的子组件以便提供集成功能。此处所述的任何组件也可与一个或多个此处未专门描述的但本领域技术人员一般已知的其他组件进行交互。
鉴于以上所述的示例性系统,参考各附图的流程图还可理解根据所述的主题实现的方法。尽管为了说明简洁起见,作为一系列框示出和描述的方法,但是应当理解,各实施例不仅仅限于框的次序,因为一些框可以与此处所描绘和描述的框不同的次序发生和/或与其他框并发地发生。尽管经由流程图示出了非顺序或分支的流程,但可以理解,可实现达到相同或相似结果的各种其他分支、流程路径和框的次序。此外,并非全部所示的框都是实现下面所述的方法所必需的。
除此处所述的各实施例以外,应当理解,可使用其他相似实施例,或者可对所述实施例作出修改和添加以便执行对应实施例的相同或等效功能而不背离这些实施例。此外,多个处理芯片或多个设备可共享此处所述的一个或多个功能的性能,并且相似地,存储可跨多个设备实现。因此,本发明不应限于任何单个实施例,而是应当根据所附权利要求书的广度、精神和范围来解释。
Claims (20)
1.一种利用代码克隆检测来执行智能代码差分的方法,包括:
通过至少一个处理器执行指令,响应于执行,所述指令导致操作被执行,所述操作包括:
接收源代码的至少两个版本;
使用代码克隆检测来处理所述源代码的所述至少两个版本;以及
至少基于所述代码克隆检测的输出来确定源代码的所述至少两个版本中的彼此对应的不同部分。
2.如权利要求1所述的方法,其特征在于,还包括输出代码的至少两个部分,其中代码的所述至少两个部分分别对应于源代码的所述至少两个版本中的彼此对应的部分。
3.如权利要求1所述的方法,其特征在于,源代码的所述至少两个版本包括源代码的第一版本和所述源代码的第二版本,并且其中所述处理包括处理第一分支中的所述第一版本以及处理第二分支中的所述第二版本。
4.如权利要求1所述的方法,其特征在于,所述确定包括确定所述源代码的所述至少两个版本中的彼此具有大于预定相似度水平的相似度水平的不同部分。
5.如权利要求1所述的方法,其特征在于,还包括通过网络从客户机设备访问在服务器中提供的代码克隆检测。
6.一种利用代码克隆检测来执行智能代码差分的方法,包括:
通过至少一个计算设备,接收指示源代码的至少两个版本之间的对应性的第一信息;
基于代码克隆检测技术,确定源代码的所述至少两个版本之间的所述对应性的表征,其中所述表征包括语义信息;以及
输出指示所述表征的第二信息。
7.如权利要求6所述的方法,其特征在于,确定所述表征包括确定以下各项中的至少一个:新代码片段或函数、复制的代码片段或函数、移动了的函数、重命名了的函数、修改了的函数、删除了的代码片段或函数或既移动又重命名了的函数。
8.如权利要求6所述的方法,其特征在于,确定所述表征包括确定移动了的函数,并且其中确定所述表征包括确定第一函数被从源代码的所述至少两个版本中的第一版本中删除,并且确定所述函数被添加到所述源代码的所述至少两个版本中的第二版本。
9.如权利要求6所述的方法,其特征在于,还包括生成所述表征的可视化。
10.如权利要求9所述的方法,其特征在于,生成所述可视化包括生成用一种或多种颜色来颜色编码的源代码的所述至少两个版本的一部分,其中所述一种或多种颜色与一个或多个表征相关联。
11.如权利要求9所述的方法,其特征在于,生成所述可视化包括生成图,所述图包括表示一个或多个不同表征的一个或多个分量。
12.一种利用代码克隆检测技术的智能代码差分系统,包括:
克隆检测组件,被配置成生成指示对在源代码的至少两个版本之间的内容改变的类型的确定的信息;以及
重要性引擎,被配置成确定与所述源代码的所述至少两个版本之间的所述内容改变的所述类型相关联的重要性级别,并且输出指示所述重要性级别的信息。
13.如权利要求12所述的系统,其特征在于,所述重要性级别至少基于所述源代码的所述至少两个版本之间的所述内容改变的所述类型是格式改变、词汇级改变还是逻辑改变。
14.如权利要求13所述的系统,其特征在于,格式改变对应于第一重要性级别,词汇改变对应于第二重要性级别,而逻辑改变对应于第三重要性级别,其中所述第三重要性级别大于所述第二重要性级别,而所述第二重要性级别大于所述第一重要性级别。
15.如权利要求12所述的系统,其特征在于,还包括表征引擎,所述表征引擎被配置成确定源代码的所述至少两个版本之间的内容改变的类型的表征,其中所述表征包括语义信息。
16.如权利要求15所述的系统,其特征在于,所述重要性引擎被进一步配置成至少基于所述表征来确定所述重要性级别。
17.如权利要求16所述的系统,其特征在于,所述重要性引擎被进一步配置成向所述表征分配值。
18.如权利要求17所述的系统,其特征在于,所述值是百分比。
19.如权利要求16所述的系统,其特征在于,所述表征是以下各项中的至少一个:新代码片段或函数、复制的代码片段或函数、移动了的函数、重命名了的函数、修改了的函数、删除了的代码片段或函数或既移动又重命名了的函数。
20.如权利要求12所述的系统,其特征在于,还包括可视化引擎,所述可视化引擎被配置成生成并输出指示所述重要性级别的信息的可视化。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2010/079801 WO2012079230A1 (en) | 2010-12-15 | 2010-12-15 | Intelligent code differencing using code clone detection |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103262047A true CN103262047A (zh) | 2013-08-21 |
CN103262047B CN103262047B (zh) | 2016-11-16 |
Family
ID=46243972
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201080070705.0A Active CN103262047B (zh) | 2010-12-15 | 2010-12-15 | 使用代码克隆检测的智能代码差分 |
Country Status (6)
Country | Link |
---|---|
EP (1) | EP2652621A4 (zh) |
JP (1) | JP5775599B2 (zh) |
KR (1) | KR101732764B1 (zh) |
CN (1) | CN103262047B (zh) |
CA (2) | CA2967251C (zh) |
WO (1) | WO2012079230A1 (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104407872A (zh) * | 2014-12-04 | 2015-03-11 | 北京邮电大学 | 代码克隆的检测方法 |
CN105446723A (zh) * | 2014-09-02 | 2016-03-30 | 国际商业机器公司 | 用于标识源代码版本之间的语义区别的方法和装置 |
CN106919403A (zh) * | 2017-03-16 | 2017-07-04 | 杭州承方信息科技有限公司 | 云环境下基于Java字节码的多粒度代码克隆检测方法 |
CN106951743A (zh) * | 2017-03-22 | 2017-07-14 | 上海英慕软件科技有限公司 | 一种软件代码侵权检测方法 |
CN108701067A (zh) * | 2016-03-01 | 2018-10-23 | 洋马株式会社 | 终端装置以及软件改写程序 |
CN109558314A (zh) * | 2018-11-09 | 2019-04-02 | 国网四川省电力公司电力科学研究院 | 一种面向Java源代码克隆检测的方法 |
CN110737469A (zh) * | 2019-09-29 | 2020-01-31 | 南京大学 | 一种功能粒度上基于语义信息的源代码相似度评估方法 |
CN112148359A (zh) * | 2020-10-10 | 2020-12-29 | 中国人民解放军国防科技大学 | 一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质 |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101568224B1 (ko) | 2014-12-26 | 2015-11-11 | 고려대학교 산학협력단 | 소프트웨어 취약점 분석방법 및 분석장치 |
CN104572471B (zh) * | 2015-01-28 | 2017-10-03 | 杭州电子科技大学 | 一种基于索引的Java软件代码克隆检测方法 |
US10459704B2 (en) | 2015-02-10 | 2019-10-29 | The Trustees Of Columbia University In The City Of New York | Code relatives detection |
KR101780233B1 (ko) | 2016-04-26 | 2017-09-21 | 고려대학교 산학협력단 | 소프트웨어의 코드 클론 탐지 장치 및 방법 |
US10191737B2 (en) | 2016-06-29 | 2019-01-29 | Accenture Global Solutions Limited | Program code comparison and reporting |
US10621195B2 (en) | 2016-09-20 | 2020-04-14 | Microsoft Technology Licensing, Llc | Facilitating data transformations |
US10706066B2 (en) | 2016-10-17 | 2020-07-07 | Microsoft Technology Licensing, Llc | Extensible data transformations |
US10776380B2 (en) | 2016-10-21 | 2020-09-15 | Microsoft Technology Licensing, Llc | Efficient transformation program generation |
US11163788B2 (en) | 2016-11-04 | 2021-11-02 | Microsoft Technology Licensing, Llc | Generating and ranking transformation programs |
US11170020B2 (en) | 2016-11-04 | 2021-11-09 | Microsoft Technology Licensing, Llc | Collecting and annotating transformation tools for use in generating transformation programs |
US10402311B2 (en) | 2017-06-29 | 2019-09-03 | Microsoft Technology Licensing, Llc | Code review rebase diffing |
SE1751167A1 (en) * | 2017-09-20 | 2019-03-21 | Empear Ab | Identifying parts of a software code that are associated via alteration |
CN109828785B (zh) * | 2019-01-23 | 2022-04-12 | 复旦大学 | 一种采用gpu加速的近似代码克隆检测方法 |
US11048487B1 (en) * | 2019-12-27 | 2021-06-29 | The Mathworks, Inc. | Syntactical change-resistant code generation |
KR102282705B1 (ko) * | 2019-12-30 | 2021-07-29 | 한양대학교 에리카산학협력단 | 어셈블리 코드에서 패치된 소스 코드 구성 방법 및 그 장치 |
CN111240740B (zh) * | 2020-01-23 | 2021-09-17 | 复旦大学 | 基于演化历史分析的代码克隆危害性评估方法 |
KR102318714B1 (ko) | 2020-01-31 | 2021-10-28 | 고려대학교 산학협력단 | 바이너리 코드 클론 기반 소프트웨어 취약점 탐지를 위한 컴퓨터 프로그램 |
JP2022023523A (ja) | 2020-07-27 | 2022-02-08 | 富士通株式会社 | 警告マッチングプログラム、警告マッチング方法及び警告マッチング装置 |
CN112215013B (zh) * | 2020-11-02 | 2022-04-19 | 天津大学 | 一种基于深度学习的克隆代码语义检测方法 |
CN116302089B (zh) * | 2023-05-23 | 2023-08-18 | 华中科技大学 | 基于图片相似度的代码克隆检测方法、系统及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1926513A (zh) * | 2004-03-02 | 2007-03-07 | 西门子公司 | 用于通过数据传输更新计算机程序的方法和数据处理设备 |
JP2009176064A (ja) * | 2008-01-24 | 2009-08-06 | Fuji Electric Holdings Co Ltd | ソフトウェアリファクタリング支援装置および方法 |
JP2010067188A (ja) * | 2008-09-12 | 2010-03-25 | Internatl Business Mach Corp <Ibm> | プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08221265A (ja) * | 1995-02-10 | 1996-08-30 | Toshiba Corp | ソフトウエア開発支援装置 |
JP2006018693A (ja) * | 2004-07-02 | 2006-01-19 | Fujitsu Ltd | 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法 |
JP2006277127A (ja) * | 2005-03-28 | 2006-10-12 | Canon Inc | 修正プログラムの比較方法 |
JP4134218B2 (ja) * | 2006-11-16 | 2008-08-20 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 回帰テストにおいて実施すべきテストケースの優先度を決定するための情報処理装置、方法、及びプログラム |
JP2008197982A (ja) * | 2007-02-14 | 2008-08-28 | Toshiba Corp | ソースコード保護装置 |
JP2009199172A (ja) * | 2008-02-19 | 2009-09-03 | Hitachi Ltd | 情報処理システム、プログラム中の類似箇所特定方法、及びプログラム |
-
2010
- 2010-12-15 CN CN201080070705.0A patent/CN103262047B/zh active Active
- 2010-12-15 KR KR1020137015514A patent/KR101732764B1/ko active IP Right Grant
- 2010-12-15 JP JP2013543486A patent/JP5775599B2/ja active Active
- 2010-12-15 EP EP10860883.7A patent/EP2652621A4/en not_active Ceased
- 2010-12-15 CA CA2967251A patent/CA2967251C/en active Active
- 2010-12-15 WO PCT/CN2010/079801 patent/WO2012079230A1/en active Application Filing
- 2010-12-15 CA CA2820758A patent/CA2820758A1/en not_active Abandoned
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1926513A (zh) * | 2004-03-02 | 2007-03-07 | 西门子公司 | 用于通过数据传输更新计算机程序的方法和数据处理设备 |
JP2009176064A (ja) * | 2008-01-24 | 2009-08-06 | Fuji Electric Holdings Co Ltd | ソフトウェアリファクタリング支援装置および方法 |
JP2010067188A (ja) * | 2008-09-12 | 2010-03-25 | Internatl Business Mach Corp <Ibm> | プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム |
Non-Patent Citations (1)
Title |
---|
于冬琦 等: "基于相似性度量的面向对象程序方法级克隆侦测", 《电子学报》, vol. 38, no. 2, 28 February 2010 (2010-02-28) * |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105446723A (zh) * | 2014-09-02 | 2016-03-30 | 国际商业机器公司 | 用于标识源代码版本之间的语义区别的方法和装置 |
CN105446723B (zh) * | 2014-09-02 | 2018-11-23 | 国际商业机器公司 | 用于标识源代码版本之间的语义区别的方法和装置 |
CN104407872A (zh) * | 2014-12-04 | 2015-03-11 | 北京邮电大学 | 代码克隆的检测方法 |
CN104407872B (zh) * | 2014-12-04 | 2018-01-16 | 北京邮电大学 | 代码克隆的检测方法 |
CN108701067A (zh) * | 2016-03-01 | 2018-10-23 | 洋马株式会社 | 终端装置以及软件改写程序 |
CN106919403B (zh) * | 2017-03-16 | 2019-12-13 | 杭州鹿径科技有限公司 | 云环境下基于Java字节码的多粒度代码克隆检测方法 |
CN106919403A (zh) * | 2017-03-16 | 2017-07-04 | 杭州承方信息科技有限公司 | 云环境下基于Java字节码的多粒度代码克隆检测方法 |
CN106951743A (zh) * | 2017-03-22 | 2017-07-14 | 上海英慕软件科技有限公司 | 一种软件代码侵权检测方法 |
CN109558314A (zh) * | 2018-11-09 | 2019-04-02 | 国网四川省电力公司电力科学研究院 | 一种面向Java源代码克隆检测的方法 |
CN109558314B (zh) * | 2018-11-09 | 2021-07-27 | 国网四川省电力公司电力科学研究院 | 一种面向Java源代码克隆检测的方法 |
CN110737469A (zh) * | 2019-09-29 | 2020-01-31 | 南京大学 | 一种功能粒度上基于语义信息的源代码相似度评估方法 |
CN110737469B (zh) * | 2019-09-29 | 2021-09-03 | 南京大学 | 一种功能粒度上基于语义信息的源代码相似度评估方法 |
CN112148359A (zh) * | 2020-10-10 | 2020-12-29 | 中国人民解放军国防科技大学 | 一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质 |
Also Published As
Publication number | Publication date |
---|---|
KR101732764B1 (ko) | 2017-05-04 |
EP2652621A4 (en) | 2014-08-20 |
JP5775599B2 (ja) | 2015-09-09 |
CN103262047B (zh) | 2016-11-16 |
CA2967251C (en) | 2020-04-07 |
WO2012079230A1 (en) | 2012-06-21 |
CA2967251A1 (en) | 2012-06-21 |
JP2013546090A (ja) | 2013-12-26 |
KR20140001951A (ko) | 2014-01-07 |
CA2820758A1 (en) | 2012-06-21 |
EP2652621A1 (en) | 2013-10-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103262047A (zh) | 使用代码克隆检测的智能代码差分 | |
Khan et al. | Sharing interoperable workflow provenance: A review of best practices and their practical application in CWLProv | |
Lastra-Díaz et al. | HESML: A scalable ontology-based semantic similarity measures library with a set of reproducible experiments and a replication dataset | |
Simmhan et al. | A survey of data provenance techniques | |
CN102171679B (zh) | 用于声明性编程语言的基于树的有向图编程结构 | |
CN110134671B (zh) | 一种面向溯源应用的区块链数据库数据管理系统及方法 | |
US8701087B2 (en) | System and method of annotating class models | |
CN101739335A (zh) | 建议的应用评估系统 | |
Fill | SeMFIS: a flexible engineering platform for semantic annotations of conceptual models | |
CN102171654A (zh) | 具有可扩展句法的编程语言 | |
CN104412227A (zh) | 基于查询的软件系统设计表示 | |
CN104778033A (zh) | 一种积木式软件的构建方法和装置 | |
EP3732587B1 (en) | Systems and methods for context-independent database search paths | |
CN111949800A (zh) | 一种开源项目知识图谱的建立方法和系统 | |
WO2023087721A1 (zh) | 一种业务处理模型生成方法、装置、电子设备和存储介质 | |
Zinn | The language resource switchboard | |
CN114168149A (zh) | 一种数据转换方法及装置 | |
Schröder et al. | An empirical investigation of command-line customization | |
Lochmann et al. | An integrated view on modeling with multiple domain-specific languages | |
Cao et al. | Workflow difference detection based on basis paths | |
Henttonen et al. | Open source based tools for sharing and reuse of software architectural knowledge | |
Leonard et al. | SQL Server 2012 integration services design patterns | |
Garg et al. | Insight to model clone’s differentiation, classification, and visualization | |
US11829340B1 (en) | Systems and methods for generating data transfers using programming language-agnostic data modeling platforms | |
Coetzee et al. | Goal-based composition of scalable hybrid analytics for heterogeneous architectures |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150727 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20150727 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: Washington State Applicant before: Microsoft Corp. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |