代码评审

5/28/2024 工作工作经验

代码评审

# 一、代码评审是什么?

代码评审(Code Review)是软件开发过程中一个至关重要的环节,旨在确保代码质量、提高代码可维护性、并促进团队成员之间的知识共享。代码评审通常包括以下几个方面:

  1. 代码质量检查:评审人员会检查代码的结构、风格、命名规范等,确保代码符合团队或组织的编码标准。这包括确保代码清晰、简洁、易读。
  2. 功能正确性验证:评审人员会验证代码是否正确实现了预期的功能,确保没有逻辑错误或遗漏的情况。
  3. 安全性审查:评审人员会检查代码是否存在潜在的安全漏洞,确保代码遵循安全编程的最佳实践。
  4. 性能优化:评审人员会评估代码的性能,确保代码运行高效,避免不必要的资源消耗。
  5. 测试覆盖率:评审人员会检查代码是否有充分的测试覆盖,确保关键路径和功能都经过严格测试。
  6. 代码维护性和可扩展性:评审人员会考虑代码的可维护性和可扩展性,确保代码在将来容易进行修改和扩展。

# 二、代码评审的过程

  1. 提交代码:开发人员完成一个功能或修复一个问题后,会提交代码到代码库,并创建一个代码评审请求(Pull Request或Merge Request)。
  2. 分配评审人员:通常由项目组长或自动化工具分配评审人员。评审人员可能是同一个项目组的成员,也可能是跨团队的专家。
  3. 代码评审:评审人员通过代码管理工具(如GitHub、GitLab、Bitbucket等)查看提交的代码,进行逐行检查并提出意见和建议。
  4. 反馈和修改:评审人员提出的反馈会记录在代码评审请求中,开发人员根据这些反馈修改代码,然后重新提交。
  5. 批准合并:如果代码修改符合要求,评审人员会批准合并请求,代码就可以合并到主代码库中。

# 三、代码评审的好处

  • 提高代码质量:通过多人审查,发现潜在的问题和改进点。
  • 知识共享:团队成员可以通过评审学习彼此的编程技巧和经验,促进团队成员之间的知识交流和学习,使团队成员了解整个项目的代码和设计。
  • 早期发现缺陷:可以在功能测试之前通过代码评审前置发现一些问题,提高整体效率,及时发现并修复代码中的缺陷,减少后期修复成本。
  • 规范遵从:确保代码遵循团队或组织的编码标准和最佳实践、易于理解和维护。
  • 提高团队合作:促进团队成员之间的沟通和协作,提高整体效率。
  • 发现隐藏问题:通过不同视角的审查,发现开发者自己可能忽略的问题,包括逻辑错误、安全漏洞和性能问题。

# 四、代码评审缺陷类型有哪些?

# 4.1 业务逻辑错误类

在进行代码评审时,需要特别关注与业务相关的逻辑,确保代码正确地实现了业务需求

1、代码实现的功能流程实现是否与prd中描述一致;

2、提供接口的方法中字段获取与赋值是否正确(赋值时对象Dto是否正确);

3、代码中逻辑校验条件与返回结果是否与prd中描述一致;

4、前后端必需的校验卡控逻辑是否正确实现;

5、循环条件不正确或循环体内部逻辑错误;

6、未正确处理数据边界情况,可能导致程序异常或崩溃;

7、数据处理逻辑错误,导致计算结果不正确;

8、业务流程中的顺序或条件错误,导致程序无法正确执行业务流程。

# 4.2 功能缺失类

通过代码评审及时发现和修复功能缺失类的缺陷,可以确保功能的完整性和稳定性

1、代码中缺失prd或设计规范的某些功能;

2、未考虑所有可能的边缘情况,导致功能不完整或不稳定;

3、未对可能发生的异常情况进行适当处理,导致功能不健壮;

4、功能逻辑实现不完整或不符合设计要求,可能导致功能无法正常运行;

5、功能的接口设计不合理或交互逻辑不清晰,影响用户体验;

6、代码实现的功能流程是否与缺失的流程节点;

7、接口逻辑内部是否缺失字段赋值,传入参数未进行加工处理直接提供给前端;

8、必需的校验卡控逻辑是否有缺失;

9、是否缺少字段赋值、尤其前后端交互所需字段是否赋值正确。

