第二十四章 : java 代码审查最佳实践【code review 】

前言

本章知识点:

Springboot 版本 2.3.2.RELEASE ,xxl-job-core 2.4.0

Code Review是什么?

Code Review的中文翻译包括“代码审查”、“代码评审”和“代码走查”等。它是软件开发过程中的一种质量保证机制,主要通过对源代码进行系统性检查来实现。这种检查旨在查找代码中的缺陷,如代码缺陷、功能实现问题、编码合理性以及性能优化等,从而确保软件的总体质量并提升开发者的技术水平。

轻量级代码评审(Code Review)相对于正式代码评审,其成本明显较低。如果流程正确,它可以起到更加积极的效果。因此,轻量级代码评审在软件开发过程中经常被采用。此外,Code Review也是一种传递知识的手段,可以让不熟悉代码的人了解作者的意图和想法,从而方便以后的代码维护。同时,它也在鼓励程序员不断提升自己的技能水平。

总的来说,Code Review是一个集代码审查、找出问题、改进代码和改后督查为一体的完整流程,是软件开发过程中不可或缺的一环。

为什么需要Code Review?

Code Review(代码审查)是一种在软件开发过程中进行的系统性检查和评审代码的活动。它涉及团队成员之间相互检查彼此编写的代码,以确保代码质量、可读性和符合编码标准等。 Code Review带来的优势:

  1. 提高代码质量:通过代码审查,可以发现并纠正代码中的错误、缺陷和不符合规范的地方,从而提高整体代码质量。
  2. 促进知识共享和团队协作:俗话说的好:你有一个苹果,我有一个苹果,我们交换一下,一个人还是只有一个苹果;你有一个思想,我有一个思想,我们交换一下,一人就有了两个思想。这句话同样适用于我们进行软件开发。作为一个程序员,我们在面对同一个问题的时候,可能会有不同的解决方法。如果大家没有交流的话,每个人可能永远都只知道一种解决方法,大家也就没有进步可言。那么程序员之间如何互相学习呢?最简单的办法就是看别人的源代码,而CR就是最好的阅读别人源代码的过程。 通过审查他人的代码,开发者可以学习到新的编程技巧、设计模式和最佳实践,从而提高自己的技能水平。同时,代码审查也有助于建立团队协作精神,促进成员之间的沟通和合作。
  3. 增加代码的可读性和可维护性:代码审查可以确保代码具有良好的注释、清晰的命名和合理的结构,从而提高代码的可读性和可维护性。这对于长期项目的持续发展和维护非常重要。
  4. 遵循编码标准:代码审查可以确保团队成员遵循统一的编码标准和规范,使得代码风格一致,易于阅读和理解。
  5. 培养良好的开发习惯:通过代码审查,可以培养开发者良好的编程习惯,如编写清晰的代码、进行充分的测试、使用版本控制等。这些习惯对于提高开发效率和软件质量至关重要。
  6. 及早发现潜在缺陷与BUG,降低事故成本:代码审查可以在代码提交之前发现潜在的问题和缺陷,从而避免在后期出现重大故障或事故,降低事故处理成本。

什么时候做Code Review?

Code Review可以在软件开发过程中的不同阶段进行,具体的时间点取决于团队的开发流程和项目需求。以下是一些常见的进行Code Review的时间点:

  1. 提交代码前:在某些团队中,代码审查是代码提交到版本控制系统(如Git)之前的必要步骤。开发者在提交代码之前,会邀请其他团队成员进行代码审查,以确保代码质量和符合团队规范。
  2. 代码合并前:在持续集成和持续部署(CI/CD)的流程中,代码审查通常发生在代码合并到主分支之前。这样可以确保只有经过审查且质量良好的代码才能被合并到主分支,从而避免潜在的缺陷和问题。
  3. 阶段性审查:对于大型项目或长期项目,可以在开发的不同阶段进行代码审查。例如,在项目的某个模块或功能开发完成后,进行阶段性的代码审查,以确保该阶段代码的质量和符合项目要求。
  4. 功能开发完成后:在开发新功能或修复bug后,可以进行代码审查来确保新代码的质量和与现有代码的兼容性。
  5. 定期审查:一些团队会定期(如每周、每两周或每月)进行代码审查,以评估项目的整体代码质量和团队成员的编程技能。这种定期审查可以帮助团队及时发现并解决潜在问题,提高代码质量。

