日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA代码走查审查规范

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA代码走查审查规范 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JAVA代碼走查審查規范

(內部專用)

分類

重要性

檢查項

備注

命名

 

 

 

 

重要

命名規則是否與所采用的規范保持一致?

成員變量,方法參數等需要使用首字母小寫,其余單詞首字母大寫的命名方式,禁止使用下劃線(_)數字等方式命名

 

不要出現局部變量,成員變量大寫字母開頭等問題

 

一般

是否遵循了最小長度最多信息原則?

各種命名盡可能短,表意準確,除2代替‘to’,4代替‘for’外,不建議使用數字在命名中

 

重要

has/can/is前綴的函數是否返回布爾型?

成員變量,方法參數,局部變量等為布爾型時,如果出現has/can/is開頭,則將這些詞去掉

 

重要

類名是否存在重名問題?

自己實現的類盡量不要和別人的類重名,盡管不在同一個包下,特別是子類和父類重名的情況

注釋

 

 

 

 

重要

注釋是否較清晰且必要?

方法JAVADOC注釋中需要說明各參數、返回值及異常說明,參數說明需按照參數名稱及用意對應標注

 

重要

復雜的分支流程是否已經被注釋?

 

 

一般

距離較遠的}是否已經被注釋?

 

 

重要

函數是否已經有文檔注釋?(功能、輸入、返回及其他可選)

文件,類(含接口,枚舉等),成員變量,方法前需要有JAVADOC的注釋

 

一般

特殊用法是否被注釋?

 

聲明、空白、縮進

 

 

 

 

一般

每行是否只聲明了一個變量?(特別是那些可能出錯的類型)

 

 

重要

變量是否已經在定義的同時初始化?

 

 

重要

類屬性是否都執行了初始化?

 

 

一般

代碼段落是否被合適地以空行分隔?

 

 

一般

是否合理地使用了空格使程序更清晰?

基本代碼格式中的空格符不可缺少,這些空格出現在?,:,+,-,*,/,=,==,>,<,>=,<=,!=,及各種括號附近

 

提示

代碼行長度是否在要求之內?

每行不得超過120個字符

 

重要

controller,service,?dao?中不要聲明有狀態的變量。

此變量不能被修改。如果要進行修改,必須通過鎖進行控制。

 

一般

折行是否恰當?

 

 

一般

集合是否被定義為泛型類型?

定義集合時,建議定義其泛型類型,減少類型轉換和警告錯誤

語句/功能分布/規模

 

 

 

 

一般

包含復合語句的{}是否成對出現并符合規范?

 

 

重要

是否給單個的循環、條件語句也加了{}?

if,else,else?if,while,for,case等代碼塊必須用{}包圍

 

一般

單個變量是否只做單個用途?

 

 

重要

單行是否只有單個功能?(不要使用;進行多行合并)

 

 

重要

單個函數是否執行了單個功能并與其命名相符?

 

 

一般

操作符++和—?—操作符的應用是否符合規范?

 

規模

 

 

 

 

重要

單個函數不超過規定行數?

 

 

重要

縮進層數是否不超過規定?

 

可靠性(總則/變量和語句)

 

 

 

 

重要

是否已經消除了所有警告?

開發工具的警告

 

重要

常數變量是否聲明為final?

 

 

重要

對象使用前是否進行了檢查?

 

 

重要

成員變量,局部變量是否在使用前被賦值?

對象初始化為null的對象被調用前必須被重新賦值,如果賦值語句在try塊中,調用操作必須在try塊中

 

一般

局部對象變量使用后是否被復位為NULL?

特別是?數組?集合?Map

 

重要

對數組的訪問是否是安全的?(合法的index取值為[0,?MAX_SIZE-1])。

 

 

重要

是否確認沒有同名變量局部重復定義問題?

嚴禁局部變量名稱和類或對象成員變量同名

 

一般

程序中是否只使用了簡單的表達式?

 

 

重要

是否已經用()使操作符優先級明確化?

 

 

重要

所有判斷是否都使用了(常量==變量?或者?常量.equals(變量))的形式?

常量放在比較符前可以有效降低比較符寫成賦值語句?,減少空指針異常

 

重要

是否每個if-else?if-else語句都有最后一個else以確保處理了全集?

 

 

重要

是否每個switch-case語句都有最后一個default以確保處理了全集?

 

 

一般

for循環是否都使用了包含下限不包含上限的形式?(k=0;?k<MAX)

 

 

