程序员必备的代码审查(Code Review)清单

整洁的代码 清单项目 分类 使用可以表达实际意图(Intention-Revealing)的名称 有意义的名称 每一个概念只用一个词 有意义的名称 使用方案/问题领域名称 有意义的名称 类应该是比较小的! 类 函数应该是比较小的! 函数 只做一件事 函数 DRY(Don’t Repeat Yourself)原则,(拒绝重复) 函数 用代码来解释自己的做法(译者注:即代码注释) 注释 确定应用了代码格式化 格式 使用异常而不是返回码 异常 不要返回Null 异常

*参考自:http://techbus.safaribooksonline.com/book/software-engineering-and-development/agile-development/9780136083238

安全 清单项目 分类 如果不用于继承,使类为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 访问限制

*参考自: http://www.oracle.com/technetwork/java/seccodeguide-139067.html

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

*参考自: http://techbus.safaribooksonline.com/book/programming/java/9780137150021

综合(译者注:原文中的作者把checklist和category对应的列搞错了,译文中已修正)

清单项目 分类 对可以恢复的情况使用已受检异常(checked exceptions),对于程序错误使用运行时异常(runtime exceptions) 异常

比丘资源网 » 程序员必备的代码审查(Code Review)清单

发表回复

提供最优质的资源集合

立即查看 了解详情