Committer需要注意什么?

作为代码提交者(Committer),在参与代码审查(Code Review)时,需要注意以下几个方面:

  1. 代码质量:确保提交的代码质量高,没有语法错误、逻辑错误或安全漏洞。在提交代码之前,最好进行充分的测试,以确保代码的稳定性和可靠性。
  2. 代码规范:遵循团队的代码规范和编码标准,以确保代码的可读性和可维护性。这包括命名规范、缩进、注释、代码风格等。
  3. 注释和文档:为代码添加适当的注释和文档,以帮助其他开发人员理解代码的功能和逻辑。注释应该清晰、简洁,并提供有价值的信息。
  4. 代码结构:确保代码结构清晰、易于理解和维护。避免过度复杂的函数或方法,尽量保持代码的简洁性和可读性。
  5. 避免大量改动:尽量将改动控制在一个合理的范围内,避免一次性提交大量改动。这有助于代码审查者更好地理解代码的逻辑和意图,提高代码审查的效率。
  6. 清晰的提交信息:在提交代码时,提供清晰、简洁的提交信息,说明代码更改的原因、目的和影响。这有助于代码审查者更好地理解代码更改的背景和意图。
  7. 尊重他人的意见:在代码审查过程中,可能会收到他人的反馈和建议。作为提交者,应该尊重他人的意见,并认真考虑他们的建议。如果有不同意见或看法,可以进行充分的讨论和协商。

总之,作为代码提交者,在参与代码审查时需要注意代码质量、规范、注释、结构等方面,同时尊重他人的意见,并积极响应反馈和建议。这有助于提高代码质量和团队的协作效率。

Code Reviewer需要看哪方面的内容?

  1. 代码风格:确保代码遵循Java的编码规范,如命名规范(使用驼峰命名法)、缩进和空格的使用、代码块的组织等。使用一致的代码风格可以提高代码的可读性。
  2. 注释:为代码添加适当的注释,解释其功能、用途、输入和输出等。注释应该清晰、简洁且易于理解。同时,对于复杂的逻辑或算法,应该添加更多的注释以帮助其他人理解。
  3. 异常处理:确保代码中包含适当的异常处理机制。对于可能抛出异常的代码块,应该使用try-catch块进行捕获,并处理或传递异常。此外,对于可能引发异常的公共方法,应该在方法签名中声明抛出异常。
  4. 测试:确保代码具有适当的测试覆盖率,特别是关键功能和边界条件。对于每个公共方法和类,都应该编写相应的单元测试,并确保它们通过。此外,还应该进行集成测试和性能测试,以确保系统的稳定性和性能。
  5. 代码重构:在审查过程中,如果发现代码存在重复、冗余或复杂的部分,可以提出重构建议。重构可以提高代码的可读性、可维护性和可扩展性。
  6. 代码简化:避免使用过于复杂或晦涩的代码结构。尽量使用简洁、直观和易于理解的代码实现相同的功能。
  7. 遵循设计模式:在适当的情况下,使用设计模式来组织代码结构。设计模式可以帮助提高代码的可维护性、可扩展性和可重用性。
  8. 文档化:对于公共类、方法和接口,应该编写相应的文档,解释其功能、参数和返回值等。这有助于其他人理解和使用代码。
  9. 避免魔法数字和字符串:避免在代码中使用硬编码的数字和字符串。应该使用常量或配置文件来管理这些值,以提高代码的可维护性和可读性。
  10. 避免全局变量:尽量减少全局变量的使用。全局变量可能导致代码之间的耦合度增加,并使得代码难以测试和维护。

