https://dzone.com/articles/java-code-review-checklist
Clean Code
Checklist Item |
Category |
Use Intention-Revealing Names |
Meaningful Names |
Pick one word per concept |
Meaningful Names |
Use Solution/Problem Domain Names |
Meaningful Names |
Classes should be small! |
Classes |
Functions should be small! |
Functions |
Do one Thing |
Functions |
Don't Repeat Yourself (Avoid Duplication) |
Functions |
Explain yourself in code |
Comments |
Make sure the code formatting is applied |
Formatting |
Use Exceptions rather than Return codes |
Exceptions |
Don't return Null |
Exceptions |
* Reference: http://techbus.safaribooksonline.com/book/software-engineering-and-development/agile-development/9780136083238
Security
Checklist Item |
Category |
Make class final if not being used for inheritance |
Fundamentals |
Avoid duplication of code |
Fundamentals |
Restrict privileges: Application to run with the least privilege mode required for functioning |
Fundamentals |
Minimize the accessibility of classes and members |
Fundamentals |
Document security related information |
Fundamentals |
Input into a system should be checked for valid data size and range |
Denial of Service |
Avoid excessive logs for unusual behavior |
Denial of Service |
Release resources (Streams, Connections, etc) in all cases |
Denial of Service |
Purge sensitive information from exceptions (exposing file path, internals of the system, configuration) |
Confidential Information |
Do not log highly sensitive information |
Confidential Information |
Consider purging highly sensitive from memory after use |
Confidential Information |
Avoid dynamic SQL, use prepared statement |
Injection Inclusion |
Limit the accessibility of packages,classes, interfaces, methods, and fields |
Accessibility Extensibility |
Limit the extensibility of classes and methods (by making it final) |
Accessibility Extensibility |
Validate inputs (for valid data, size, range, boundary conditions, etc) |
Input Validation |
Validate output from untrusted objects as input |
Input Validation |
Define wrappers around native methods (not declare a native method public) |
Input Validation |
Treat output from untrusted object as input |
Mutability |
Make public static fields final (to avoid caller changing the value) |
Mutability |
Avoid exposing constructors of sensitive classes |
Object Construction |
Avoid serialization for security-sensitive classes |
Serialization Deserialization |
Guard sensitive data during serialization |
Serialization Deserialization |
Be careful caching results of potentially privileged operations |
Serialization Deserialization |
Only use JNI when necessary |
Access Control |
* Reference: http://www.oracle.com/technetwork/java/seccodeguide-139067.html
Performance
Checklist Item |
Category |
Avoid excessive synchronization |
Concurrency |
Keep Synchronized Sections Small |
Concurrency |
Beware the performance of string concatenation |
General Programming |
Avoid creating unnecessary objects |
Creating and Destroying Objects |
* Reference: http://techbus.safaribooksonline.com/book/programming/java/9780137150021
General
Category |
Checklist Item |
Use checked exceptions for recoverable conditions and runtime exceptions for programming errors |
Exceptions |
Favor the use of standard exceptions |
Exceptions |
Don't ignore exceptions |
Exceptions |
Check parameters for validity |
Methods |
Return empty arrays or collections, not nulls |
Methods |
Minimize the accessibility of classes and members |
Classes and Interfaces |
In public classes, use accessor methods, not public fields |
Classes and Interfaces |
Minimize the scope of local variables |
General Programming |
Refer to objects by their interfaces |
General Programming |
Adhere to generally accepted naming conventions |
General Programming |
Avoid finalizers |
Creating and Destroying Objects |
Always override hashCode when you override equals |
General Programming |
Always override toString |
General Programming |
Use enums instead of int constants |
Enums and Annotations |
Use marker interfaces to define types |
Enums and Annotations |
Synchronize access to shared mutable data |
Concurrency |
Prefer executors to tasks and threads |
Concurrency |
Document thread safety |
Concurrency |
Valid JUnit / JBehave test cases exist |
Testing |
* Reference: http://techbus.safaribooksonline.com/book/programming/java/9780137150021
Static Code Analysis
Category |
Checklist Item |
Check static code analyzer report for the classes added/modified |
Static Code Analysis |
微信公众号: 架构师日常笔记 欢迎关注!