Está en la página 1de 47

CHECKSTYLE 5.

"El anlisis esttico del cdigo es el proceso de evaluar el software sin ejecutarlo"

Es una tcnica que se aplica directamente sobre el cdigo fuente tal cual, sin transformaciones previas ni cambios de ningn tipo. La idea es que, en base a ese cdigo fuente, podamos obtener informacin que nos permita mejorar la base de cdigo manteniendo la semntica original.

1.-DEFINICIN
Checkstyle es una herramienta de anlisis esttico de cdigo que es altamente configurable y puede soportar casi cualquier estndar de codificacin Pertenece al conjunto de proyectos de software libre de SourceForge.net. Esta herramienta se puede integrar entornos IDE como plugin o bien trabajar como programa aparte.
3

2.-FUNCIONALIDAD
Checkstyle se utiliza para comprobar que el cdigo analizado cumple con una serie de reglas de estilo conforme a las convenciones de codigo de java elaboradas por sun microsystems(Sun Code Conventions).http://www.oracle.com/technetwork/j ava/codeconv-138413.html. Los chequeos estndar de CheckStyle se aplican al estilo general de codificacin Java y no necesitan de libreras externas. CheckStyle define un conjunto de mdulos con estructura jerrquica dentro de cada uno de los cuales se agrupan los chequeos relacionados 4 entre si (convenciones de nombrado, violaciones de tamao, modificadores, etc.).

FUNCIONALIDAD: ARBOL ANALTICO

2.-FUNCIONALIDAD
Si las reglas de validacin proporcionadas por CheckStyle no cubren nuestras necesidades, podemos crear nuestras propias reglas de validacin. Para ello CheckStyle proporciona una herramienta que nos muestra la estructura en rbol de una clase Java (Figura 1) permitindonos identificar cada uno de sus nodos y utilizarlos para describir la nueva regla.

FUNCIONALIDAD: ARBOL DE REGLAS

2.-FUNCIONALIDAD
CheckStyle no analiza el cdigo fuente del programa de manera directa, sino que transforma el cdigo fuente en una representacin en rbol que refleja la estructura del fichero. Para realizar esta funcin CheckStyle utiliza un parseador / generador llamado ANTLR que generar el rbol AST (Abstract SyntaxTree). Finalmente, CheckStyle necesita de un archivo de configuracin donde se especifiquen las reglas de validacin que deben comprobarse as como los parmetros especficos de estas.
8

Instalacin CheckStyle 5.3

Programas a instalar.
Instalar programa CheckStyle 5.3. Descargar checkstyle-5.3-bin.zip pgina oficial: http://sourceforge.net/projects/checkstyle/files/ Cdigo abierto de SourceForge.net Instalar Plugin para eclipse CheckStyle 5.3 Menu Eclipse: Help ->Install New Software

10

Instalar Plugin eclipse CheckStyle 5.3.

Seleccionar -> Add

11

Instalar Plugin eclipse CheckStyle 5.3.


Busca actualizaciones de eclipse para checkstyle

12

Instalar Plugin eclipse CheckStyle 5.3.

Aparece el plugin segn los criterios y seleccionar -> Next


13

Instalar Plugin eclipse CheckStyle 5.3.


Aceptar los terminos.

Reiniciar Eclipse para que coja los cambios.


14

Instalar Plugin eclipse CheckStyle 5.3.


Comprobar que CheckStyle se ha instalado.

15

Configuracin Plugin eclipse CheckStyle 5.3.


Tipos de Configuracin CheckStyle 5.3 : 1. Configuracin Inicial. 2. Configuracin propia reglas Global al workspace. 3. Configuracin propia reglas Local al proyecto.

16

Configuracin Inicial.
1. Configuracin Inicial. Reglas implementan estndares cdigo Sun code Conventions.En configuracin no pueden modificarse. Menu Eclipse : ->Checkstyle Window -> Preferencies

17

Configuracin propia regla Global workspace.


2. Configuracin propia reglas Global al workspace. New:Aadir nueva Configuracin,Nombre Config Global

18

Configuracin propia regla Global workspace.

Seleccionar Configure.
19

Configuracin propia regla Global workspace.


Asignar reglas. Por ejemplo, comentario javadoc package. aviso si falta

20

Configuracin propia regla Global workspace.


Formato del fichero de configuracin internal_config__1307655828400.xml

21

Configuracin propia regla Local proyecto.


3. Configuracin propia reglas Local al proyecto. Seleccionar Proyecto: botn derecho ratn Properties->Checkstyle.

22

Configuracin propia regla Local proyecto.


Pestaa main: Asignar al proyecto configuracin existente.

23

Configuracin propia regla Local proyecto.


