Практика разработки правил PMD: создайте собственный инструмент для определения качества кода

Я участвую в "Наггетс·Стартовый план"

  1. Введение в PMD: Введение в PMD.
  2. Установка и настройка: как установить и настроить плагин PMD для использования в ваших проектах.
  3. Как использовать плагин PMD в IDEA.
  4. Как использовать PMD в проектах Java.
  5. Введение в разработку правил PMD: рассказывается, как писать и использовать пользовательские правила PMD.
  6. Как SonarQube интегрирует PMD: Как SonarQube интегрирует PMD для автоматизации проверки качества кода.
  7. Как уменьшить количество ложных срабатываний: расскажите, как избежать ошибок в отчетах PMD, и проанализируйте, как правильно использовать правила PMD.

1. Введение в ПМД

PMD — это инструмент статического анализа кода с открытым исходным кодом для проверки потенциальных проблем в коде Java, JavaScript, PLSQL и других языков, таких как неиспользуемые переменные, неиспользуемые методы, недопустимые операторы if и т. д. PMD проверяет наличие потенциальных проблем в коде, анализируя его и применяя различные правила. Эти правила можно настроить в соответствии со стандартами качества кода, а наборы правил можно настроить. PMD предоставляет различные форматы вывода, включая вывод на консоль, форматы HTML, XML и JSON, которые удобны для пользователей при анализе кода и обработке результатов. Кроме того, PMD также предоставляет подключаемые модули для различных IDE, таких как Eclipse и IntelliJ IDEA, которые могут облегчить анализ кода и устранение проблем в IDE. Используя PMD, разработчики могут быстрее находить и устранять проблемы в коде, тем самым улучшая качество кода и удобство сопровождения.

2. Установка и настройка

В среде Mac PMD можно установить через менеджер пакетов Homebrew. Вот шаги по установке и настройке PMD:

  1. Откройте приложение «Терминал».
  2. Установите менеджер пакетов Homebrew. Введите следующую команду в Терминале и нажмите Enter:

/bin/bash -c "$(curl -fsSL raw.githubusercontent.com/Homebrew/in… %22)

  1. Установите PMD с помощью Homebrew. Введите следующую команду в Терминале и нажмите Enter:

варить установить pmd

  1. Убедитесь, что PMD установлен правильно. Введите следующую команду в Терминале и нажмите Enter:

pmd-версия

Если PMD установлен правильно, терминал должен отобразить номер версии PMD.

  1. 配置PMD。可以通过创建一个PMD配置文件来配置PMD。在终端中输入以下命令并按回车键:

pmd config > ~/pmd.conf

该命令将在用户目录下创建一个名为pmd.conf的PMD配置文件。可以在该文件中指定要使用的规则和其他配置选项。

  1. 运行PMD。可以在终端中使用以下命令来运行PMD:

pmd -d /path/to/your/code -R /path/to/your/ruleset.xml -f text

