Java Code Review清單
整潔的代碼
| 清單項目 | 分類 | </tr> </thead>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 使用可以表達實際意圖(Intention-Revealing)的名稱 | 有意義的名稱 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 每一個概念只用一個詞 | 有意義的名稱 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 使用方案/問題領域名稱 | 有意義的名稱 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 類應該是比較小的! | 類 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 函數應該是比較小的! | 函數 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 只做一件事 | 函數 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| DRY(Don’t Repeat Yourself)原則,(拒絕重復) | 函數 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 用代碼來解釋自己的做法(譯者注:即代碼注釋) | 注釋 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 確定應用了代碼格式化 | 格式 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 使用異常而不是返回碼 | 異常 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 不要返回Null | 異常 | </tr> </tbody> </table>
| 清單項目 | 分類 | </tr> </thead>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 如果不用于繼承,使類為final | 基礎 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 避免重復代碼 | 基礎 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 權限限制:程序應該運行在保證功能正常的最小權限模式下。 | 基礎 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 最小化類和成員的可訪問性 | 基礎 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 注釋出安全相關的信息 | 基礎 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 系統的輸入必須檢查是否有效和在允許范圍內 | 拒絕服務(Denial of Service) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 避免對于一些不尋常行為的過分日志 | 拒絕服務(Denial of Service) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 在任何情況下都釋放資源(流,連接等等) | 拒絕服務(Denial of Service) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 從異常中清除敏感信息(暴露文件路徑,系統內部相關,配置)P | 私密信息(Confidential Information) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 不要把高度敏感的信息寫到日志 | 私密信息(Confidential Information) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 考慮把高度敏感的信息在使用后從內存中清除 | 私密信息(Confidential Information) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 限制包,類,接口,方法和域的可訪問性 | 可訪問性的擴展(Accessibility Extensibility) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 限制類和方法的可擴展性(通過使它為final) | 可訪問性的擴展(Accessibility Extensibility) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 檢驗輸入(有效的數據,大小,范圍,邊界情況等等) | 輸入檢驗(Input Validation) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 把從不可信對象得到的輸出作為輸入來檢驗 | 輸入檢驗(Input Validation) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 為native方法定義包裝類(而不是定義native方法為pulibc) | 輸入檢驗(Input Validation) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 把從不可信對象得到的輸出作為輸入來對待 | 可變性 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 使public static域為final(避免調用方(caller)修改它的值) | 可變性 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 避免暴露敏感類的構造函數 | 對象構造 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 避免安全敏感類的序列化 | 序列化反序列化(Serialization Deserialization) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 通過序列化來保護敏感數據 | 序列化反序列化(Serialization Deserialization) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 小心地緩存潛在的特權操作結果 | 序列化反序列化(Serialization Deserialization) | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 只有在需要的時候才使用JNI | 訪問限制 | </tr> </tbody> </table>
| 清單項目 | 分類 | </tr> </thead>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 避免過分的同步 | 并發 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 保持同步區域比較小 | 并發 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 知道string連接的性能情況 | 綜合編程 | </tr>|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 避免創建不需要的對象 | 創建和銷毀對象 | </tr> </tbody> </table>
| 清單項目 | 分類 | </tr> </thead>|||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 對可以恢復的情況使用已受檢異常(checked exceptions),對于程序錯誤使用運行時異常(runtime exceptions) | 異常 | </tr>|||||||||||||||||||||||||||||
| 更多地使用標準異常 | 異常 | </tr>|||||||||||||||||||||||||||||
| 不要忽略異常 | 異常 | </tr>|||||||||||||||||||||||||||||
| 檢查參數的有效性 | 方法 | </tr>|||||||||||||||||||||||||||||
| 返回空數組或集合,而不是null | 方法 | </tr>|||||||||||||||||||||||||||||
| 最小化類和成員的可訪問性 | 類和接口 | </tr>|||||||||||||||||||||||||||||
| 在pulibc類中,使用訪問器方法(accessor methods)(譯者注:訪問器方法即我們平常用的get/set方法)而不是public域 | 類和接口 | </tr>|||||||||||||||||||||||||||||
| 最小化本地變量的范圍 | 綜合編程 | </tr>|||||||||||||||||||||||||||||
| 通過接口引用對象 | 綜合編程 | </tr>|||||||||||||||||||||||||||||
| 遵循廣泛接受的命名規則 | 綜合編程 | </tr>|||||||||||||||||||||||||||||
| 避免使用finalizer | 創建和銷毀對象 | </tr>|||||||||||||||||||||||||||||
| 當你重寫equals時總是重寫hashCode | 綜合編程 | </tr>|||||||||||||||||||||||||||||
| 總是重寫toString | 綜合編程 | </tr>|||||||||||||||||||||||||||||
| 使用枚舉來代替int常量 | 枚舉和注解(Annotations) | </tr>|||||||||||||||||||||||||||||
| 使用標記接口(marker interface)(譯者注:標記接口是一種沒有任何行為的接口,實現它只是為了讓實現類屬于某種類型,如JDK中的Serializable,Cloneable等)來定義類型 | 枚舉和注解(Annotations) | </tr>|||||||||||||||||||||||||||||
| 對共享可變的數據使用同步訪問 | 并發 | </tr>|||||||||||||||||||||||||||||
| 使用executors而不是task和thread | 并發 | </tr>|||||||||||||||||||||||||||||
| 注釋中描述線程安全情況 | 并發 | </tr>|||||||||||||||||||||||||||||
| 存在有效的JUnit/JBehave測試用例 | 測試 | </tr> </tbody> </table>
| 清單項目 | 分類 | </tr> </thead>|||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 查看靜態代碼分析器的報告來進行類的添加和修改 | 靜態代碼分析 | </tr> </tbody> </table>