重要

XML標記書寫是否完整,字符串的拼寫是否正確?

 

 

重要

對于流操作代碼的異常捕獲是否有finally操作以關閉流對象?

關閉前需要判斷?流對象是否為空?

 

提示

退出代碼段時是否對臨時對象做了釋放處理?

 

 

重要

對浮點數值的相等判斷是否是恰當的?

嚴禁使用==直接判斷浮點數值?。提供通用方法

 

重要

是否對象比較都使用了equals?

對象(包括包裝類)比較必須使用equals,而不是使用==或!=操作

 

重要

使用equals進行比較時是否確保比較的兩個對象類型一致?

equals方法比較的對象在對象類型確定的前提下,建議是同一類型的,例如Integer和""使用equals是不提倡的

 

一般

操作Map或Properties結構對象,用于傳值時是否將Key定義為常量?

Session,Request等對象的setAttribute,getAttribute方法的key建議使用常量,不得手工輸入字符串

 

重要

是否在類型轉換前確保了類型的兼容?

除非明確保證對象類型

 

重要

包裝類做簡單預算前是否保證非空??建議都使用包裝類。

包裝類進行操作前,建議進行非空(null?!=?xx)判斷,防止發生空指針異常

 

重要

對象屬性在使用前是否確保被準確賦值?

只讀屬性(只提供get方法的成員變量)除非特意返回固定值,否則必須提供set方法或在其他方法調用時將其賦值

 

重要

方法調用前是否有非空判斷?

對參數的非空判斷必須出現在方法調用之前,否則說明前面可能導致空指針或者后者判斷是沒有必要的,非空判斷,默認由調用者提供

 

重要

非線程安全的對象是否被正確保證線程安全?

DateFormat實例的format方法調用不是線程安全,類似的情況不適合使用static定義,建議使用ThreadLocal方式實現,參看UnifiedCodeGenerator

 

一般

相同用意的成員變量是否使用了相同的命名?

不同實體Entity、VO、BO之間表示同一含義的成員變量,建議使用相同的名稱,盡量不要出現,有的地方用username,有的地方用userName這樣的情況

可靠性(函數)

 

 

 

 

重要

入口對象是否都被進行了判斷不為空?

 

 

重要

入口數據的合法范圍是否都被進行了判斷?

 

 

重要

是否對有異常拋出的方法都執行了try...catch保護?

 

 

重要

是否函數的所有分支都有返回值?

 

 

重要

int的返回值是否合理?(負值為失敗,非負值成功)

 

 

一般

對于反復進行了int返回值判斷是否定義了函數來處理?

 

 

一般

關鍵代碼是否做了捕獲異常處理?

 

 

一般

字典表定義是否用枚舉,或者有一個統一的定義?

 

 

重要

是否對方法返回值對象做了null檢查,該返回值定義時是否被初始化?

 

 

重要

是否對同步對象的遍歷訪問做了代碼同步?

 

 

重要

是否確認在對Map對象使用迭代遍歷過程中沒有做增減元素操作?

Map遍歷時執行增減元素操作將拋出ConcurrentModificationException,對集合對象遍歷時建議都不要進行增減元素操作。

 

重要

線程處理函數循環內部是否有異常捕獲處理,防止線程拋出異常而退出?

 

 

重要

原子操作代碼異常中斷,使用的相關外部變量是否恢復先前狀態?

 

 

重要

函數對錯誤的處理是恰當的?

 

 

重要

異常捕獲后是否進行了日志記錄或異常繼續拋出?

異常捕獲后如果無法處理需要繼續拋出,如果可以處理,建議將異常日志進行記錄

 

重要

是否構造方法中不調用當前對象的構造方法

嚴禁在構造方法中new一個當前對象

可維護性

 

 

 

 

重要

實現代碼中是否消除了直接常數?(用于計數起點的簡單常數例外)

 

 

重要

是否消除了導致結構模糊的連續賦值?(如a=?(b=d+c?))

 

 

重要

是否正確使用了日志記錄?

 

 

一般

是否有冗余判斷語句?(如:if?(b)?return?true;?else?return?false;)

“if?(b)?return?true;?else?return?false;”==》“return?b;”;禁止使用類似“if/while(表達式?==?true)或if/while(表達式?==?false)”的判斷

 

重要

是否把方法中的重復代碼抽象成私有函數?

 

代碼警告

 

 

 

 

一般

是否清除了多余導入的包或類?

 

 

重要

