• 代码复查清单

    注意:此清单只能在最后附加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-测试项 是否存在测试?测试覆盖率如何? 是否存在测试,它们是否可以被理解?例如,是否达到了期望的覆盖率?