CN103019666A - 源代码比较设备、源代码比较方法和源代码比较程序 - Google Patents
源代码比较设备、源代码比较方法和源代码比较程序 Download PDFInfo
- Publication number
- CN103019666A CN103019666A CN2012103109308A CN201210310930A CN103019666A CN 103019666 A CN103019666 A CN 103019666A CN 2012103109308 A CN2012103109308 A CN 2012103109308A CN 201210310930 A CN201210310930 A CN 201210310930A CN 103019666 A CN103019666 A CN 103019666A
- Authority
- CN
- China
- Prior art keywords
- difference
- inscape
- source code
- analysis result
- feature differentiation
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Abstract
一种源代码比较设备包括差异提取部,提取修正前源代码与修正后源代码之间的差异;语法分析部,将提取的差异分割为与能够在源代码中使用的构成要素相对应的分割差异,并产生语法分析结果,所述语法分析结果将所述分割差异与对应于所述分割差异的构成要素相关联;特征分析部,针对语法分析结果中包括的每个分割差异来设置特征区分和输出部;以及输出部,输出将所述分割差异与针对所述分割差异设置的特征区分相关联的比较结果。如果语法分析结果中包括的构成要素被包括在将构成要素与特征区分相关联的修正历史中,则特征分析部针对与语法分析结果中的构成要素相关联的分割差异,设置与修正历史中的构成要素相关联的特征区分。
Description
引用并入
本申请要求享有2011年9月20日在日本提交的No.2011-204924的日本专利申请的优先权,在此并入其公开的全部以供参考。
技术领域
本发明涉及一种源代码比较装置、源代码比较方法及源代码比较程序。
背景技术
常规上,对于确认修正源代码内容的技术而言,例如使用如下方法:使用UNIXTM的diff命令,以行为单位比较修正前后的文本源代码,并显示源代码之间的差异。然而,仅利用这种文本差异,用户自己还必须确定每个修正对应于哪个函数或特征。因此,如果存在与多个特征相关的混合修正,则变得难以将修正位置与特征相关联。存在用于将修正位置与特征相关联的技术,例如在下述专利文献1和2中公开的技术。
专利文献1中公开的技术将未修正源代码与修正后源代码相比较来提取修正位置,并通过使用源代码的语法分析结果来将修正位置与变量名或函数名相关联。专利文献2中公开的技术预先按照等级构造源代码,以将源代码分为程序、模块、文件和函数中的各个等级,并通过以程序、模块、文件和函数的相应等级单位将未修正源代码与修改后源代码相比较来将修正位置与等级特征相关联。
[专利文献1]JP08-194611A
[专利文献2]JP2006-277127A
在高于变量名和函数名的较高等级中,与专利文献1一样,仅将语法分析结果用于与模块、文件等相关联是不充分的。此外,在专利文献2中,因为必需预先定义和预先登记程序、模块等的等级结构,如果例如设计信息不可用,则可以设想在添加信息期间会遗漏登记,从而难以进行管理。
发明内容
本发明被配置为解决上述问题,以及本发明的示例性目标在于,提供一种源代码比较设备、源代码比较方法和源代码比较程序,能够正确而简单地将修正位置与特征相关联。
根据本发明的一个方面,提供了一种源代码比较设备,包括:差异提取部,提取修正前源代码与修正后源代码之间的差异;语法分析部,将提取的差异分割为与能够在源代码中使用的构成要素相对应的分割差异,并产生将所述分割差异与对应于所述分割差异的构成要素相关联的语法分析结果;特征分析部,针对语法分析结果中包括的每个分割差异设置特征区分;以及输出部,输出将所述分割差异与针对所述分割差异设置的特征区分相关联的比较结果,其中,所述特征分析部被配置为:如果语法分析结果中包括的构成要素被包括在将构成要素与特征区分相关联的修正历史中,则针对与语法分析结果中的构成要素相关联的所述分割差异,设置与修正历史中的构成要素相关联的特征区分。
根据本发明的另一方面,提供了一种源代码比较方法,包括:差异提取步骤,提取修正前源代码与修正后源代码之间的差异;语法分析步骤,将提取的差异分割为与能够在源代码中使用的构成要素相对应的分割差异,并产生将所述分割差异与对应于所述分割差异的构成要素相关联的语法分析结果;特征分析步骤,针对语法分析结果中包括的每个分割差异设置特征区分;以及输出步骤,输出将所述分割差异与针对所述分割差异设置的特征区分相关联的比较结果,其中,所述特征分析步骤被配置为:如果语法分析结果中包括的构成要素被包括在将构成要素与特征区分相关联的修正历史中,则针对与语法分析结果中的构成要素相关联的所述分割差异,设置与修正历史中的构成要素相关联的特征区分。
根据本发明的再一方面,提供了一种存储源代码比较程序的计算机可读介质,所述源代码比较程序包括用于使计算机执行处理的指令,所述处理包括以下步骤:差异提取步骤,提取修正前源代码与修正后源代码之间的差异;语法分析步骤,将提取的差异分割为与能够在源代码中使用的构成要素相对应的分割差异,并产生将所述分割差异与对应于所述分割差异的构成要素相关联的语法分析结果;特征分析步骤,针对语法分析结果中包括的每个分割差异设置特征区分;以及输出步骤,输出将所述分割差异与针对所述分割差异设置的特征区分相关联的比较结果,其中,所述特征分析步骤被配置为:如果语法分析结果中包括的构成要素被包括在将构成要素与特征区分相关联的修正历史中,则针对与语法分析结果中的构成要素相关联的所述分割差异,设置与修正历史中的构成要素相关联的特征区分。
根据本发明,能够正确而简单地将修正位置与特征相关联。
附图说明
图1是对根据本发明示例性实施例的源代码比较设备的配置进行举例说明的图;
图2是对语法分析结果进行举例说明的图;
图3是对分割后语法分析结果进行举例说明的图;
图4是对修正历史表的数据配置进行举例说明的图;
图5是对临时特征分析结果进行举例说明的图;
图6是对特征分析结果进行举例说明的图;
图7是对修正历史表的另一数据配置进行举例说明的图;
图8是对比较结果进行举例说明的图;
图9是对另一比较结果进行举例说明的图;
图10是用于说明比较未修正与修正后源代码期间的操作的流程图;
图11是对比较未修正与修正后源代码期间的数据转变的状态进行举例说明的图;
图12是示出了当根据修改的适当性检查部检查修正适当性的示例的模式图;
图13是对按照每个特征区分计算得到的每个构成要素的修正率进行举例说明的图;
图14是以特征区分的构成要素为单位对过去修正率与当前修正状况之间的相应关系进行举例说明的图;
图15是示出了将修正历史写入源代码以保存修正历史的示例的模式图。
具体实施方式
以下,将参考附图说明根据本发明的源代码比较设备、源代码比较方法和源代码比较程序。
首先,参考图1,说明示例性实施例中的源代码比较设备的功能配置。例如,源代码比较设备1功能上具有差异提取部11、语法分析部12、特征分析部13、修正历史登记部14和比较结果输出部15。
这里,源代码比较设备1物理上被配置为包括例如CPU(中央处理单元)、存储器和输入和输出接口。存储器包括如下元件:例如ROM(只读存储器)和用于存储要由CPU处理的程序和数据的HDD(硬盘驱动器)、主要用作控制进程的各个工作区的RAM(随机存取存储器)等。这些元件彼此经由总线相连。CPU可以通过如下步骤实现源代码比较设备1中的每个部件的功能:执行ROM中存储的程序,并处理经由输入和输出接口接收的源代码和消息、加载到RAM中的数据等。
差异提取部11将未修正源代码与修正后源代码相比较,以提取差异。对于比较源代码的方法,能够使用普通(ordinary)文本比较处理。差异提取部11通过依次比较源代码的相应文本,来枚举(enumerate)未修正源代码与修正后源代码之间的差异。
即,差异提取部11可以被描述为提取未修正源代码与修正后源代码之间的差异。
语法分析部12根据由差异提取部11提取的差异来枚举修正对象的构成要素,并产生语法分析结果。构成要素是能够在源代码中使用的这些构成元素,例如相应变量、函数、结构体等。图2示出了语法分析结果的示例。图2的语法分析结果示出了作为源代码之间的差异,提取了“差异1”、“差异2”和“差异3”,其中“差异1”中包括作为构成要素的“函数1”,“差异2”中包括作为构成要素的“变量1”和“结构体1”,以及“差异3”中包括作为构成要素的“函数2”。
如果存在包括多个构成要素的差异,则语法分析部12根据每个构成要素分割差异,并更新语法分析结果。这是由于考虑了如下事实:在对源代码中邻近描述的多个构成要素进行修正的情况下,包括多个构成要素的差异被提取作为差异块(clump)。在这种情况下,根据每个构成要素分割差异,图3示出了分割之后的语法分析结果的示例。图3的语法分析结果示出了,因为图2的“差异2”包括多个构成要素(“变量1”和“结构体2”),“差异2”被分割为与构成要素“变量1”相对应的“差异2a”和与构成要素“结构体1”相对应的“差异2b”。
即,语法分析部12可以被描述为将由差异提取部11提取的差异分割为与构成要素相对应的分割差异,并产生将分割差异与对应于分割差异的构成要素相关联的语法分析结果。
特征分析部13参考修正历史表31,确定与语法分析结果中包括的构成要素相对应的特征区分,并产生特征分析结果。
将参考图4说明修正历史表31的数据配置。修正历史表31例如具有如下数据项:历史编号项、构成要素项和特征区分项。历史编号项存储每次比较未修正和修正后源代码时递增的标识号。构成要素项存储构成要素的标识信息,用于唯一标识修正对象的构成要素。特征区分项存储标识信息,用于唯一标识构成要素所属的特征。用户可以任意地设置特征区分,例如以允许标识由一个构成要素或多个构成要素实现的特征。
即,可以将修正历史描述为与如下信息相关联的信息:用于标识对源代码的修正的信息(示例性实施例中的历史编号)、构成要素和特征区分。
图4的修正历史表示出了,对于特定源代码,通过比较第一次修正之前和修正之后的结果,修正属于特征区分“特征1”的构成要素“函数1”和“变量1”,同时通过比较第二次修正之前和修正之后的结果,修正属于特征区分“特征2”的构成要素“结构体1”。
如果修正历史表31具有语法分析结果中包括的构成要素,则特征分析部13对应于构成要素,与特征分析结果的特征区分的构成要素相关联的设置在修正历史表31中存储的特征区分。如果修正历史表31不具有语法分析结果中包括的构成要素,则特征分析部13将对修正历史中不存在构成要素加以指示的区分(例如,“新特征”)暂时设置成与构成要素相对应的特征分析结果的特征区分。
如果在特征区分中暂时设置了“新特征”,则特征分析部13使输出设备4显示此刻的特征分析结果作为临时特征分析结果,并促使用户向暂时设置特征区分输入“新特征”。此后,当从用户接受到暂时设置特征区分的输入时,特征分析部13通过将暂时设置临时特征分析结果的特征区分改变为输入的特征区分,来更新特征分析结果。
图5示出了临时特征分析结果的示例。基于图3的语法分析结果和图4的修正历史表产生图5的临时特征分析结果。在图3的语法分析结果中的构成要素中,因为“函数1”、“变量1”和“结构体1”存在于图4的修正历史表中,将修正历史表中存储的与相应构成要素相关联的特征区分“特征1”、“特征2”和“特征3”相应地设置为与图5的临时特征分析结果的构成要素“函数1”、“变量1”和“结构体1”相对应的特征区分。另一方面,在图3的语法分析结果中的构成要素中,因为在图4的修正历史表中不存在“函数2”,将对修正历史中不存在“函数2”加以指示的区分“新特征”暂时设置到与图5的临时特征分析结果的构成要素“函数2”相对应的特征区分。
图6示出了特征分析结果的示例。图6的特征分析结果示出了这样的状态:在设置中将与图5的临时特征分析结果的构成要素“函数2”相对应的特征区分改变为用户输入的“特征3”。
即,特征分析部13可以被描述为当语法分析结果中所包括的构成要素也被包括在将构成元素与特征区分相关联的修正历史中时,针对语法分析结果中与构成要素相关联的分割差异,设置修正历史中与构成要素相关联的特征区分。
此外,特征分析部13可以被描述为当语法分析结果中包括的构成要素未包括在修正历史中时,针对与语法分析结果中的构成要素相关联的分割差异,暂时设置对修正历史中不包括构成要素加以指示的信息作为特征区分,同时促使用户输入用于暂时设置特征区分的信息。
此外,特征分析部13可以被描述为当接受用户输入的用于暂时设置特征区分的信息时,通过将暂时设置的信息改变为接受的信息来设置该信息,作为针对分割差异的特征区分。
按照这种方式,特征分析部13可以被描述为针对语法分析结果中包括的每个分割差异来设置特征区分。
修正历史登记部14基于特征分析结果将修正历史登记到修正历史表31上。
图7示出了更新后修正历史表的示例。图7的修正历史表处于基于图6的特征分析结果来更新了图4的修正历史表的状态。图7的修正历史表额外登记了图6的特征分析结果中包括的四组构成要素和特征区分,作为与修正历史表中的历史编号“3”相对应的数据。
即,修正历史登记部14可以被描述为将这样的信息存储到存储设备中作为修正历史:将特征分析部13设置的针对分割差异的特征区分与关联于语法分析结果中的分割差异的构成要素相关联的信息。
比较结果输出部15使输出设备4显示对未修正和修正后源代码的比较结果加以指示的比较结果。能够使用包括在特征分析结果中的每项来显示比较结果。用户可以从特征分析结果中包括的每项中任意地指定要在比较结果中显示的项。
图8示出了比较结果的示例。图8的比较结果是通过使用特征分析结果中包括的分割差异和特征区分来显示的示例。图8的比较结果示出,提取“差异1”和“差异2a”,作为关于“特征1”的修正,提取“差异2b”,作为关于“特征2”的修正,以及提取“差异3”,作为关于“特征3”的修正。
图9示出了当用户已经指定特定特征作为输出对象时显示的比较结果的示例。图9示出了当用户指定“特征1”作为输出对象时显示的比较结果。图9的比较结果仅示出了关于用户指定的“特征1”的多个修正后特征的比较结果。用户可以使用例如查询函数,来任意地指定输出对象。
即,比较结果输出部15可以被描述为输出将分割差异与针对分割差异设置的特征区分相关联的比较结果。
接下来,参考图10和11,说明在比较未修正和修正后源代码期间的操作。图10是说明了在比较未修正和修正后源代码期间的操作的流程图。图11是在方式上示出了在比较未修正和修正后源代码期间的数据转变状态的图。
首先,执行源代码读入处理,以从输入设备2读取未修正源代码A和修正后源代码B(步骤S101)。
接下来,差异提取部11通过将未修正源代码A与修正后源代码B的文本相比较来执行文本比较处理,用于提取差异(步骤S102)。在图11中,作为未修正源代码A与修正后源代码B之间的差异,提取了“差异1”、“差异2”和“差异3”。
接下来,语法分析部12执行语法分析处理,用于按照步骤S102中提取的差异枚举修正对象的构成要素,并按照每个构成要素来分割差异,以产生语法分析结果(步骤S103)。在图11中,作为“差异1”、“差异2”和“差异3”中包括的构成要素,枚举了“函数1”、“变量1”、“结构体1”和“函数2”。
接下来,特征分析部13执行特征分析处理,一遍通过参考修正历史表31来确定与步骤S103中产生的语法分析结果中包括的构成要素相对应的特征区分,并产生特征分析结果(步骤S104)。在图11中,特征分析部13参考修正历史表,将修正历史表中现有的“特征1”和“特征2”确定为与按照差异列举的构成要素相对应的特征区分。
特征分析部13确定步骤103中产生的语法分析结果中包括的所有构成要素(修正后位置)是否存在于修正历史表31中(步骤S105)。如果该确定是肯定的(步骤S105:是),则过程移至随后步骤S108。
另一方面,如果步骤S105确定的语法分析结果中包括的任意构成要素(修正位置)不存在于修正历史表31中(步骤S105:否),则特征分析部13使输出设备4显示此刻的特征分析结果,作为临时特征分析结果(步骤S106),并促使用户向暂时设置的特征区分输入“新特征”。在图11中,促使用户针对与按照“差异3”枚举的“函数2”相对应的特征区分来输入“新特征”。
接下来,当从用户接受到暂时设置特征区分的输入时,特征分析部13通过将临时特征分析结果中暂时设置的“新特征”的特征区分改变为输入的特征区分,来更新特征分析结果(步骤S107)。在图11中,将设置中与按照“差异3”来列举的“函数2”相对应的特征区分改变为“特征3”。
接下来,修正历史登记部14基于步骤S104中产生的特征分析结果或者基于步骤107中更新的特征分析结果来执行修正历史登记处理,用于在修正历史表31上登记修正历史(步骤S108)。在图11中,在修正历史表上额外登记历史编码“3”的修正历史数据。
接下来,比较结果输出部15执行比较结果输出处理,用于使输出设备4显示对未修正和修正后源代码的比较结果加以指示的比较结果(步骤S109)。
如上所述,根据示例性实施例中的源代码比较设备1,因为可以基于过去创建的修正历史将修正位置与特征相关联,能够基于过去的实际修正记录来执行正确关联。
此外,对于没有修正历史的新修正位置,因为促使用户输入与新修正位置相对应的特征以便登记由用户输入的特征,在添加新代码或新特征的情况下,能够可靠地防止登记中的任何遗漏。
此外,因为能够将修正位置与特征相关联且在每次修正时额外登记修正位置和特征来累积关联信息,可以通过参考过去的关联信息来进行程序开发,从而允许提高开发期间的工作效率。
[修改]
此外,上述示例性实施例仅是举例说明,因而没有以任何方式排除应用未在示例性实施例中清楚描述的各种修改和技术。即,可以在不背离本发明的实际精神或范围的情况下对本发明进行多种形式上的修改之后实践本发明。
例如,上述示例性实施例的源代码比较设备1包括图1所示的相应部件。然而,其还可以包括适当性检查部。适当性检查部参考修正历史表31,并且对于每个特征区分,计算作为属于该特征区分的构成要素的每个修正后构成要素的比例(修正率)。如果任意构成要素(针对该构成要素,相对于每个特征区分计算的每个构成要素的修正比不小于预定阈值)没有被设置为与特征分析结果中的该特征区分相对应的构成要素,则适当性检查部向用户通知修正不适当。
参考图12至14,将具体说明适当性检查部的功能。图12是在方式上示出了当适当性检查部检查修正适当性时的示例的图。图13是示出了按照每个特征区分计算得到的每个构成要素的修正率的示例的图。图14是以特征区分的构成要素为单位对过去的修正率与当前的修正状况之间的相应关系进行举例说明的图。
适当性检查部参考图12所示的修正历史表,并按照图13所示的每个特征区分计算每个构成要素的修正率。图12的修正历史表已经累积了由历史编号“1”和历史编号“2”标识的两个相应比较结果,作为修正历史。“特征1”是这两个结果的修正对象,而“特征2”仅是历史编号“1”的修正对象。
当修正“特征1”时,因为这两个结果中均修正了“函数1”和“变量1”,“函数1”和“变量1”的修正率是100%;另一方面,因为仅在历史编号“2”中修正了“结构体1”,所以“结构体1”的修正率是50%(参见图13)。
当修正“特征2”时,因为修正了“变量1”,所以“变量1”的修正率是100%;另一方面,因为没有修正“函数1”和“结构体1”,所以“函数1”和“结构体1”的修正率是0%(参见图13)。
即,适当性检查部可以被描述为根据基于修正历史的每个构成要素,计算对源代码执行第一修正的次数相对于对源代码执行第二修正的次数之比(修正率),其中第一修正包括与关联于特征区分的特定构成要素相对应的部分的改变,第二修正包括与关联于每个特征区分的任意构成要素相对应的部分的改变。
适当性检查部参考按照图13所示的各个特征区分来记载的每个构成要素的修正率,以及如果其修正率不小于要检查的特征区分的预定阈值的任何构成要素没有被设置为特征分析结果中与特征区分相对应的构成要素,则适当性检查部向用户通知修正不适当。
如图12所示,如果将未修正源代码A与修正后源代码B相比较,则在特征分析结果中,将“函数1”和“特征1”的组合设置为“差异1”。图14示出了图13所示的“特征1”的每个构成要素的修正率与当前修正状况之间的相应关系。假设修正率的阈值被设置为90%,则修正率不小于阈值的构成要素是“函数1”和“变量1”。在关于“特征1”的当前修正中,因为仅修正了“函数1”,所以适当性检查部确定修正中遗漏了“变量1”,并向用户通知所述遗漏。
即,适当性检查部可以被描述为:当针对语法分析结果中包括的至少一个分割差异设置了特征区分且相对于特征区分和关联于特征区分的特定构成要素的组,比例(修正率)等于或大于与相关联的预定阈值时,如果提取的差异不包括与构成要素相对应的部分,则向用户通知修正不适当。
此外,向用户通知的内容不限于修正的遗漏。例如,如果过去的修正率不大于第二阈值的构成要素被修正,则也能够确定为修正错误,并向用户通知所述错误。
通过包括这种适当性检查部,能够基于过去的修正历史确定当前修正的适当性,从而允许在程序开发中进一步提高工作效率。
此外,尽管在上述示例性实施例中,在修正历史表31中存储并保存了修正历史,但是用于保存修正历史的方法不限于此。例如,如图15所示,也可以通过将修正历史写入要比较的源代码来保存修正历史。图15示出了如下示例:将修正历史X作为注释(annotation)嵌入到JavaTM语言形式的源代码Y中。与每个特征区分相对应的注释被定义为源代码Y的一部。每个注释被当作具有int型数组的单一值注释。已经设置了相应历史编号的注释被插入到相应构成要素的描述位置。鉴于此,能够实现对源代码的编辑和对一个源代码的修正历史的参照,从而允许在修正内容的证实、程序开发等期间提高工作效率。
即,源代码比较设备1也可以包括修正历史并入部,用于将如下信息并入到修正后源代码中作为修正历史:将特征分析部13设置的针对分割差异的特征区分与关联于语法分析结果中的分割差异的构成要素相关联的信息。
此外,全部或部上述示例性实施例也可以被描述为以下附注,但是本发明不限于此。
(附注1)
一种源代码比较设备,包括:
差异提取部,通过将修正前源代码与修正后源代码相比较来提取差异;
语法分析部,按照能够在源代码中使用的每个构成要素对由差异提取部提取的差异进行分割,并产生将构成元素与对所述差异进行分割后产生的分割差异相关联的语法分析结果;
特征分析部,通过将特征区分设置为与语法分析结果中包括的构成要素和所述分割差异的组相关联,来产生特征分析结果;以及
输出部,使用特征分析结果中包括的分割差异和特征区分来输出修正前源代码与修正后源代码之间的比较结果,
其中,如果语法分析结果中包括的构成要素存在于过去基于比较源代码的结果而构造的修正历史中,则特征分析部将修正历史中设置的与构成要素相关联的特征区分设置为特征分析结果中与构成要素相对应的特征区分。
(附注2)
根据附注1所述的源代码比较设备,其中,如果修正历史中不存在语法分析结果中包括的构成要素,则特征分析部将对不存在构成要素加以指示的区分暂时设置为特征分析结果中与构成要素相对应的特征区分,并促使用户进行输入,以暂时设置特征区分。
(附注3)
根据附注2所述的源代码比较设备,其中,当接受来自用户的用于暂时设置的特征区分的输入时,特征分析部通过将暂时设置的特征区分改变为输入的特征区分,来更新特征分析结果。
(附注4)
根据附注1至3中任一项所述的源代码比较设备,还包括适当性检查部,用于参照修正历史,按照每个特征区分计算被修正为属于该特征区分的构成要素的构成要素的比率,以及如果比率大于预定阈值的构成要素没有被设置为与特征分析结果的特征区分相对应的构成要素,则向用户通知修正不适当。
(附注5)
根据附注1至4中任一项所述的源代码比较设备,还包括修正历史存储部,使存储设备存储由特征分析部产生的特征分析结果,作为修正历史。
(附注6)
根据附注1至5中任一项所述的源代码比较设备,还包括修正历史并入部,用于将由特征分析部产生的特征分析结果并入修正后源代码,作为修正历史。
(附注7)
一种源代码比较方法,包括:
差异提取步骤,通过将修正前源代码与修正后源代码相比较来提取差异;
语法分析步骤,按照能够在源代码中使用的每个构成要素对差异提取步骤中提取的差异进行分割,并产生将构成元素与对所述差异进行分割后产生的分割差异相关联的语法分析结果;
特征分析步骤,通过将特征区分设置为与语法分析结果中包括的构成要素和所述分割差异的组相关联,来产生特征分析结果;以及
输出步骤,使用特征分析结果中包括的分割差异和特征区分来输出修正前源代码与修正后源代码之间的比较结果,
其中,如果语法分析结果中包括的构成要素存在于过去基于比较源代码的结果而构造的修正历史中,则特征分析步骤将修正历史中设置的与构成要素相关联的特征区分设置为特征分析结果中与构成要素相对应的特征区分。
(附注8)
一种源代码比较程序,包括用于使计算机执行根据附注7所述的每个步骤的指令。
Claims (8)
1.一种源代码比较设备,包括:
差异提取部,提取修正前源代码与修正后源代码之间的差异;
语法分析部,将提取的差异分割为与能够在源代码中使用的构成要素相对应的分割差异,并产生语法分析结果,其中,所述语法分析结果将所述分割差异与对应于所述分割差异的构成要素相关联;
特征分析部,针对语法分析结果中包括的每个分割差异设置特征区分;以及
输出部,输出将所述分割差异与针对所述分割差异设置的特征区分相关联的比较结果,
其中,所述特征分析部被配置为如果语法分析结果中包括的构成要素包括在将构成要素与特征区分相关联的修正历史中,则针对与语法分析结果中的构成要素相关联的所述分割差异,设置与修正历史中的构成要素相关联的特征区分。
2.根据权利要求1所述的源代码比较设备,其中,所述特征分析部被配置为如果所述语法分析结果中包括的构成要素没有包括在所述修正历史中,则对于与所述语法分析结果中的构成要素相关联的分割差异,暂时将对所述修正历史中不包括构成要素加以指示的信息设置为特征区分,并促使用户输入用于暂时设置的特征区分的信息。
3.根据权利要求2所述的源代码比较设备,其中,所述特征分析部被配置为当接受用户输入的用于暂时设置的特征区分的信息时,通过将所述暂时设置的特征区分改变为接受的信息,来设置针对所述分割差异的信息作为特征区分。
4.根据权利要求1所述的源代码比较设备,还包括:
适当性检查部,
其中,所述修正历史是将用于标识对源代码的修正的信息与构成要素和特征区分相关联的信息;以及
所述适当性检查部基于修正历史,计算对源代码执行第一修正的次数相对于对源代码执行第二修正的次数之比,所述第一修正包括与关联于特征区分的特定构成要素相对应的部分的改变,所述第二修正包括与关联于所述特征区分的任意构成要素相对应的部分的改变;以及当针对语法分析结果中包括的至少一个分割差异设置了所述特征区分且所述比率等于或大于预定阈值时,如果提取的差异不包括与所述特定构成要素相对应的部分,则所述适当性检查部向用户通知修正不适当。
5.根据权利要求1所述的源代码比较设备,还包括:
修正历史登记部,将信息存储到存储设备中,作为修正历史,其中,所述信息将由所述特征分析部针对所述分割差异进行设置的特征区分与关联于语法分析结果中的所述分割差异的构成要素相关联。
6.根据权利要求1所述的源代码比较设备,还包括:
修正历史并入部,将信息并入修正后源代码中,作为修正历史,其中,所述信息将由所述特征分析部针对所述分割差异进行设置的特征区分与关联于语法分析结果中的所述分割差异的构成要素相关联。
7.一种源代码比较方法,包括:
差异提取步骤,提取修正前源代码与修正后源代码之间的差异;
语法分析步骤,将提取的差异分割为与能够在源代码中使用的构成要素相对应的分割差异,并产生将所述分割差异与对应于所述分割差异的构成要素相关联的语法分析结果;
特征分析步骤,针对语法分析结果中包括的每个分割差异设置特征区分;以及
输出步骤,输出将所述分割差异与针对所述分割差异设置的特征区分相关联的比较结果,
其中,所述特征分析步骤被配置为:如果语法分析结果中包括的构成要素包括在将构成要素与特征区分相关联的修正历史中,则针对与语法分析结果中的构成要素相关联的所述分割差异,设置与修正历史中的构成要素相关联的特征区分。
8.一种存储源代码比较程序的计算机可读介质,所述源代码比较程序包括用于使计算机执行处理的指令,所述处理包括以下步骤:
差异提取步骤,提取修正前源代码与修正后源代码之间的差异;
语法分析步骤,将提取的差异分割为与能够在源代码中使用的构成要素相对应的分割差异,并产生将所述分割差异与对应于所述分割差异的构成要素相关联的语法分析结果;
特征分析步骤,针对语法分析结果中包括的每个分割差异设置特征区分;以及
输出步骤,输出将所述分割差异与针对所述分割差异设置的特征区分相关联的比较结果,
其中,所述特征分析步骤被配置为:如果语法分析结果中包括的构成要素包括在将构成要素与特征区分相关联的修正历史中,则针对与语法分析结果中的构成要素相关联的所述分割差异,设置与修正历史中的构成要素相关联的特征区分。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011204924A JP5725359B2 (ja) | 2011-09-20 | 2011-09-20 | ソースコード比較装置、ソースコード比較方法およびソースコード比較プログラム |
JP2011-204924 | 2011-09-20 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103019666A true CN103019666A (zh) | 2013-04-03 |
Family
ID=47881878
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012103109308A Pending CN103019666A (zh) | 2011-09-20 | 2012-08-28 | 源代码比较设备、源代码比较方法和源代码比较程序 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8752009B2 (zh) |
JP (1) | JP5725359B2 (zh) |
CN (1) | CN103019666A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103617122A (zh) * | 2013-12-12 | 2014-03-05 | 用友软件股份有限公司 | 一种源代码的比对方法 |
CN110618926A (zh) * | 2018-06-19 | 2019-12-27 | 歌乐株式会社 | 源代码分析方法和源代码分析装置 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8533668B2 (en) * | 2010-04-26 | 2013-09-10 | Red Hat, Inc. | Comparing source code using code statement structures |
JP5725359B2 (ja) * | 2011-09-20 | 2015-05-27 | 日本電気株式会社 | ソースコード比較装置、ソースコード比較方法およびソースコード比較プログラム |
US9189208B2 (en) * | 2013-03-14 | 2015-11-17 | Microsoft Technology Licensing, Llc | Inline display and preview of related information for elements in a document |
US9311077B2 (en) * | 2013-03-29 | 2016-04-12 | International Business Machines Corporation | Identification of code changes using language syntax and changeset data |
KR101623174B1 (ko) * | 2014-08-27 | 2016-05-20 | 주식회사 파수닷컴 | 소스 코드 분석 장치, 이를 위한 컴퓨터 프로그램, 그 기록매체 |
JP2018093412A (ja) * | 2016-12-06 | 2018-06-14 | 株式会社日立製作所 | 演算装置、送信プログラム、送信方法 |
CN107577476A (zh) * | 2017-08-07 | 2018-01-12 | 中国科学院软件研究所 | 一种基于模块划分的安卓系统源码差异性分析方法、服务器及介质 |
US11037078B2 (en) | 2018-06-27 | 2021-06-15 | Software.co Technologies, Inc. | Adjusting device settings based upon monitoring source code development processes |
CN109542508B (zh) * | 2018-10-18 | 2020-12-29 | 华中科技大学 | 一种基于函数调用关系图的代码同源性分析方法 |
US11416245B2 (en) | 2019-12-04 | 2022-08-16 | At&T Intellectual Property I, L.P. | System and method for syntax comparison and analysis of software code |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3711863A (en) * | 1972-01-21 | 1973-01-16 | Honeywell Inf Systems | Source code comparator computer program |
US20050114840A1 (en) * | 2003-11-25 | 2005-05-26 | Zeidman Robert M. | Software tool for detecting plagiarism in computer source code |
JP2006277127A (ja) * | 2005-03-28 | 2006-10-12 | Canon Inc | 修正プログラムの比較方法 |
CN101286119A (zh) * | 2008-05-27 | 2008-10-15 | 华耀环宇科技(北京)有限公司 | 一种通过分析代码变化确定功能点变化的方法 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4048728A (en) * | 1973-09-12 | 1977-09-20 | Systex, Inc. | Training system for telephone switchboard operators using computer central processing unit |
US5201050A (en) * | 1989-06-30 | 1993-04-06 | Digital Equipment Corporation | Line-skip compiler for source-code development system |
US5485409A (en) * | 1992-04-30 | 1996-01-16 | International Business Machines Corporation | Automated penetration analysis system and method |
JPH08194611A (ja) | 1995-01-19 | 1996-07-30 | Hitachi Ltd | プログラム修正による影響範囲を解析する装置 |
US7430670B1 (en) * | 1999-07-29 | 2008-09-30 | Intertrust Technologies Corp. | Software self-defense systems and methods |
US6804682B1 (en) * | 2002-04-29 | 2004-10-12 | Borland Software Corporation | System and methodology providing compiler-assisted refactoring |
US7496892B2 (en) * | 2003-05-06 | 2009-02-24 | Andrew Nuss | Polymorphic regular expressions |
US20050015752A1 (en) * | 2003-07-15 | 2005-01-20 | International Business Machines Corporation | Static analysis based error reduction for software applications |
JP4360942B2 (ja) * | 2004-03-05 | 2009-11-11 | 三菱電機株式会社 | ソフトウェア開発支援装置 |
US7624304B2 (en) * | 2004-10-07 | 2009-11-24 | Microsoft Corporation | Defect detection for integers |
US7707552B2 (en) * | 2005-10-17 | 2010-04-27 | International Business Machines Corporation | Method and system for autonomically prioritizing software defects |
US20080196000A1 (en) * | 2007-02-14 | 2008-08-14 | Fernandez-Lvern Javier | System and method for software development |
US20090044177A1 (en) * | 2007-08-09 | 2009-02-12 | Cary Lee Bates | Method and apparatus for profile enhanced source code analyzer results |
US8352921B2 (en) * | 2007-11-02 | 2013-01-08 | Klocwork Corp. | Static analysis defect detection in the presence of virtual function calls |
JP2009169724A (ja) * | 2008-01-17 | 2009-07-30 | Nomura Research Institute Ltd | 保守支援装置 |
US8099721B2 (en) * | 2008-06-17 | 2012-01-17 | Microsoft Corporation | Parsing of declarations in all branches of preprocessor conditionals |
JP2010186378A (ja) * | 2009-02-13 | 2010-08-26 | Hitachi Ltd | ソフトウェアのバージョン間の差分表示システム及び方法 |
US8806441B2 (en) * | 2009-06-29 | 2014-08-12 | International Business Machines Corporation | Static code analysis |
US9507699B2 (en) * | 2011-06-16 | 2016-11-29 | Microsoft Technology Licensing, Llc | Streamlined testing experience |
JP5725359B2 (ja) * | 2011-09-20 | 2015-05-27 | 日本電気株式会社 | ソースコード比較装置、ソースコード比較方法およびソースコード比較プログラム |
-
2011
- 2011-09-20 JP JP2011204924A patent/JP5725359B2/ja not_active Expired - Fee Related
-
2012
- 2012-08-22 US US13/591,854 patent/US8752009B2/en not_active Expired - Fee Related
- 2012-08-28 CN CN2012103109308A patent/CN103019666A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3711863A (en) * | 1972-01-21 | 1973-01-16 | Honeywell Inf Systems | Source code comparator computer program |
US20050114840A1 (en) * | 2003-11-25 | 2005-05-26 | Zeidman Robert M. | Software tool for detecting plagiarism in computer source code |
JP2006277127A (ja) * | 2005-03-28 | 2006-10-12 | Canon Inc | 修正プログラムの比較方法 |
CN101286119A (zh) * | 2008-05-27 | 2008-10-15 | 华耀环宇科技(北京)有限公司 | 一种通过分析代码变化确定功能点变化的方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103617122A (zh) * | 2013-12-12 | 2014-03-05 | 用友软件股份有限公司 | 一种源代码的比对方法 |
CN103617122B (zh) * | 2013-12-12 | 2016-03-30 | 用友网络科技股份有限公司 | 一种源代码的比对方法 |
CN110618926A (zh) * | 2018-06-19 | 2019-12-27 | 歌乐株式会社 | 源代码分析方法和源代码分析装置 |
Also Published As
Publication number | Publication date |
---|---|
JP5725359B2 (ja) | 2015-05-27 |
US8752009B2 (en) | 2014-06-10 |
US20130074035A1 (en) | 2013-03-21 |
JP2013065267A (ja) | 2013-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103019666A (zh) | 源代码比较设备、源代码比较方法和源代码比较程序 | |
CN102779040B (zh) | 一种生成自定义表单的方法和装置 | |
CN101778160B (zh) | 实现动态预设消息的方法及装置 | |
US20040098402A1 (en) | System and method for common code generation | |
CN105095168A (zh) | 一种合同文档的自动生成方法和装置 | |
CN101071378A (zh) | 源代码生成方法、设备和程序 | |
CN103605747A (zh) | 文件表单的处理方法和装置 | |
CN110502243B (zh) | 用于在集成电路卡中生成个性化简档包数据的方法 | |
CN109683881B (zh) | 一种代码格式调整方法及装置 | |
CN102915228A (zh) | 菜单工具条整合系统及方法 | |
CN104797993B (zh) | 系统构建辅助装置 | |
CN102236573A (zh) | 用于类型化程序设计语言的名称绑定可扩展性 | |
CN113886590A (zh) | 数据汇总方法、装置、计算机设备及存储介质 | |
US7949509B2 (en) | Method and tool for generating simulation case for IC device | |
CN111126010B (zh) | Freemaker模板文件修复方法、装置、计算机设备及存储介质 | |
CN110968307A (zh) | 一种基于智能生成基础代码的微服务构建方法及装置 | |
CN105653669A (zh) | 超文本标记语言生成方法及装置 | |
CN112835564A (zh) | 代码生成方法和装置 | |
CN116185853A (zh) | 代码校验方法及装置 | |
CN113703753B (zh) | 用于产品开发的方法、装置和产品开发系统 | |
CN111399898A (zh) | 多模块系统代码版本的管理方法、装置和计算机设备 | |
CN110516333A (zh) | 一种pcb中的器件布局方法、装置、设备及可读存储介质 | |
CN106650137B (zh) | 一种加速标准单元增量布局合理化的方法 | |
CN113001538B (zh) | 一种命令解析方法及系统 | |
CN111753349B (zh) | 结构构件的尺寸修改方法、Revit平台及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130403 |