代码审查清单
提交者自查项
优先级 |
检查项 |
💕 |
通用 |
P1 |
代码有效。实现了预期功能,逻辑正确。 |
P1 |
没有重复代码。 |
P2 |
没有冗余代码。 |
P1 |
没有注释代码。 |
P1 |
循环设置了次数及恰当的终止条件。 |
P2 |
代码容易理解。 |
P1 |
所有类、变量及方法设置了合适的修饰符。 |
P1 |
没有调试代码。 |
P1 |
使用了合理的数据结构。 |
P1 |
性能可以满足大量数据(依业务场景区分是否必要)。 |
P2 |
代码易于维护。 |
P1 |
未完成的代码应标记TODO,并计划完成。 |
P2 |
代码尽可能模块化。 |
P1 |
不会发生内存泄漏。 |
P2 |
方法提前返回且不影响代码可读性。 |
P2 |
可伸缩,可支持大量用户(依业务场景区分是否必要)。 |
💕 |
编码格式 |
P1 |
代码对齐,有恰当的留白。容易识别代码块的开始与结束。 |
P1 |
遵循编码规范。 |
P1 |
遵循正确的命名约定(帕斯卡(Pascal)命名法、驼峰(CamelCase)命名法)。 |
P2 |
代码行不应过长,使用合理的换行增强可读性。尽量不需要水平滚动来查看代码。 |
P1 |
函数或类是否太大(行数过长)?函数或类是否承担了太多职责? |
P2 |
每次提交应尽可能只修改一项功能,不要提交过多的代码,如修改多个功能建议在多个合并请求(Pull Request 或 Merge Request)中拆分。 |
P1 |
遵循团队的编码风格。 |
💕 |
安全 |
P1 |
检查所有数据输入(类型、长度、格式和范围等)并对其编码。 |
P1 |
编译时警告尽可能少,有无法消除的警告应标注说明、理由。 |
P1 |
不能隐藏异常或错误。 |
P1 |
校验无效的参数值。 |
P1 |
不能硬编码任何敏感数据。 |
P2 |
检查和编码输出值。 |
💕 |
测试 |
P1 |
代码可测试。代码应结构化,不要添加或隐藏太多的依赖项,可以兼容测试框架。 |
P2 |
有单元测试,并尽可能测试全面。 |
P2 |
单元测试是为了测试代码是否执行了预期功能。 |
审查员检查项
优先级 |
检查项 |
💕 |
设计与职责实现 |
P1 |
解决方案设计得足够好,满足设计预期。 |
P1 |
代码完成了它该做的事。 |
P1 |
解决方案或代码容易理解。 |
P1 |
接口(API)或用户界面(UI)使用直观。 |
P1 |
使用了正确的框架、接口、库和服务。 |
P1 |
没有重复代码,不允许复制粘贴代码。 |
P1 |
代码足够模块化。 |
P2 |
使用了特定语言的最佳实践,合理的设计模式。 |
P2 |
代码遵循了面向对象的设计原则:单一责任原则、开闭原则、里氏(Liskov)替换原则、接口隔离、依赖注入。 |
P2 |
代码没有非必要的编译或运行时依赖。 |
P2 |
代码抽象合理。 |
💕 |
逻辑错误和缺陷 |
P1 |
代码能处理所有预见的用户行为。 |
P1 |
代码不应任何输入或外部事件中断。 |
💕 |
错误处理和日志 |
P1 |
正确处理错误和异常。 |
P1 |
正确恰当地记录日志。 |
P1 |
没有无用的日志。 |
P1 |
校验或处理无效的参数值。 |
P2 |
用户友好的错误信息。 |
P2 |
使用第三方工具或库需要捕获它们返回的异常和错误。 |
💕 |
文档和注释 |
P1 |
接口必须有合理恰当的注释。 |
P1 |
代码必须有必要的注释。 |
P2 |
没有多余的注释或描述。 |
💕 |
测试与可测试性 |
P2 |
代码可测试。 |
P2 |
代码应对所有可能的输入进行全面测试。 |
P2 |
有足够的自动化测试(单元、集成、系统测试) |
P2 |
代码更改能否被现有的测试覆盖? |
💕 |
性能 |
P1 |
代码更改积极地影响性能。 |
💕 |
可读性 |
P1 |
合适的函数、方法、变量名提高代码可读性。 |
P1 |
代码位于正确的文件、文件夹、包(package)中。 |
P2 |
流程控制易理解。 |
P2 |
代码没有太多的条件语句或分支。 |
P1 |
没有不可访问的代码(dead code)。 |
P2 |
没有注释掉的代码。 |
💕 |
安全 |
P1 |
检查所有数据输入(类型、长度、格式和范围等)。 |
P1 |
对敏感用户信息(密码、公民身份号码、银行卡号等)及富文本输入编码。 |
P1 |
正确处理认证与授权。 |
P1 |
持久化之前保证用户数据安全。 |
P1 |
敏感数据(用户信息、信用卡信息)应经过恰当的加密后安全传输和存储。 |
P1 |
应校验并处理用户输入,解决安全漏洞(跨站脚本攻击、SQL注入等) |
P1 |
没有远程代码执行漏洞。 |
P1 |
敏感信息没有硬编码在代码或注释中。 |