PMD (software)
# PMD (software)

PMD (Programming Mistake Detector) es un analizador de código fuente estático de código abierto que informa sobre los problemas encontrados dentro del código fuente de una aplicación. PMD incluye conjuntos de reglas incorporados por defecto y admite la capacidad de escribir reglas personalizadas. No informa errores de compilación, ya que solamente puede procesar archivos fuente bien formados. Los problemas informados por PMD son malos hábitos de programación, y secciones de código fuente ineficiente, que pueden reducir el rendimiento y la capacidad de mantenimiento del programa si se acumulan. Es capaz de analizar archivos escritos en los lenguajes Java, JavaScript, Apex y Visualforce, PLSQL, Apache Velocity, XML y XSL.

Si bien PMD no significa oficialmente nada, tiene varios nombres no oficiales, de los cuales probablemente el más apropiado sea Programming Mistake Detector.

## Características

PMD puede detectar fallas o posibles fallas en el código fuente, tales como:

* Errores posibles : bloques vacíos de sentencias try/catch/finally/switch
* Código muerto: variables locales, parámetros y métodos privados no usados.
* Declaraciones if/while vacías.
* Expresiones demasiado complicadas: declaraciones if innecesarias, bucles for que podrían ser bucles while.
* Código subóptimo: uso de String / StringBuffer inútil.
* Clases con medidas de complejidad ciclomática alta.
* Código duplicado: el código copiado/pegado puede significar errores copiados/pegados y reduce la capacidad de mantenimiento.

## Licencia

PMD se publica bajo licencia BSDish, mientras que partes de él están bajo Apache License 2.0 y LGPL.

## Detector de copiar/pegar (CPD)

El detector de copiar/pegar (CPD) es un complemento de PMD que utiliza el algoritmo de búsqueda de cadenas de Rabin – Karp para encontrar código duplicado. A diferencia de PMD, CPD funciona con una gama más amplia de lenguajes, incluidos Java, JavaServer Pages (JSP), C, C ++, Fortran, PHP y C #.

## Complementos

PMD tiene complementos para JDeveloper, Eclipse, jEdit, JBuilder, CodeGuide de Omnicore, NetBeans / Sun Studio, IntelliJ IDEA, TextPad, Maven, Ant, Gradle, Gel, JCreator, Hudson, Jenkins, SonarQube, Visual Studio Code y Emacs . También hay una versión CLI .

