一種代碼規(guī)范強(qiáng)制檢查方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明涉及一種代碼規(guī)范強(qiáng)制檢查方法,包括:步驟1,在執(zhí)行源代碼編譯命令前,判斷當(dāng)前用戶是否具有檢查權(quán)限,若有則執(zhí)行步驟2,否則結(jié)束流程;步驟2,基于基本規(guī)范、程序CORE規(guī)范、內(nèi)存泄露規(guī)范和SQL規(guī)范四個(gè)類別檢查源代碼是否符合規(guī)范,若符合則執(zhí)行源代碼編譯命令,否則輸出不符合規(guī)范的代碼段。本發(fā)明將檢查功能植入到編譯命令中,存在不符合代碼規(guī)范的代碼段,不予編譯,從根本上規(guī)避不規(guī)范的代碼,且排查問(wèn)題較為主動(dòng),靈活性高,易于執(zhí)行。
【專利說(shuō)明】一種代碼規(guī)范強(qiáng)制檢查方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及電信行業(yè)的代碼檢測(cè)【技術(shù)領(lǐng)域】,與Linux/Unix shell編程技術(shù)和 Linux/Unix C/C++編程技術(shù)相關(guān),特別是涉及一種代碼規(guī)范強(qiáng)制檢查方法及系統(tǒng)。
【背景技術(shù)】
[0002] 目前的軟件行業(yè),編程語(yǔ)言種類繁多,如java、c、C++、c#、jsp、perl、php、delphi 等等,涉及各個(gè)領(lǐng)域,代碼規(guī)范也格式各樣,開(kāi)發(fā)人員除了具備過(guò)硬的編程技術(shù)外,更需要 一個(gè)良好的編碼規(guī)范和編碼習(xí)慣。然而,除了共性編碼規(guī)范之外,每一種語(yǔ)言的要求也不 盡相同,甚至盡管是同一種編程語(yǔ)言,每個(gè)研發(fā)人員的能力和編碼風(fēng)格也各不相同,如何能 有效地規(guī)范代碼編寫呢?是規(guī)范文檔,組織培訓(xùn),代碼審核,還是導(dǎo)師指導(dǎo)?列舉的這樣方 法,已有很多軟件公司都嘗試過(guò),但事實(shí)證明達(dá)不到期望的效果,歸根結(jié)底的原因只有一 個(gè):規(guī)范檢查無(wú)法強(qiáng)制執(zhí)行。
[0003] 因此,為了規(guī)范研發(fā)人員的代碼排版、規(guī)避代碼存在的內(nèi)存泄露、規(guī)避SQL語(yǔ)句存 在的性能問(wèn)題,基于代碼在實(shí)際研發(fā)和運(yùn)行階段存在并總結(jié)的具體問(wèn)題,基于研發(fā)規(guī)范執(zhí) 行難、效果差等等,造成的后期代碼在維護(hù)過(guò)程中的可讀性差、耦合度高、靈活性差等等問(wèn) 題,基于在生產(chǎn)過(guò)程中代碼問(wèn)題排查過(guò)于被動(dòng)(尤其是內(nèi)存占用和程序C0REDUMP)等,本發(fā) 明提出了一種代碼規(guī)范強(qiáng)制檢查方法及系統(tǒng)。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種代碼規(guī)范強(qiáng)制檢查方法及系統(tǒng),用于解決 有效規(guī)范代碼編寫的問(wèn)題。
[0005] 本發(fā)明解決上述技術(shù)問(wèn)題的技術(shù)方案如下:一種代碼規(guī)范強(qiáng)制檢查方法,包括:
[0006] 步驟1,在執(zhí)行源代碼編譯命令前,判斷當(dāng)前用戶是否具有檢查權(quán)限,若有則執(zhí)行 步驟2,否則結(jié)束流程;
[0007] 步驟2,基于基本規(guī)范、程序CORE規(guī)范、內(nèi)存泄露規(guī)范和SQL規(guī)范四個(gè)類別檢查源 代碼是否符合規(guī)范,若符合則執(zhí)行源代碼編譯命令,否則輸出不符合規(guī)范的代碼段。
[0008] 在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
[0009] 進(jìn)一步,所述步驟1中設(shè)有用于判斷用戶權(quán)限的程序配置文件。
[0010] 進(jìn)一步,所述步驟2還包括:增加代碼規(guī)范,并檢查源代碼是否符合新增的代碼規(guī) 范。
[0011] 進(jìn)一步,所述基本規(guī)范包括標(biāo)點(diǎn)符號(hào)規(guī)范和段落設(shè)置規(guī)范;
[0012] 所述程序CORE規(guī)范包括輸出格式規(guī)范、字符初始化規(guī)范和類型變量設(shè)置規(guī)范;
[0013] 所述內(nèi)存泄露規(guī)范包括utClone使用規(guī)范和utype類型返回函數(shù)規(guī)范;
[0014] 所述SQL規(guī)范包括綁定變量規(guī)范和警示級(jí)提示規(guī)范。
[0015] 進(jìn)一步,還包括:若符合規(guī)范的源代碼增加有代碼段,則對(duì)新增的代碼段重復(fù)步驟 1和步驟2,只檢查新增的代碼段是否符合規(guī)范。
[0016] 本發(fā)明的技術(shù)方案還包括一種代碼規(guī)范強(qiáng)制檢查系統(tǒng),包括:
[0017] 權(quán)限判斷模塊,用于在執(zhí)行源代碼編譯命令前,判斷當(dāng)前用戶是否具有檢查權(quán) 限;
[0018] 規(guī)范檢查模塊,用于對(duì)具有檢查權(quán)限的用于,基于基本規(guī)范、程序CORE規(guī)范、內(nèi)存 泄露規(guī)范和SQL規(guī)范四個(gè)類別檢查源代碼是否符合規(guī)范;
[0019] 代碼執(zhí)行模塊,用于執(zhí)行符合規(guī)范的源代碼的編譯命令;
[0020] 代碼輸出模塊,用于輸出不符合規(guī)范的代碼段。
[0021] 進(jìn)一步,權(quán)限判斷模塊中設(shè)有用于判斷用戶權(quán)限的程序配置文件。
[0022] 進(jìn)一步,所述規(guī)范檢查模塊還用于:增加代碼規(guī)范,并檢查源代碼是否符合新增的 代碼規(guī)范。
[0023] 進(jìn)一步,所述基本規(guī)范包括標(biāo)點(diǎn)符號(hào)規(guī)范和段落設(shè)置規(guī)范;
[0024] 所述程序CORE規(guī)范包括輸出格式規(guī)范、字符初始化規(guī)范和類型變量設(shè)置規(guī)范;
[0025] 所述內(nèi)存泄露規(guī)范包括utClone使用規(guī)范和utype類型返回函數(shù)規(guī)范;
[0026] 所述SQL規(guī)范包括綁定變量規(guī)范和警示級(jí)提示規(guī)范。
[0027] 進(jìn)一步,若符合規(guī)范的源代碼增加有代碼段,則規(guī)范檢查模塊只檢查新增的代碼 段是否符合規(guī)范。
[0028] 本發(fā)明的有益效果是:本發(fā)明進(jìn)行的代碼規(guī)范的強(qiáng)制檢查,能規(guī)范程序員的編碼, 督促程序員養(yǎng)成良好的編碼習(xí)慣,同時(shí)規(guī)范研發(fā)人員的代碼排版、規(guī)避代碼存在的內(nèi)存泄 露、規(guī)避SQL語(yǔ)句存在的性能問(wèn)題等等,提高代碼的可讀性、易維護(hù)性。本發(fā)明將檢查功能 植入到編譯命令中,存在不符合代碼規(guī)范的代碼段,不予編譯,從根本上規(guī)避不規(guī)范的代 碼,且排查問(wèn)題較為主動(dòng),靈活性高,易于執(zhí)行。
【專利附圖】
【附圖說(shuō)明】
[0029] 圖1為本發(fā)明所述代碼規(guī)范強(qiáng)制檢查方法的流程示意圖;
[0030] 圖2為本發(fā)明實(shí)施例中規(guī)范檢查的整體流程圖。
【具體實(shí)施方式】
[0031] 以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并 非用于限定本發(fā)明的范圍。
[0032] 如圖1所示,本實(shí)施例給出了一種代碼規(guī)范強(qiáng)制檢查方法,包括:
[0033] 步驟1,在執(zhí)行源代碼編譯命令前,判斷當(dāng)前用戶是否具有檢查權(quán)限,若有則執(zhí)行 步驟2,否則結(jié)束流程;
[0034] 步驟2,基于基本規(guī)范、程序CORE規(guī)范、內(nèi)存泄露規(guī)范和SQL規(guī)范四個(gè)類別檢查源 代碼是否符合規(guī)范,若符合則執(zhí)行源代碼編譯命令,否則輸出不符合規(guī)范的代碼段。
[0035] 源代碼經(jīng)上述檢查符合規(guī)范后,再執(zhí)行編譯和鏈接動(dòng)作,生成可執(zhí)行文件或靜態(tài) 庫(kù)或動(dòng)態(tài)庫(kù)等,若不符合規(guī)范,還需要提示文件哪些代碼段不符合規(guī)范并給出具體原因,并 不予編譯,直到代碼修改后全部符合規(guī)范,才允許編譯。
[0036] 對(duì)應(yīng)地,本實(shí)施例還給出了一種代碼規(guī)范強(qiáng)制檢查系統(tǒng),包括:
[0037] 權(quán)限判斷模塊,用于在執(zhí)行源代碼編譯命令前,判斷當(dāng)前用戶是否具有檢查權(quán) 限;
[0038] 規(guī)范檢查模塊,用于對(duì)具有檢查權(quán)限的用于,基于基本規(guī)范、程序CORE規(guī)范、內(nèi)存 泄露規(guī)范和SQL規(guī)范四個(gè)類別檢查源代碼是否符合規(guī)范;
[0039] 代碼執(zhí)行模塊,用于執(zhí)行符合規(guī)范的源代碼的編譯命令;
[0040] 代碼輸出模塊,用于輸出不符合規(guī)范的代碼段。
[0041] 該系統(tǒng)的具體實(shí)施過(guò)程與原理同所述的代碼規(guī)范強(qiáng)制檢查方法一致。
[0042] 本實(shí)施例通過(guò)Linux與Unix C/C++編程語(yǔ)言,結(jié)合Linux與Unix shell編程技術(shù), 運(yùn)行環(huán)境依賴于UNIX或LINUX系統(tǒng),主要是后臺(tái)C或C++文件的代碼規(guī)范檢查。
[0043] 上述兩個(gè)步驟說(shuō)明需要在執(zhí)行編譯命令前進(jìn)行代碼規(guī)范強(qiáng)制檢查,本實(shí)施例的檢 查功能植入編譯命令技術(shù)方案為:新增shell腳本cpschk. sh供編譯命令cpmk調(diào)用;根據(jù) 內(nèi)容可知在真正執(zhí)行編譯命令cpsmake. sh之前,先調(diào)用代碼規(guī)范檢查cpschk. sh,若代碼 不符合規(guī)范則exit不予編譯,實(shí)現(xiàn)代碼強(qiáng)制檢查功能。
[0044] cpmk內(nèi)容如下
[0045] if [',$#,' !=T] then echo"腳本的用法如下:" echo "usage: cpmk cQTimeAgeLimit.cpp 表示編譯單個(gè) be or bp" echo "usage: cpmk all 表示編譯當(dāng)前目錄下所有的be or bp" else indexofsplit='echo ${ 1 }|awk '{n=index($0, "/");print n}n echo ${indexofsplit} if[ "${indexofsplit}!, != "0"] then fiIepath='echo $ {1 }|awk ' { ns = length($0) nf = length("/") for(k=ns+1 -nf;k>= 1 ;k-) if(substr($0,k,nf)=="/") { print substr($0, 0, k-1) break } Γ
[0046] echo $filepath filename='echo ${ 1 }|a\vk '{ ns - length(SO) nf = length("/") for(k=ns+l -nf;k>=l ;k-) if(substr($0,k,nf)=="/") { print substr($〇, k + 1) bieak } Γ cd ${rilepath} else filcnamc=$l fi ## liugc codechk add begin cpschk.sh 'pwd' $ {filename) flag=$? ##echo $ flag ##打印 cpschk.sli 腳本返回值 if[$flag = "l"] then exit fi ## liugc codechk add end
[0047] echo $filename echo 'pwd' cpsmake.sh 0 $ Jfilename} fi
[0048] cpschk. sh內(nèi)容如下,根據(jù)當(dāng)前登錄用戶檢查是否具備規(guī)范檢查權(quán)限,若具備,則 調(diào)用代碼規(guī)范檢查進(jìn)程:
[0049] cd $HOME/run/framework/pub/codechk filepath=$l"/" ##filepath 后加上?符號(hào) filename=$2 loginIncmt="$ {LOGNAME}@ 1" ##echo "filepath=$filepath" ##echo "filename=$filename" ###是否進(jìn)行代碼檢查判斷### username='grep ${LOGNAME} userlist.cfg' userlncmt='grep $ {IoginIncmt} userlist.cfg' #echo "username=$ {username}" #echo "userlncmt=$ {userlncmt}" ###是否具備增量代碼檢查權(quán)限[1-具備,其他-不具備]### Incmtflag=""; if [ "${userlncmt|" != ,H,]
[0050]
【權(quán)利要求】
1. 一種代碼規(guī)范強(qiáng)制檢查方法,其特征在于,包括: 步驟1,在執(zhí)行源代碼編譯命令前,判斷當(dāng)前用戶是否具有檢查權(quán)限,若有則執(zhí)行步驟 2,否則結(jié)束流程; 步驟2,基于基本規(guī)范、程序CORE規(guī)范、內(nèi)存泄露規(guī)范和SQL規(guī)范四個(gè)類別檢查源代碼 是否符合規(guī)范,若符合則執(zhí)行源代碼編譯命令,否則輸出不符合規(guī)范的代碼段。
2. 根據(jù)權(quán)利要求1所述的代碼規(guī)范強(qiáng)制檢查方法,其特征在于,所述步驟1中設(shè)有用于 判斷用戶權(quán)限的程序配置文件。
3. 根據(jù)權(quán)利要求1所述的代碼規(guī)范強(qiáng)制檢查方法,其特征在于,所述步驟2還包括:增 加代碼規(guī)范,并檢查源代碼是否符合新增的代碼規(guī)范。
4. 根據(jù)權(quán)利要求1所述的代碼規(guī)范強(qiáng)制檢查方法,其特征在于,所述基本規(guī)范包括標(biāo) 點(diǎn)符號(hào)規(guī)范和段落設(shè)置規(guī)范; 所述程序CORE規(guī)范包括輸出格式規(guī)范、字符初始化規(guī)范和類型變量設(shè)置規(guī)范; 所述內(nèi)存泄露規(guī)范包括utClone使用規(guī)范和utype類型返回函數(shù)規(guī)范; 所述SQL規(guī)范包括綁定變量規(guī)范和警示級(jí)提示規(guī)范。
5. 根據(jù)權(quán)利要求1至4中任一所述的代碼規(guī)范強(qiáng)制檢查方法,其特征在于,還包括:若 符合規(guī)范的源代碼增加有代碼段,則對(duì)新增的代碼段重復(fù)步驟1和步驟2,只檢查新增的代 碼段是否符合規(guī)范。
6. -種代碼規(guī)范強(qiáng)制檢查系統(tǒng),其特征在于,包括: 權(quán)限判斷模塊,用于在執(zhí)行源代碼編譯命令前,判斷當(dāng)前用戶是否具有檢查權(quán)限; 規(guī)范檢查模塊,用于對(duì)具有檢查權(quán)限的用于,基于基本規(guī)范、程序CORE規(guī)范、內(nèi)存泄露 規(guī)范和SQL規(guī)范四個(gè)類別檢查源代碼是否符合規(guī)范; 代碼執(zhí)行模塊,用于執(zhí)行符合規(guī)范的源代碼的編譯命令; 代碼輸出模塊,用于輸出不符合規(guī)范的代碼段。
7. 根據(jù)權(quán)利要求6所述的代碼規(guī)范強(qiáng)制檢查系統(tǒng),其特征在于,權(quán)限判斷模塊中設(shè)有 用于判斷用戶權(quán)限的程序配置文件。
8. 根據(jù)權(quán)利要求6所述的代碼規(guī)范強(qiáng)制檢查系統(tǒng),其特征在于,所述規(guī)范檢查模塊還 用于:增加代碼規(guī)范,并檢查源代碼是否符合新增的代碼規(guī)范。
9. 根據(jù)權(quán)利要求6所述的代碼規(guī)范強(qiáng)制檢查系統(tǒng),其特征在于,所述基本規(guī)范包括標(biāo) 點(diǎn)符號(hào)規(guī)范和段落設(shè)置規(guī)范; 所述程序CORE規(guī)范包括輸出格式規(guī)范、字符初始化規(guī)范和類型變量設(shè)置規(guī)范; 所述內(nèi)存泄露規(guī)范包括utClone使用規(guī)范和utype類型返回函數(shù)規(guī)范; 所述SQL規(guī)范包括綁定變量規(guī)范和警示級(jí)提示規(guī)范。
10. 根據(jù)權(quán)利要求6至9中任一所述的代碼規(guī)范強(qiáng)制檢查系統(tǒng),其特征在于,若符合規(guī) 范的源代碼增加有代碼段,則規(guī)范檢查模塊只檢查新增的代碼段是否符合規(guī)范。
【文檔編號(hào)】G06F11/36GK104050085SQ201410292978
【公開(kāi)日】2014年9月17日 申請(qǐng)日期:2014年6月25日 優(yōu)先權(quán)日:2014年6月25日
【發(fā)明者】劉光彩 申請(qǐng)人:北京思特奇信息技術(shù)股份有限公司