一種源代碼宏配對檢測方法
【專利摘要】本發(fā)明公開了一種源代碼宏配對檢測方法,包括接收待檢測的源代碼程序包;判斷源代碼程序包是否為強制提交文件;若是,則將所述源代碼程序包直接提交至所述代碼庫服務(wù)器;若否,則查詢所述源代碼程序包中的文件列表,對所述源代碼程序包中的源代碼文件進(jìn)行過濾,獲得新增或修改的源代碼文件;對所述新增或修改的源代碼文件逐一進(jìn)行宏配對檢測,并在所有新增或修改的源代碼文件的宏配對檢測無誤時,將所述源代碼程序包提交至所述代碼庫服務(wù)器。本發(fā)明提供的源代碼宏配對檢測方法能夠?qū)崟r、準(zhǔn)確地檢測出源代碼文件中的宏配對情況,將宏配對錯誤的源代碼及時攔截于代碼庫服務(wù)器之外,提高源代碼的可靠性和復(fù)用性。
【專利說明】一種源代碼宏配對檢測方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件源代碼檢測技術(shù),尤其涉及一種源代碼宏配對檢測方法。
【背景技術(shù)】
[0002]在大型軟件系統(tǒng)中,系統(tǒng)架構(gòu)的設(shè)計直接決定系統(tǒng)的質(zhì)量和可持續(xù)開發(fā)能力。源代碼缺陷檢測工具是相當(dāng)復(fù)雜的系統(tǒng),現(xiàn)有的一些開源檢測工具,雖然可以實現(xiàn)一定功能的代碼缺陷檢測,但是,目前大多數(shù)的檢測工具都將語法處理、檢測和錯誤報告等功能混合在一起,雖然在開發(fā)時難度較低,但可擴(kuò)展性和可維護(hù)性較差,且狀態(tài)過多容易導(dǎo)致存儲爆炸的問題。 [0003]在C/C++語言中,宏的判斷是實現(xiàn)其條件編譯的重要語法。其中,在C語言中主要使用“#if、#ifdef、#ifndef, #elif、#else、#endif”幾個宏關(guān)鍵字完成條件編譯,其中“#if"?/#endif”是需要成對出現(xiàn)的。在軟件系統(tǒng)較為簡單的情況下,程序員可以很好的解決宏配對的問題,但在較復(fù)雜的宏邏輯中,或者對兩套源代碼進(jìn)行合并時,則會常常出現(xiàn)宏不配對的情況,而源代碼編譯器在發(fā)生“#endif”等宏不匹配的情況時卻不報告錯誤。
[0004]為解決這個問題,現(xiàn)有的解決方案是在提交源代碼至代碼庫服務(wù)器之前/后,由人工對源代碼進(jìn)行審核;或者,采用一些自動構(gòu)建的方法,以固定周期自動更新代碼、編譯和測試,出現(xiàn)問題后發(fā)出警報。在上述的兩個解決方案中,人工的源代碼審核會消耗大量的人力,而人為審核常常會有疲倦帶來的疏忽,人工審核的可靠性非常低;自動構(gòu)建是源代碼上傳至服務(wù)器后的一個檢查工作,有一定的滯后性,同時如果代碼編譯器對宏不配對情況沒有報告錯誤時,也無法解決“#if與#endif”等宏匹配問題。
[0005]宏的不匹配是代碼安全的一大隱患。在后續(xù)的代碼維護(hù)中,宏失配會因為對源代碼的一個小修改而造成嚴(yán)重錯誤,或是經(jīng)過很長時間后才發(fā)現(xiàn)宏失配,也要花很長時間來查閱源代碼,重新理解各部分源代碼的工作原理,再分析在源代碼的宏失配的具體位置,以補全這個宏。因此有必要將代碼中宏匹配情況及時有效的檢測出來,或?qū)⒉缓细竦拇a攔截在代碼庫之外,防止錯誤擴(kuò)散。
【發(fā)明內(nèi)容】
[0006]本發(fā)明所要解決的技術(shù)問題是,提供一種源代碼宏配對檢測方法,實現(xiàn)對源代碼程序包中的宏的配對情況進(jìn)行自動檢測,并只有在宏配對檢測無誤時才將所述源代碼程序包提交至代碼庫服務(wù)器,防止錯誤代碼的擴(kuò)散,提高源代碼的可靠性和復(fù)用性。
[0007]為解決以上技術(shù)問題,本發(fā)明實施例提供一種源代碼宏配對檢測方法,應(yīng)用于將源代碼提交至代碼庫服務(wù)器之前進(jìn)行宏配對檢測,所述方法包括:
接收待檢測的源代碼程序包;所述源代碼程序包包括多個源代碼文件;
判斷所述源代碼程序包是否為強制提交文件;若是,則將所述源代碼程序包直接提交至所述代碼庫服務(wù)器;若否,則查詢所述源代碼程序包中的文件列表,對所述源代碼程序包中的源代碼文件進(jìn)行過濾,獲得新增或修改的源代碼文件;對所述新增或修改的源代碼文件逐一進(jìn)行宏配對檢測,并在所有新增或修改的源代碼文件的宏配對檢測無誤時,將所述源代碼程序包提交至所述代碼庫服務(wù)器。
[0008]進(jìn)一步地,所述對所述新增或修改的源代碼文件逐一進(jìn)行宏配對檢測,包括:
逐一讀取所述新增或修改的源代碼文件;
調(diào)用宏配對檢測算法對每一個所述新增或修改的源代碼文件進(jìn)行宏配對檢測,統(tǒng)計每一個所述新增或修改的源代碼文件的錯誤宏計數(shù)值;
統(tǒng)計所有新增或修改的源代碼文件的錯誤宏總計數(shù)值;
判斷所述錯誤宏總計數(shù)值是否為零;當(dāng)所述錯誤宏總計數(shù)值為零時,則返回提交成功標(biāo)識,并將所述源代碼程序包提交至所述代碼庫服務(wù)器;當(dāng)所述錯誤宏總計數(shù)值為非零時,則返回提交失敗標(biāo)識,中止提交所述源代碼程序包。
[0009]作為一種可實現(xiàn)方式,所述宏配對檢測算法,具體為:
對任一待檢測源代碼文件進(jìn)行預(yù)處理;
搜索預(yù)處理后的待檢測源代碼文件中的宏關(guān)鍵字;
對所述宏關(guān)鍵字進(jìn)行計數(shù),以判斷所述宏關(guān)鍵字是否一一匹配,并統(tǒng)計獲得所述錯誤宏計數(shù)值;
返回所述待檢測源代碼文件的錯誤宏計數(shù)值。
[0010]進(jìn)一步地,所述對源代碼文件進(jìn)行預(yù)處理,包括:
還原所述源代碼文件中的續(xù)行符和去除所述源代碼文件中的代碼注釋。
[0011]所述對所述宏關(guān)鍵字進(jìn)行計數(shù),以判斷所述宏關(guān)鍵字是否一一匹配,并統(tǒng)計獲得所述錯誤宏計數(shù)值,包括:
搜索所述待檢測源文件的所有宏關(guān)鍵字;所述宏關(guān)鍵字包括多對一一匹配的起始關(guān)鍵字和結(jié)束關(guān)鍵字;
對所述宏關(guān)鍵字進(jìn)行計數(shù),包括:
當(dāng)檢測到任意一個起始關(guān)鍵字時,對所述宏關(guān)鍵字的計數(shù)值“加一”處理;當(dāng)檢測到任意一個結(jié)束關(guān)鍵字時,對所述宏關(guān)鍵字的計數(shù)值“減一”處理;所述宏關(guān)鍵字的計數(shù)值的初始值為零;
對所述待檢測源文件的錯誤宏計數(shù)值進(jìn)行統(tǒng)計,包括:對所述宏關(guān)鍵字的計數(shù)值進(jìn)行實時監(jiān)測;
當(dāng)監(jiān)測到所述宏關(guān)鍵字的當(dāng)前計數(shù)值為負(fù)值時,對所述錯誤宏計數(shù)值“加一”處理;當(dāng)監(jiān)測到所述宏關(guān)鍵字的當(dāng)前計數(shù)值為零,且檢測所述待檢測源文件存在代碼或“ #else”時,對所述錯誤宏計數(shù)值“加一”處理;
當(dāng)所述待檢測源文件被掃描完成后,所述宏關(guān)鍵字的當(dāng)前計數(shù)值為非零值時,對所述錯誤宏計數(shù)值“加一”處理;
統(tǒng)計并提交所述錯誤宏計數(shù)值。
[0012]本發(fā)明實施例提供的源代碼宏配對檢測方法,通過在將源代碼程序包提交至代碼庫服務(wù)器之前,執(zhí)行宏配對檢測,根據(jù)檢測結(jié)果決定是否將該源代碼程序包提交至所述代碼庫服務(wù)器,從而及時有效地將源代碼程序包中的各個源代碼文件的宏匹配情況檢測出來,將不合格的源代碼攔截在代碼庫服務(wù)器之外,防止錯誤擴(kuò)散,保證代碼庫服務(wù)器中的源代碼文件的可靠性。【專利附圖】
【附圖說明】
[0013]圖1是本發(fā)明提供的源代碼宏配對檢測方法的一個實施例的流程示意圖;
圖2是本發(fā)明實施例提供的代碼庫服務(wù)器與用戶的結(jié)構(gòu)關(guān)系圖;
圖3是本發(fā)明實施例提供的對所述新增或修改的源代碼文件逐一進(jìn)行宏配對檢測的流程示意圖;
圖4是本發(fā)明實施例提供的宏配對檢測算法的一種實現(xiàn)方式流程示意圖;
圖5是本發(fā)明實施例提供的統(tǒng)計錯誤宏計數(shù)值的一種實現(xiàn)方式流程示意圖。
【具體實施方式】
[0014]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述。
[0015]參見圖1,是本發(fā)明提供的源代碼宏配對檢測方法的一個實施例的結(jié)構(gòu)示意圖。
[0016]在本實施例中,所述的源代碼宏配對檢測方法,應(yīng)用于將源代碼提交至代碼庫服務(wù)器之前進(jìn)行宏配對檢測,所述方法包括以下步驟:
步驟S101:接收待檢測的源代碼程序包;所述源代碼程序包包括多個源代碼文件;步驟S102:判斷所述源代碼程序包是否為強制提交文件;若是,則執(zhí)行步驟S103 ;若否,則執(zhí)行步驟S104?步驟S105 ;
步驟S103:將所述源代碼程序包直接提交至所述代碼庫服務(wù)器。在程序執(zhí)行過程中,首先對提交的源代碼程序進(jìn)行掃描,為強制提交留下后門,跳過宏配對檢測,以應(yīng)對實際應(yīng)用中的某些特殊需求。
[0017]步驟S104:查詢所述源代碼程序包中的文件列表,對所述源代碼程序包中的源代碼文件進(jìn)行過濾,獲得新增或修改的源代碼文件;
步驟S105:對所述新增或修改的源代碼文件逐一進(jìn)行宏配對檢測,并在所有新增或修改的源代碼文件的宏配對檢測無誤時,將所述源代碼程序包提交至所述代碼庫服務(wù)器。具體地,為了節(jié)約中央處理器CPU時間,所述步驟S105中并非中把整個項目的源代碼程序包的源代碼文件進(jìn)行宏配對檢測,而是只針對本次源代碼程序包的提交過程中,對更新過的(新增或修改的源代碼文件)做宏配對檢測。因而通過過濾操作去除不必檢測的源代碼文件,再開始輪詢檢測每個新增或修改過的源代碼文件的宏配對情況,并對檢查到的錯誤進(jìn)行累加統(tǒng)計。輪詢檢測結(jié)束后按照錯誤宏計數(shù)的值返回成功或失敗標(biāo)識。
[0018]具體實施時,在軟件工程開發(fā)過程中,一個系統(tǒng)/項目的所有源代碼都由一個中心代碼庫服務(wù)器集中存儲。用戶可以從代碼庫服務(wù)器下載源代碼,對下載的源代碼根據(jù)實際需要進(jìn)行處理(新增、修改或測試等)后,然后將處理更新后的源代碼重新提交至代碼庫服務(wù)器進(jìn)行存儲。
[0019]參看圖2,是本發(fā)明實施例提供的代碼庫服務(wù)器與用戶的結(jié)構(gòu)關(guān)系圖。
[0020]如圖2所示,在具體實現(xiàn)過程中,多個用戶(用戶廣用戶N)可從代碼庫服務(wù)器200中下載所需要的源代碼程序包或具體的源代碼文件,并根據(jù)工程項目實施的需要對下載的源代碼進(jìn)行修改或補充,以獲得功能改進(jìn)或新功能的系統(tǒng)功能;在對源代碼進(jìn)行更新后重新上傳至代碼庫服務(wù)器200進(jìn)行存儲,以便于其他用戶的調(diào)用,提高源代碼的復(fù)用性。但是,若重新提交至代碼庫服務(wù)器200中的源代碼文件不經(jīng)檢測便存儲,則在其他用戶調(diào)用該更新后的源代碼文件以實現(xiàn)某一系統(tǒng)功能時,若該源代碼文件存在宏失配的情況,則有可能產(chǎn)生災(zāi)難性的后果,因此,在本實施例中,需要對源代碼進(jìn)行宏配對檢測。
[0021]優(yōu)選地,在所述步驟S105中,所述對所述新增或修改的源代碼文件逐一進(jìn)行宏配對檢測時,可根據(jù)每一個新增或修改的源代碼文件中的宏配對的統(tǒng)計情況,判斷是否可提交至代碼庫服務(wù)器。
[0022]參看圖3,是本發(fā)明實施例提供的對所述新增或修改的源代碼文件逐一進(jìn)行宏配對檢測的流程示意圖。
[0023]具體地,對待提交至代碼庫服務(wù)器200中的源代碼程序包中的每一個新增或修改的源代碼文件執(zhí)行宏配對檢測時,包括以下步驟:
步驟S301:逐一讀取所述新增或修改的源代碼文件;
步驟S302:調(diào)用宏配對檢測算法對每一個所述新增或修改的源代碼文件進(jìn)行宏配對檢測,統(tǒng)計每一個所述新增或修改的源代碼文件的錯誤宏計數(shù)值;其中,所述錯誤宏計數(shù)值的初始值為零;
步驟S303:統(tǒng)計所有新增或修改的源代碼文件的錯誤宏總計數(shù)值;對每一個新增或修改的源代碼文件的錯誤宏計數(shù)值進(jìn)行疊加,以獲得所述錯誤宏總計數(shù)值,即獲得了待提交至代碼庫服務(wù)器200的源代碼程序包的錯誤宏總計數(shù)值。
[0024]步驟S304:判斷所述錯誤宏總計數(shù)值是否為零;當(dāng)所述錯誤宏總計數(shù)值為零時,則執(zhí)行步驟S305 ;當(dāng)所述錯誤宏總計數(shù)值為非零時,則執(zhí)行步驟S306。
[0025]步驟S305:返回提交成功標(biāo)識,并將所述源代碼程序包提交至所述代碼庫服務(wù)器;
步驟S306:返回提交失敗標(biāo)識,中止提交所述源代碼程序包。
[0026]具體地實施時,通過執(zhí)行步驟S301?步驟S306所述的方法步驟,等價于在將源代碼程序包上傳至代碼庫服務(wù)器200之前,首先執(zhí)行一個“鉤子(Hook)”程序;該Hook程序在返回正常值(即本發(fā)明中的“提交成功標(biāo)識”),則繼續(xù)執(zhí)行提交操作,返回錯誤值(即本發(fā)明中的“提交失敗標(biāo)識”),則中止提交操作并返回錯誤。
[0027]鉤子(Hook)程序,是應(yīng)用程序中消息處理的一種機(jī)制,它允許外部程序來處理本應(yīng)用程序中特定的消息事件。具體地,本發(fā)明在接收到源代碼程序包提交請求時,在目標(biāo)處理函數(shù)(即源代碼提交至代碼庫服務(wù)器200)之前先處理該鉤子程序。鉤子(Hook)機(jī)制允許應(yīng)用程序截獲處理源代碼程序包提交請求消息或其它特定事件。
[0028]更進(jìn)一步地,本發(fā)明利用該Hook程序,來調(diào)用宏配對檢測算法。
[0029]參見圖4,是本發(fā)明實施例提供的宏配對檢測算法的一種實現(xiàn)方式流程示意圖。
[0030]如圖4所示,在本實施例提供的源代碼宏配對檢測方法中,所述宏配對檢測算法,具體為:
步驟S401:對任一待檢測源代碼文件進(jìn)行預(yù)處理;優(yōu)選地,所述步驟S401包括:還原所述源代碼文件中的續(xù)行符和去除所述待檢測源代碼文件中的代碼注釋。
[0031]步驟S402:搜索預(yù)處理后的待檢測源代碼文件中的宏關(guān)鍵字。
[0032]步驟S403:對所述宏關(guān)鍵字進(jìn)行計數(shù),以判斷所述宏關(guān)鍵字是否一一匹配,并統(tǒng)計獲得所述錯誤宏計數(shù)值。[0033]步驟S404:返回所述待檢測源代碼文件的錯誤宏計數(shù)值。
[0034]參見圖5,是本發(fā)明實施例提供的統(tǒng)計錯誤宏計數(shù)值的一種實現(xiàn)方式流程示意圖。
[0035]具體地,所述步驟S403包括:
步驟S501:搜索所述待檢測源文件的所有宏關(guān)鍵字;所述宏關(guān)鍵字包括多對一一匹配的起始關(guān)鍵字和結(jié)束關(guān)鍵字。
[0036]步驟S502:判斷所述宏關(guān)鍵字的類型,實現(xiàn)對所述宏關(guān)鍵字進(jìn)行計數(shù);當(dāng)檢測到任意一個起始關(guān)鍵字時,執(zhí)行步驟S503 ;當(dāng)檢測到任意一個結(jié)束關(guān)鍵字時,執(zhí)行步驟S504 ;
步驟S503:對所述宏關(guān)鍵字的計數(shù)值“加一”處理;
步驟S504:對所述宏關(guān)鍵字的計數(shù)值“減一”處理。其中,所述宏關(guān)鍵字的計數(shù)值的初始值為零;
步驟S505:根據(jù)所述宏關(guān)鍵字的當(dāng)前計數(shù)值,對所述待檢測源文件的錯誤宏計數(shù)值進(jìn)行統(tǒng)計,包括:對所述宏關(guān)鍵字的計數(shù)值進(jìn)行實時監(jiān)測;具體地,當(dāng)監(jiān)測到發(fā)生以下三種情況時,對所述錯誤宏計數(shù)值“加一”處理,包括:
(1)所述宏關(guān)鍵字的當(dāng)前計數(shù)值為負(fù)值;
(2)所述宏關(guān)鍵字的當(dāng)前計數(shù)值為零且檢測所述待檢測源文件存在代碼“#elif”或“#else”;
(3 )在所述待檢測源文件被掃描完成后,所述宏關(guān)鍵字的當(dāng)前計數(shù)值為非零值。
[0037]步驟S506:在所述源代碼文件掃描完成后,統(tǒng)計并提交所述錯誤宏計數(shù)值。
[0038]具體地,在C語言源代碼文件中,其條件編譯的“宏”都是以行為單位的,因此其源代碼分析也就要按行來分析。在分析前,需要整理代碼以防誤判斷。例如注釋行中行首含有“#if"*/#endif”之類的字符串。具體地,源代碼的預(yù)處理包括但不限于去除代碼注釋和還原續(xù)行符。其中,還原續(xù)行符就是把行尾字符為“\”的行,與下一行連接成一行,中間用空格隔開;去除代碼注釋包括單行注釋“//”及多行注釋“/* */”,即將源代碼中的注釋部分刪除。
[0039]在本實施例中,可通過設(shè)置宏關(guān)鍵字計數(shù)器對宏關(guān)鍵字進(jìn)行搜索和統(tǒng)計;具體地,該宏關(guān)鍵字計數(shù)器的初始值為零;當(dāng)搜索到起始關(guān)鍵字,如“#if”、“#ifdef”、“#ifndef”,宏關(guān)鍵字計數(shù)器的計數(shù)值加“1”;當(dāng)搜索到結(jié)束關(guān)鍵字,如“#endif”,宏關(guān)鍵字計數(shù)器的計數(shù)值減“1”;由于正常的源代碼文件中的“宏”都是起始關(guān)鍵字與結(jié)束關(guān)鍵字一一配對的,因此,在宏配對檢測的任一時刻中,若所述宏關(guān)鍵字的計數(shù)值為負(fù)值時,則說明該源代碼文件中當(dāng)前已經(jīng)出現(xiàn)了宏失配;而當(dāng)該源代碼文件被掃描完成后,其宏關(guān)鍵字的計數(shù)值的統(tǒng)計結(jié)果不為零時,也說明了該源代碼文件出現(xiàn)了宏失配。特別地,在宏配對檢測的任一時刻中,若所述宏關(guān)鍵字的計數(shù)值為零值但監(jiān)測到該源代碼文件中還存在著代碼“ #elif”或“#else”,說明該源代碼文件中缺少了對代碼或“#else”相配對的宏關(guān)鍵字,因此此時也出現(xiàn)了宏失配,即在宏關(guān)鍵字計數(shù)器的計算值為零的狀態(tài)下檢測到““#else”。因此,對以上三種出現(xiàn)宏失配的情況進(jìn)行了統(tǒng)計,將所述錯誤宏計數(shù)值加1,以反映該源代碼文件中的錯誤宏的數(shù)量。
[0040]當(dāng)統(tǒng)計完所有新增或修改的源代碼文件的宏關(guān)鍵字的情況后,對所得到的所有錯誤宏的數(shù)量進(jìn)行疊加,以得到待提交至代碼庫服務(wù)器200中的源代碼程序包的錯誤宏總計數(shù)值。在正常情況下,所述錯誤宏總計數(shù)值應(yīng)為零值;若該錯誤宏總計數(shù)值為非零值,則中止宏失配的源代碼程序包被提交至代碼庫服務(wù)器200中。
[0041]本發(fā)明提供的源代碼宏配對檢測方法,通過在提交更新后的源代碼程序包至代碼庫服務(wù)器之前,判斷所述源代碼程序包是否為強制提交文件,以滿足具體實施時的特殊需要;并在需要查詢宏匹配狀態(tài)的情況下,對所述源代碼程序包中的源代碼文件進(jìn)行過濾,獲得新增或修改的源代碼文件;對所述新增或修改的源代碼文件逐一進(jìn)行宏配對檢測,并在所有新增或修改的源代碼文件的宏配對檢測無誤時,將所述源代碼程序包提交至所述代碼庫服務(wù)器,減輕了 CPU的檢測時間和提高檢測的效率。實施本發(fā)明提供的源代碼宏配對檢測方法,能夠?qū)崟r、準(zhǔn)確地檢測出源代碼文件中的宏配對情況,將宏配對錯誤的代碼及時地攔截于代碼庫服務(wù)器之外,提高源代碼的可靠性和復(fù)用性。
[0042]以上所述是本發(fā)明的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍。
【權(quán)利要求】
1.一種源代碼宏配對檢測方法,其特征在于,應(yīng)用于將源代碼提交至代碼庫服務(wù)器之前進(jìn)行宏配對檢測,所述方法包括:接收待檢測的源代碼程序包;所述源代碼程序包包括多個源代碼文件;判斷所述源代碼程序包是否為強制提交文件;若是,則將所述源代碼程序包直接提交至所述代碼庫服務(wù)器;若否,則查詢所述源代碼程序包中的文件列表,對所述源代碼程序包中的源代碼文件進(jìn)行過濾,獲得新增或修改的源代碼文件;對所述新增或修改的源代碼文件逐一進(jìn)行宏配對檢測,并在所有新增或修改的源代碼文件的宏配對檢測無誤時,將所述源代碼程序包提交至所述代碼庫服務(wù)器。
2.如權(quán)利要求1所述的源代碼宏配對檢測方法,其特征在于,所述對所述新增或修改的源代碼文件逐一進(jìn)行宏配對檢測,包括: 逐一讀取所述新增或修改的源代碼文件;調(diào)用宏配對檢測算法對每一個所述新增或修改的源代碼文件進(jìn)行宏配對檢測,統(tǒng)計每一個所述新增或修改的源代碼文件的錯誤宏計數(shù)值;所述錯誤宏計數(shù)值的初始值為零;統(tǒng)計所有新增或修改的源代碼文件的錯誤宏總計數(shù)值;判斷所述錯誤宏總計數(shù)值是否為零;當(dāng)所述錯誤宏總計數(shù)值為零時,則返回提交成功標(biāo)識,并將所述源代碼程序包提交至所述代碼庫服務(wù)器;當(dāng)所述錯誤宏總計數(shù)值為非零時,則返回提交失敗標(biāo)識,中止提交所述源代碼程序包。
3.如權(quán)利要求2所述的源代碼宏配對檢測方法,其特征在于,所述宏配對檢測算法,具體為:對任一待檢測源代碼文件進(jìn)行預(yù)處理;搜索預(yù)處理后的待檢測源代碼文件中的宏關(guān)鍵字;對所述宏關(guān)鍵字進(jìn)行計數(shù),以判斷所述宏關(guān)鍵字是否一一匹配,并統(tǒng)計獲得所述錯誤宏計數(shù)值;返回所述待檢測源代碼文件的錯誤宏計數(shù)值。
4.如權(quán)利要求3所述的源代碼宏配對檢測方法,其特征在于,所述對源代碼文件進(jìn)行預(yù)處理,包括:還原所述源代碼文件中的續(xù)行符和去除所述源代碼文件中的代碼注釋。
5.如權(quán)利要求3所述的源代碼宏配對檢測方法,其特征在于,所述對所述宏關(guān)鍵字進(jìn)行計數(shù),以判斷所述宏關(guān)鍵字是否一一匹配,并統(tǒng)計獲得所述錯誤宏計數(shù)值,包括:搜索所述待檢測源文件的所有宏關(guān)鍵字;所述宏關(guān)鍵字包括多對一一匹配的起始關(guān)鍵字和結(jié)束關(guān)鍵字;對所述宏關(guān)鍵字進(jìn)行計數(shù),包括:當(dāng)檢測到任意一個起始關(guān)鍵字時,對所述宏關(guān)鍵字的計數(shù)值“加一”處理;當(dāng)檢測到任意一個結(jié)束關(guān)鍵字時,對所述宏關(guān)鍵字的計數(shù)值“減一”處理;所述宏關(guān)鍵字的計數(shù)值的初始值為零;對所述待檢測源文件的錯誤宏計數(shù)值進(jìn)行統(tǒng)計,包括:對所述宏關(guān)鍵字的計數(shù)值進(jìn)行實時監(jiān)測;當(dāng)監(jiān)測到所述宏關(guān)鍵字的當(dāng)前計數(shù)值為負(fù)值時,對所述錯誤宏計數(shù)值“加一”處理;當(dāng)監(jiān)測到所述宏關(guān)鍵字的當(dāng)前計數(shù)值為零,且檢測所述待檢測源文件存在代碼或“ #else”時,對所述錯誤宏計數(shù)值“加一”處理;當(dāng)所述待檢測源文件被掃描完成后,所述宏關(guān)鍵字的當(dāng)前計數(shù)值為非零值時,對所述錯誤宏計數(shù)值“加一”處理;統(tǒng)計并提交所述錯誤宏計數(shù)值。
【文檔編號】G06F11/36GK103645985SQ201310616319
【公開日】2014年3月19日 申請日期:2013年11月28日 優(yōu)先權(quán)日:2013年11月28日
【發(fā)明者】肖文鯤, 陳水明 申請人:廣州視源電子科技股份有限公司