编写规范代码的检查清单

  1. - 代码是按照编码指南编写的吗?
  2. - 代码能够按照预期工作吗?
  3. - 文件是不是在合适的位置?
  4. - 支撑文档是不是充分?
  5. - 代码是不是易于阅读、易于理解?
  6. - 代码是不是易于测试和调试?
  7. - 有没有充分的测试,覆盖关键的逻辑和负面清单?
  8. - 名字是否遵守命名规范?
  9. - 名字是不是拼写正确、简单易懂?
  10. - 名字是不是有准确的意义?
  11. - 代码的分块是否恰当?
  12. - 代码的缩进是否清晰、整洁?
  13. - 有没有代码超出了每行字数的限制?
  14. - 代码的换行有没有引起混淆?
  15. - 每一行代码是不是只有一个行为?
  16. - 变量的声明是不是容易检索和识别?
  17. - 变量的初始化有没有遗漏?
  18. - 括号的使用是不是一致、清晰?
  19. - 源代码的组织结构是不是一致?
  20. - 版权信息的日期有没有变更成最近修改日期?
  21. - 限定词的使用是不是遵循既定的顺序?
  22. - 有没有注释掉的代码?
  23. - 有没有执行不到的代码?
  24. - 有没有可以复用的冗余代码?
  25. - 复杂的表达式能不能拆解成简单的代码块?
  26. - 代码有没有充分的注释?
  27. - 注释是不是准确、必要、清晰?
  28. - 不同类型的注释内容,注释的风格是不是统一?
  29. - 有没有使用废弃的接口?
  30. - 能不能替换掉废弃的接口?
  31. - 不再推荐使用的接口,是否可以今早废弃?
  32. - 继承的方法,有没有使用 Override 注解?
  33. - 有没有使用异常机制处理正常的业务逻辑?
  34. - 异常类的使用是不是准确?
  35. - 异常的描述是不是清晰?
  36. - 是不是需要转换异常的场景?
  37. - 转换异常场景,是不是需要保留原异常信息?
  38. - 有没有不应该被吞噬的异常?
  39. - 外部接口和内部实现有没有区分隔离?
  40. - 接口规范描述是不是准确、清晰?
  41. - 接口规范有没有描述返回值?
  42. - 接口规范有没有描述运行时异常?
  43. - 接口规范有没有描述检查型异常?
  44. - 接口规范有没有描述指定参数范围?
  45. - 接口规范有没有描述边界条件?
  46. - 接口规范有没有描述极端状况?
  47. - 接口规范的起草或者变更有没有通过审阅?
  48. - 接口规范需不需要标明起始版本号?
  49. - 产品设计是不是方便用户使用?
  50. - 用户指南能不能快速上手?
  51. - 用户指南的示例是不是可操作?
  52. - 用户指南和软件代码是不是保持一致?

编写经济代码的检查清单

需求评审

  1. - 需求是真实的客户需求吗?
  2. - 要解决的问题真实存在吗?
  3. - 需求具有普遍的意义吗?
  4. - 这个需求到底有多重要?
  5. - 需求能不能分解、简化?
  6. - 需求的最小要求是什么?
  7. - 这个需求能不能在下一个版本再实现?

设计评审

  1. - 能使用现存的接口吗?
  2. - 设计是不是简单、直观?
  3. - 一个接口是不是只表示一件事情?
  4. - 接口之间的依赖关系是不是明确?
  5. - 接口的调用方式是不是方便、皮实?
  6. - 接口的实现可以做到不可变吗?
  7. - 接口是多线程安全的吗?
  8. - 可以使用异步编程吗?
  9. - 接口需不需要频繁地拷贝数据?
  10. - 无状态数据和有状态数据需不需要分离?
  11. - 有状态数据的处理是否支持规模水平扩张?

