代碼走查要點規範表
評審對象 |
|
作者 |
|
|
評審人 |
|
評審工作量 |
|
|
序號 |
檢查項 |
評審意見 |
||
走查前準備 |
|
|||
1 |
得到一份解釋代碼的最新的設計文檔 |
|
||
2 |
代碼都已提交 ,版本統一 |
|
||
程序結構組織 |
|
|||
1 |
所有代碼的結構清晰,具有良好的結構外觀和整齊 |
|
||
2 |
所有的模塊(函數和外部接口)定義清晰,模塊分解清楚 |
|
||
3 |
所有的功能需求都明顯的覆蓋 |
|
||
4 |
結構設計能夠滿足機能變更 |
是“機能變更”還是“功能變更” |
||
5 |
整個代碼體系結構組合合理 |
|
||
6 |
所有主要的數據構造描述清楚,合理 |
|
||
7 |
模塊中所有的數據結構都定義爲局部的,並且通過定義好的函數進行訪問 |
|
||
8 |
所有的接口模塊化,因此修改時不影響其他代碼模塊 |
|
||
9 |
代碼體系構架對空間和速度都已經進行考慮 |
|
||
10 |
提供了處理數據的策略 |
|
||
11 |
數據庫操作、IO操作等是否正確關閉資源。並且必須在try -catch-finally 的finally中關閉。 |
|
||
12 |
一個業務如果進行多次數據庫更新、添加、刪除是否正確添加事務。 |
|
||
13 |
進行邏輯與、邏輯或判斷時是否使用短路與、短路或。 |
|
||
14 |
多處使用相同代碼時,應定義唯一方法或變量以供使用。 |
|
||
15 |
對象是否使用工廠獲取。 |
|
||
16 |
導入類時,如果僅使用包中的幾個類,應導入具體類,而不是導入整個包。 |
|
||
17 |
數組聲明的時候使用 int[] index ,而不要使用 int index[]。 |
|
||
18 |
檢查代碼和詳細設計是否一致。 |
|
||
19 |
檢查類中是否有無效的代碼或者是無用的代碼。 |
|
||
20 |
不要使用System.out.print()輸出,需要進行日誌處理 |
也不能使用System.err |
||
21 |
類的生成是否都有工廠模式而不是直接調用。 |
|
||
22 |
所有的文件名符合文件命名規範,見名知意 |
|
||
23 |
文件和模塊分組清晰 |
|
||
24 |
所有的代碼行在80字符以內 |
|
||
25 |
每個程序文件都小於2000行 |
|
||
代碼組織 |
|
|||
1 |
數據庫查詢語句不要出現select * |
|
||
2 |
對需要處理的字符串定義爲StringBuffer ,常量定義成靜態的。 |
|
||
3 |
所有的變量名都小於32字符 |
|
||
4 |
每行代碼都小於80字符 |
|
||
5 |
類名、方法名、變量名的命名是否規範。 |
|
||
6 |
有返回值的方法是否正確返回。Return語句應定義在方法結尾處。 |
|
||
7 |
代碼排版是否規範。 |
|
||
8 |
所有的行每行最多隻有一句代碼或一個表達式 |
|
||
9 |
複雜的表達式具備可讀性 |
|
||
10 |
續行縮進 |
|
||
11 |
括號在合適的位置 |
|
||
12 |
每個順序的小塊用空行隔開 |
|
||
13 |
註釋和代碼對齊或接續在代碼之後 |
|
||
14 |
JSP必須不能有basepath。 |
|
||
15 |
JSP引用js全部要有path |
|
||
16 |
JSP用的標籤庫是否都正確引用。 |
|
||
17 |
JSP寫的js方法必須要有註釋。 代碼是否可讀。 |
|
||
18 |
代碼的邏輯是否有問題。 |
|
||
19 |
JSP頁面儘量不要寫過多的隱藏域。 |
|
||
20 |
JSP頁面要注意排版、必要的註釋、儘量減少使用alert(),JS 和CSS除非必要就放到外部的單獨文件中,在JSP中引用。 |
|
||
21 |
類常量是否使用public static final修飾。 |
|
||
22 |
實例變量是否使用private修飾並定義getter、setter方法。 |
|
||
23 |
連接數據庫的方法必須調用公用的方法。 |
|
||
24 |
異常要統一處理,異常處理方法是否符合項目組的約定 |
|
||
25 |
在Action中不要過多的邏輯處理代碼 |
|
||
26 |
不要出現魔鬼數字 |
|
||
27 |
檢查可能出現空指針異常的地方,例如一個對象可能爲空,卻調用它的方法或屬性。 |
|
||
28 |
顯示的文本無拼寫和語法錯誤 |
|
||
29 |
代碼與操作符的優先級無關 |
|
||
30 |
所有的表達式使用了正確的操作符 |
|
||
函數組織 |
|
|||
1 |
所有的函數名都小於64個字符 |
|
||
2 |
代碼中有相關注解 |
|
||
3 |
函數的名字清晰的定義了它的目標以及函數所做的事情 |
|
||
4 |
函數中所有的部分都合理的組成函數,相關獨立的語句組組成函數 |
|
||
5 |
函數高內聚 只做一件事情,並做好 |
|
||
6 |
函數和其他代碼鬆耦合 |
|
||
7 |
參數遵循一個明顯的順序; |
|
||
8 |
所有的參數都被使用 |
|
||
9 |
函數的參數接口關係清晰 |
|
||
10 |
如果一個函數有返回值,在所有的出口都有返回值 |
|
||
11 |
函數使用了最少數目的return語句 |
|
||
12 |
函數的參數個數小於7個 |
|
||
13 |
使用的算法說明清楚 |
|
||
14 |
函數檢查了輸入數據的合法性 |
|
||
15 |
函數異常處理清楚 |
|
||
16 |
函數設計已經考慮了將來的變化 |
|
||
17 |
調試信息存在於代碼中並容易激活 |
|
||
18 |
代碼檢查調用函數的返回值,參數和調用匹配 |
|
||
19 |
函數確保了沒有影響函數外代碼 |
|
||
20 |
遞歸定義了出口 |
|
||
21 |
遞歸侷限於一個函數 |
|
||
22 |
對接口的調用必須要有判斷傳入的參數不能爲空和傳入的參數正確。 |
|
||
數據類型與變量 |
|
|||
1 |
數據類型存在數據類型解釋 |
|
||
2 |
代碼避免了重新定義預先定義的數據類型 |
|
||
3 |
靜態變量明確區分 |
|
||
4 |
每一個變量都初始化了 |
|
||
5 |
命名和現實生活中的事務接近而不僅僅是一個程序類型 |
|
||
6 |
所有的變量都有最小的活動範圍 |
|
||
7 |
所有的全局變量都描述清楚 |
|
||
8 |
所有的變量都用到了 |
|
||
條件判斷 |
|
|||
1 |
條件檢查和結果在代碼中清晰 |
|
||
2 |
If/else 使用正確 |
|
||
3 |
判斷的次數降到最小 |
|
||
4 |
boolen表達式表示清楚 |
|
||
5 |
最常用的情況最先判斷 ,所有的情況都考慮 |
|
||
6 |
判斷體足夠短,以使得一次可以看清楚 ,不要有臃腫的邏輯判斷。 |
|
||
7 |
嵌套層次小於3次 |
|
||
8 |
判斷條件使用引用時,應先判斷其是否爲null。 |
|
||
循環 |
|
|||
1 |
17.不要出現三層以上的for循環。如有必要必須寫清楚註釋 |
|
||
2 |
循環體不爲空,循環體能夠一次看清楚 |
|
||
3 |
循環之前做好初始化代碼 |
|
||
4 |
當有明確的多次循環操作,使用For循環 |
|
||
5 |
當有不明確的多次循環操作,while循環被使用 |
|
||
6 |
代碼中不存在無窮次循環 |
|
||
7 |
循環的頭部進行循環控制 |
|
||
8 |
循環體內的循環變量起到指示作用。 |
|
||
9 |
所有的循環邊界是否正確; |
|
||
10 |
循環終止的條件清晰 |
|
||
11 |
循環條件、判斷條件的邊界值,數組、集合下標是否越界。 |
|
||
註釋 |
|
|||
1 |
類、方法、判斷條件、循環、主要變量是否添加註釋。 |
|
||
2 |
類名、方法名、變量名的命名是否規範。 |
|
||
3 |
有返回值的方法是否正確返回。Return語句應定義在方法結尾處。 |
|
||
4 |
|
|||
5 |
解釋不過於簡單,解釋說明代碼功能,準確描述代碼意義 |
|
||
6 |
註解清楚正確 ,註解爲用戶服務 |
|
||
7 |
所有的假設和限制進行註解 |
|
||
8 |
長的控制體結束,進行註解 |
|
||
9 |
類、方法、變量等註釋是否符合規範,註釋是否能夠清晰明瞭 |
|
||
10 |
對if和for、while等要進行必要的註釋,並且方法體都要用{ }包起來 |
|
||
11 |
代碼的註釋不能過於簡單。要清晰明瞭,提交的時候必須寫清楚修改的功能點和爲什麼要修改。 |
|
||
總括 |
|
|||
1 |
代碼直觀 |
|
||
2 |
無用的代碼、註解已經刪除 |
|
||
3 |
除非必要,不要再循環體內定義對象。 |
|
||
4 |
代碼是否與詳細設計一致。 |
|
||
其他注意項 |
|
|||
1 |
儘量減少同名的類(如java.sql.Date,java.util.Date) |
|
||
2 |
不要在循環中反覆定義創建變量 for(){String str= (new String)v.next();} |
|
||
3 |
不要在循環中使用複雜的計算 for(int i=0;i<en.size()i++){} |
|
||
4 |
可能重複執行的SQl語句儘量使用preparedStatment |
|
||
5 |
浮點型要精確比較時不要使用==,而如下進行 Math.abs(x-0.0)<Double.MIN.value*2 |
|
||
6 |
在sql中注意敏感的單詞要回避使用 DB2 中id flag year month name state Oracle 中number Sybase中 count |
|
||
7 |
代碼與操作系統無關,不需要任何假設條件 |
|
||
特殊 |
|
|||
1 |
所有的數組訪問在它們的邊界內 |
|
||
2 |
所有常量定義和使用替代代碼中的數字 |
表述模糊 |
||
3 |
類型轉換明確指明 |
|