一種代碼效率檢查方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及代碼檢查相關(guān)技術(shù)領(lǐng)域,特別是一種代碼效率檢查方法及系統(tǒng)。
【背景技術(shù)】
[0002]現(xiàn)有的大型的電商平臺(tái),并發(fā)量非常大,所以對(duì)代碼質(zhì)量和效率要求很高。對(duì)代碼進(jìn)行檢查的可以采用代碼檢查工具,例如:PMD、checkstyle、jalopy等。它們的共同特點(diǎn)如下為對(duì)代碼的以下情況進(jìn)行檢查,包括:代碼規(guī)范、空的catch塊、未使用參數(shù)、空if語(yǔ)句、重復(fù)的import語(yǔ)句、未使用的私有方法、Import語(yǔ)句、體積大小、空白、修飾符。
[0003]然而,現(xiàn)有的代碼檢查工具,其只是對(duì)代碼和語(yǔ)法方面做了嚴(yán)格的檢查,但是對(duì)于偏向代碼的效率并未能進(jìn)行檢查,即現(xiàn)有技術(shù)未能檢查代碼中是否有影響效率的地方。
【發(fā)明內(nèi)容】
[0004]基于此,有必要針對(duì)現(xiàn)有技術(shù)未能對(duì)代碼中是否有影響效率的地方進(jìn)行檢查的技術(shù)問(wèn)題,提供一種代碼效率檢查方法及系統(tǒng)。
[0005]一種代碼效率檢查方法,包括:
[0006]代碼文件獲取步驟,包括:獲取一個(gè)未檢查的代碼文件作為當(dāng)前代碼文件,所述代碼文件包括至少一條代碼,將所述代碼文件的第一條代碼作為當(dāng)前代碼,執(zhí)行代碼檢查步驟;
[0007]代碼檢查步驟,包括:對(duì)當(dāng)前代碼進(jìn)行檢查:如果當(dāng)前代碼為循環(huán)段落的起始標(biāo)識(shí),則向預(yù)設(shè)隊(duì)列中加入循環(huán)標(biāo)識(shí),執(zhí)行代碼結(jié)束判斷步驟;如果當(dāng)前代碼滿足預(yù)設(shè)的效率規(guī)則,且所述隊(duì)列中還保存有循環(huán)標(biāo)識(shí),則進(jìn)行告警記錄,執(zhí)行代碼結(jié)束判斷步驟;如果當(dāng)前代碼為循環(huán)段落的結(jié)束標(biāo)識(shí),則從所述隊(duì)列中移除循環(huán)標(biāo)識(shí),執(zhí)行代碼結(jié)束判斷步驟;
[0008]代碼結(jié)束判斷步驟,包括:如果所述代碼文件還有下一條代碼,則將下一條代碼作為當(dāng)前代碼,執(zhí)行代碼檢查步驟,否則執(zhí)行工程結(jié)束判斷步驟;
[0009]工程結(jié)束判斷步驟,包括:將所述當(dāng)前代碼文件設(shè)為已檢查的代碼文件,如果還有未檢查的代碼文件,則執(zhí)行獲取代碼文件獲取步驟,否則結(jié)束。
[0010]一種代碼效率檢查系統(tǒng),包括:
[0011]代碼文件獲取模塊,用于:獲取一個(gè)未檢查的代碼文件作為當(dāng)前代碼文件,所述代碼文件包括至少一條代碼,將所述代碼文件的第一條代碼作為當(dāng)前代碼,執(zhí)行代碼檢查模塊;
[0012]代碼檢查模塊,用于:對(duì)當(dāng)前代碼進(jìn)行檢查:如果當(dāng)前代碼為循環(huán)段落的起始標(biāo)識(shí),則向預(yù)設(shè)隊(duì)列中加入循環(huán)標(biāo)識(shí),執(zhí)行代碼結(jié)束判斷模塊;如果當(dāng)前代碼滿足預(yù)設(shè)的效率規(guī)則,且所述隊(duì)列中還保存有循環(huán)標(biāo)識(shí),則進(jìn)行告警記錄,執(zhí)行代碼結(jié)束判斷模塊;如果當(dāng)前代碼為循環(huán)段落的結(jié)束標(biāo)識(shí),則從所述隊(duì)列中移除循環(huán)標(biāo)識(shí),執(zhí)行代碼結(jié)束判斷模塊;
[0013]代碼結(jié)束判斷模塊,用于:如果所述代碼文件還有下一條代碼,則將下一條代碼作為當(dāng)前代碼,執(zhí)行代碼檢查模塊,否則執(zhí)行工程結(jié)束判斷模塊;
[0014]工程結(jié)束判斷模塊,用于:將所述當(dāng)前代碼文件設(shè)為已檢查的代碼文件,如果還有未檢查的代碼文件,則執(zhí)行獲取代碼文件獲取模塊,否則結(jié)束。
[0015]本發(fā)明通過(guò)對(duì)循環(huán)段落的起始標(biāo)識(shí)和結(jié)束標(biāo)識(shí)進(jìn)行判斷,確定循環(huán)段落所包括的代碼,如果循環(huán)段落所包括的代碼中存在有滿足預(yù)設(shè)的效率規(guī)則的代碼,則進(jìn)行告警操作。由于循環(huán)段落需要對(duì)代碼進(jìn)行多次循環(huán),在循環(huán)段落中出現(xiàn)足預(yù)設(shè)的效率規(guī)則的代碼,會(huì)大大影響代碼效率。本發(fā)明能夠通過(guò)掃描代碼,從中找出嚴(yán)重影響效率的代碼。
【附圖說(shuō)明】
[0016]圖1為本發(fā)明一種代碼效率檢查方法的工作流程圖;
[0017]圖2為本發(fā)明最佳實(shí)施例的工作流程圖;
[0018]圖3為本發(fā)明最佳實(shí)施例的SRB檢查模塊工作流程圖;
[0019]圖4為本發(fā)明一種代碼效率檢查系統(tǒng)的結(jié)構(gòu)模塊圖。
【具體實(shí)施方式】
[0020]下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步詳細(xì)的說(shuō)明。
[0021]如圖1所述為本發(fā)明一種代碼效率檢查方法的工作流程圖,包括:
[0022]步驟S101,包括:獲取一個(gè)未檢查的代碼文件作為當(dāng)前代碼文件,所述代碼文件包括至少一條代碼,將所述代碼文件的第一條代碼作為當(dāng)前代碼,執(zhí)行步驟S102 ;
[0023]步驟S102,包括:對(duì)當(dāng)前代碼進(jìn)行檢查:如果當(dāng)前代碼為循環(huán)段落的起始標(biāo)識(shí),則向預(yù)設(shè)隊(duì)列中加入循環(huán)標(biāo)識(shí),執(zhí)行步驟S103 ;如果當(dāng)前代碼滿足預(yù)設(shè)的效率規(guī)則,且所述隊(duì)列中還保存有循環(huán)標(biāo)識(shí),則進(jìn)行告警記錄,執(zhí)行步驟S103 ;如果當(dāng)前代碼為循環(huán)段落的結(jié)束標(biāo)識(shí),則從所述隊(duì)列中移除循環(huán)標(biāo)識(shí),執(zhí)行步驟S103 ;
[0024]步驟S103,包括:如果所述代碼文件還有下一條代碼,則將下一條代碼作為當(dāng)前代碼,執(zhí)行步驟S102,否則執(zhí)行步驟S104 ;
[0025]步驟S104,包括:將所述當(dāng)前代碼文件設(shè)為已檢查的代碼文件,如果還有未檢查的代碼文件,則執(zhí)行獲取步驟S101,否則結(jié)束。
[0026]循環(huán)段落的起始標(biāo)識(shí)對(duì)于c語(yǔ)言或java語(yǔ)言可以包括:for或while等標(biāo)識(shí)。循環(huán)段落的結(jié)束標(biāo)識(shí)則一般為符號(hào)“} ”。對(duì)于其他編程語(yǔ)言可以采用其他標(biāo)識(shí)。
[0027]預(yù)設(shè)的效率規(guī)則可以通過(guò)配置文件進(jìn)行描述。效率規(guī)則指的是代碼為各種容易影響系統(tǒng)效率的操作,包括各種需要較長(zhǎng)時(shí)間完成的操作,例如各種I/o讀寫操作或者與遠(yuǎn)程系統(tǒng)通信等。效率規(guī)則可以由用戶通過(guò)配置文件預(yù)先設(shè)置。由于循環(huán)段落會(huì)多次執(zhí)行其所包括的代碼所指定的操作,因此,如果在循環(huán)段落內(nèi)的操作是需要較長(zhǎng)時(shí)間完成的,則會(huì)大大影響系統(tǒng)的效率。本發(fā)明通過(guò)識(shí)別循環(huán)段落,并判斷循環(huán)段落中是否包括有需要長(zhǎng)時(shí)間執(zhí)行的代碼,從而判斷該代碼的效率。
[0028]其中,步驟S102中的隊(duì)列,可以是FIFO (FIFO先進(jìn)先出)形式的隊(duì)列,也可是堆棧形式的隊(duì)列。一般較為常用的是堆棧形式的隊(duì)列。如果當(dāng)前代碼為循環(huán)段落的起始標(biāo)識(shí),則向堆棧中壓入循環(huán)標(biāo)識(shí),如果當(dāng)前代碼為循環(huán)段落的結(jié)束標(biāo)識(shí),則從堆棧中移除循環(huán)標(biāo)識(shí)。循環(huán)標(biāo)識(shí)可以是一個(gè)標(biāo)記、字母或符號(hào)等。優(yōu)選地可以直接將起始標(biāo)識(shí)作為循環(huán)標(biāo)識(shí),例如對(duì)于java語(yǔ)言,則可以將for或者while作為循環(huán)標(biāo)識(shí)。如果是多重循環(huán)嵌套,則只有在最外層的循環(huán)結(jié)束時(shí),隊(duì)列中才會(huì)不存在循環(huán)標(biāo)識(shí)。
[0029]在其中一個(gè)實(shí)施例中,還包括:
[0030]初始化步驟,包括:初始化統(tǒng)計(jì)參數(shù);
[0031]告警步驟,包括:當(dāng)所述統(tǒng)計(jì)參數(shù)超過(guò)預(yù)設(shè)告警閾值則進(jìn)行告警操作;
[0032]所述步驟S102中,所述告警記錄包括對(duì)所述統(tǒng)計(jì)參數(shù)加一。
[0033]本實(shí)施例,當(dāng)對(duì)影響系統(tǒng)效率的代碼進(jìn)行高頻調(diào)用時(shí),進(jìn)行告警操作。告警操作可以為通過(guò)聲光告警器進(jìn)行告警,或者是通過(guò)屏幕閃爍或者顯示提示操作等方式進(jìn)行告警。
[0034]優(yōu)選地,所述效率規(guī)則為:
[0035]所述代碼為預(yù)設(shè)的數(shù)據(jù)庫(kù)操作語(yǔ)句;或者
[0036]所述代碼為預(yù)設(shè)的遠(yuǎn)程過(guò)程調(diào)用語(yǔ)句;或者
[0037]所述代碼為預(yù)設(shè)的事務(wù)操作啟動(dòng)語(yǔ)句,且在預(yù)設(shè)的事務(wù)操作啟動(dòng)語(yǔ)句和預(yù)設(shè)的事務(wù)操作結(jié)束語(yǔ)句之間包括超過(guò)預(yù)設(shè)操作閾值數(shù)量的事務(wù)操作語(yǔ)句。
[0038]數(shù)據(jù)庫(kù)操作語(yǔ)句,例如結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language,SQL),由于涉及到I/O讀寫操作容易影響系統(tǒng)效率,而遠(yuǎn)程過(guò)程調(diào)用語(yǔ)句(RPC)則由于涉及到遠(yuǎn)程過(guò)程調(diào)用,由于網(wǎng)絡(luò)不穩(wěn)定或者遠(yuǎn)端系統(tǒng)不穩(wěn)定等情況,通常會(huì)設(shè)置較為長(zhǎng)的等待時(shí)間,從而導(dǎo)致影響系統(tǒng)效率。
[0039]事務(wù)操作會(huì)在事務(wù)操作語(yǔ)句結(jié)束后,將事務(wù)操作啟動(dòng)語(yǔ)句和事務(wù)操作結(jié)束語(yǔ)句之間的事務(wù)操作統(tǒng)一提交進(jìn)行處理,當(dāng)事務(wù)操作啟動(dòng)語(yǔ)句和事務(wù)操作結(jié)束語(yǔ)句之間的事務(wù)操作數(shù)量較多時(shí),即成為大事務(wù)(big transact1n),也非常容易影響系統(tǒng)效率。其中,事務(wù)操作可以是數(shù)據(jù)庫(kù)操作。
[0040]對(duì)于哪些數(shù)據(jù)庫(kù)操作語(yǔ)句或者那些遠(yuǎn)程過(guò)程調(diào)用語(yǔ)句要進(jìn)行檢查,其由用戶根據(jù)所采用的數(shù)據(jù)庫(kù)或者所調(diào)用的遠(yuǎn)程系統(tǒng)的不同自行決定。
[0041]在其中一個(gè)實(shí)施例中,所述步驟S102,還包括:
[0042]如果所述代碼為非系統(tǒng)或非第三方的函數(shù)調(diào)用,或者所述代碼為非系統(tǒng)或非第三方的類方法,則執(zhí)行調(diào)用檢查步驟;
[0043]調(diào)用檢查步驟包括:
[0044]調(diào)用文件獲取子步驟,包括:獲取所述函數(shù)調(diào)用或所述類方法的代碼文件作為調(diào)用文件,所述調(diào)用文件包括至少一