代碼審計(jì)報(bào)告_第1頁(yè)
代碼審計(jì)報(bào)告_第2頁(yè)
代碼審計(jì)報(bào)告_第3頁(yè)
代碼審計(jì)報(bào)告_第4頁(yè)
代碼審計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)代碼審查報(bào)告xxxx公司版本信息文檔標(biāo)識(shí):當(dāng)前版本:當(dāng)前狀態(tài):草稿發(fā)布日期:發(fā)布修改歷史日期版本作者修改內(nèi)容評(píng)審號(hào)變更控制號(hào)評(píng)審對(duì)象審查員項(xiàng)目名稱審查日期分類重要性檢查項(xiàng)備注 命名重要命名規(guī)則是否與所采用的規(guī)范保持一致?成員變量,方法參數(shù)等需要使用首字母小寫,其余單詞首字母大寫的命名方式,禁止使用下劃線(_)數(shù)字等方式命名不要出現(xiàn)局部變量,成員變量大寫字母開(kāi)頭等問(wèn)題一般是否遵循了最小長(zhǎng)度最多信息原則?各種命名盡可能短,表意準(zhǔn)確,除2代替to,4代替for外,不建議使用數(shù)

2、字在命名中重要has/can/is前綴的函數(shù)是否返回布爾型?成員變量,方法參數(shù),局部變量等為布爾型時(shí),如果出現(xiàn)has/can/is開(kāi)頭,則將這些詞去掉重要類名是否存在重名問(wèn)題?自己實(shí)現(xiàn)的類盡量不要和別人的類重名,盡管不在同一個(gè)包下,特別是子類和父類重名的情況注釋重要注釋是否較清晰且必要?方法JAVADOC注釋中需要說(shuō)明各參數(shù)、返回值及異常說(shuō)明,參數(shù)說(shuō)明需按照參數(shù)名稱及用意對(duì)應(yīng)標(biāo)注重要復(fù)雜的分支流程是否已經(jīng)被注釋?一般距離較遠(yuǎn)的是否已經(jīng)被注釋?重要函數(shù)是否已經(jīng)有文檔注釋?(功能、輸入、返回及其他可選)文件,類(含接口,枚舉等),成員變量,方法前需要有JAVADOC的注釋一般特殊用法是否被注釋?聲

3、明、空白、縮進(jìn)一般每行是否只聲明了一個(gè)變量?(特別是那些可能出錯(cuò)的類型)重要變量是否已經(jīng)在定義的同時(shí)初始化?重要類屬性是否都執(zhí)行了初始化?一般代碼段落是否被合適地以空行分隔?一般是否合理地使用了空格使程序更清晰?基本代碼格式中的空格符不可缺少,這些空格出現(xiàn)在?,:,+,-,*,/,=,=,=,=,!=,及各種括號(hào)附近提示代碼行長(zhǎng)度是否在要求之內(nèi)?每行不得超過(guò)120個(gè)字符重要controller,service,dao中不要聲明有狀態(tài)的變量。此變量不能被修改。如果要進(jìn)行修改,必須通過(guò)鎖進(jìn)行控制。一般折行是否恰當(dāng)?一般集合是否被定義為泛型類型?定義集合時(shí),建議定義其泛型類型,減少類型轉(zhuǎn)換和警告錯(cuò)誤

4、語(yǔ)句/功能分布/規(guī)模一般包含復(fù)合語(yǔ)句的是否成對(duì)出現(xiàn)并符合規(guī)范?重要是否給單個(gè)的循環(huán)、條件語(yǔ)句也加了?if,else,elseif,while,for,case等代碼塊必須用包圍一般單個(gè)變量是否只做單個(gè)用途?重要單行是否只有單個(gè)功能?(不要使用;進(jìn)行多行合并)重要單個(gè)函數(shù)是否執(zhí)行了單個(gè)功能并與其命名相符?一般操作符和操作符的應(yīng)用是否符合規(guī)范?規(guī)模重要單個(gè)函數(shù)不超過(guò)規(guī)定行數(shù)?重要縮進(jìn)層數(shù)是否不超過(guò)規(guī)定?可靠性(總則/變量和語(yǔ)句)重要是否已經(jīng)消除了所有警告?開(kāi)發(fā)工具的警告重要常數(shù)變量是否聲明為final?重要對(duì)象使用前是否進(jìn)行了檢查?重要成員變量,局部變量是否在使用前被賦值?對(duì)象初始化為null的對(duì)

5、象被調(diào)用前必須被重新賦值,如果賦值語(yǔ)句在try塊中,調(diào)用操作必須在try塊中一般局部對(duì)象變量使用后是否被復(fù)位為NULL?特別是數(shù)組集合Map重要對(duì)數(shù)組的訪問(wèn)是否是安全的?(合法的index取值為0,MAX_SIZE-1)。重要是否確認(rèn)沒(méi)有同名變量局部重復(fù)定義問(wèn)題?嚴(yán)禁局部變量名稱和類或?qū)ο蟪蓡T變量同名一般程序中是否只使用了簡(jiǎn)單的表達(dá)式?重要是否已經(jīng)用()使操作符優(yōu)先級(jí)明確化?重要所有判斷是否都使用了(常量=變量或者常量.equals(變量))的形式?常量放在比較符前可以有效降低比較符寫成賦值語(yǔ)句,減少空指針異常重要是否每個(gè)if-elseif-else語(yǔ)句都有最后一個(gè)else以確保處理了全集?重