代码审查工具

  1. Code Inspection:这是 IntelliJ IDEA 内置的代码审查工具,它能够对代码进行全面的静态分析,查找潜在的问题,如未使用的变量、空的捕获块、不必要的自动装箱等。开发者可以根据需要启用或禁用特定的检查项。
  2. FindBugs:FindBugs 是一个开源的代码审查工具,它可以检查 Java 字节码,寻找潜在的 bug。FindBugs 侧重于运行时错误检测,如空指针检查、未合理关闭资源、字符串相同判断错误等。在 IntelliJ IDEA 中,可以通过安装插件来集成 FindBugs。
  3. CheckStyle:CheckStyle 是一个开发工具,用于帮助程序员编写符合编码标准的 Java 代码。它自动检查 Java 代码,以查找程序设计错误,如命名规范、Javadoc 注释规范、空格规范等。在 IntelliJ IDEA 中,也可以通过安装插件来使用 CheckStyle。
  4. SonarLint:SonarLint 是 SonarQube 的 IntelliJ IDEA 插件,它能在编码时实时检查代码质量,并提供即时的反馈。它支持多种语言,包括 Java,可以检测出代码中的 bug、代码异味和安全漏洞。

代码分析和检查工具

  1. Code Inspection:这是 IntelliJ IDEA 内置的代码分析工具,可以对 Java 代码进行全面的静态分析,帮助开发者发现潜在的错误、代码异味、不符合编码标准的部分等。开发者可以根据需要启用或禁用特定的检查项,以定制符合项目需求的检查规则。
  2. Code Analysis Tools Window:在 IntelliJ IDEA 中,可以通过 “Analyze” 菜单访问到各种代码分析工具,如 “Inspect Code”(检查代码)、“FindBugs”(查找潜在的 bug)、“Analyze Dataflow to Here”(分析数据流至此处)等。这些工具可以帮助开发者分析代码的结构、逻辑和潜在问题。
  3. Intention Actions:Intention Actions 是 IntelliJ IDEA 提供的一组快速修复建议。当开发者在代码中遇到问题时,IDE 会自动提示可能的修复方案。通过选择并应用合适的 Intention Action,开发者可以快速修复代码中的问题。
  4. Annotations:IntelliJ IDEA 支持使用注解(Annotations)来提供额外的代码检查信息。例如,@Nullable 和 @NotNull 注解可以帮助开发者明确方法参数或返回值的可空性,从而减少空指针异常的风险。
  5. Code Style:除了代码分析,IntelliJ IDEA 还提供了强大的代码格式化功能。开发者可以配置代码样式规则,让 IDE 自动调整代码格式,保持代码风格的一致性。此外,IDEA 还支持自动导入类、自动重命名变量等功能,提高了编码效率。

代码格式化

  1. 打开 IntelliJ IDEA 并导入代码:首先,打开 IntelliJ IDEA,并打开你要格式化的代码文件或项目。
  2. 选择要格式化的代码:在代码编辑器中,你可以选择要格式化的整个文件、某个类、某个方法或其他代码块。你可以通过鼠标点击和拖拽来选择代码区域,或者使用快捷键(如 Ctrl+W 在 Windows/Linux 上,Cmd+W 在 macOS 上)来选择更大的代码块。
  3. 使用快捷键进行格式化:在 IntelliJ IDEA 中,你可以使用快捷键来快速格式化代码。在 Windows 和 Linux 系统上,默认的快捷键是 Ctrl + Alt + L;在 macOS 系统上,默认的快捷键是 Cmd + Option + L。按下相应的快捷键,IDEA 将自动根据你设置的代码样式规则来格式化选定的代码。
  4. 通过菜单进行格式化:除了使用快捷键,你还可以通过菜单栏中的选项来进行代码格式化。选择 “Code” 菜单,然后在下拉菜单中选择 “Reformat Code” 选项,即可对选定的代码进行格式化。
  5. 配置代码样式:在进行代码格式化之前,你可能需要配置代码样式规则,以确保格式化后的代码符合你的期望。你可以通过 “File” > “Settings” > “Editor” > “Code Style” 来配置 Java 代码的样式规则,包括缩进、空格、换行等。
  6. 检查格式化结果:一旦代码格式化完成,你可以仔细检查格式化后的代码,确保它符合你的代码风格要求。如果发现任何问题或不满意的地方,你可以手动调整代码,或者再次使用格式化功能进行微调。

更多推荐