【代码审查系列4】CODE REVIEW 代码审查清单

整洁的代码

清单项 分类
使用可以表达实际意图的名称 有意义的名称
每一个概念只用一个词 有意义的名称
使用方案/问题领域名称 有意义的名称
类应该是比较小的
函数应该是比较小的 函数
只做一件事 函数
DRY(拒绝重复) 函数
用代码来注释自己的做法 注释
确定应用了代码格式化 格式
使用异常而不是返回码 异常
不要返回NULL 异常

安全性问题

清单项 分类
如果不用继承,使用final类 基础
避免重复代码 基础
权限限制:程序应该运行在保证功能正常的最小权限模式下 基础
最小化类和成员的可访问性 基础
注释安全相关的信息 基础
系统的输入必须检查是否有效和在允许范围内 拒绝服务
避免对于一些不寻常行为的过分日志 拒绝服务
在任何情况下都释放资源(流,连接等) 拒绝服务
从异常中清楚敏感信息(暴露文件路径,系统内部相关,配置,IP等) 秘密信息
不把高敏感度的信息写到日志 秘密信息
考虑把高度敏感的信息在使用后从内存中删除 密码信息
限制包,类,接口,方法和域的可访问性 可访问性的扩展
限制类和方法的可扩展性 可访问性的扩展
检验输入(有效数据,大小,范围,边界) 输入检验
把从不可信对象得到的输出作为输入来检验 输入检验
为native方法定义包装类(而不是定义native方法为public) 输入检验
把从不可信对象得到的输出作为输入来对待 可变性
使public static域为final(避免调用方法(caller)修改它的值) 可变性
避免暴露敏感类的构造函数 对象构造
避免安全敏感类的序列化 序列化反序列化(Serialization Deserialization)
通过序列化来保护敏感数据 序列化反序列化
小心地缓存潜在的特权操作结果 序列化反序列化

性能

清单项目 分类
避免过分的同步 并发
保持同步于去比较小 并发
知道String连接的性能情况 综合编程
避免创建不需要的对象 创建和销毁对象