專利名稱:基于差異信息文件識別和檢查修改代碼塊的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及源代碼文件檢查領(lǐng)域,尤其涉及一種基于差異信息文件識別和檢查修改代碼塊的方法及裝置。
背景技術(shù):
在軟件開發(fā)的過程中,經(jīng)常會出現(xiàn)在開源或第三方商業(yè)代碼文件的基礎(chǔ)上進(jìn)行二次開發(fā)的情況。經(jīng)過二次開發(fā)后的源代碼文件由兩部分組成:一部分是原始的開源或商業(yè)代碼;另一部分是二次開發(fā)時新增或修改的代碼。這兩部分出自于不同的開發(fā)團(tuán)隊,所遵循的編碼規(guī)范一般存在差異。對源代碼文件修改后,為了保證修改的源代碼文件符合編碼規(guī)范,一般需要通過代碼檢查分析工具對修改的源代碼文件進(jìn)行檢查。對修改的源代碼文件進(jìn)行檢查,如果采用二次開發(fā)時所遵循的編碼規(guī)范對整個源代碼文件進(jìn)行規(guī)范性檢查,源代碼文件中的原始部分將可能被檢查出大量的違反信息;因此,進(jìn)行代碼規(guī)范性檢查的主要對象僅僅是修改的代碼塊(代碼塊是編程語言中的邏輯單位,對代碼進(jìn)行代碼規(guī)范性檢查和復(fù)雜度分析時,必須以代碼塊為最小單位,否則無法進(jìn)行)。但是,常規(guī)的代碼檢查分析工具對修改的源代碼文件進(jìn)行檢查時存在以下缺陷:(I)由于常規(guī)的代碼檢查分析工具缺乏對修改代碼的識別功能,因此代碼檢查分析工具不僅無法得知源代碼文件中的哪些代碼已經(jīng)修改,需要進(jìn)行檢查;也無法得知哪些代碼未修改,不需進(jìn)行檢查。代碼檢查分析工具檢查修改后的源代碼文件時,只能對修改后的源代碼文件的全文進(jìn)行檢查。因此,代碼檢查分析工具反饋的輸出違反信息中,有大量代碼是未修改的源代碼文件;如根據(jù)代碼檢查分析工具檢查的結(jié)果對未修改的源代碼文件進(jìn)行修改,不僅可能引入新的錯誤(bug),進(jìn)而對源代碼文件造成不必要的危害,而且需要進(jìn)行額外的測試,增大了工作量,工作效率較低。(2)對于較大的源代碼文件(例如上萬或幾十萬行的源代碼文件)而言,采用代碼檢查分析工具對源代碼文件的全文進(jìn)行檢查時,需要耗費較長的檢查時間,工作效率較低。
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種基于差異信息文件識別和檢查修改代碼塊的方法及裝置。它能夠?qū)π薷拇a塊進(jìn)行識別,通過本發(fā)明識別出的修改代碼塊進(jìn)行代碼規(guī)范性檢查時,只需檢查修改代碼塊中的代碼是否違反代碼規(guī)范,不僅檢查時間較短,工作效率較高,而且保證了修改后的源代碼文件使用的安全。為達(dá)到以上目的,本發(fā)明提供的基于差異信息文件識別和檢查修改代碼塊的方法,包括以下步驟:A、通過源代碼文件管理工具生成差異信息文件,所述差異信息文件中記錄有源代碼文件的修改信息,所述修改信息包括源代碼文件的修改行的行號,根據(jù)源代碼文件的修改行的行號識別修改行;B、判斷相鄰修改行的行號是否連續(xù),若連續(xù),則將連續(xù)的修改行合并成修改塊,并記錄修改塊的起始行號和結(jié)束行號;若不連續(xù),則直接將修改行標(biāo)記為修改塊,并記錄修改塊的起始行號和結(jié)束行號;C、判斷修改塊的起始行號至結(jié)束行號的區(qū)間是否全部處于代碼塊的起始行號至結(jié)束行號的區(qū)間內(nèi),若是,則將代碼塊標(biāo)記為修改代碼塊,否則將修改塊標(biāo)記為修改代碼塊;D、對所有標(biāo)記為修改代碼塊的代碼進(jìn)行整合;
E、對整合后的代碼進(jìn)行代碼規(guī)范性檢查。在上述技術(shù)方案的基礎(chǔ)上,步驟A中所述修改信息包括修改類型和修改代碼內(nèi)容,所述修改類型包括新增、刪除和替換。在上述技術(shù)方案的基礎(chǔ)上,步驟C中包括以下步驟:在源代碼文件中遍歷所有的修改塊,判斷每個修改塊的起始行號至結(jié)束行號的區(qū)間是否全部處于代碼塊起始行號至結(jié)束行號的區(qū)間,若是,將代碼塊標(biāo)記為修改代碼塊,將代碼塊的起始行號和結(jié)束行號標(biāo)記修改代碼塊的起始行號和結(jié)束行號;否則將修改塊標(biāo)記為修改代碼塊,將修改塊的起始行號和結(jié)束行號標(biāo)記修改代碼塊的起始行號和結(jié)束行號。在上述技術(shù)方案的基礎(chǔ)上,步驟D中包括以下步驟:根據(jù)所有修改代碼塊的起始行號和結(jié)束行號,遍歷所有的修改代碼塊,判定任意兩個修改代碼塊的起始行號至結(jié)束行號的區(qū)間交叉時,合并兩個起始行號至結(jié)束行號的區(qū)間交叉的修改代碼塊,并記錄合并之后的修改代碼塊的起始行號和結(jié)束行號。在上述技術(shù)方案的基礎(chǔ)上,步驟D中還包括以下步驟:判定任意兩個修改代碼塊的起始行號至結(jié)束行號的區(qū)間沒有交叉時,直接轉(zhuǎn)到步驟E。在上述技術(shù)方案的基礎(chǔ)上,步驟E中包括以下步驟:根據(jù)修改行的行號判定代碼規(guī)范性檢查出的違反行屬于修改行時,輸出違反行的違反信息。在上述技術(shù)方案的基礎(chǔ)上,步驟E中還包括以下步驟:判定代碼規(guī)范性檢查出的所有違反行均不屬于修改行時,輸出沒有違反行的違反信息。本發(fā)明提供的基于差異信息文件識別和檢查修改代碼塊的裝置,其特征在于,包括差異信息文件生成模塊、修改塊確定模塊、修改代碼塊標(biāo)記模塊、代碼整合模塊和代碼檢查模塊,其中:所述差異信息文件生成模塊,用于:通過源代碼文件管理工具生成差異信息文件,所述差異信息文件中記錄有源代碼文件的修改信息,所述修改信息包括源代碼文件的修改行的行號,根據(jù)源代碼文件的修改行的行號識別修改行;所述修改塊確定模塊,用于:判斷相鄰修改行的行號是否連續(xù),若連續(xù),則將連續(xù)的修改行合并成修改塊,并記錄修改塊的起始行號和結(jié)束行號;若不連續(xù),則直接將修改行標(biāo)記為修改塊,并記錄修改塊的起始行號和結(jié)束行號;所述修改代碼塊標(biāo)記模塊,用于:判斷修改塊的起始行號至結(jié)束行號的區(qū)間是否全部處于代碼塊的起始行號至結(jié)束行號的區(qū)間內(nèi),若是,則將代碼塊標(biāo)記為修改代碼塊,否則將修改塊標(biāo)記為修改代碼塊;所述代碼整合模塊,用于:對所有標(biāo)記為修改代碼塊的代碼進(jìn)行整合;所述代碼檢查模塊,用于:對整合后的代碼進(jìn)行代碼規(guī)范性檢查。在上述技術(shù)方案的基礎(chǔ)上,所述代碼整合模塊包括修改代碼塊判定子模塊,所述修改代碼塊判定子模塊用于:根據(jù)所有修改代碼塊的起始行號和結(jié)束行號,遍歷所有的修改代碼塊,判定任意兩個修改代碼塊的起始行號至結(jié)束行號的區(qū)間交叉時,合并兩個起始行號至結(jié)束行號的區(qū)間交叉的修改代碼塊,記錄合并之后的修改代碼塊的起始行號和結(jié)束行號。在上述技術(shù)方案的基礎(chǔ)上,所述代碼檢查模塊包括違反行判定子模塊,所述違反行判定子模塊用于:根據(jù)修改行的行號判定代碼規(guī)范性檢查出的違反行屬于修改行時,輸出違反信息。與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果在于:(I)本發(fā)明識別和檢查修改代碼塊時,以代碼塊為最小單位。在進(jìn)行代碼規(guī)范性檢查時,僅僅針對代碼行的檢查是不夠的。例如有這樣一條規(guī)范:循環(huán)語句中禁止修改循環(huán)變量,如果在循環(huán)語句中增加了一行代碼,而這行代碼正好就對循環(huán)變量進(jìn)行了修改,僅對這一行代碼進(jìn)行檢查就無法發(fā)現(xiàn)修改循環(huán)變量的問題。還有另有一條規(guī)范:函數(shù)體不能超過500行,假設(shè)在原本有499行的函數(shù)中增加了兩行代碼,致使函數(shù)體達(dá)到了 501行,針對代碼行的檢查無法發(fā)現(xiàn)代碼行超出的問題。因此,要進(jìn)行正常的代碼規(guī)范性檢查,檢查的最小單位不是代碼行,而是代碼塊。綜上所述,本發(fā)明識別和檢查修改代碼塊時均以代碼塊為最小單位,修改代碼塊能夠準(zhǔn)確的檢查。(2)本發(fā)明僅將識別的修改代碼塊發(fā)送至代碼檢查分析工具進(jìn)行檢查,代碼檢查分析工具檢查的不是完整的源代碼文件,僅僅只是修改代碼快中修改過的小部分代碼。與現(xiàn)有技術(shù)中的代碼檢查分析工具檢查完整的源代碼文件相比,本發(fā)明只需檢查修改代碼塊中的代碼是否違反代碼規(guī)范,不僅耗費的檢查時間較短,工作效率較高;而且本發(fā)明能夠根據(jù)修改行的行號確定修改代碼塊中的修改行,當(dāng)修改代碼塊中的代碼違反代碼編碼規(guī)范時,代碼檢查分析工具才會輸出違反信息。因此,通過本發(fā)明識別的修改代碼塊被代碼檢查分析工具檢查時,能夠有效的避免修改代碼塊中出現(xiàn)新的錯誤,進(jìn)而保證了源代碼文件的安全;同時,對于識別出的修改代碼塊,還可以進(jìn)行諸如代碼量統(tǒng)計、復(fù)雜度計算等其他后續(xù)工作。
圖1為本發(fā)明實施例中方法的流程圖;圖2為本發(fā)明實施例在svn客戶端實施的流程圖;圖3為本發(fā)明實施例在svn服務(wù)端實施的流程圖。
具體實施例方式以下結(jié)合附圖及實施例對本發(fā)明作進(jìn)一步詳細(xì)說明。參見圖1所示,本發(fā)明實施例提供的基于差異信息文件識別和檢查修改代碼塊的方法,包括以下步驟:S1:通過源代碼文件管理工具生成差異信息文件,差異信息文件包括源代碼文件的修改信息,修改信息包括源代碼文件的修改行的行號、修改類型和修改代碼內(nèi)容,修改類型包括新增、刪除和替換。差異信息文件中一般以“ + ”代表新增,代表刪除,代表替換。S2:遍歷差異信息文件,對差異信息文件中的所有修改行的行號進(jìn)行分析,判斷相鄰修改行的行號是否連續(xù),若行號連續(xù),則將行號連續(xù)的修改行合并成修改塊,并記錄修改塊的起始行號和結(jié)束行號;否則直接將行號不連續(xù)的修改行標(biāo)記為修改塊,并記錄修改塊的起始行號和結(jié)束行號。本發(fā)明實施例中的修改塊是指:通過差異信息文件分析得出的一段連續(xù)的修改代碼。例如:一份源代碼文件中的修改行為第7行、第8行、第25行、第26行和第27行均被修改,則通過差異信息文件可以得知:源代碼文件中有兩個修改塊;第一個修改塊的起始行號至結(jié)束行號的區(qū)間為第7行起至第8行止,第二個修改塊的起始行號至結(jié)束行號的區(qū)間為第25行起至第27行止。由于差異信息文件中會出現(xiàn)大量連續(xù)的修改行,因此將連續(xù)的修改行合并為修改塊可以便于后續(xù)步驟的處理,減少冗余信息。由于源代碼文件中的修改行會存在多處的不連續(xù)內(nèi)容,因此修改塊會有多個。S3:在源代碼文件中遍歷所有的修改塊。S4:判斷每個修改塊的起始行號至結(jié)束行號的區(qū)間是否全部處于代碼塊的起始行號至結(jié)束行號的區(qū)間內(nèi),若是,則轉(zhuǎn)到步驟S5,否則轉(zhuǎn)到步驟S6。本發(fā)明實施例中的代碼塊是指:編程語言中的邏輯單位。以C語言為例,代碼塊可能是函數(shù)、結(jié)構(gòu)體、共同體等。在對代碼進(jìn)行代碼規(guī)范性檢查和復(fù)雜度分析時,必須以代碼塊為最小單位,否則無法進(jìn)行。S5:將代碼塊標(biāo)記為修改代碼塊,將代碼塊的起始行號和結(jié)束行號標(biāo)記為修改代碼塊的起始行號和結(jié)束行號。S6:將修改塊標(biāo)記為修改代碼塊,將修改塊的起始行號和結(jié)束行號標(biāo)記為修改代碼塊起始行號和結(jié)束行號。S7:根據(jù)所有修改代碼塊的起始行號和結(jié)束行號,遍歷所有修改代碼塊,對所有標(biāo)記為修改代碼塊的代碼進(jìn)行整合。S8:判斷任意兩個修改代碼塊的起始行號至結(jié)束行號的區(qū)間是否交叉,若是,則轉(zhuǎn)到步驟S9;否則轉(zhuǎn)到步驟S10。S9:合并兩個起始行號至結(jié)束行號的區(qū)間交叉的修改代碼塊,并記錄合并之后的修改代碼塊的起始行號和結(jié)束行號。SlO:將修改代碼塊標(biāo)記為最小檢查單位,發(fā)送至代碼檢查分析工具,檢查分析工具對整合后的代碼進(jìn)行代碼規(guī)范性檢查進(jìn)行代碼規(guī)范性檢查。Sll:根據(jù)修改行的行號判斷代碼規(guī)范性檢查出的違反行是否屬于修改行,若是,則轉(zhuǎn)到步驟S12,否則轉(zhuǎn)到步驟S13。完成代碼規(guī)范性檢查。S12:代碼檢查分析工具輸出違反行的違反信息。S13:代碼檢查分析工具輸出沒有違反行的違反信息。代碼檢查分析工具根據(jù)編碼規(guī)范對所有修改代碼塊進(jìn)行檢查,修改代碼塊中的代碼違反編碼規(guī)范時,代碼檢查分析工具輸出違反信息。對于修改代碼塊中修改的代碼行的行數(shù)較少(例如只有一行或少數(shù)幾行)時,為了避免代碼檢查分析工具對未修改的代碼進(jìn)行檢查,在檢查分析工具輸出違反信息之前,可以針對用戶不同的需求,根據(jù)修改行的行號對輸出違反信息的違反行進(jìn)行判斷;一般當(dāng)違反行屬于修改行時,才輸出違反信息。本發(fā)明實施例提供的基于差異信息文件識別和檢查修改代碼塊的裝置,包括差異信息文件生成模塊、修改塊確定模塊、修改代碼塊標(biāo)記模塊、代碼整合模塊和代碼檢查模塊。
差異信息文件生成模塊,用于:通過源代碼文件管理工具生成差異信息文件,所述差異信息文件中記錄有源代碼文件的修改信息,所述修改信息包括源代碼文件的修改行的行號,根據(jù)源代碼文件的修改行的行號識別修改行。修改塊確定模塊,用于:判斷相鄰修改行的行號是否連續(xù),若連續(xù),則將連續(xù)的修改行合并成修改塊,并記錄修改塊的起始行號和結(jié)束行號;若不連續(xù),則直接將修改行標(biāo)記為修改塊,并記錄修改塊的起始行號和結(jié)束行號。修改代碼塊標(biāo)記模塊,用于:判斷修改塊的起始行號至結(jié)束行號的區(qū)間是否全部處于代碼塊的起始行號至結(jié)束行號的區(qū)間內(nèi),若是,則將代碼塊標(biāo)記為修改代碼塊,否則將修改塊標(biāo)記為修改代碼塊。代碼整合模塊,用于:對所有標(biāo)記為修改代碼塊的代碼進(jìn)行整合。代碼整合模塊包括修改代碼塊判定子模塊,修改代碼塊判定子模塊用于:根據(jù)所有修改代碼塊的起始行號和結(jié)束行號,遍歷所有的修改代碼塊,判定任意兩個修改代碼塊的起始行號至結(jié)束行號的區(qū)間交叉時,合并兩個起始行號至結(jié)束行號的區(qū)間交叉的修改代碼塊,記錄合并之后的修改代碼塊的起始行號和結(jié)束行號。代碼檢查模塊,用于:對整合后的代碼進(jìn)行代碼規(guī)范性檢查。代碼檢查模塊包括違反行判定子模塊,違反行判定子模塊用于:根據(jù)修改行的行號判定代碼規(guī)范性檢查出的違反行屬于修改行時,輸出違反信息。下面,以svn (Subversion, 一款主流的開源配置管理工具)為例詳細(xì)說明本發(fā)明實施例的方法。svn在配置管理領(lǐng)域具有一定的代表性,其在國內(nèi)外已被廣泛運用于文檔、源代碼文件等信息的版本管理。svn是一款C/S (Client/Server,客戶端/服務(wù)端)架構(gòu)的配置管理工具,在使用時需要搭建一臺svn服務(wù)端,并在服務(wù)端上配置好版本庫。用戶需要在自己的工作機(jī)上安裝svn客戶端工具,并通過網(wǎng)絡(luò)與svn服務(wù)端進(jìn)行交互;與svn服務(wù)端進(jìn)行交互的交互內(nèi)容包括身份認(rèn)證、提交代碼、查看日志、獲取指定版本等操作。當(dāng)用戶使用其他配置管理工具(例如Concurrent Versions System,一種版本控制系統(tǒng),簡稱CVS)時,其工作原理與svn基本一致。開發(fā)人員將源代碼文件從客戶端發(fā)送至svn服務(wù)端之前,開發(fā)人員需要在客戶端(即自己的工作機(jī))上對指定的代碼進(jìn)行代碼規(guī)范性檢查。參見圖2所示,在svn客戶端上實施本發(fā)明的方法的步驟如下:步驟101:對svn代碼拷貝路徑下需要檢查的源代碼文件執(zhí)行svndiff命令,生成diff日志文件(比較文本文件),即差異信息文件。diff日志文件包括源代碼文件的修改信息,修改信息包括源代碼文件的修改行的行號,根據(jù)源代碼文件的修改行的行號識別修改行。如果沒有svn代碼拷貝,可以通過svn的checkout (檢出)命令從svn服務(wù)端上獲取一份代碼拷貝。生成diff日志文件時,可使用不同的svn命令參數(shù)以適應(yīng)于不同的使用場景。當(dāng)開發(fā)人員在將源代碼文件發(fā)送至svn服務(wù)端之前,需要對源代碼文件進(jìn)行代碼規(guī)范性檢查時,應(yīng)將本地最新的代碼與svn服務(wù)端上最新的代碼版本進(jìn)行比對,生成差異信息文件;當(dāng)開發(fā)人員需要對某個特定時間段或兩個特定版本下的代碼進(jìn)行檢查時,則需要提供兩個時間段或兩個特定的svn版本號來生成diff日志文件。步驟102:遍歷diff日志文件,對diff日志文件中所有的修改行進(jìn)行分析,根據(jù)修改行的行號判斷相鄰修改行的行號是否連續(xù),若連續(xù),則將行號連續(xù)的修改行合并成修改塊,并記錄修改塊的起始行號和結(jié)束行號;否則將行號不連續(xù)的修改行標(biāo)記為修改塊,并記錄修改塊的起始行號和結(jié)束行號。步驟103:在源代碼文件中循環(huán)遍歷所有的修改塊,判斷每個修改塊的起始行號至結(jié)束行號的區(qū)間是否全部處于代碼塊的起始行號至結(jié)束行號的區(qū)間,若是,則將將代碼塊標(biāo)記為修改代碼塊,將代碼塊的起始行號和結(jié)束行號標(biāo)記為修改代碼塊的起始行號和結(jié)束行號,否則將修改塊標(biāo)記為修改代碼塊,將修改塊的起始行號和結(jié)束行號標(biāo)記為修改代碼塊起始行號和結(jié)束行號。步驟104:根據(jù)所有修改代碼塊的起始行號和結(jié)束行號,遍歷所有的修改代碼塊,對所有標(biāo)記為修改代碼塊的代碼進(jìn)行整合。整合時,判斷任意兩個修改代碼塊的起始行號至結(jié)束行號的區(qū)間是否交叉,若是,則合并兩個起始行號至結(jié)束行號的區(qū)間交叉的修改代碼塊,記錄合并之后的修改代碼塊的起始行號和結(jié)束行號,否則轉(zhuǎn)到步驟105。步驟105:將整合后的代碼以修改代碼塊的方式標(biāo)記為最小檢查單位,并發(fā)送至代碼檢查程序進(jìn)行代碼規(guī)范性檢查,檢查時,根據(jù)修改行的行號判斷違反行是否屬于修改行,若是,則輸出違反行的違反信息,否則輸出沒有違反行的違反信息。開發(fā)人員在svn客戶端上對源代碼文件進(jìn)行代碼規(guī)范性檢查時,可以僅查看到少量由本次修改而引入的不規(guī)范問題,而屬于未修改過的第三方代碼的不規(guī)范問題被有效屏蔽,避免了不必要的干擾。另外,開發(fā)人員另進(jìn)行代碼規(guī)范性檢查時,可以只針對某一時間段或某兩個版本間修改的代碼進(jìn)行審查,屏蔽屬于第三方代碼導(dǎo)致的不規(guī)范問題,使審查結(jié)果更為準(zhǔn)確合理。在svn服務(wù)端上實施本發(fā)明的方法時,需要結(jié)合svn提供的鉤子(hook)技術(shù)。svn的鉤子技術(shù)是一種事件觸發(fā)技術(shù),可以使svn服務(wù)端在某些特定時間點(如提交前、提交后、版本庫發(fā)生改變時等)自動調(diào)用事先編寫好的bat (批處理)文件來執(zhí)行特定的附加任務(wù)。參見圖3所示,在svn服務(wù)端上結(jié)合鉤子技術(shù)實施本發(fā)明的方法的步驟如下:步驟201:通過svn鉤子中的提交前鉤子,使svn服務(wù)端自動捕獲每次代碼提交(commit)動作,同時,svn服務(wù)端在代碼提交動作發(fā)生前自動觸發(fā)后續(xù)分析檢查的程序。步驟202:在svn服務(wù)端獲取當(dāng)前提交的日志。步驟202為可選步驟,如果開發(fā)人員需要在特定情況下跳過后續(xù)的分析檢查程序,可以在svn客戶端執(zhí)行提交動作時,在當(dāng)前提交的日志中填入某些約定的字符。svn服務(wù)端獲取當(dāng)前提交的日志后,svn服務(wù)端如發(fā)現(xiàn)有約定的字符,則中止分析和檢查程序,只執(zhí)行正常的提交動作。步驟203:在svn服務(wù)端獲取當(dāng)前新增和更新的文件列表。步驟204:在svn服務(wù)端上生成diff日志文件,即差異信息文件。diff日志文件包括源代碼文件的修改信息,修改信息包括源代碼文件的修改行的行號。步驟205:根據(jù)步驟203中每一個新增和更新的文件所屬的源代碼文件,對diff日志文件進(jìn)行拆分。由于步驟204中生成的diff日志文件是針對所有文件的差異信息,因此需要將diff日志文件進(jìn)行拆分,以使得每個新增和更新的文件均有一份對應(yīng)的diff日志文件。步驟206:遍歷diff日志文件,根據(jù)源代碼文件的修改行的行號識別修改行;對diff日志文件中所有的修改行進(jìn)行分析,根據(jù)修改行的行號判斷相鄰修改行的行號是否連續(xù),若行號連續(xù),則將行號連續(xù)的修改行合并成修改塊,并記錄修改塊的起始行號和結(jié)束行號;否則將行號不連續(xù)的修改行標(biāo)記為修改塊,并記錄修改塊的起始行號和結(jié)束行號。步驟207:在svn服務(wù)端讀取與diff日志文件對應(yīng)的源代碼文件內(nèi)容,在源代碼文件中循環(huán)遍歷所有的修改塊,判斷每個修改塊的起始行號至結(jié)束行號的區(qū)間是否全部處于代碼塊的起始行號至結(jié)束行號的區(qū)間,若是,則將將代碼塊標(biāo)記為修改代碼塊,將代碼塊的起始行號和結(jié)束行號標(biāo)記為修改代碼塊的起始行號和結(jié)束行號,否則將修改塊標(biāo)記為修改代碼塊,將修改塊的起始行號和結(jié)束行號標(biāo)記為修改代碼塊起始行號和結(jié)束行號。步驟208:根據(jù)所有修改代碼塊的起始行號和結(jié)束行號,遍歷所有的修改代碼塊,對所有標(biāo)記為修改代碼塊的代碼進(jìn)行整合。整合時,判斷任意兩個修改代碼塊的起始行號至結(jié)束行號的區(qū)間是否交叉,若是,則合并兩個起始行號至結(jié)束行號的區(qū)間交叉的修改代碼塊,記錄合并之后的修改代碼塊的起始行號和結(jié)束行號,否則轉(zhuǎn)到步驟209。步驟209:將整合后的代碼以修改代碼塊的方式標(biāo)記為最小檢查單位,并發(fā)送至代碼檢查程序進(jìn)行代碼規(guī)范性檢查,檢查時,根據(jù)修改行的行號判斷違反行是否屬于修改行,若是,則輸出違反行的違反信息,否則輸出沒有違反行的違反信息。步驟210:將檢查結(jié)果(違反信息)反饋至svn客戶端,同時給代碼提交人發(fā)送郵件信息,郵件信息中包括詳細(xì)的檢查結(jié)果。在svn服務(wù)端識別和檢查修改代碼塊時,需要先獲知當(dāng)前提交時新增或更新了哪些源代碼文件,然后生成當(dāng)前提交的差異信息文件。與svn客戶端生成的差異信息文件不同,svn服務(wù)端生成的差異信息文件是對當(dāng)前提交的所有新增和更新的文件的差異信息匯總,而svn客戶端每次執(zhí)行svn diff命令生成的差異信息是針對單個文件的。在svn服務(wù)端需要對差異信息文件進(jìn)行拆分、并歸屬到各自對應(yīng)的源代碼文件。在svn服務(wù)端讀取源代碼文件的內(nèi)容時,無法直接從磁盤上讀取,必須從svn服務(wù)端上的版本庫中讀取。本發(fā)明不局限于上述實施方式,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。
權(quán)利要求
1.一種基于差異信息文件識別和檢查修改代碼塊的方法,其特征在于,包括以下步驟: A、通過源代碼文件管理工具生成差異信息文件,所述差異信息文件中記錄有源代碼文件的修改信息,所述修改信息包括源代碼文件的修改行的行號,根據(jù)源代碼文件的修改行的行號識別修改行; B、判斷相鄰修改行的行號是否連續(xù),若連續(xù),則將連續(xù)的修改行合并成修改塊,并記錄修改塊的起始行號和結(jié)束行號;若不連續(xù),則直接將修改行標(biāo)記為修改塊,并記錄修改塊的起始行號和結(jié)束行號; C、判斷修改塊的起始行號至結(jié)束行號的區(qū)間是否全部處于代碼塊的起始行號至結(jié)束行號的區(qū)間 內(nèi),若是,則將代碼塊標(biāo)記為修改代碼塊,否則將修改塊標(biāo)記為修改代碼塊; D、對所有標(biāo)記為修改代碼塊的代碼進(jìn)行整合; E、對整合后的代碼進(jìn)行代碼規(guī)范性檢查。
2.按權(quán)利要求1所述的基于差異信息文件識別和檢查修改代碼塊的方法,其特征在于:步驟A中所述修改信息包括修改類型和修改代碼內(nèi)容,所述修改類型包括新增、刪除和替換。
3.按權(quán)利要求1所述的基于差異信息文件識別和檢查修改代碼塊的方法,其特征在于,步驟C中包括以下步驟:在源代碼文件中遍歷所有的修改塊,判斷每個修改塊的起始行號至結(jié)束行號的區(qū)間是否全部處于代碼塊起始行號至結(jié)束行號的區(qū)間,若是,將代碼塊標(biāo)記為修改代碼塊,將代碼塊的起始行號和結(jié)束行號標(biāo)記修改代碼塊的起始行號和結(jié)束行號;否則將修改塊標(biāo)記為修改代碼塊,將修改塊的起始行號和結(jié)束行號標(biāo)記修改代碼塊的起始行號和結(jié)束行號。
4.按權(quán)利要求3所述的基于差異信息文件識別和檢查修改代碼塊的方法,其特征在于,步驟D中包括以下步驟:根據(jù)所有修改代碼塊的起始行號和結(jié)束行號,遍歷所有的修改代碼塊,判定任意兩個修改代碼塊的起始行號至結(jié)束行號的區(qū)間交叉時,合并兩個起始行號至結(jié)束行號的區(qū)間交叉的修改代碼塊,并記錄合并之后的修改代碼塊的起始行號和結(jié)束行號。
5.按權(quán)利要求4所述的基于差異信息文件識別和檢查修改代碼塊的方法,其特征在于,步驟D中還包括以下步驟:判定任意兩個修改代碼塊的起始行號至結(jié)束行號的區(qū)間沒有交叉時,直接轉(zhuǎn)到步驟E。
6.按權(quán)利要求1至5中任一項所述的基于差異信息文件識別和檢查修改代碼塊的方法,其特征在于,步驟E中包括以下步驟:根據(jù)修改行的行號判定代碼規(guī)范性檢查出的違反行屬于修改行時,輸出違反行的違反信息。
7.按權(quán)利要求6所述的基于差異信息文件識別和檢查修改代碼塊的方法,其特征在于,步驟E中還包括以下步驟:判定代碼規(guī)范性檢查出的所有違反行均不屬于修改行時,輸出沒有違反行的違反信息。
8.一種基于差異信息文件識別和檢查修改代碼塊的裝置,其特征在于,包括差異信息文件生成模塊、修改塊確定模塊、修改代碼塊標(biāo)記模塊、代碼整合模塊和代碼檢查模塊,其中: 所述差異信息文件生成模塊,用于:通過源代碼文件管理工具生成差異信息文件,所述差異信息文件中記錄有源代碼文件的修改信息,所述修改信息包括源代碼文件的修改行的行號,根據(jù)源代碼文件的修改行的行號識別修改行; 所述修改塊確定模塊,用于:判斷相鄰修改行的行號是否連續(xù),若連續(xù),則將連續(xù)的修改行合并成修改塊,并記錄修改塊的起始行號和結(jié)束行號;若不連續(xù),則直接將修改行標(biāo)記為修改塊,并記錄修改塊的起始行號和結(jié)束行號; 所述修改代碼塊標(biāo)記模塊,用于:判斷修改塊的起始行號至結(jié)束行號的區(qū)間是否全部處于代碼塊的起始行號至結(jié)束行號的區(qū)間內(nèi),若是,則將代碼塊標(biāo)記為修改代碼塊,否則將修改塊標(biāo)記為修改代碼塊; 所述代碼整合模塊,用于:對所有標(biāo)記為修改代碼塊的代碼進(jìn)行整合; 所述代碼檢查模塊,用于:對整合后的代碼進(jìn)行代碼規(guī)范性檢查。
9.按權(quán)利要求8所述的基于差異信息文件識別和檢查修改代碼塊的裝置,其特征在于:所述代碼整合模塊包括修改代碼塊判定子模塊,所述修改代碼塊判定子模塊用于:根據(jù)所有修改代碼塊的起始行號和結(jié)束行號,遍歷所有的修改代碼塊,判定任意兩個修改代碼塊的起始行號至結(jié)束行號的區(qū)間交叉時,合并兩個起始行號至結(jié)束行號的區(qū)間交叉的修改代碼塊,記錄合并之后的修改代碼塊的起始行號和結(jié)束行號。
10.按權(quán)利要求8或9所 述的基于差異信息文件識別和檢查修改代碼塊的裝置,其特征在于:所述代碼檢查模塊包括違反行判定子模塊,所述違反行判定子模塊用于:根據(jù)修改行的行號判定代碼規(guī)范性檢查出的違反行屬于修改行時,輸出違反信息。
全文摘要
本發(fā)明公開了一種基于差異信息文件識別和檢查修改代碼塊的方法及裝置,涉及源代碼文件檢查領(lǐng)域。該方法為通過源代碼文件管理工具生成包括修改行的行號的差異信息文件;判斷相鄰修改行的行號是否連續(xù),若連續(xù),將連續(xù)的修改行合并成修改塊;若不連續(xù),將修改行標(biāo)記為修改塊;判斷修改塊的區(qū)間是否全部處于代碼塊的區(qū)間內(nèi),若是,將代碼塊標(biāo)記為修改代碼塊,否則將修改塊標(biāo)記為修改代碼塊;對所有修改代碼塊進(jìn)行整合;對整合后的代碼進(jìn)行代碼規(guī)范性檢查。本發(fā)明能夠識別修改代碼塊,進(jìn)行代碼規(guī)范性檢查時,只需檢查修改代碼塊中的代碼是否違反代碼規(guī)范,不僅檢查時間較短,工作效率較高,而且保證了修改后的源代碼文件使用的安全。
文檔編號G06F11/36GK103092761SQ201310045390
公開日2013年5月8日 申請日期2013年2月5日 優(yōu)先權(quán)日2013年2月5日
發(fā)明者杜利, 夏冉 申請人:烽火通信科技股份有限公司