Pestaa local check configurations: Asignar al proyecto configuracin nueva.

24

Creacin reglas de validacin personalizadas.


Implementar la clase. Por ejemplo: Comprobar numero total mtodos en una clase Crear archivo XML de configuracin estandares de validacin Crear .jar que contenga la clase

25

4.- EJEMPLOS DE USO


Standard Checks: Son aplicables al estilo general de programacin Java y no requieren de libreras externas.

26

4.- EJEMPLOS DE USO

27

4.- EJEMPLOS DE USO


Javadoc Comments: Entre otras funciones, comprueban la existencia de comentarios Javadoc (y si stos estn bien formados) en la definicin de clases e interfaces, mtodos o constructores, variables, etc..

28

4.- EJEMPLOS DE USO


Naming Conventions: Comprueban si los distintos identificadores cumplen con expresiones regulares concretas.

29

4.- EJEMPLOS DE USO


Imports: Se realizan comprobaciones para que las sentencias import no usen la notacin *, que no sean redundantes, etc.

30

4.- EJEMPLOS DE USO


Size Violations: Restringen el nmero de instrucciones, comprueban instrucciones demasiado largas o archivos fuente demasiado extensos, etc.

31

4.- EJEMPLOS DE USO


Whitespace: Entre otras funciones, se comprueba si la expresin de inicializacin o la expresin de incremento de las instrucciones for est incluida o no. O bien, se comprueba qu se ha introducido entre el identificador de un mtodo, constructor, llamada a mtodo o invocacin de un constructor y el parntesis izquierdo de la lista de parmetros, es decir si estn en la misma lnea o se requiere un espacio, etc.

32

4.- EJEMPLOS DE USO

33

4.- EJEMPLOS DE USO


Modifiers: Se comprueba el orden de los modificadores conforme a las recomendaciones de la especificacin del lenguaje Java (Java Language specification, sections 8.1.1, 8.3.1 and 8.4.3), la existencia de modificadores redundantes en interfaces, etc.

34

4.- EJEMPLOS DE USO

35

4.- EJEMPLOS DE USO


Block Checks: Comprueba la existencia de bloques vacos y bloques anidados, la colocacin de las llaves de apertura { y de cierre }, etc.

36

4.- EJEMPLOS DE USO

37

4.- EJEMPLOS DE USO


Coding: Se realizan mltiples comprobaciones. Por citar algunas, se detectan sentencias vacas, existencia de ciertos literales numricos no definidos como constantes, sentencias switch que no incluyen la clusula default, etc.

38

4.- EJEMPLOS DE USO

39

4.- EJEMPLOS DE USO


Class Design: Comprobaciones del diseo de clases. Por ejemplo, se comprueba la correcta visibilidad de los elementos de las clases, comprueba si las clases que slo contienen constructores privados son declaradas como final, etc.

40

4.- EJEMPLOS DE USO

Este ejemplo avisa de una clase con un mtodo 'main' que no tiene definido un constructor (por tanto tan solo tiene el constructor por defecto).

41

4.- EJEMPLOS DE USO


Muestra de los errores en un grfico:

42

5.- LIMITACIONES

1. Metricas 2. Comprobaciones de seguridad 3. Generacion de test unitarios 4. Analisis de dependencias entre paquetes 5. Codigo similar 6. Codigo con pinta de ser erroneo 7. Errores potenciales (dodgy) 8. Malas prcticas

5.- LIMITACIONES
1.Metricas Engloba tcnicas para realizar comparativas o para la planificacin de proyectos de desarrollo. Proporciona una medicin cuantitativa de la complejidad lgica de un programa. 2.Comprobaciones de seguridad 3.Generacion de test unitarios 4.Analisis de dependencias entre paquetes Marca las dependencias cclicas.

5.- LIMITACIONES
5.Codigo similar Detecta cdigo duplicado. En el caso de que en un fragmento de cdigo tan solo cambie el nombre de una variable. 6.Codigo con pinta de ser errneo Ejemplos: Hacer un cast imposible, que siempre va a lanzar una classcastexception Aparentes bucles infinitos

5.- LIMITACIONES
6.Errores potenciales (dodgy) Ejemplos: Un mtodo que utiliza el mismo cdigo para dos ramas distintas de un if. Puede ser un copy/paste mal hecho. 7.Malas prcticas Ejemplos: Comparar Strings utilizando == o != en vez de .equals() Comprobaciones en clases que definen alguno de los mtodos equals() o hashCode()

6.- CONCLUSIN

El 80% del tiempo dedicado al cdigo se hace en el mantenimiento. El mantenimiento casi nunca lo realiza el autor original. Las convenciones ayudan a entender el cdigo ms rpido.