6、要是否每個(gè)switch-case語(yǔ)句都有最后一個(gè)default以確保處理了全集?一般for循環(huán)是否都使用了包含下限不包含上限的形式?(k=0;kMAX)重要XML標(biāo)記書(shū)寫是否完整,字符串的拼寫是否正確?重要對(duì)于流操作代碼的異常捕獲是否有finally操作以關(guān)閉流對(duì)象?關(guān)閉前需要判斷流對(duì)象是否為空提示退出代碼段時(shí)是否對(duì)臨時(shí)對(duì)象做了釋放處理?重要對(duì)浮點(diǎn)數(shù)值的相等判斷是否是恰當(dāng)?shù)???yán)禁使用=直接判斷浮點(diǎn)數(shù)值。提供通用方法重要是否對(duì)象比較都使用了equals?對(duì)象(包括包裝類)比較必須使用equals,而不是使用=或!=操作重要使用equals進(jìn)行比較時(shí)是否確保比較的兩個(gè)對(duì)象類型一致?equals方法

7、比較的對(duì)象在對(duì)象類型確定的前提下,建議是同一類型的,例如Integer和使用equals是不提倡的一般操作Map或Properties結(jié)構(gòu)對(duì)象,用于傳值時(shí)是否將Key定義為常量?Session,Request等對(duì)象的setAttribute,getAttribute方法的key建議使用常量,不得手工輸入字符串重要是否在類型轉(zhuǎn)換前確保了類型的兼容?除非明確保證對(duì)象類型重要包裝類做簡(jiǎn)單預(yù)算前是否保證非空?建議都使用包裝類。包裝類進(jìn)行操作前,建議進(jìn)行非空(null!=xx)判斷,防止發(fā)生空指針異常重要對(duì)象屬性在使用前是否確保被準(zhǔn)確賦值?只讀屬性(只提供get方法的成員變量)除非特意返回固定值,否則必

8、須提供set方法或在其他方法調(diào)用時(shí)將其賦值重要方法調(diào)用前是否有非空判斷?對(duì)參數(shù)的非空判斷必須出現(xiàn)在方法調(diào)用之前,否則說(shuō)明前面可能導(dǎo)致空指針或者后者判斷是沒(méi)有必要的,非空判斷,默認(rèn)由調(diào)用者提供重要非線程安全的對(duì)象是否被正確保證線程安全?DateFormat實(shí)例的format方法調(diào)用不是線程安全,類似的情況不適合使用static定義,建議使用ThreadLocal方式實(shí)現(xiàn),參看UnifiedCodeGenerator一般相同用意的成員變量是否使用了相同的命名?不同實(shí)體Entity、VO、BO之間表示同一含義的成員變量,建議使用相同的名稱,盡量不要出現(xiàn),有的地方用username,有的地方用user

9、Name這樣的情況可靠性(函數(shù))重要入口對(duì)象是否都被進(jìn)行了判斷不為空?重要入口數(shù)據(jù)的合法范圍是否都被進(jìn)行了判斷?重要是否對(duì)有異常拋出的方法都執(zhí)行了try.catch保護(hù)?重要是否函數(shù)的所有分支都有返回值?重要int的返回值是否合理?(負(fù)值為失敗,非負(fù)值成功)一般對(duì)于反復(fù)進(jìn)行了int返回值判斷是否定義了函數(shù)來(lái)處理?一般關(guān)鍵代碼是否做了捕獲異常處理?一般字典表定義是否用枚舉,或者有一個(gè)統(tǒng)一的定義?重要是否對(duì)方法返回值對(duì)象做了null檢查,該返回值定義時(shí)是否被初始化?重要是否對(duì)同步對(duì)象的遍歷訪問(wèn)做了代碼同步?重要是否確認(rèn)在對(duì)Map對(duì)象使用迭代遍歷過(guò)程中沒(méi)有做增減元素操作?Map遍歷時(shí)執(zhí)行增減元素操作

