Hubo una pregunta comparando PMD y CheckStyle . Sin embargo, no puedo encontrar un buen desglose de las diferencias / similitudes entre PMD y FindBugs. Creo que una diferencia clave es que PMD funciona en código fuente, mientras que FindBugs funciona en archivos de código de bytes compilados. Pero en términos de capacidades, ¿debería ser una opción o se complementan entre sí?
Como dijiste, PMD funciona en el código fuente y, por lo tanto, encuentra problemas como: violación de las convenciones de nomenclatura, falta de llaves, verificación nula mal colocada, lista de parámetros larga, constructor innecesario, interrupción faltante en el interruptor, etc. PMD también te informa sobre Cyclomatic complejidad de su código que encuentro muy útil (FindBugs no le informa acerca de la complejidad ciclomática).
FindBugs funciona en . Estos son algunos problemas que FindBugs encuentra que PMD no detecta: el método equals () falla en los subtipos, el método clon puede devolver un valor nulo, comparación de referencia de valores booleanos, conversión imposible, int de 32 bits desplazado por una cantidad que no está en el rango de 0-31, una colección que se contiene a sí misma, método equals siempre devuelve verdadero, un bucle infinito, etc.
Por lo general, cada uno de ellos encuentra un conjunto diferente de problemas. Utilice ambos. Estas herramientas me enseñaron mucho sobre cómo escribir un buen código Java.
¿Cuál es el código de error específico que vio cuando una colección se contiene a sí misma y por qué FindBugs lo marcó como un error probable?
Geek
bueno, ya que Sonarqube 6.3 ya no ... Sonarqube necesita ahora Java 8 y Findbugs solo es compatible con Java 7 todavía
Markus
22
La mejor característica de PMD son sus Reglas XPath , incluidas con un Diseñador de reglas para permitirle construir fácilmente nuevas reglas a partir de ejemplos de código (similar a los constructores de GUI de RegEx y XPath). FindBugs es más fuerte de inmediato, pero la construcción de reglas y patrones específicos del proyecto es muy importante.
Por ejemplo, encontré un problema de rendimiento que involucraba 2 bucles for anidados, lo que resultó en un tiempo de ejecución de O (n ^ 2), que podría evitarse fácilmente. Usé PMD para construir una consulta ad-hoc , para revisar otras instancias de bucles for anidados - // ForStatement / Statement // ForStatement. Esto señaló 2 casos más del problema. Esta no es una regla genérica en absoluto.
La mejor característica de PMD son sus Reglas XPath , incluidas con un Diseñador de reglas para permitirle construir fácilmente nuevas reglas a partir de ejemplos de código (similar a los constructores de GUI de RegEx y XPath). FindBugs es más fuerte de inmediato, pero la construcción de reglas y patrones específicos del proyecto es muy importante.
Por ejemplo, encontré un problema de rendimiento que involucraba 2 bucles for anidados, lo que resultó en un tiempo de ejecución de O (n ^ 2), que podría evitarse fácilmente. Usé PMD para construir una consulta ad-hoc , para revisar otras instancias de bucles for anidados - // ForStatement / Statement // ForStatement. Esto señaló 2 casos más del problema. Esta no es una regla genérica en absoluto.
fuente
PMD es
fuente