是否清除了只定義未使用的局部變量?

嚴禁局部變量被定義或者初始化而未被使用,這種情況需要刪除該局部變量

 

一般

是否將魔鬼數字修改為常量使用?

不允許直接使用除-2,-1,0,1,2,3,4,5,6,7,8,9,10外的數字,除此外的數字需要定義常量使用

 

提示

常量定義是否為static?final格式?

常量定義格式為public/protected//private?static?final?Type?TYPE,static和final順序要保持一致

 

提示

實現序列化的對象是否定義了serialVersionUID?

建議實現Serializable的類需要增加“private?static?final?long?serialVersionUID?=?1L;”

可讀性

 

 

 

 

一般

是否用if?else結構替換了三元運算符?

表達式復雜情況下?不要使用(flag?exp1:exp2)語句,該語句需要修改為if?else結構

 

一般

代碼注釋率是否結余30%~60%之間?

代碼注釋率應落在30%~60%之間

性能

 

 

 

 

重要

日志記錄的Log,Logger對象是否定義為常量?

用于記錄日志的Log,Logger對象在類中定義必須是static?final的,建議定義為private的,因為這類對象初始化比較耗時,不利系統運行

日志

 

 

 

 

重要

打印信息是否都用日志管理?

代碼中建議不要使用System.out.println打印信息,只有在系統啟動或系統即將退出時使用,其余部分全部用日志記錄

圈復雜度

 

 

 

 

重要

單個類行數是否不大于500行?

單個類建議行數小于500行,最多不超過1000行

 

重要

方法參數個數是否在7個以內?

方法參數個數建議不大于5個,最多不超過7個

 

重要

單個方法函數是否不大于30行?

單個方法建議函數不大于30行,做多不超過60行

 

重要

單方法中try/for/while/switch/if最深深度是否不大于5?

單方法中try/for/while/switch/if最深深度不允許大于5

 

重要

方法調用最深深度是否不大于15?

方法內部+內部調用累計深度不允許大于15

SQL空格

 

 

 

 

一般

連接符or、in、and、以及=、<=、>=等前后加上一個空格。

 

 

一般

逗號之后必須接一個空格。

 

 

一般

關鍵字、保留字和左括號之間必須有一個空格。

 

SQL注釋

 

 

 

 

重要

對較為復雜的SQL語句加上注釋,說明算法、功能。注釋風格:注釋單獨成行、放在語句前面。

 

 

重要

對重要的計算應說明其功能。

SQL中盡量少涉及業務邏輯

 

一般

可采用單行/多行注釋。(--?或?/*?*/方式)。

 

SQL優化性能建議

 

 

 

 

 

1?書寫SQL語句優化細則

 

 

重要

???1)?盡量避免相同語句由于書寫格式的不同,而導致多次語法分析。

 

 

重要

???2)?多表連接時,使用表的別名來引用列。

建議最多5個連接

 

重要

???3)?不要在任何代碼中使用?SELECT?*。

 

 

重要

???4)?where條件中盡量減少使用常量比較,改用參數變量。

 

 

重要

???5)?盡量少用嵌套查詢。如必須,請用not?exist代替not?in子句。

 

 

重要

???6)?用多表連接代替EXISTS子句。

 

 

重要

???7)?使用UNION?ALL提高性能?。

 

 

重要

???8)?in、or子句常會使用工作表,使索引失效;如果不產生大量重復值,可以考慮把子句拆開;拆開的子句中應該包含索引。

 

 

 

2?排序注意事項

 

 

重要

???1)?大量的排序操作影響系統性能,所以盡量減少orderby和group?by排序操作。如必須使用排序操作,請遵循如下規則:

 

 

重要

?????a.?排序盡量建立在有索引的列上。

 

 

重要

?????b.?如結果集不需唯一,使用union?all代替union。

 

 

 

3?選用索引注意事項

 

 

重要

???1)?對于復合索引,SQL語句必須使用主索引列。

 

 

重要

???2)?索引中,盡量避免使用NULL。

 

 

重要

???3)?對于索引的比較,盡量避免使用NOT=(!=)。

 

 

重要

???4)?查詢列和排序列與索引列次序保持一致。

 

 

 

4?其他經驗性規則

 

 

重要

???1)?任何對列的操作都將導致表掃描,它包括數據庫函數、計算表達式等等,查詢時要盡可能將操作移至等號右邊。

 

總結

以上是生活随笔為你收集整理的JAVA代码走查审查规范的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。