10、將拋出ConcurrentModificationException,對(duì)集合對(duì)象遍歷時(shí)建議都不要進(jìn)行增減元素操作。重要線程處理函數(shù)循環(huán)內(nèi)部是否有異常捕獲處理,防止線程拋出異常而退出?重要原子操作代碼異常中斷,使用的相關(guān)外部變量是否恢復(fù)先前狀態(tài)?重要函數(shù)對(duì)錯(cuò)誤的處理是恰當(dāng)?shù)??重要異常捕獲后是否進(jìn)行了日志記錄或異常繼續(xù)拋出?異常捕獲后如果無(wú)法處理需要繼續(xù)拋出,如果可以處理,建議將異常日志進(jìn)行記錄重要是否構(gòu)造方法中不調(diào)用當(dāng)前對(duì)象的構(gòu)造方法嚴(yán)禁在構(gòu)造方法中new一個(gè)當(dāng)前對(duì)象可維護(hù)性重要實(shí)現(xiàn)代碼中是否消除了直接常數(shù)?(用于計(jì)數(shù)起點(diǎn)的簡(jiǎn)單常數(shù)例外)重要是否消除了導(dǎo)致結(jié)構(gòu)模糊的連續(xù)賦值?(如a=(b=d+c

11、))重要是否正確使用了日志記錄?一般是否有冗余判斷語(yǔ)句?(如:if(b)returntrue;elsereturnfalse;)“if(b)returntrue;elsereturnfalse;”=“returnb;”;禁止使用類似“if/while(表達(dá)式=true)或if/while(表達(dá)式=false)”的判斷重要是否把方法中的重復(fù)代碼抽象成私有函數(shù)?代碼警告一般是否清除了多余導(dǎo)入的包或類?重要是否清除了只定義未使用的局部變量?嚴(yán)禁局部變量被定義或者初始化而未被使用,這種情況需要?jiǎng)h除該局部變量一般是否將魔鬼數(shù)字修改為常量使用?不允許直接使用除-2,-1,0,1,2,3,4,5,6,7,8

12、,9,10外的數(shù)字,除此外的數(shù)字需要定義常量使用提示常量定義是否為staticfinal格式?常量定義格式為public/protected/privatestaticfinalTypeTYPE,static和final順序要保持一致提示實(shí)現(xiàn)序列化的對(duì)象是否定義了serialVersionUID?建議實(shí)現(xiàn)Serializable的類需要增加“privatestaticfinallongserialVersionUID=1L;”可讀性一般是否用ifelse結(jié)構(gòu)替換了三元運(yùn)算符?表達(dá)式復(fù)雜情況下不要使用(flag?exp1:exp2)語(yǔ)句,該語(yǔ)句需要修改為ifelse結(jié)構(gòu)一般代碼注釋率是否結(jié)余30

13、%60%之間?代碼注釋率應(yīng)落在30%60%之間性能重要日志記錄的Log,Logger對(duì)象是否定義為常量?用于記錄日志的Log,Logger對(duì)象在類中定義必須是staticfinal的,建議定義為private的,因?yàn)檫@類對(duì)象初始化比較耗時(shí),不利系統(tǒng)運(yùn)行日志重要打印信息是否都用日志管理?代碼中建議不要使用System.out.println打印信息,只有在系統(tǒng)啟動(dòng)或系統(tǒng)即將退出時(shí)使用,其余部分全部用日志記錄圈復(fù)雜度重要單個(gè)類行數(shù)是否不大于500行?單個(gè)類建議行數(shù)小于500行,最多不超過(guò)1000行重要方法參數(shù)個(gè)數(shù)是否在7個(gè)以內(nèi)?方法參數(shù)個(gè)數(shù)建議不大于5個(gè),最多不超過(guò)7個(gè)重要單個(gè)方法函數(shù)是否不大于3

14、0行?單個(gè)方法建議函數(shù)不大于30行,做多不超過(guò)60行重要單方法中try/for/while/switch/if最深深度是否不大于5?單方法中try/for/while/switch/if最深深度不允許大于5重要方法調(diào)用最深深度是否不大于15?方法內(nèi)部+內(nèi)部調(diào)用累計(jì)深度不允許大于15SQL空格一般連接符or、in、and、以及、=等前后加上一個(gè)空格。一般逗號(hào)之后必須接一個(gè)空格。一般關(guān)鍵字、保留字和左括號(hào)之間必須有一個(gè)空格。SQL注釋重要對(duì)較為復(fù)雜的SQL語(yǔ)句加上注釋,說(shuō)明算法、功能。注釋風(fēng)格:注釋單獨(dú)成行、放在語(yǔ)句前面。重要對(duì)重要的計(jì)算應(yīng)說(shuō)明其功能。SQL中盡量少涉及業(yè)務(wù)邏輯一般可采用單行/多行

15、注釋。(-或/*/方式)。SQL優(yōu)化性能建議1書(shū)寫SQL語(yǔ)句優(yōu)化細(xì)則重要1)盡量避免相同語(yǔ)句由于書(shū)寫格式的不同,而導(dǎo)致多次語(yǔ)法分析。重要2)多表連接時(shí),使用表的別名來(lái)引用列。建議最多5個(gè)連接重要3)不要在任何代碼中使用SELECT*。重要4)where條件中盡量減少使用常量比較,改用參數(shù)變量。重要5)盡量少用嵌套查詢。如必須,請(qǐng)用notexist代替notin子句。重要6)用多表連接代替EXISTS子句。重要7)使用UNIONALL提高性能。重要8)in、or子句常會(huì)使用工作表,使索引失效;如果不產(chǎn)生大量重復(fù)值,可以考慮把子句拆開(kāi);拆開(kāi)的子句中應(yīng)該包含索引。2排序注意事項(xiàng)重要1)大量的排序操作影響系統(tǒng)性能,所以盡量減少orderby和grou

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論