# 4.3 异常处理类

通过合理的异常处理,可以提高系统的稳定性和可靠性,同时提升用户体验和系统可维护性

1、精确捕获: 捕获特定类型的异常,避免捕获过于宽泛的异常;

2、自定义异常: 根据业务需求定义自定义异常,提高异常的可读性和可维护性;

3、异常处理位置: 在合适的位置捕获和处理异常,避免异常被忽略或导致程序崩溃;

4、异常传递: 合理传递异常信息,让调用者能够正确处理异常情况;

5、日志记录: 记录异常信息到日志文件,方便排查问题和追踪异常原因;

6、友好提示: 提供用户友好的异常提示信息,让用户能够理解问题并采取相应措施;

7、避免空指针异常: 对可能为空的对象进行判空处理,避免空指针异常;

8、事务回滚: 在发生异常时进行事务回滚,保持数据一致性;

9、资源释放: 在异常发生后及时释放资源,避免资源泄漏;

10、异常与业务逻辑分离: 异常处理逻辑与业务逻辑分离,保持代码清晰和可读性;

11、异常处理策略: 根据业务需求制定合适的异常处理策略,保证系统的稳定性和可靠性。

# 4.4 前端显示类

通过对前端显示类代码进行评审并修复这些缺陷,可以提升用户体验和页面的可用性

1、未考虑不同屏幕尺寸和设备的响应式设计,导致页面在某些情况下显示不正常;

2、浏览器兼容性:未充分考虑不同浏览器的兼容性,导致页面在某些浏览器上显示异常;

3、页面布局问题:页面布局不合理或混乱,影响用户体验;

4、样式问题:样式不一致、过多或不符合设计规范,影响页面美观性;

5、图片加载问题:图片加载过慢或加载异常,影响页面加载速度和显示效果;

6、无障碍性问题:未考虑用户无障碍需求,导致页面不易访问;

7、国际化问题:未考虑多语言显示和本地化需求,导致页面在不同地区展示问题。

# 4.5 代码优化类

通过对代码优化类的代码评审,可以发现并改进这些缺陷,提高代码的性能和可维护性

1、不规范的命名:变量、函数或类命名不清晰、不具有描述性,影响代码可读性;

2、注释不足或错误:缺少必要的注释或存在与代码不符的注释,导致他人难以理解代码意图;

3、代码重复:存在重复的代码片段,导致代码冗余且难以维护;

4、安全漏洞:代码存在安全漏洞,如未经验证的用户输入、SQL注入等问题;

5、性能问题:代码性能低下,如循环过多、不必要的计算等,影响系统性能;

6、未处理异常:未对可能发生的异常情况进行适当处理,导致程序不稳定;

7、代码风格不一致:代码风格不统一,如缩进、空格、花括号等风格不一致;

8、低效的算法和数据结构:未选择最优算法或数据结构,导致性能低下;

9、重复计算:存在重复计算或冗余计算的情况,增加了不必要的计算负担;

10、内存泄漏:未正确释放内存或存在内存泄漏情况,导致资源浪费;

11、不必要的循环:存在不必要的循环或嵌套循环,影响程序执行效率;

12、过度优化:过度优化代码,导致代码可读性降低或出现难以维护的情况;

13、不合理的资源使用:未合理利用缓存、连接池等资源,导致资源使用效率低下;

14、并发问题:未考虑并发情况下的性能优化,导致性能瓶颈。

# 4.6 代码安全类

通过对代码安全类的代码评审,可以及时发现并修复这些缺陷,提高系统的安全性和稳定性

1、未经授权的数据访问:未对用户身份进行合适的验证和授权,导致未经授权的数据访问;

2、跨站脚本攻击(XSS):未对用户输入进行适当的过滤和转义,导致XSS漏洞;

3、SQL注入:未对用户输入进行正确的转义或参数化,导致SQL注入漏洞;

4、不安全的身份验证:未对密码进行适当的加密存储或使用不安全的身份验证方式;

5、敏感数据泄露:未对敏感数据进行适当的加密或保护,导致数据泄露风险;

6、不安全的文件处理:未对上传的文件进行适当的验证和处理,导致文件上传漏洞;

7、不安全的跳转和重定向:未对跳转和重定向进行合适的验证和控制,导致安全风险。