Lpc靜態(tài)代碼檢查方法、裝置和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及軟件測試領(lǐng)域,尤其涉及一種LPC靜態(tài)代碼檢查方法和裝置。
【背景技術(shù)】
[0002] 靜態(tài)代碼檢查是指在不運行代碼的方式下,通過詞法分析、語法分析、控制流分析 等技術(shù)對程序代碼進(jìn)行掃描,驗證代碼是否滿足規(guī)范性、安全性、可靠性、可維護(hù)性等指標(biāo) 的一種代碼分析技術(shù)。靜態(tài)代碼檢查對于一個游戲項目來說是必要的,靜態(tài)代碼檢查能夠 發(fā)現(xiàn)編譯器不能發(fā)現(xiàn)的問題,也可以自定義一些檢查規(guī)范,來檢查代碼編寫中不規(guī)范、存在 安全隱患的地方。
[0003] LPC全稱LarsPensj6C,是由LarsPensj6在1989年根據(jù)C語言開發(fā)的編程語言, 主要是用來編寫MUD游戲,使用LPC語言開發(fā)的MUD游戲被稱為LPMUD。
[0004] 現(xiàn)有的對LPC代碼進(jìn)行靜態(tài)代碼檢查方法主要為基于游戲客戶端的LPC靜態(tài)代碼 檢查方法,該方法主要檢查LPC代碼中函數(shù)調(diào)用問題,檢查時依賴于游戲客戶端,在游戲運 行過程中,通過LPC語言編寫分析代碼提取出文件的所有函數(shù)調(diào)用,然后通過分析頭文件 替換函數(shù)調(diào)用中的宏定義,最后借助游戲引擎提供的函數(shù)查詢接口,完成函數(shù)調(diào)用問題的 檢查。
【發(fā)明內(nèi)容】
[0005] 上述現(xiàn)有技術(shù)主要存在以下缺點:
[0006] 首先,該方法必須依賴于游戲客戶端才能運行,如果需要檢查其他分支的代碼就 必須關(guān)服并且重新編譯,使用起來非常不方便。此外,該方法檢查的問題比較單一,只能檢 查LPC語言中的函數(shù)調(diào)用問題。
[0007] 本發(fā)明實施例的目的在于提供了一種LPC靜態(tài)代碼檢查方法、裝置和系統(tǒng),實現(xiàn) 完全脫離于游戲客戶端的LPC靜態(tài)代碼檢查,對LPC代碼的不同問題進(jìn)行針對性的檢查,提 高代碼檢查的效率。
[0008] 為了實現(xiàn)上述目的,本發(fā)明實施例提供了一種LPC靜態(tài)代碼檢查方法,包括:
[0009] 獲取待檢查的LPC文件及公用頭文件;
[0010] 利用預(yù)先生成的詞法分析器和語法分析器對待檢查的LPC文件及公用頭文件進(jìn) 行詞法分析和語法分析,并構(gòu)建所述LPC文件的抽象語法樹;
[0011] 遍歷所述抽象語法樹,從所述LPC文件中提取需要檢查的程序關(guān)鍵信息;其中,所 述程序關(guān)鍵信息為預(yù)先設(shè)定的LPC信息類;
[0012] 對所述程序關(guān)鍵信息進(jìn)行預(yù)處理;
[0013] 利用所述詞法分析器和所述語法分析器對預(yù)處理后的程序關(guān)鍵信息進(jìn)行詞法分 析和語法分析。
[0014] 優(yōu)選地,在所述利用預(yù)先生成的詞法分析器和語法分析器對待檢查的LPC文件及 公用頭文件進(jìn)行詞法分析和語法分析之前,還包括:
[0015] 根據(jù)預(yù)先編寫的LPC語法描述文件利用語言識別工具ANTLR生成所述詞法分析器 和所述語法分析器。
[0016] 優(yōu)選地,所述遍歷所述抽象語法樹,從所述LPC文件中提取需要檢查的程序關(guān)鍵 信息,具體為:
[0017] 在對所述LPC文件進(jìn)行語法分析并構(gòu)建抽象語法樹的過程中,遍歷所述抽象語法 樹,從所述LPC文件中提取需要檢查的程序關(guān)鍵信息。
[0018] 優(yōu)選地,所述程序關(guān)鍵信息包括函數(shù)定義、函數(shù)聲明、宏定義函數(shù)和引擎函數(shù)中的 一種或多種組合。
[0019] 優(yōu)選地,所述對所述程序關(guān)鍵信息進(jìn)行預(yù)處理,具體為:
[0020] 判斷所述程序關(guān)鍵信息是否已被執(zhí)行詞法分析和語法分析;
[0021] 若是,則跳過所述程序關(guān)鍵信息;
[0022] 若否,則對所述程序關(guān)鍵信息進(jìn)行預(yù)處理。
[0023] 優(yōu)選地,所述對所述程序關(guān)鍵信息進(jìn)行預(yù)處理,具體為:
[0024] 對所述程序關(guān)鍵信息的進(jìn)行展開。
[0025] 優(yōu)選地,在所述利用所述詞法分析器和所述語法分析器對預(yù)處理后的程序關(guān)鍵信 息進(jìn)行詞法分析和語法分析之后,還包括:
[0026] 對檢查結(jié)果進(jìn)行顯示;其中,所述檢查結(jié)果包含出錯的分支、出錯的文件、出錯的 行號、出錯的信息、出錯文件的最后修改作者和出錯文件的最后修改時間中的一種或多種 組合。
[0027] 優(yōu)選地,所述LPC靜態(tài)代碼檢查方法還包括:
[0028] 將所述檢查結(jié)果通過郵件發(fā)送到指定的郵箱。
[0029] 優(yōu)選地,所述獲取待檢查的LPC文件及公用頭文件,具體為:
[0030] 接收待檢查文件的路徑或者目錄;
[0031] 根據(jù)需要檢查的文件類型,從所述路徑或者目錄下查找LPC文件及公用頭文件, 形成待檢查文件的初步列表;
[0032] 對所述初步列表中重復(fù)的文件進(jìn)行去重處理,并根據(jù)預(yù)先設(shè)置的忽略文件列表對 所述初步列表中需要忽略的文件進(jìn)行忽略處理,獲取所述待檢查的LPC文件及公用頭文 件。
[0033] 本發(fā)明實施例提供了另一種LPC靜態(tài)代碼檢查方法,包括:
[0034] 接收客戶端發(fā)送的對待檢查文件進(jìn)行靜態(tài)代碼檢查的請求;
[0035] 將與所述請求對應(yīng)的靜態(tài)代碼檢查任務(wù)分發(fā)給代碼檢查服務(wù)器;觸發(fā)所述代碼檢 查服務(wù)器通過如前所述的LPC靜態(tài)代碼檢查方法對所述待檢查文件進(jìn)行靜態(tài)代碼檢查。
[0036] 優(yōu)選地,所述將與所述請求對應(yīng)的靜態(tài)代碼檢查任務(wù)分發(fā)給代碼檢查服務(wù)器,具 體為:
[0037] 根據(jù)所述待檢查文件所屬的代碼倉庫的類型、所述待檢查文件所屬的代碼分支或 者所述靜態(tài)代碼檢查任務(wù)的類型,將所述靜態(tài)代碼檢查任務(wù)分發(fā)給不同的代碼檢查服務(wù) 器。
[0038] 優(yōu)選地,所述LPC靜態(tài)代碼檢查方法還包括:
[0039] 通過公共網(wǎng)關(guān)接口定時輪詢所述代碼檢查服務(wù)器傳回的靜態(tài)代碼檢查日志,并對 輪詢的結(jié)果進(jìn)行顯示。
[0040] 優(yōu)選地,所述LPC靜態(tài)代碼檢查方法還包括:
[0041] 對檢查結(jié)果進(jìn)行統(tǒng)計,并對統(tǒng)計的結(jié)果進(jìn)行顯示。
[0042] 相應(yīng)地,本發(fā)明提供了第一種LPC靜態(tài)代碼檢查裝置,包括:
[0043] 待檢查文件獲取模塊,用于獲取待檢查的LPC文件及公用頭文件;
[0044] 第一檢查模塊,用于利用預(yù)先生成的詞法分析器和語法分析器對待檢查的LPC文 件及公用頭文件進(jìn)行詞法分析和語法分析,并構(gòu)建所述LPC文件的抽象語法樹;
[0045] 關(guān)鍵信息提取模塊,用于遍歷所述抽象語法樹,從所述LPC文件中提取需要檢查 的程序關(guān)鍵信息;其中,所述程序關(guān)鍵信息為預(yù)先設(shè)定的LPC信息類;
[0046] 關(guān)鍵信息預(yù)處理模塊,用于對所述程序關(guān)鍵信息進(jìn)行預(yù)處理;和,
[0047] 第二檢查模塊,用于利用所述詞法分析器和所述語法分析器對預(yù)處理后的程序關(guān) 鍵信息進(jìn)行詞法分析和語法分析。
[0048] 優(yōu)選地,所述裝置還包括:
[0049] 分析器生成模塊,用于根據(jù)預(yù)先編寫的LPC語法描述文件利用語言識別工具 ANTLR生成所述詞法分析器和所述語法分析器。
[0050] 優(yōu)選地,所述關(guān)鍵信息提取模塊包括:
[0051] 提取單元,用于在對所述LPC文件進(jìn)行語法分析并構(gòu)建抽象語法樹的過程中,遍 歷所述抽象語法樹,從所述LPC文件中提取需要檢查的程序關(guān)鍵信息。
[0052] 優(yōu)選地,所述程序關(guān)鍵信息包括函數(shù)定義、函數(shù)聲明、宏定義函數(shù)和引擎函數(shù)中的 一種或多種組合。
[0053] 優(yōu)選地,所述關(guān)鍵信息預(yù)處理模塊包括:
[0054] 判斷單元,用于判斷所述程序關(guān)鍵信息是否已被執(zhí)行詞法分析和語法分析;
[0055] 空操作單元,用于當(dāng)所述程序關(guān)鍵信息已被執(zhí)行詞法分析和語法分析時,跳過所 述程序關(guān)鍵信息;
[0056] 預(yù)處理單元,用于對所述程序關(guān)鍵信息進(jìn)行預(yù)處理。
[0057] 優(yōu)選地,所述關(guān)鍵信息預(yù)處理模塊包括:
[0058] 預(yù)處理單元,用于對所述程序關(guān)鍵信息的進(jìn)行展開。
[0059] 優(yōu)選地,所述裝置還包括:
[0060] 結(jié)果顯示模塊,用于對檢查結(jié)果進(jìn)行顯示;其中,所述檢查結(jié)果包含出錯的分支、 出錯的文件、出錯的行號、出錯的信息、出錯文件的最后修改作者和出錯文件的最后修改時 間中的一種或多種組合。
[0061] 優(yōu)選地,所述裝置還包括:
[0062] 結(jié)果發(fā)送模塊,用于將所述檢查結(jié)果通過郵件發(fā)送到指定的郵箱。
[0063] 優(yōu)選地,所述