Java Code Review

整潔的代碼

 

清單項目 分類
使用能夠表達實際意圖(Intention-Revealing)的名稱 有意義的名稱
每個概念只用一個詞 有意義的名稱
使用方案/問題領域名稱 有意義的名稱
類應該是比較小的!
函數應該是比較小的! 函數
只作一件事 函數
DRY(Don’t Repeat Yourself)原則,(拒絕重複) 函數
用代碼來解釋本身的作法(譯者注:即代碼註釋) 註釋
肯定應用了代碼格式化 格式
使用異常而不是返回碼 異常
不要返回Null 異常

 

安全

清單項目 分類
若是不用於繼承,使類爲final 基礎
避免重複代碼 基礎
權限限制:程序應該運行在保證功能正常的最小權限模式下。 基礎
最小化類和成員的可訪問性 基礎
註釋出安全相關的信息 基礎
系統的輸入必須檢查是否有效和在容許範圍內 拒絕服務(Denial of Service)
避免對於一些不尋常行爲的過度日誌 拒絕服務(Denial of Service)
在任何狀況下都釋放資源(流,鏈接等等) 拒絕服務(Denial of Service)
從異常中清除敏感信息(暴露文件路徑,系統內部相關,配置)P 私密信息(Confidential Information)
不要把高度敏感的信息寫到日誌 私密信息(Confidential Information)
考慮把高度敏感的信息在使用後從內存中清除 私密信息(Confidential Information)
限制包,類,接口,方法和域的可訪問性 可訪問性的擴展(Accessibility Extensibility)
限制類和方法的可擴展性(經過使它爲final) 可訪問性的擴展(Accessibility Extensibility)
檢驗輸入(有效的數據,大小,範圍,邊界狀況等等) 輸入檢驗(Input Validation)
把從不可信對象獲得的輸出做爲輸入來檢驗 輸入檢驗(Input Validation)
爲native方法定義包裝類(而不是定義native方法爲pulibc) 輸入檢驗(Input Validation)
把從不可信對象獲得的輸出做爲輸入來對待 可變性
使public static域爲final(避免調用方(caller)修改它的值) 可變性
避免暴露敏感類的構造函數 對象構造
避免安全敏感類的序列化 序列化反序列化(Serialization Deserialization)
經過序列化來保護敏感數據 序列化反序列化(Serialization Deserialization)
當心地緩存潛在的特權操做結果 序列化反序列化(Serialization Deserialization)
只有在須要的時候才使用JNI 訪問限制

 

性能

清單項目 分類
避免過度的同步 併發
保持同步區域比較小 併發
知道string鏈接的性能狀況 綜合編程
避免建立不須要的對象 建立和銷燬對象

 

綜合

清單項目 分類
對能夠恢復的狀況使用已受檢異常(checked exceptions),對於程序錯誤使用運行時異常(runtime exceptions) 異常
更多地使用標準異常 異常
不要忽略異常 異常
檢查參數的有效性 方法
返回空數組或集合,而不是null 方法
最小化類和成員的可訪問性 類和接口
在pulibc類中,使用訪問器方法(accessor methods)(譯者注:訪問器方法即咱們日常用的get/set方法)而不是public域 類和接口
最小化本地變量的範圍 綜合編程
經過接口引用對象 綜合編程
遵循普遍接受的命名規則 綜合編程
避免使用finalizer 建立和銷燬對象
當你重寫equals時老是重寫hashCode 綜合編程
老是重寫toString 綜合編程
使用枚舉來代替int常量 枚舉和註解(Annotations)
使用標記接口(marker interface)(譯者注:標記接口是一種沒有任何行爲的接口,實現它只是爲了讓實現類屬於某種類型,如JDK中的Serializable,Cloneable等)來定義類型 枚舉和註解(Annotations)
對共享可變的數據使用同步訪問 併發
使用executors而不是task和thread 併發
註釋中描述線程安全狀況 併發
存在有效的JUnit/JBehave測試用例 測試

 

靜態代碼分析 

清單項目 分類
查看靜態代碼分析器的報告來進行類的添加和修改 靜態代碼分析
相關文章
相關標籤/搜索