CN103092761A - 基于差异信息文件识别和检查修改代码块的方法及装置 - Google Patents

基于差异信息文件识别和检查修改代码块的方法及装置 Download PDF

Info

Publication number
CN103092761A
CN103092761A CN201310045390XA CN201310045390A CN103092761A CN 103092761 A CN103092761 A CN 103092761A CN 201310045390X A CN201310045390X A CN 201310045390XA CN 201310045390 A CN201310045390 A CN 201310045390A CN 103092761 A CN103092761 A CN 103092761A
Authority
CN
China
Prior art keywords
code
line number
modification
code block
block
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
Application number
CN201310045390XA
Other languages
English (en)
Other versions
CN103092761B (zh
Inventor
杜利
夏冉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fiberhome Telecommunication Technologies Co Ltd
Original Assignee
Fiberhome Telecommunication Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fiberhome Telecommunication Technologies Co Ltd filed Critical Fiberhome Telecommunication Technologies Co Ltd
Priority to CN201310045390.XA priority Critical patent/CN103092761B/zh
Publication of CN103092761A publication Critical patent/CN103092761A/zh
Application granted granted Critical
Publication of CN103092761B publication Critical patent/CN103092761B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于差异信息文件识别和检查修改代码块的方法及装置,涉及源代码文件检查领域。该方法为:通过源代码文件管理工具生成包括修改行的行号的差异信息文件;判断相邻修改行的行号是否连续,若连续,将连续的修改行合并成修改块;若不连续,将修改行标记为修改块;判断修改块的区间是否全部处于代码块的区间内,若是,将代码块标记为修改代码块,否则将修改块标记为修改代码块;对所有修改代码块进行整合;对整合后的代码进行代码规范性检查。本发明能够识别修改代码块,进行代码规范性检查时,只需检查修改代码块中的代码是否违反代码规范,不仅检查时间较短,工作效率较高,而且保证了修改后的源代码文件使用的安全。

Description

基于差异信息文件识别和检查修改代码块的方法及装置
技术领域
本发明涉及源代码文件检查领域,尤其涉及一种基于差异信息文件识别和检查修改代码块的方法及装置。
背景技术
在软件开发的过程中,经常会出现在开源或第三方商业代码文件的基础上进行二次开发的情况。经过二次开发后的源代码文件由两部分组成:一部分是原始的开源或商业代码;另一部分是二次开发时新增或修改的代码。这两部分出自于不同的开发团队,所遵循的编码规范一般存在差异。
对源代码文件修改后,为了保证修改的源代码文件符合编码规范,一般需要通过代码检查分析工具对修改的源代码文件进行检查。对修改的源代码文件进行检查,如果采用二次开发时所遵循的编码规范对整个源代码文件进行规范性检查,源代码文件中的原始部分将可能被检查出大量的违反信息;因此,进行代码规范性检查的主要对象仅仅是修改的代码块(代码块是编程语言中的逻辑单位,对代码进行代码规范性检查和复杂度分析时,必须以代码块为最小单位,否则无法进行)。
但是,常规的代码检查分析工具对修改的源代码文件进行检查时存在以下缺陷:
(1)由于常规的代码检查分析工具缺乏对修改代码的识别功能,因此代码检查分析工具不仅无法得知源代码文件中的哪些代码已经修改,需要进行检查;也无法得知哪些代码未修改,不需进行检查。代码检查分析工具检查修改后的源代码文件时,只能对修改后的源代码文件的全文进行检查。因此,代码检查分析工具反馈的输出违反信息中,有大量代码是未修改的源代码文件;如根据代码检查分析工具检查的结果对未修改的源代码文件进行修改,不仅可能引入新的错误(bug),进而对源代码文件造成不必要的危害,而且需要进行额外的测试,增大了工作量,工作效率较低。
(2)对于较大的源代码文件(例如上万或几十万行的源代码文件)而言,采用代码检查分析工具对源代码文件的全文进行检查时,需要耗费较长的检查时间,工作效率较低。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于差异信息文件识别和检查修改代码块的方法及装置。它能够对修改代码块进行识别,通过本发明识别出的修改代码块进行代码规范性检查时,只需检查修改代码块中的代码是否违反代码规范,不仅检查时间较短,工作效率较高,而且保证了修改后的源代码文件使用的安全。
为达到以上目的,本发明提供的基于差异信息文件识别和检查修改代码块的方法,包括以下步骤:A、通过源代码文件管理工具生成差异信息文件,所述差异信息文件中记录有源代码文件的修改信息,所述修改信息包括源代码文件的修改行的行号,根据源代码文件的修改行的行号识别修改行;B、判断相邻修改行的行号是否连续,若连续,则将连续的修改行合并成修改块,并记录修改块的起始行号和结束行号;若不连续,则直接将修改行标记为修改块,并记录修改块的起始行号和结束行号;C、判断修改块的起始行号至结束行号的区间是否全部处于代码块的起始行号至结束行号的区间内,若是,则将代码块标记为修改代码块,否则将修改块标记为修改代码块;D、对所有标记为修改代码块的代码进行整合;E、对整合后的代码进行代码规范性检查。
在上述技术方案的基础上,步骤A中所述修改信息包括修改类型和修改代码内容,所述修改类型包括新增、删除和替换。
在上述技术方案的基础上,步骤C中包括以下步骤:在源代码文件中遍历所有的修改块,判断每个修改块的起始行号至结束行号的区间是否全部处于代码块起始行号至结束行号的区间,若是,将代码块标记为修改代码块,将代码块的起始行号和结束行号标记修改代码块的起始行号和结束行号;否则将修改块标记为修改代码块,将修改块的起始行号和结束行号标记修改代码块的起始行号和结束行号。
在上述技术方案的基础上,步骤D中包括以下步骤:根据所有修改代码块的起始行号和结束行号,遍历所有的修改代码块,判定任意两个修改代码块的起始行号至结束行号的区间交叉时,合并两个起始行号至结束行号的区间交叉的修改代码块,并记录合并之后的修改代码块的起始行号和结束行号。
在上述技术方案的基础上,步骤D中还包括以下步骤:判定任意两个修改代码块的起始行号至结束行号的区间没有交叉时,直接转到步骤E。
在上述技术方案的基础上,步骤E中包括以下步骤:根据修改行的行号判定代码规范性检查出的违反行属于修改行时,输出违反行的违反信息。
在上述技术方案的基础上,步骤E中还包括以下步骤:判定代码规范性检查出的所有违反行均不属于修改行时,输出没有违反行的违反信息。
本发明提供的基于差异信息文件识别和检查修改代码块的装置,其特征在于,包括差异信息文件生成模块、修改块确定模块、修改代码块标记模块、代码整合模块和代码检查模块,其中:
所述差异信息文件生成模块,用于:通过源代码文件管理工具生成差异信息文件,所述差异信息文件中记录有源代码文件的修改信息,所述修改信息包括源代码文件的修改行的行号,根据源代码文件的修改行的行号识别修改行;
所述修改块确定模块,用于:判断相邻修改行的行号是否连续,若连续,则将连续的修改行合并成修改块,并记录修改块的起始行号和结束行号;若不连续,则直接将修改行标记为修改块,并记录修改块的起始行号和结束行号;
所述修改代码块标记模块,用于:判断修改块的起始行号至结束行号的区间是否全部处于代码块的起始行号至结束行号的区间内,若是,则将代码块标记为修改代码块,否则将修改块标记为修改代码块;
所述代码整合模块,用于:对所有标记为修改代码块的代码进行整合;
所述代码检查模块,用于:对整合后的代码进行代码规范性检查。
在上述技术方案的基础上,所述代码整合模块包括修改代码块判定子模块,所述修改代码块判定子模块用于:根据所有修改代码块的起始行号和结束行号,遍历所有的修改代码块,判定任意两个修改代码块的起始行号至结束行号的区间交叉时,合并两个起始行号至结束行号的区间交叉的修改代码块,记录合并之后的修改代码块的起始行号和结束行号。
在上述技术方案的基础上,所述代码检查模块包括违反行判定子模块,所述违反行判定子模块用于:根据修改行的行号判定代码规范性检查出的违反行属于修改行时,输出违反信息。
与现有技术相比,本发明的有益效果在于:
(1)本发明识别和检查修改代码块时,以代码块为最小单位。在进行代码规范性检查时,仅仅针对代码行的检查是不够的。例如有这样一条规范:循环语句中禁止修改循环变量,如果在循环语句中增加了一行代码,而这行代码正好就对循环变量进行了修改,仅对这一行代码进行检查就无法发现修改循环变量的问题。还有另有一条规范:函数体不能超过500行,假设在原本有499行的函数中增加了两行代码,致使函数体达到了501行,针对代码行的检查无法发现代码行超出的问题。因此,要进行正常的代码规范性检查,检查的最小单位不是代码行,而是代码块。综上所述,本发明识别和检查修改代码块时均以代码块为最小单位,修改代码块能够准确的检查。
(2)本发明仅将识别的修改代码块发送至代码检查分析工具进行检查,代码检查分析工具检查的不是完整的源代码文件,仅仅只是修改代码快中修改过的小部分代码。与现有技术中的代码检查分析工具检查完整的源代码文件相比,本发明只需检查修改代码块中的代码是否违反代码规范,不仅耗费的检查时间较短,工作效率较高;而且本发明能够根据修改行的行号确定修改代码块中的修改行,当修改代码块中的代码违反代码编码规范时,代码检查分析工具才会输出违反信息。因此,通过本发明识别的修改代码块被代码检查分析工具检查时,能够有效的避免修改代码块中出现新的错误,进而保证了源代码文件的安全;同时,对于识别出的修改代码块,还可以进行诸如代码量统计、复杂度计算等其他后续工作。
附图说明
图1为本发明实施例中方法的流程图;
图2为本发明实施例在svn客户端实施的流程图;
图3为本发明实施例在svn服务端实施的流程图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
参见图1所示,本发明实施例提供的基于差异信息文件识别和检查修改代码块的方法,包括以下步骤:
S1:通过源代码文件管理工具生成差异信息文件,差异信息文件包括源代码文件的修改信息,修改信息包括源代码文件的修改行的行号、修改类型和修改代码内容,修改类型包括新增、删除和替换。差异信息文件中一般以“+”代表新增,“-”代表删除,“”代表替换。
S2:遍历差异信息文件,对差异信息文件中的所有修改行的行号进行分析,判断相邻修改行的行号是否连续,若行号连续,则将行号连续的修改行合并成修改块,并记录修改块的起始行号和结束行号;否则直接将行号不连续的修改行标记为修改块,并记录修改块的起始行号和结束行号。
本发明实施例中的修改块是指:通过差异信息文件分析得出的一段连续的修改代码。例如:一份源代码文件中的修改行为第7行、第8行、第25行、第26行和第27行均被修改,则通过差异信息文件可以得知:源代码文件中有两个修改块;第一个修改块的起始行号至结束行号的区间为第7行起至第8行止,第二个修改块的起始行号至结束行号的区间为第25行起至第27行止。
由于差异信息文件中会出现大量连续的修改行,因此将连续的修改行合并为修改块可以便于后续步骤的处理,减少冗余信息。由于源代码文件中的修改行会存在多处的不连续内容,因此修改块会有多个。
S3:在源代码文件中遍历所有的修改块。
S4:判断每个修改块的起始行号至结束行号的区间是否全部处于代码块的起始行号至结束行号的区间内,若是,则转到步骤S5,否则转到步骤S6。
本发明实施例中的代码块是指:编程语言中的逻辑单位。以C语言为例,代码块可能是函数、结构体、共同体等。在对代码进行代码规范性检查和复杂度分析时,必须以代码块为最小单位,否则无法进行。
S5:将代码块标记为修改代码块,将代码块的起始行号和结束行号标记为修改代码块的起始行号和结束行号。
S6:将修改块标记为修改代码块,将修改块的起始行号和结束行号标记为修改代码块起始行号和结束行号。
S7:根据所有修改代码块的起始行号和结束行号,遍历所有修改代码块,对所有标记为修改代码块的代码进行整合。
S8:判断任意两个修改代码块的起始行号至结束行号的区间是否交叉,若是,则转到步骤S9;否则转到步骤S10。
S9:合并两个起始行号至结束行号的区间交叉的修改代码块,并记录合并之后的修改代码块的起始行号和结束行号。
S10:将修改代码块标记为最小检查单位,发送至代码检查分析工具,检查分析工具对整合后的代码进行代码规范性检查进行代码规范性检查。
S11:根据修改行的行号判断代码规范性检查出的违反行是否属于修改行,若是,则转到步骤S12,否则转到步骤S13。完成代码规范性检查。
S12:代码检查分析工具输出违反行的违反信息。
S13:代码检查分析工具输出没有违反行的违反信息。
代码检查分析工具根据编码规范对所有修改代码块进行检查,修改代码块中的代码违反编码规范时,代码检查分析工具输出违反信息。对于修改代码块中修改的代码行的行数较少(例如只有一行或少数几行)时,为了避免代码检查分析工具对未修改的代码进行检查,在检查分析工具输出违反信息之前,可以针对用户不同的需求,根据修改行的行号对输出违反信息的违反行进行判断;一般当违反行属于修改行时,才输出违反信息。
本发明实施例提供的基于差异信息文件识别和检查修改代码块的装置,包括差异信息文件生成模块、修改块确定模块、修改代码块标记模块、代码整合模块和代码检查模块。
差异信息文件生成模块,用于:通过源代码文件管理工具生成差异信息文件,所述差异信息文件中记录有源代码文件的修改信息,所述修改信息包括源代码文件的修改行的行号,根据源代码文件的修改行的行号识别修改行。
修改块确定模块,用于:判断相邻修改行的行号是否连续,若连续,则将连续的修改行合并成修改块,并记录修改块的起始行号和结束行号;若不连续,则直接将修改行标记为修改块,并记录修改块的起始行号和结束行号。
修改代码块标记模块,用于:判断修改块的起始行号至结束行号的区间是否全部处于代码块的起始行号至结束行号的区间内,若是,则将代码块标记为修改代码块,否则将修改块标记为修改代码块。
代码整合模块,用于:对所有标记为修改代码块的代码进行整合。
代码整合模块包括修改代码块判定子模块,修改代码块判定子模块用于:根据所有修改代码块的起始行号和结束行号,遍历所有的修改代码块,判定任意两个修改代码块的起始行号至结束行号的区间交叉时,合并两个起始行号至结束行号的区间交叉的修改代码块,记录合并之后的修改代码块的起始行号和结束行号。
代码检查模块,用于:对整合后的代码进行代码规范性检查。
代码检查模块包括违反行判定子模块,违反行判定子模块用于:根据修改行的行号判定代码规范性检查出的违反行属于修改行时,输出违反信息。
下面,以svn(Subversion,一款主流的开源配置管理工具)为例详细说明本发明实施例的方法。
svn在配置管理领域具有一定的代表性,其在国内外已被广泛运用于文档、源代码文件等信息的版本管理。svn是一款C/S(Client/Server,客户端/服务端)架构的配置管理工具,在使用时需要搭建一台svn服务端,并在服务端上配置好版本库。用户需要在自己的工作机上安装svn客户端工具,并通过网络与svn服务端进行交互;与svn服务端进行交互的交互内容包括身份认证、提交代码、查看日志、获取指定版本等操作。当用户使用其他配置管理工具(例如Concurrent Versions System,一种版本控制系统,简称CVS)时,其工作原理与svn基本一致。
开发人员将源代码文件从客户端发送至svn服务端之前,开发人员需要在客户端(即自己的工作机)上对指定的代码进行代码规范性检查。
参见图2所示,在svn客户端上实施本发明的方法的步骤如下:
步骤101:对svn代码拷贝路径下需要检查的源代码文件执行svndiff命令,生成diff日志文件(比较文本文件),即差异信息文件。diff日志文件包括源代码文件的修改信息,修改信息包括源代码文件的修改行的行号,根据源代码文件的修改行的行号识别修改行。
如果没有svn代码拷贝,可以通过svn的checkout(检出)命令从svn服务端上获取一份代码拷贝。
生成diff日志文件时,可使用不同的svn命令参数以适应于不同的使用场景。当开发人员在将源代码文件发送至svn服务端之前,需要对源代码文件进行代码规范性检查时,应将本地最新的代码与svn服务端上最新的代码版本进行比对,生成差异信息文件;当开发人员需要对某个特定时间段或两个特定版本下的代码进行检查时,则需要提供两个时间段或两个特定的svn版本号来生成diff日志文件。
步骤102:遍历diff日志文件,对diff日志文件中所有的修改行进行分析,根据修改行的行号判断相邻修改行的行号是否连续,若连续,则将行号连续的修改行合并成修改块,并记录修改块的起始行号和结束行号;否则将行号不连续的修改行标记为修改块,并记录修改块的起始行号和结束行号。
步骤103:在源代码文件中循环遍历所有的修改块,判断每个修改块的起始行号至结束行号的区间是否全部处于代码块的起始行号至结束行号的区间,若是,则将将代码块标记为修改代码块,将代码块的起始行号和结束行号标记为修改代码块的起始行号和结束行号,否则将修改块标记为修改代码块,将修改块的起始行号和结束行号标记为修改代码块起始行号和结束行号。
步骤104:根据所有修改代码块的起始行号和结束行号,遍历所有的修改代码块,对所有标记为修改代码块的代码进行整合。整合时,判断任意两个修改代码块的起始行号至结束行号的区间是否交叉,若是,则合并两个起始行号至结束行号的区间交叉的修改代码块,记录合并之后的修改代码块的起始行号和结束行号,否则转到步骤105。
步骤105:将整合后的代码以修改代码块的方式标记为最小检查单位,并发送至代码检查程序进行代码规范性检查,检查时,根据修改行的行号判断违反行是否属于修改行,若是,则输出违反行的违反信息,否则输出没有违反行的违反信息。
开发人员在svn客户端上对源代码文件进行代码规范性检查时,可以仅查看到少量由本次修改而引入的不规范问题,而属于未修改过的第三方代码的不规范问题被有效屏蔽,避免了不必要的干扰。
另外,开发人员另进行代码规范性检查时,可以只针对某一时间段或某两个版本间修改的代码进行审查,屏蔽属于第三方代码导致的不规范问题,使审查结果更为准确合理。
在svn服务端上实施本发明的方法时,需要结合svn提供的钩子(hook)技术。svn的钩子技术是一种事件触发技术,可以使svn服务端在某些特定时间点(如提交前、提交后、版本库发生改变时等)自动调用事先编写好的bat(批处理)文件来执行特定的附加任务。
参见图3所示,在svn服务端上结合钩子技术实施本发明的方法的步骤如下:
步骤201:通过svn钩子中的提交前钩子,使svn服务端自动捕获每次代码提交(commit)动作,同时,svn服务端在代码提交动作发生前自动触发后续分析检查的程序。
步骤202:在svn服务端获取当前提交的日志。
步骤202为可选步骤,如果开发人员需要在特定情况下跳过后续的分析检查程序,可以在svn客户端执行提交动作时,在当前提交的日志中填入某些约定的字符。svn服务端获取当前提交的日志后,svn服务端如发现有约定的字符,则中止分析和检查程序,只执行正常的提交动作。
步骤203:在svn服务端获取当前新增和更新的文件列表。
步骤204:在svn服务端上生成diff日志文件,即差异信息文件。diff日志文件包括源代码文件的修改信息,修改信息包括源代码文件的修改行的行号。
步骤205:根据步骤203中每一个新增和更新的文件所属的源代码文件,对diff日志文件进行拆分。
由于步骤204中生成的diff日志文件是针对所有文件的差异信息,因此需要将diff日志文件进行拆分,以使得每个新增和更新的文件均有一份对应的diff日志文件。
步骤206:遍历diff日志文件,根据源代码文件的修改行的行号识别修改行;对diff日志文件中所有的修改行进行分析,根据修改行的行号判断相邻修改行的行号是否连续,若行号连续,则将行号连续的修改行合并成修改块,并记录修改块的起始行号和结束行号;否则将行号不连续的修改行标记为修改块,并记录修改块的起始行号和结束行号。
步骤207:在svn服务端读取与diff日志文件对应的源代码文件内容,在源代码文件中循环遍历所有的修改块,判断每个修改块的起始行号至结束行号的区间是否全部处于代码块的起始行号至结束行号的区间,若是,则将将代码块标记为修改代码块,将代码块的起始行号和结束行号标记为修改代码块的起始行号和结束行号,否则将修改块标记为修改代码块,将修改块的起始行号和结束行号标记为修改代码块起始行号和结束行号。
步骤208:根据所有修改代码块的起始行号和结束行号,遍历所有的修改代码块,对所有标记为修改代码块的代码进行整合。整合时,判断任意两个修改代码块的起始行号至结束行号的区间是否交叉,若是,则合并两个起始行号至结束行号的区间交叉的修改代码块,记录合并之后的修改代码块的起始行号和结束行号,否则转到步骤209。
步骤209:将整合后的代码以修改代码块的方式标记为最小检查单位,并发送至代码检查程序进行代码规范性检查,检查时,根据修改行的行号判断违反行是否属于修改行,若是,则输出违反行的违反信息,否则输出没有违反行的违反信息。
步骤210:将检查结果(违反信息)反馈至svn客户端,同时给代码提交人发送邮件信息,邮件信息中包括详细的检查结果。
在svn服务端识别和检查修改代码块时,需要先获知当前提交时新增或更新了哪些源代码文件,然后生成当前提交的差异信息文件。与svn客户端生成的差异信息文件不同,svn服务端生成的差异信息文件是对当前提交的所有新增和更新的文件的差异信息汇总,而svn客户端每次执行svn diff命令生成的差异信息是针对单个文件的。在svn服务端需要对差异信息文件进行拆分、并归属到各自对应的源代码文件。在svn服务端读取源代码文件的内容时,无法直接从磁盘上读取,必须从svn服务端上的版本库中读取。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (10)

1.一种基于差异信息文件识别和检查修改代码块的方法,其特征在于,包括以下步骤:
A、通过源代码文件管理工具生成差异信息文件,所述差异信息文件中记录有源代码文件的修改信息,所述修改信息包括源代码文件的修改行的行号,根据源代码文件的修改行的行号识别修改行;
B、判断相邻修改行的行号是否连续,若连续,则将连续的修改行合并成修改块,并记录修改块的起始行号和结束行号;若不连续,则直接将修改行标记为修改块,并记录修改块的起始行号和结束行号;
C、判断修改块的起始行号至结束行号的区间是否全部处于代码块的起始行号至结束行号的区间内,若是,则将代码块标记为修改代码块,否则将修改块标记为修改代码块;
D、对所有标记为修改代码块的代码进行整合;
E、对整合后的代码进行代码规范性检查。
2.如权利要求1所述的基于差异信息文件识别和检查修改代码块的方法,其特征在于:步骤A中所述修改信息包括修改类型和修改代码内容,所述修改类型包括新增、删除和替换。
3.如权利要求1所述的基于差异信息文件识别和检查修改代码块的方法,其特征在于,步骤C中包括以下步骤:在源代码文件中遍历所有的修改块,判断每个修改块的起始行号至结束行号的区间是否全部处于代码块起始行号至结束行号的区间,若是,将代码块标记为修改代码块,将代码块的起始行号和结束行号标记修改代码块的起始行号和结束行号;否则将修改块标记为修改代码块,将修改块的起始行号和结束行号标记修改代码块的起始行号和结束行号。
4.如权利要求3所述的基于差异信息文件识别和检查修改代码块的方法,其特征在于,步骤D中包括以下步骤:根据所有修改代码块的起始行号和结束行号,遍历所有的修改代码块,判定任意两个修改代码块的起始行号至结束行号的区间交叉时,合并两个起始行号至结束行号的区间交叉的修改代码块,并记录合并之后的修改代码块的起始行号和结束行号。
5.如权利要求4所述的基于差异信息文件识别和检查修改代码块的方法,其特征在于,步骤D中还包括以下步骤:判定任意两个修改代码块的起始行号至结束行号的区间没有交叉时,直接转到步骤E。
6.如权利要求1至5中任一项所述的基于差异信息文件识别和检查修改代码块的方法,其特征在于,步骤E中包括以下步骤:根据修改行的行号判定代码规范性检查出的违反行属于修改行时,输出违反行的违反信息。
7.如权利要求6所述的基于差异信息文件识别和检查修改代码块的方法,其特征在于,步骤E中还包括以下步骤:判定代码规范性检查出的所有违反行均不属于修改行时,输出没有违反行的违反信息。
8.一种基于差异信息文件识别和检查修改代码块的装置,其特征在于,包括差异信息文件生成模块、修改块确定模块、修改代码块标记模块、代码整合模块和代码检查模块,其中:
所述差异信息文件生成模块,用于:通过源代码文件管理工具生成差异信息文件,所述差异信息文件中记录有源代码文件的修改信息,所述修改信息包括源代码文件的修改行的行号,根据源代码文件的修改行的行号识别修改行;
所述修改块确定模块,用于:判断相邻修改行的行号是否连续,若连续,则将连续的修改行合并成修改块,并记录修改块的起始行号和结束行号;若不连续,则直接将修改行标记为修改块,并记录修改块的起始行号和结束行号;
所述修改代码块标记模块,用于:判断修改块的起始行号至结束行号的区间是否全部处于代码块的起始行号至结束行号的区间内,若是,则将代码块标记为修改代码块,否则将修改块标记为修改代码块;
所述代码整合模块,用于:对所有标记为修改代码块的代码进行整合;
所述代码检查模块,用于:对整合后的代码进行代码规范性检查。
9.如权利要求8所述的基于差异信息文件识别和检查修改代码块的装置,其特征在于:所述代码整合模块包括修改代码块判定子模块,所述修改代码块判定子模块用于:根据所有修改代码块的起始行号和结束行号,遍历所有的修改代码块,判定任意两个修改代码块的起始行号至结束行号的区间交叉时,合并两个起始行号至结束行号的区间交叉的修改代码块,记录合并之后的修改代码块的起始行号和结束行号。
10.如权利要求8或9所述的基于差异信息文件识别和检查修改代码块的装置,其特征在于:所述代码检查模块包括违反行判定子模块,所述违反行判定子模块用于:根据修改行的行号判定代码规范性检查出的违反行属于修改行时,输出违反信息。
CN201310045390.XA 2013-02-05 2013-02-05 基于差异信息文件识别和检查修改代码块的方法及装置 Active CN103092761B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310045390.XA CN103092761B (zh) 2013-02-05 2013-02-05 基于差异信息文件识别和检查修改代码块的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310045390.XA CN103092761B (zh) 2013-02-05 2013-02-05 基于差异信息文件识别和检查修改代码块的方法及装置

Publications (2)

Publication Number Publication Date
CN103092761A true CN103092761A (zh) 2013-05-08
CN103092761B CN103092761B (zh) 2015-05-27

Family

ID=48205362

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310045390.XA Active CN103092761B (zh) 2013-02-05 2013-02-05 基于差异信息文件识别和检查修改代码块的方法及装置

Country Status (1)

Country Link
CN (1) CN103092761B (zh)

Cited By (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103677831A (zh) * 2013-12-12 2014-03-26 迈普通信技术股份有限公司 在线代码审查系统及方法
CN103699637A (zh) * 2013-12-23 2014-04-02 国云科技股份有限公司 一种代码生产率统计方法及其系统
CN104461578A (zh) * 2014-12-26 2015-03-25 广州唯品会信息科技有限公司 代码自动合并方法和系统
CN105843740A (zh) * 2016-03-23 2016-08-10 腾讯科技(深圳)有限公司 代码编译结果的检测方法和装置
CN105843871A (zh) * 2016-03-18 2016-08-10 中国银联股份有限公司 分布式应用文件的控制与管理系统
CN106095681A (zh) * 2016-06-14 2016-11-09 深圳市彬讯科技有限公司 一种SVN集成JSHint代码检测方法及其系统
CN106201861A (zh) * 2015-05-07 2016-12-07 阿里巴巴集团控股有限公司 一种代码质量的检测方法及装置
CN106294140A (zh) * 2016-08-02 2017-01-04 中国科学院软件研究所 一种基于代码仓库提交说明的PoC快速生成方法
CN106445476A (zh) * 2015-08-11 2017-02-22 腾讯科技(深圳)有限公司 一种代码变更信息确定方法、装置及电子设备
CN106874180A (zh) * 2015-12-11 2017-06-20 财团法人资讯工业策进会 检测系统及其方法
CN108241502A (zh) * 2016-12-26 2018-07-03 航天信息股份有限公司 一种代码持续集成的方法及装置
CN109359028A (zh) * 2018-08-22 2019-02-19 平安科技(深圳)有限公司 代码质量监控方法、装置、计算机设备及存储介质
CN109710510A (zh) * 2018-08-20 2019-05-03 中国平安人寿保险股份有限公司 代码提交方法、装置、设备及可读存储介质
CN109800152A (zh) * 2018-12-14 2019-05-24 平安普惠企业管理有限公司 一种自动化测试方法及终端设备
CN109828781A (zh) * 2018-12-29 2019-05-31 天津字节跳动科技有限公司 用于问题排查的源码版本定位方法、装置、介质和设备
CN110046067A (zh) * 2019-04-22 2019-07-23 无线生活(杭州)信息科技有限公司 接口测试方法及装置
CN110231937A (zh) * 2019-05-20 2019-09-13 平安科技(深圳)有限公司 脚本缺陷扫描方法、装置、计算机设备和存储介质
CN110704298A (zh) * 2019-08-23 2020-01-17 北京奇艺世纪科技有限公司 一种代码验证的方法、装置、终端设备及存储介质
CN111309631A (zh) * 2020-03-16 2020-06-19 深信服科技股份有限公司 一种代码审计方法、装置、设备及计算机可读存储介质
CN111752819A (zh) * 2019-03-29 2020-10-09 广州市百果园信息技术有限公司 一种异常监控方法、装置、系统、设备和存储介质
CN117573564A (zh) * 2024-01-15 2024-02-20 智业软件股份有限公司 一种基于gitlab代码提交日志自动识别差异的方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010176594A (ja) * 2009-01-30 2010-08-12 Kyocera Mita Corp ソースコードバージョン管理プログラム及びソースコードバージョン管理方法
CN102279749A (zh) * 2011-08-30 2011-12-14 大唐移动通信设备有限公司 一种代码归并方法和设备

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010176594A (ja) * 2009-01-30 2010-08-12 Kyocera Mita Corp ソースコードバージョン管理プログラム及びソースコードバージョン管理方法
CN102279749A (zh) * 2011-08-30 2011-12-14 大唐移动通信设备有限公司 一种代码归并方法和设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
刘庆林: "领域模型差异检测与合并算法研究", 《中国学位论文全文数据库》 *

Cited By (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103677831B (zh) * 2013-12-12 2017-02-08 迈普通信技术股份有限公司 在线代码审查系统及方法
CN103677831A (zh) * 2013-12-12 2014-03-26 迈普通信技术股份有限公司 在线代码审查系统及方法
CN103699637A (zh) * 2013-12-23 2014-04-02 国云科技股份有限公司 一种代码生产率统计方法及其系统
CN103699637B (zh) * 2013-12-23 2017-02-08 国云科技股份有限公司 一种代码生产率统计方法及其系统
CN104461578A (zh) * 2014-12-26 2015-03-25 广州唯品会信息科技有限公司 代码自动合并方法和系统
CN104461578B (zh) * 2014-12-26 2018-09-11 广州品唯软件有限公司 代码自动合并方法和系统
CN106201861A (zh) * 2015-05-07 2016-12-07 阿里巴巴集团控股有限公司 一种代码质量的检测方法及装置
CN106445476B (zh) * 2015-08-11 2020-04-07 腾讯科技(深圳)有限公司 一种代码变更信息确定方法、装置及电子设备
CN106445476A (zh) * 2015-08-11 2017-02-22 腾讯科技(深圳)有限公司 一种代码变更信息确定方法、装置及电子设备
CN106874180B (zh) * 2015-12-11 2020-09-11 财团法人资讯工业策进会 检测系统及其方法
US10489591B2 (en) 2015-12-11 2019-11-26 Institute For Information Industry Detection system and method thereof
CN106874180A (zh) * 2015-12-11 2017-06-20 财团法人资讯工业策进会 检测系统及其方法
TWI611349B (zh) * 2015-12-11 2018-01-11 財團法人資訊工業策進會 檢測系統及其方法
CN105843871A (zh) * 2016-03-18 2016-08-10 中国银联股份有限公司 分布式应用文件的控制与管理系统
CN105843871B (zh) * 2016-03-18 2020-02-28 中国银联股份有限公司 分布式应用文件的控制与管理系统
CN105843740A (zh) * 2016-03-23 2016-08-10 腾讯科技(深圳)有限公司 代码编译结果的检测方法和装置
CN106095681A (zh) * 2016-06-14 2016-11-09 深圳市彬讯科技有限公司 一种SVN集成JSHint代码检测方法及其系统
CN106294140B (zh) * 2016-08-02 2018-12-18 中国科学院软件研究所 一种基于代码仓库提交说明的PoC快速生成方法
CN106294140A (zh) * 2016-08-02 2017-01-04 中国科学院软件研究所 一种基于代码仓库提交说明的PoC快速生成方法
CN108241502A (zh) * 2016-12-26 2018-07-03 航天信息股份有限公司 一种代码持续集成的方法及装置
CN108241502B (zh) * 2016-12-26 2021-04-16 航天信息股份有限公司 一种代码持续集成的方法及装置
CN109710510A (zh) * 2018-08-20 2019-05-03 中国平安人寿保险股份有限公司 代码提交方法、装置、设备及可读存储介质
CN109359028A (zh) * 2018-08-22 2019-02-19 平安科技(深圳)有限公司 代码质量监控方法、装置、计算机设备及存储介质
CN109359028B (zh) * 2018-08-22 2024-05-03 平安科技(深圳)有限公司 代码质量监控方法、装置、计算机设备及存储介质
CN109800152A (zh) * 2018-12-14 2019-05-24 平安普惠企业管理有限公司 一种自动化测试方法及终端设备
CN109828781A (zh) * 2018-12-29 2019-05-31 天津字节跳动科技有限公司 用于问题排查的源码版本定位方法、装置、介质和设备
CN109828781B (zh) * 2018-12-29 2022-06-07 天津字节跳动科技有限公司 用于问题排查的源码版本定位方法、装置、介质和设备
CN111752819B (zh) * 2019-03-29 2024-04-05 广州市百果园信息技术有限公司 一种异常监控方法、装置、系统、设备和存储介质
CN111752819A (zh) * 2019-03-29 2020-10-09 广州市百果园信息技术有限公司 一种异常监控方法、装置、系统、设备和存储介质
CN110046067A (zh) * 2019-04-22 2019-07-23 无线生活(杭州)信息科技有限公司 接口测试方法及装置
CN110046067B (zh) * 2019-04-22 2023-10-31 无线生活(杭州)信息科技有限公司 接口测试方法及装置
CN110231937A (zh) * 2019-05-20 2019-09-13 平安科技(深圳)有限公司 脚本缺陷扫描方法、装置、计算机设备和存储介质
CN110704298A (zh) * 2019-08-23 2020-01-17 北京奇艺世纪科技有限公司 一种代码验证的方法、装置、终端设备及存储介质
CN111309631A (zh) * 2020-03-16 2020-06-19 深信服科技股份有限公司 一种代码审计方法、装置、设备及计算机可读存储介质
CN111309631B (zh) * 2020-03-16 2024-04-09 深信服科技股份有限公司 一种代码审计方法、装置、设备及计算机可读存储介质
CN117573564B (zh) * 2024-01-15 2024-03-26 智业软件股份有限公司 一种基于gitlab代码提交日志自动识别差异的方法
CN117573564A (zh) * 2024-01-15 2024-02-20 智业软件股份有限公司 一种基于gitlab代码提交日志自动识别差异的方法

Also Published As

Publication number Publication date
CN103092761B (zh) 2015-05-27

Similar Documents

Publication Publication Date Title
CN103092761B (zh) 基于差异信息文件识别和检查修改代码块的方法及装置
US11789715B2 (en) Systems and methods for transformation of reporting schema
US11620117B2 (en) Systems and methods for code clustering analysis and transformation
US11726760B2 (en) Systems and methods for entry point-based code analysis and transformation
US11436006B2 (en) Systems and methods for code analysis heat map interfaces
Nguyen et al. Topic-based defect prediction (nier track)
US20120159434A1 (en) Code clone notification and architectural change visualization
US8875103B2 (en) Method of testing multiple language versions of a software system using one test script
CN106843840B (zh) 一种基于相似度分析的源代码版本演化注释复用方法
Higo et al. On software maintenance process improvement based on code clone analysis
CN108763091B (zh) 用于回归测试的方法、装置及系统
CN103577168A (zh) 测试用例创建系统及方法
An et al. An empirical study of crash-inducing commits in mozilla firefox
CN113609008B (zh) 测试结果分析方法、装置和电子设备
Kuiter et al. Pclocator: A tool suite to automatically identify configurations for code locations
CN114116471A (zh) 一种自动化代码扫描方法、系统、电子设备与存储介质
Gupta et al. Software change impact analysis: an approach to differentiate type of change to minimise regression test selection
Hummel et al. Analyzing source code for automated design pattern recommendation
CN110321130A (zh) 基于系统调用日志的不可重复编译定位方法
CN118445214B (zh) 基于代码文件修改的测例获取方法、装置、设备、介质及产品
Feng et al. Towards Understanding Bugs in Go Programming Language
Mileva et al. Assessing modularity via usage changes
CN117111888A (zh) 详细设计文档的生成方法、装置、电子设备和存储介质
CN114780383A (zh) 一种接口单元测试系统及方法
Zhang et al. A formalized architecture-centric evolution process for component-based software system

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant