Sonar作為一個非常實用的代碼質(zhì)量檢查工具,可以在各個維度對整個工程進行一個量化,如代碼的測試覆蓋率、代碼內(nèi)聚性指標、代碼復雜度、代碼的重復性檢查、包之間的依存度以及代碼沖突性等,可以非常直觀的通過圖標看到這些數(shù)據(jù),關于sonar的安裝和使用在本博的另一篇文章(《代碼質(zhì)量檢查工具Sonar結(jié)合hudson、maven使用》)有詳細描述
本文主要介紹sonar能夠檢查出的代碼隱患。
- Avoid Decimal Literals In Big Decimal Constructor 應避免使用Decimal(0.5)這樣的做法,因為這樣是錯誤的不精確的
- Avoid Rethrowing Exception 不應當在catch語句中重新拋出另外的異常
- Avoid Throwing Null Pointer Exception 不應該拋出空指針異常
- Boolean Instantiation 不需要實例化布爾變量,只需=Boolean.True or =Boolean.Flase
- Close Resource 有未關閉的資源,需要使用finally語句塊確保安全
- Collapsible If Statements 如果有多條if語句連續(xù)出現(xiàn),可以使用短路條件if(A && B && ......)提高效率
- Compare Objects With Equals 比較兩個對象應該使用equal而不是等于
- Cyclomatic Complexity 通常來講,這個方法或者類太長了,需要分解
- Dont Import Java Lang Java.Lang是默認引入的不需要顯示引入
- Empty Finalizer或Empty Finally Block或Empty If Stmt或Empty Statement或Empty Static Initializer或Empty Switch Statements或Empty Synchronized Block或Empty Try Block或Empty While Stmt:這個是非常常見的代碼問題,if、switch、finally、try等內(nèi)部是空的,很有可能是碼農(nóng)忘記處理了
- Equals Hash Code 方法equal重寫了但是hashcode未重寫
- Equals Null 和null比較用==而不是用equals
- If Else Stmts Must Use Braces或If Stmts Must Use Braces 編碼時if或者else不寫大括號,很容易出現(xiàn)問題
- Magic Number 魔術數(shù),指的是一個數(shù)字無端的出現(xiàn)在代碼中,但是卻不知道其含義,很常見
- Naming - *** 通常是類、方法、變量的命名不規(guī)范
- Replace Vector With List 應使用List來代替Vector提高效率
- Security - Array is stored directly 通常是數(shù)組類型的參數(shù)使用時,沒有使用clone,方法直接改變了引用所指的對象
- Singular Field 僅在某方法中使用的變量不應該聲明為實例變量
- Unconditional If Statement 通常是If語句永遠為真或者永遠為假
- Unnecessary Case Change 使用equalsIgnoreCase()更高效
- Unused Private Field或Unused formal parameter或Unused local variable或Unused private method沒 有用到的變量、參數(shù)、方法
- Useless Operation On Immutable 在方法體中修改了某值意圖想傳出來,但實際上操作的是一個新的對象或者值,如改變基本類型的參數(shù)
以上是部分常見的隱患類型,還有不少其他的沒有寫入。
眼鏡蛇