代码复查清单
注意:此清单只能在最后附加Code Check Point(CCP),不能从中间插入,每一项都有对应的唯一编号
分类代码:
* 1-性能项
* 2-潜在风险
* 3-常规项
* 4-安全项
* 5-文档项
* 6-测试项
序号 | 分类 | 要点 | 描述 |
---|---|---|---|
CCP-1 | 1-性能项 | 事务粒度 | 保持事务精简,尽量减少对共享资源的占用,优化共享资源竞争,例如:某些耗时的取值逻辑是否可以拿出事务之外,而又不影响事务结果 |
CCP-2 | 1-性能项 | 多线程改造 | 特定的应用场景可以采用多线程并行处理,当然也要考虑随之而来的并发问题 |
CCP-3 | 1-性能项 | 同步粒度 | 避免过分的同步,尽量保持同步区域的最小,并尽量使用新的并发库 |
CCP-4 | 1-性能项 | String的连接性能 | 识别、修正,StringBuilder/StringBuffer替代 |
CCP-5 | 1-性能项 | 数据结构是否应用合理 | 注意:Set/Map/List/Array等的应用场景 |
CCP-6 | 1-性能项 | 循环结构是否应用合理 | 例如,多次循环相同的数据是否可以合并,耗时操作是否可以提到循环外,If判断是否可以提到循环外等等 |
CCP-7 | 1-性能项 | 减少网络交互次数和负载 | 例如,批量改造,精简请求、响应数据格式 |
CCP-8 | 1-性能项 | 减少数据库交互次数及负载 | 例如,多次查询是否可以合并,结果是否可以精简 |
CCP-9 | 1-性能项 | 耗时操作的处理 | 如何避免重复计算,如何缓存起来复用处理结果 |
CCP-10 | 1-性能项 | 最短路径返回 | 减少资源消耗,常见场景有两个:1. 验证函数入参,并且在函数内,一旦出现验证错误,直接返回,减少不必要的资源耗用 2. 短路操作中,可以将耗时判断放到简单判断之后” |
CCP-11 | 1-性能项 | 批量处理&锁问题 | 总结下来问题有以下几个大方向: 1. 批量处理的问题,数据量大的批处理建议分页来做不要一下子全部拿出来,这样对于内存垃圾回收很不友好 2. 并发更新的问题 3. 外部WS接口调用,是否能重点看看外部接口是否有瓶颈 |
CCP-12 | 2-潜在风险 | WS调用:超时设置 | 保护自身系统 |
CCP-13 | 2-潜在风险 | WS发布:批量负载限制 | 保护自身系统,包括了前端页面调用的WS |
CCP-14 | 3-常规项 | 异常处理-重新抛出异常规范 | 重新抛出的异常必须保留原来的异常,即throw new NewException(“message”, e); 而不能写成throw new NewException(“message”)。 |
CCP-15 | 3-常规项 | 异常处理-未处理异常规范 | 1. 在所有异常被捕获且没有重新抛出的地方必须写日志。 日志中必须传入原始异常,例如,logger.error(e.getMessage(), e); 2. 如果属于正常异常的空异常处理块必须注释说明原因,否则不允许空的catch块。 |
CCP-16 | 3-常规项 | 异常处理-捕获及重新封装机制 | 框架尽量捕获低级异常,并封装成高级异常重新抛出,隐藏低级异常的细节。 |
CCP-17 | 3-常规项 | 日志输出-提前判断日志级别 | 输出前必须判断相应日志级别是否启用 |
CCP-18 | 3-常规项 | 日志输出-Format | 尽量用format的方式debug(“memberId:{}“,memberId) |
CCP-19 | 3-常规项 | 日志输出-System.out/System.err规范 | 不允许出现System.out/System.err等输出方式 |
CCP-20 | 3-常规项 | 字符常量 | 1. 字面量一律定义成静态常量使用 2. 不要出现硬编码,均需定义成变量” |
CCP-21 | 3-常规项 | 对象比较 | 合理分清==与equals的区别 |
CCP-22 | 3-常规项 | 模块化要求 | 代码是否尽量做到了模块化&可复用了 |
CCP-23 | 4-安全项 | 输入参数 | 1. 所有的数据输入是否都进行了检查(检测正确的类型,长度,格式和范围),并且进行了编码?2. 无效的参数值是否能够处理? |
CCP-24 | 4-安全项 | 输出结果 | 输出的值是否进行了检查并编码? |
CCP-25 | 4-安全项 | 第三方系统交互 | 第三方系统交互,是否正确捕获了所有异常情况,是否覆盖了所有正常/错误的结果处理逻辑? |
CCP-26 | 5-文档项 | 注释-清晰真实性 | 是否有注释,并且描述了代码的真实意图?是否在实时更新? |
CCP-27 | 5-文档项 | 注释-函数 | 所有的函数都有注释吗? |
CCP-28 | 5-文档项 | 注释-特殊说明项 | 对非常规行为和边界情况处理是否有描述? |
CCP-29 | 5-文档项 | 注释-待处理项 | 是否有未完成的代码?如果是的话,是不是应该移除?或者用合适的标记进行标记,例如“TODO”、“FIXME”等 |
CCP-30 | 6-测试项 | 是否存在测试?测试覆盖率如何? | 是否存在测试,它们是否可以被理解?例如,是否达到了期望的覆盖率? |