菜单

代码质量工具

相关源文件

本文档介绍了 The Algorithms Java 仓库中使用的代码质量工具和标准。这些工具有助于维护代码质量、强制执行编码规范、识别潜在错误并确保整个代码库的一致格式。

有关整体项目配置的信息,请参阅项目配置

代码质量工具概述

该仓库采用了多种自动化工具来确保代码质量

来源: checkstyle.xml pmd-exclude.properties .clang-format .github/workflows/clang-format-lint.yml

Checkstyle

Checkstyle 是一款开发工具,可帮助程序员编写符合编码标准的 Java 代码。它自动化了检查 Java 代码的过程,使人们免于重复性工作。

配置

该仓库使用基于 Sun 编码规范的自定义 Checkstyle 配置,该配置在 checkstyle.xml 中定义。该配置的严重级别设置为“error”,这意味着违规将导致构建失败。

Checkstyle 强制执行的关键规则

  1. 命名约定:类名必须遵循 PascalCase,方法名必须遵循 camelCase,常量必须使用 UPPER_CASE。
  2. 导入控制:禁止使用通配符导入,禁止冗余或未使用的导入。
  3. 空白符规则:运算符周围的空白符保持一致,无尾随空格。
  4. 代码块:控制语句必须使用大括号,避免嵌套代码块。
  5. 编码实践:无空语句,equals 和 hashCode 必须一起实现,无内部赋值。
  6. 类设计:如果类只有私有构造函数,则为 final 类;隐藏工具类构造函数。

配置文件中目前有几条规则被注释掉,并标记有 TODO 注释,表明它们未来可能会被强制执行。

来源: checkstyle.xml1-198

PMD

PMD 是一款源代码分析工具,用于查找常见的编程缺陷,例如未使用的变量、空 catch 块、不必要的对象创建和复杂的代码。

排除规则

该仓库包含一个 PMD 排除文件 pmd-exclude.properties,其中指定了要从 PMD 分析中排除的类和规则。这有助于避免误报或标准规则不适用于特定代码的情况。

排除文件主要针对许多类排除了 UselessParentheses 规则。此规则会标记不必要的括号,但在某些数学或复杂表达式中,即使不是严格必需的,额外的括号也可能提高可读性。

包类型被排除的类示例
密码算法AffineCipherDESRSA
数据结构AdjacencyMatrixGraphFibonacciHeapDoublyLinkedList
数学算法ComplexGaussianLinearDiophantineEquationsSolver
排序算法CircleSortDutchNationalFlagSortWiggleSort

排除配置如下所示

com.thealgorithms.ciphers.DES=UselessParentheses
com.thealgorithms.datastructures.lists.DoublyLinkedList=UselessParentheses

来源: pmd-exclude.properties1-65

Clang Format

Clang Format 是一款根据可配置样式指南自动格式化代码的工具。尽管其名称源于 C/C++ 生态系统,但它也支持 Java 格式化。

配置

该仓库在 .clang-format 中使用了详细的 Clang Format 配置,指定了代码的格式化方式。这确保了整个代码库的一致代码风格。

主要格式化规则包括

  1. 缩进:4个空格缩进(无制表符)
  2. 换行:行长度限制为 300 字符,文件末尾有换行符
  3. 间距:运算符周围有空格,括号内无空格
  4. 大括号:自定义大括号换行配置
  5. 注释:启用注释重排

CI 集成

该仓库使用 GitHub Actions 自动检查所有代码是否遵循 Clang Format 规则,这些规则定义在 .github/workflows/clang-format-lint.yml 中。

此工作流在每次推送到仓库和拉取请求时运行,确保 src 目录中的所有 Java 文件都遵循格式化规则。

来源: .clang-format1-137 .github/workflows/clang-format-lint.yml1-17

SpotBugs

虽然共享文件中未提供 SpotBugs 的具体配置文件,但它在构建系统图中被提及为项目中使用的代码质量工具之一。

SpotBugs 检查 Java 字节码以检测以下缺陷模式:

  • 潜在的空指针解引用
  • 无限循环
  • 不良实践
  • 性能问题
  • 安全漏洞

与开发工作流程的集成

代码质量工具已集成到开发工作流中,以确保所有贡献的代码质量一致。

代码质量示例

仓库对代码质量的承诺体现在类的实现中。让我们看看质量工具强制执行的一些模式:

工具类模式

工具类遵循一致的模式,使用 final 类修饰符和私有构造函数

文档标准

类和方法使用 Javadoc 进行了充分文档化

测试覆盖

每个实现类都有使用 JUnit Jupiter 的相应测试类

来源: src/main/java/com/thealgorithms/bitmanipulation/NonRepeatingNumberFinder.java1-36 src/main/java/com/thealgorithms/bitmanipulation/NumbersDifferentSigns.java1-31 src/test/java/com/thealgorithms/bitmanipulation/NonRepeatingNumberFinderTest.java1-37

结论

Checkstyle、PMD、SpotBugs 和 Clang Format 的结合为 The Algorithms Java 仓库维护高质量代码提供了一个全面的系统。这些工具强制执行一致的编码风格,检测潜在错误,确保遵循最佳实践,并维护可读、文档良好的代码。

通过将这些工具集成到 CI 流水线中,该项目确保所有贡献都符合既定的质量标准,为用户和贡献者创建了一个更易于维护和可靠的代码库。