代码评审

  1. - 有没有可以重用的代码?
  2. - 新的代码是不是可以重用?
  3. - 有没有使用不必要的实例?
  4. - 原始数据类的使用是否恰当?
  5. - 集合的操作是不是多线程安全?
  6. - 集合是不是可以禁止修改?
  7. - 实例的尺寸还有改进的空间吗?
  8. - 需要使用延迟分配方案吗?
  9. - 线程同步是不是必须的?
  10. - 线程同步的阻塞时间可以更短吗?
  11. - 多状态同步会不会引起死锁?
  12. - 是不是可以避免频繁的对象创建、销毁?
  13. - 是不是可以减少内存的分配、拷贝和释放频率?
  14. - 静态的集合是否会造成内存泄漏?
  15. - 长时间的缓存能不能及时清理?
  16. - 系统的资源能不能安全地释放?
  17. - 依赖哈希值的集合,储存的对象有没有实现 hashCode() equals() 方法?
  18. - hashCode() 的实现,会不会产生撞车的哈希值?
  19. - 代码的清理,有没有变更代码的逻辑?

编写安全代码的最佳实践清单

安全管理

  1. - 有没有安全更新的策略和落实计划?
  2. - 有没有安全漏洞的保密共识和规范?
  3. - 有没有安全缺陷的评估和管理办法?
  4. - 软件是不是使用最新的安全修复版?
  5. - 有没有定义、归类和保护敏感信息?
  6. - 有没有部署多层次的安全防御体系?
  7. - 安全防御能不能运转良好、及时反应?
  8. - 不同的安全防御机制能不能独立运转?
  9. - 系统管理、运营人员的授权是否恰当?
  10. - 有没有风险管理的预案和长短期措施?


代码评审

  1. - 数值运算会不会溢出?
  2. - 有没有检查数值的合理范围?
  3. - 类、接口的设计,能不能不使用可变量?
  4. - 一个类支持的是深拷贝还是浅拷贝?
  5. - 一个接口的实现,有没有拷贝可变的传入参数?
  6. - 一个接口的实现,可变的返回值有没有竞态危害?
  7. - 接口的使用有没有严格遵守接口规范?
  8. - 哪些信息是敏感信息?
  9. - 谁有权限获取相应的敏感信息?
  10. - 有没有定义敏感信息的授权方案?
  11. - 授予的权限还能不能更少?
  12. - 特权代码能不能更短小、更简单?
  13. - 异常信息里有没有敏感信息?
  14. - 应用日志里有没有敏感信息?
  15. - 对象序列化有没有排除敏感信息?
  16. - 高度敏感信息的存储有没有特殊处理?
  17. - 敏感信息的使用有没有及时清零?
  18. - 一个类,有没有真实的可扩展需求,能不能使用 final 修饰符?
  19. - 一个变量,能不能对象构造时就完成赋值,能不能使用 final 修饰符?
  20. - 一个方法,子类有没有重写的必要性,能不能使用 final 修饰符?
  21. - 一个集合形式的变量,是不是可以使用不可修改的集合?
  22. - 一个方法的返回值,能不能使用不可修改的变量?
  23. - 类、方法、变量能不能使用 private 修饰符?
  24. - 类库有没有使用模块化技术?
  25. - 模块设计能不能分割内部实现和外部接口?
  26. - 有没有定义清楚内部数据、外部数据的边界?
  27. - 外部数据,有没有尽早地完成校验?
  28. - 有没有标示清楚外部数据的校验点?
  29. - 能不能跟踪未校验外部数据的传送路径?
  30. - 有没有遗漏的未校验外部数据?
  31. - 公开接口的输入,有没有考虑数据的有效性?
  32. - 公开接口的可变化输出,接口内部行为有没有影响?
  33. - 有没有完成无法识别来源的数据的校验?
  34. - 能不能不使用序列化技术?
  35. - 序列化的使用场景,有没有足够的安全保障?
  36. - 软件还存在什么样风险?
  37. - 有没有记录潜在的风险问题?
  38. - 有没有消除潜在风险的长期预案?
  39. - 有没有消除潜在风险的短期措施?
  40. - 潜在的风险问题如果出现,能不能快速地诊断、定位、修复?