Análisis estático de código
                            César Hernández




                                  CesarHernandezGt
  Java Day Guatemala 2012               @CesarHgt
Agenda
•  Análisis estático de código
•  Beneficios
•  FindBugs
•  PMD
•  Checkstyle
Análisis estático de código

•  Es la detección sistemática y proactiva de bugs,
  fugas de memória y código muerto e ineficiente
  entre otros

•  No necesita que el programa sea ejecutado para
  detectar problemas
"Porque hasta las personas más inteligentes
pueden cometer los errores más estúpidos"
                 -William Pugh-
FindBugs
•  Identifica bugs bajo la especificación del lenguaje
  Java operando a nivel de Bytecodes (.class files)

•  No contempla análisis de formato del código
  fuente.

•  Utilizado por empresas como Google, Oracle,
  Eclipse, IBM.
Beneficios
•  Reducción del costo en proceso de QA
•  Mejor productividad de desarrollo y calidad del
  código fuente

•  El análisis del código es automático y no requiere
  ejecución del código

•  Sencillez de uso por la integración con IDE´S
  como Eclipse y Netbeans
DEMO 1
findBugs
Categorías
•  Bad practice
•  Correctness
•  Malicious code vulnerability
•  Multithreaded correctness
•  Performance
•  Security
•  Dodgy code              (dudoso)


Descripción de los más de 300 patrones:

http://findbugs.sourceforge.net/bugDescriptions.html
"En un proyecto de software con diez personas,
   probablemente tres de ellas introducen tantos
errores que podríamos considerar su productividad
                 como negativa."
                   - Gordon Schulmeyer-
PMD
•  Permite optimizar nuestro código con la detección
  de objetos innecesarios, variables sub utilizadas,
  duplicación explícita entre otros.

•  Se centra en código que puede ser Optimizado
•  Personalización por reglas
Malas prácticas
•  Capturar una excepción dejando sin acción el
  bloque catch

•  Inicialización redundantes en atributos de instancia
•  Tener código muerto
•  Directo uso de implementaciones en lugar de
  interface
DEMO 2
 Pmd
Categorías de reglas
•  Android
•  Basic JSP
•  Basic JSF
•  Java Beans
•  Optimization
•  Naming
Descripción de las más de 450 reglas:
http://pmd.sourceforge.net/pmd-5.0.0/rules/index.html
"Si el código y los comentarios no coinciden,
    posiblemente ambos sean erróneos"
                  -Norm Schryer-
Checkstyle
•  Verificador sintáctico de estándares de codificación
•  Para el caso de Java, CheckStyle toma como base:
  Code Conventions for the Java Programming
  Language http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html

•  Provee flexibilidad en el grado de revisión del
  código
Ejemplo de detecciones
Convenciones de nombrado
Anotaciones
Diseño de clases
Imports
Comentarios Javado
Modificadores de acceso
Naming Conventions
Expresiones regulares

Descripción de las más de 120 reglas:

http://checkstyle.sourceforge.net/availablechecks.html
DEMO 3
Checkstyle
PREGUNTAS?
                           César Hernández




                                 CesarHernandezGt
 Java Day Guatemala 2012               @CesarHgt

Análisis estático de código en Java

  • 1.
    Análisis estático decódigo César Hernández CesarHernandezGt Java Day Guatemala 2012 @CesarHgt
  • 2.
    Agenda •  Análisis estáticode código •  Beneficios •  FindBugs •  PMD •  Checkstyle
  • 3.
    Análisis estático decódigo •  Es la detección sistemática y proactiva de bugs, fugas de memória y código muerto e ineficiente entre otros •  No necesita que el programa sea ejecutado para detectar problemas
  • 4.
    "Porque hasta laspersonas más inteligentes pueden cometer los errores más estúpidos" -William Pugh-
  • 5.
    FindBugs •  Identifica bugsbajo la especificación del lenguaje Java operando a nivel de Bytecodes (.class files) •  No contempla análisis de formato del código fuente. •  Utilizado por empresas como Google, Oracle, Eclipse, IBM.
  • 6.
    Beneficios •  Reducción delcosto en proceso de QA •  Mejor productividad de desarrollo y calidad del código fuente •  El análisis del código es automático y no requiere ejecución del código •  Sencillez de uso por la integración con IDE´S como Eclipse y Netbeans
  • 7.
  • 8.
    Categorías •  Bad practice • Correctness •  Malicious code vulnerability •  Multithreaded correctness •  Performance •  Security •  Dodgy code (dudoso) Descripción de los más de 300 patrones: http://findbugs.sourceforge.net/bugDescriptions.html
  • 9.
    "En un proyectode software con diez personas, probablemente tres de ellas introducen tantos errores que podríamos considerar su productividad como negativa." - Gordon Schulmeyer-
  • 10.
    PMD •  Permite optimizarnuestro código con la detección de objetos innecesarios, variables sub utilizadas, duplicación explícita entre otros. •  Se centra en código que puede ser Optimizado •  Personalización por reglas
  • 11.
    Malas prácticas •  Capturaruna excepción dejando sin acción el bloque catch •  Inicialización redundantes en atributos de instancia •  Tener código muerto •  Directo uso de implementaciones en lugar de interface
  • 12.
  • 13.
    Categorías de reglas • Android •  Basic JSP •  Basic JSF •  Java Beans •  Optimization •  Naming Descripción de las más de 450 reglas: http://pmd.sourceforge.net/pmd-5.0.0/rules/index.html
  • 14.
    "Si el códigoy los comentarios no coinciden, posiblemente ambos sean erróneos" -Norm Schryer-
  • 15.
    Checkstyle •  Verificador sintácticode estándares de codificación •  Para el caso de Java, CheckStyle toma como base: Code Conventions for the Java Programming Language http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html •  Provee flexibilidad en el grado de revisión del código
  • 16.
    Ejemplo de detecciones Convencionesde nombrado Anotaciones Diseño de clases Imports Comentarios Javado Modificadores de acceso Naming Conventions Expresiones regulares Descripción de las más de 120 reglas: http://checkstyle.sourceforge.net/availablechecks.html
  • 17.
  • 18.
    PREGUNTAS? César Hernández CesarHernandezGt Java Day Guatemala 2012 @CesarHgt