命令分析:

  • -d选项指定要分析的代码的目录
  • -R选项指定规则集合的路径
  • -f选项指定输出格式(在这种情况下,输出将是文本格式,也可以根据需要更改这些选项。

3. IDEA中如何使用PMD插件

在IDEA中使用PMD插件可以帮助我们在开发过程中自动检测代码质量问题,提高代码质量和可维护性。下面是在IDEA中使用PMD插件并实践的步骤:

  1. 安装PMD插件:在IDEA中,打开Settings -> Plugins,搜索并安装PMD插件。
  2. 配置PMD插件:在IDEA中,打开Settings -> Other Settings -> PMD,配置PMD的相关参数,如PMD的安装路径、规则集、输出格式等。
  3. 运行PMD检测:在IDEA中,右键点击要检测的代码目录或文件,选择Run PMD检测,即可运行PMD检测并查看检测结果。
  4. 分析检测结果:在IDEA中,打开PMD检测结果窗口,可以查看PMD检测结果的详细信息,包括问题类型、问题所在的代码行数和文件名等,方便我们快速定位问题并进行修复。

4. Java项目中如何使用PMD

PMD这么强大,那么在开发项目中如何使用PMD进行代码扫描代码潜在问题呢?咱们就以Spring boot项目为例,看下如何实操。

Spring Boot项目中使用PMD的步骤:

  1. 在Spring Boot项目中添加PMD依赖。可以通过在pom.xml文件中添加以下代码来添加PMD依赖:
<dependency>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-pmd-plugin</artifactId>

<version>3.17.0</version>

</dependency>
  1. 配置PMD插件。可以在pom.xml文件中添加以下配置来定制PMD的行为:
<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-pmd-plugin</artifactId>

<version>3.17.0</version>

<executions>

<execution>

<goals>

<goal>check</goal>

</goals>

</execution>

</executions>

<configuration>

<rulesets>

<ruleset>/path/to/ruleset.xml</ruleset>

</rulesets>

<sourceEncoding>UTF-8</sourceEncoding>

<minimumTokens>30</minimumTokens>

<targetJdk>1.8</targetJdk>

<failOnViolation>true</failOnViolation>

</configuration>

</plugin>

</plugins>

</build>

这里配置了要使用的规则集、源代码编码、最小标记数量、目标JDK版本和违规时是否失败等选项。

  1. 运行PMD分析。可以使用Maven命令来运行PMD分析。例如,在命令行中执行以下命令:

mvn pmd:check

此命令将在项目中执行PMD分析,并生成一个名为“pmd.html”的HTML报告。可以在浏览器中打开该报告以查看分析结果。

  1. 分析结果展示。可以将PMD的分析结果显示在Spring Boot项目的页面上,以便开发人员查看并修复问题。可以将生成的HTML报告添加到Spring Boot项目的静态资源目录中,并使用Spring Boot内置的静态资源处理器来将其显示在页面上。

例如,在Spring Boot的应用类中添加以下代码:

@SpringBootApplication

public class MyApplication implements WebMvcConfigurer {

@Override

public void addResourceHandlers(ResourceHandlerRegistry registry) {

registry.addResourceHandler("/pmd/**").addResourceLocations("classpath:/static/pmd/");

}

public static void main(String[] args) {

SpringApplication.run(MyApplication.class, args);

}

}

此代码将创建一个静态资源处理器,并将生成的HTML报告添加到“/pmd”路径下。然后可以在Spring Boot应用程序的页面中添加一个链接来查看PMD分析结果。例如:

PMD Report

这将在页面中创建一个名为“PMD Report”的链接,单击该链接将打开PMD分析结果的HTML报告。

5. PMD规则开发介绍

PMD是一个非常强大的静态代码分析工具,它能够识别出代码中的各种问题,如潜在的错误、低效的代码、不良的编码习惯等等。然而,尽管PMD已经提供了很多内置的规则,但是在实际的项目中,我们往往会有一些特定的需求,需要自定义一些规则来满足我们的需求

5.1 开发步骤

PMD自定义规则开发的一般步骤:

  1. 了解PMD的API和规则配置格式:在开始开发自定义规则之前,需要了解PMD的API,以及PMD规则配置文件的格式和基本元素。
  2. 定义规则:确定想要编写的规则。应该选择在代码库中发现的最常见的代码问题之一,然后制定相应的规则。
  3. 编写规则代码:使用PMD API编写自定义规则代码。可以使用Java或其他语言编写规则。
  4. 测试规则:编写单元测试,以确保的规则按预期工作,并捕获所有预期和非预期的情况。
  5. 打包规则:将规则打包成JAR文件。这可以通过使用Maven或其他构建工具来完成。
  6. 部署规则:将JAR文件部署到PMD或PMD插件中。
  7. 配置规则:在PMD或PMD插件中配置的规则。这通常涉及指定JAR文件的位置和指定规则的名称。
  8. 运行规则:在的代码库中运行PMD,以应用的规则并查找违规的代码。

5.2 常用API

PMD提供了一系列API,可以用于开发自定义规则和扩展PMD的功能。以下是一些重要的PMD API:

  1. Rule:表示PMD规则的类。规则包括要检查的问题和相应的解决方案。可以通过继承AbstractRule类来创建自定义规则。
  2. RuleContext:表示PMD规则的执行上下文。该类维护当前分析的代码和规则集合,并提供一些实用程序方法,例如报告问题。
  3. Node:表示抽象语法树(AST)中的节点。 AST是代码的结构化表示,用于分析和转换代码。 PMD使用AST表示代码,并将其用于规则检查。
  4. Parser:表示将源代码解析为AST的类。PMD支持许多不同的语言和框架,因此有多种解析器可用。
  5. RuleViolation:表示违反规则的代码问题。当检查到违反规则的代码时,PMD将创建一个RuleViolation实例,并将其添加到RuleContext中。
  6. Renderer:表示将规则违规报告渲染为文本、HTML或其他格式的类。 PMD提供了许多不同的渲染器,可以根据需要选择。
  7. XPathRule:表示使用XPath表达式来查找问题的规则。XPath是一种用于选择XML文档中特定元素的语言。PMD可以将XPath应用于AST,以选择符合特定条件的节点。
  8. RuleChain:表示一组规则,按特定顺序执行。例如,可以将规则按复杂性排序,并将它们作为一个规则链执行。

5.3 自定义规则开发实践

下面是一个简单的DuplicateImports规则的实现(检查代码中是否有重复导入类)。

  1. 创建类

创建一个类,继承AbstractJavaRule类,该类提供了访问Java源代码的方法,如visit方法可以访问Java类或方法。

public class DuplicateImportsRule extends AbstractJavaRule {

@Override

public void visit(CompilationUnit node, Object data) {

    List<ImportDeclaration> imports = node.getImports();

    Map<String, ImportDeclaration> importMap = new HashMap<>();

    for (ImportDeclaration importDeclaration : imports) {

    String importName = importDeclaration.getNameAsString();

    if (importMap.containsKey(importName)) {

    addViolationWithMessage(data, importDeclaration, "Duplicate import: " + importName);

} else {

    importMap.put(importName, importDeclaration);

            }

        }

    }

}

在visit方法中,我们首先获取编译单元中的所有导入语句,然后遍历这些导入语句,并将其名称存储在一个Map中。如果遇到重复的名称,则将其添加到违规列表中。

  1. 配置规则

创建一个配置文件,定义规则的名称和描述,以及实现该规则的类。

<rule name="DuplicateImports"

language="java"

message="Duplicate import: {0}">

<description>

Checks for duplicate import statements.

</description>

<priority>3</priority>

<example>

<![CDATA[

// Good

import java.util.List;

import java.util.ArrayList;

// Bad

import java.util.List;

import java.util.List;

]]>

</example>

<ruleclass>

DuplicateImportsRule

</ruleclass>

</rule>

在这个配置文件中,我们定义了规则名称、描述、优先级、示例以及实现该规则的类。

  1. 添加规则

在PMD配置文件中添加自定义规则。

<rule ref="rulesets/java/imports.xml">

<exclude name="DuplicateImports"/>

<rule ref="rules/custom.xml/DuplicateImportsRule"/>

</rule>

在这个配置中,我们从默认规则集中排除了DuplicateImports规则,并添加了我们自定义的DuplicateImportsRule规则。

  1. 运行PMD

运行PMD来检查重复导入语句。

mvn pmd:check

6.SonarQube如何集成PMD

  1. 下载并安装SonarQube

可以在SonarQube官网上找到最新版本的下载链接。下载完成后,可以通过以下命令将其解压缩到/opt目录中:

sudo tar -xzf sonarqube-.tar.gz -C /opt

其中,是SonarQube的版本号。解压缩完成后,可以使用以下命令启动SonarQube服务器:

sudo /opt/sonarqube-/bin/macosx-universal-64/sonar.sh start

  1. 安装PMD插件

打开SonarQube管理页面并导航到“Marketplace”选项卡。搜索“PMD”,然后选择“PMD”插件并单击“Install”按钮。安装完成后,将在“Installed”选项卡中看到“PMD”插件。

  1. 配置PMD规则

在SonarQube管理页面中导航到“Quality Profiles”选项卡并单击“Create”按钮。为配置文件设置名称,并将“PMD”选为静态代码分析工具。选择要使用的规则集并单击“Create”按钮以创建新的配置文件。

  1. 配置Maven

在Maven项目的pom.xml文件中添加以下代码段以配置Maven插件:

<build>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-pmd-plugin</artifactId>

<version>3.17.0</version>

<executions>

<execution>

<phase>check</phase>

<goals>

<goal>pmd</goal>

</goals>

</execution>

</executions>

</plugin>

</plugins>

</build>

将Maven的PMD插件版本设置为3.17.0,并将它配置为在“check”阶段运行PMD分析。

  1. 运行PMD分析

Перейдите в корневой каталог проекта Maven в командной строке и выполните следующую команду, чтобы запустить анализ PMD:

mvn clean verify sonar:sonar \

-Dsonar.projectKey=my_project_key \

-Dsonar.host.url=[http://localhost:9000](http://localhost:9000/) \

-Dsonar.login=my_token

Среди них замените «my_project_key» на уникальный идентификатор проекта в SonarQube; замените « http://localhost:9000 » на URL-адрес вашего экземпляра SonarQube; замените «my_token» на ваш токен доступа SonarQube.

После запуска команды Maven запустит анализ PMD и загрузит результаты на сервер SonarQube. Вы можете войти на страницу администрирования SonarQube и перейти к проекту, чтобы просмотреть результаты анализа PMD.

7. Как уменьшить количество ложных срабатываний

PMD также может привести к некоторым ложным срабатываниям, что может снизить доверие разработчиков к результатам их анализа. Вот несколько советов, как избежать ложных срабатываний PMD:

  1. Используйте соответствующий набор правил: PMD предоставляет несколько наборов правил, каждый из которых предназначен для разных целей. Использование соответствующего набора правил может помочь уменьшить количество ложных срабатываний.
  2. Пользовательские наборы правил: PMD позволяет пользователям настраивать наборы правил, а также добавлять или удалять правила. Создавая настраиваемые наборы правил, можно адаптировать правила к потребностям проекта, уменьшая количество ложных срабатываний.
  3. Настройка параметров правил: некоторые правила PMD можно настроить с помощью параметров. Например, такие параметры, как максимальный размер блока или максимальная длина класса, могут быть установлены для уменьшения количества ложных срабатываний.
  4. Исключить определенные файлы или каталоги: если некоторые файлы или каталоги в коде не нуждаются в анализе с помощью PMD, вы можете исключить эти файлы или каталоги, добавив исключающие элементы в файл конфигурации.
  5. Используйте подключаемые модули IDE. Многие интегрированные среды разработки (IDE) предоставляют подключаемые модули PMD, которые могут помочь разработчикам вовремя обнаруживать потенциальные проблемы при написании кода. Используйте подключаемый модуль IDE, чтобы избежать чрезмерных ложных срабатываний во время сборки.
  6. Регулярно проверяйте и устраняйте проблемы: хотя PMD может помочь разработчикам выявлять потенциальные проблемы, в конечном итоге устранение проблем все равно требует вмешательства человека. Регулярная проверка и устранение проблем может уменьшить количество ложных срабатываний и улучшить качество вашего кода.

Supongo que te gusta

Origin juejin.im/post/7234893047283597370
Recomendado
Clasificación