análisis de código estático

56
Ventanilla Electrónica Análisis de código estático Versión: v01r00 Fecha: 02/11/2011 Queda prohibido cualquier tipo de explotación y, en particular, la reproducción, distribución, comunicación pública y/o transformación, total o parcial, por cualquier medio, de este documento sin el previo consentimiento expreso y por escrito de la Junta de Andalucía.

Upload: others

Post on 28-Oct-2021

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Análisis de código estático

Ventanilla Electrónica

Análisis de código estático

Versión: v01r00

Fecha: 02/11/2011

Queda prohibido cualquier tipo de explotación y, en particular, la reproducción, distribución, comunicación pública y/o transformación, total o parcial, por cualquier medio, de este documento sin el previo consentimiento expreso y por escrito de la Junta de Andalucía.

Page 2: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 2 de 56

HOJA DE CONTROLHOJA DE CONTROLHOJA DE CONTROLHOJA DE CONTROL

TítuloTítuloTítuloTítulo Análisis de código estático

EntregableEntregableEntregableEntregable Análisis de código estático

Nombre del FicheroNombre del FicheroNombre del FicheroNombre del Fichero VEA200E_OTR_Análisis de código estático_v01r00

AutorAutorAutorAutor everis

Versión/EdiciónVersión/EdiciónVersión/EdiciónVersión/Edición v01r00 Fecha VersiónFecha VersiónFecha VersiónFecha Versión 08/11/2011

Aprobado porAprobado porAprobado porAprobado por - Fecha AprobaciónFecha AprobaciónFecha AprobaciónFecha Aprobación DD/MM/AAAA

Nº Total PáginNº Total PáginNº Total PáginNº Total Páginasasasas 56

REGISTRO DE CAMBIOS

VersiónVersiónVersiónVersión Causa del CambioCausa del CambioCausa del CambioCausa del Cambio Responsable del CambioResponsable del CambioResponsable del CambioResponsable del Cambio ÁreaÁreaÁreaÁrea Fecha del CambioFecha del CambioFecha del CambioFecha del Cambio

v01r00 Versión inicial everis - 08/11/2011

CONTROL DE DISTRIBUCIÓN

Nombre y ApellidosNombre y ApellidosNombre y ApellidosNombre y Apellidos CargoCargoCargoCargo ÁreaÁreaÁreaÁrea Nº CopiasNº CopiasNº CopiasNº Copias

Manuel Perera Domínguez Jefe de Servicio Servicio de Coordinación de Administración Electrónica

1

Francisco González Guillén Gabinete Administración Electrónica

Servicio de Coordinación de Administración Electrónica

1

Francisco Mesa Villalba Gabinete Administración Electrónica

Servicio de Coordinación de Administración Electrónica

1

Pedro José Casanova Luis Gerente Administración Electrónica

everis 1

Daniel Martínez Sevilla Jefe de Proyecto everis 1

Page 3: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 3 de 56

ÍNDICEÍNDICEÍNDICEÍNDICE

1 INTRODUCCIÓN ......................................................................................................................................................... 5

2 RESULTADO DE LA REVISIÓN .................................................................................................................................... 6

3 ANÁLISIS DE LOS INCUMPLIMIENTOS ..................................................................................................................... 19

4 CONCLUSIONES ...................................................................................................................................................... 25

4.1 Tareas asociadas a indicadores cuya resolución es bloqueante: ........................................................................ 25

4.2 Tareas asociadas a indicadores cuya resolución es crítica: ................................................................................ 25

4.3 Tareas asociadas a indicadores cuya resolución es mayor: ............................................................................... 25

4.4 Tareas asociadas a indicadores cuya resolución es menor: ............................................................................... 26

4.5 Tareas asociadas a indicadores cuya resolución es información: ....................................................................... 26

5 GLOSARIO ................................................................................................................................................................ 28

6 BIBLIOGRAFÍA Y REFERENCIAS ................................................................................................................................ 29

7 ANEXO I: Resultados SONAR – VEA. ......................................................................................................................... 30

7.1 Report Overview ............................................................................................................................................... 30

7.2 Violations Analysis ............................................................................................................................................ 30

7.3 Violations Details .............................................................................................................................................. 32

7.4 Resultados generales sobre el proyecto VEA ..................................................................................................... 35

7.4.1 Esquema de resultados .............................................................................................................................. 35

7.4.2 Componentes específicos........................................................................................................................... 36

7.5 Resultados específicos sobre los componentes del proyecto VEA ...................................................................... 36

7.5.1 ah-servicios-cliente ..................................................................................................................................... 36

7.5.1.1 Esquema de resultados .................................................................................................................... 36

7.5.1.2 Componentes específicos ................................................................................................................. 37

7.5.2 vea-servicios-cliente.................................................................................................................................... 37

7.5.2.1 Esquema de resultados .................................................................................................................... 37

7.5.2.2 Componentes específicos ................................................................................................................. 38

7.5.3 vea-servicios .............................................................................................................................................. 38

7.5.3.1 Esquema de resultados .................................................................................................................... 38

7.5.3.2 Componentes específicos ................................................................................................................. 39

7.5.4 vea-servicios-core ....................................................................................................................................... 39

7.5.4.1 Esquema de resultados .................................................................................................................... 39

7.5.4.2 Componentes específicos ................................................................................................................. 40

7.5.5 vea-web ..................................................................................................................................................... 40

7.5.5.1 Esquema de resultados .................................................................................................................... 40

Page 4: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 4 de 56

7.5.5.2 Componentes específicos ................................................................................................................. 41

7.5.6 vea-consola ................................................................................................................................................ 42

7.5.6.1 Esquema de resultados .................................................................................................................... 42

7.5.6.2 Componentes específicos ................................................................................................................. 42

7.5.7 ah-servicios-core ........................................................................................................................................ 43

7.5.7.1 Esquema de resultados .................................................................................................................... 43

7.5.7.2 Componentes específicos ................................................................................................................. 44

7.5.8 ah-servicios-local-core ................................................................................................................................ 45

7.5.8.1 Esquema de resultados .................................................................................................................... 45

7.5.8.2 Componentes específicos ................................................................................................................. 45

7.5.9 ah-web-core ............................................................................................................................................... 46

7.5.9.1 Esquema de resultados .................................................................................................................... 46

7.5.9.2 Componentes específicos ................................................................................................................. 46

8 ANEXO II: Resultados SONAR – Arquetipo horizontal. ................................................................................................ 47

8.1 Report Overview ............................................................................................................................................... 47

8.2 Violations Analysis ............................................................................................................................................ 47

8.3 Violations Details .............................................................................................................................................. 49

8.4 Resultados generales sobre el proyecto AH ....................................................................................................... 51

8.4.1 Esquema de resultados .............................................................................................................................. 51

8.4.2 Componentes específicos........................................................................................................................... 52

8.5 Resultados específicos sobre los componentes del proyecto AH ........................................................................ 53

8.5.1 ah-servicios ................................................................................................................................................ 53

8.5.1.1 Esquema de resultados .................................................................................................................... 53

8.5.1.2 Componentes específicos ................................................................................................................. 54

8.5.2 ah-web ...................................................................................................................................................... 54

8.5.2.1 Esquema de resultados .................................................................................................................... 54

8.5.2.2 Componentes específicos ................................................................................................................. 55

8.5.3 ah-servicios-cliente-local ............................................................................................................................. 55

8.5.3.1 Esquema de resultados .................................................................................................................... 55

8.5.3.2 Componentes específicos ................................................................................................................. 56

Page 5: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 5 de 56

1111 INTRODUCCIÓNINTRODUCCIÓNINTRODUCCIÓNINTRODUCCIÓN

La Ventanilla Electrónica ofrece un punto centralizado de acceso para los interesados que quieran presentar solicitudes o realizar trámites en alguno de los procedimientos publicados en la web a la que accede el ciudadano.

Se define un arquetipo vertical como el componente específico desarrollado por cada organismo que implementa la lógica necesaria de un determinado procedimiento a publicar en la oficina virtual, el arquetipo horizontal analizado se apoya en la definición anterior e implementa con carácter general la lógica necesaria para publicar en la oficina virtual cualquier procedimiento.

El objetivo de este documento es realizar un análisis de código estático de la aplicación web Ventanilla Electrónica (VEA) y del arquetipo horizontal (AH) distribuido, de forma que pueda corroborarse que cumple con los indicadores establecidos en las matrices de verificación definidas en el subsistema de Desarrollo de MADEJA, y en su caso identificar posibles carencias.

El subsistema de Desarrollo de MADEJA define distintos tipos de pautas que permiten agrupar los indicadores a verificar en función del área al que pertenecen:

� Matriz de convención de código general

� Matriz de nomenclatura de objetos Java

� Matriz de convención de codificación Java

� Matriz de verificación de excepciones

� Matriz de construcción Java

� Matriz de documentación Java

El equipo de auditores de código estático ha aplicado un número de indicadores asociado a cada una de estas matrices, con la finalidad de garantizar la elaboración de un código fuente homogéneo y estándar con el objeto de minimizar las tareas de mantenimiento.

Las comprobaciones de código estático que aparecen en este documento, se han realizado de manera automática mediante la definición de reglas CheckStyle, PMD, FindBugs y el uso de la herramienta SONAR.

Tras identificar los indicadores e incumplimientos detectados, el equipo de desarrollo del proyecto VEA indica para cada incumplimiento las tareas a realizar, así como la criticidad estimada en función de la severidad del indicador y el impacto estimado.

Page 6: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 6 de 56

2222 RESULTRESULTRESULTRESULTADO DE LA REVISIÓNADO DE LA REVISIÓNADO DE LA REVISIÓNADO DE LA REVISIÓN

IIIInnnnddddicicicicaaaaddddoresoresoresores dddde revie revie revie revissssiónióniónión ddddeeee código estáticocódigo estáticocódigo estáticocódigo estático

CódigoCódigoCódigoCódigo Tipo PautaTipo PautaTipo PautaTipo Pauta IndicadorIndicadorIndicadorIndicador DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd

ACEACEACEACE----01010101 Matrices de Convención de código general

Tamaño de los métodosTamaño de los métodosTamaño de los métodosTamaño de los métodos Tamaño de los métodos. Comprobar que no existen métodos con un tamaño excesivo

Se puede utilizar una regla de PMD para controlar la excesiva funcionalidad de los métodos , para ello utilizar la regla ExcessiveMethodLengthExcessiveMethodLengthExcessiveMethodLengthExcessiveMethodLength, configurarla para que no acepte más de cien líneas de código y la regla de checkstyle , y la regla de checkstyle , y la regla de checkstyle , y la regla de checkstyle , methodLenghtmethodLenghtmethodLenghtmethodLenght

Grave

ACEACEACEACE----02020202 Matrices de Convención de código general

Número de máximo de Número de máximo de Número de máximo de Número de máximo de parámetrosparámetrosparámetrosparámetros

Comprobar que nos e dota de excesiva funcionalidad un método controlando el número máximo de parámetros

Se puede utilizar una regla de PMD para controlar la excesiva funcionalidad de los métodos , para ello utilizar la regla ExcessiveParameterListExcessiveParameterListExcessiveParameterListExcessiveParameterList, configurarla para que no acepte más de 10 parámetros y la regla ParameterNumber de CheckStyle

Grave

ACEACEACEACE----03030303 Matrices de Convención de código general

Eliminar el uso de Eliminar el uso de Eliminar el uso de Eliminar el uso de número mágicosnúmero mágicosnúmero mágicosnúmero mágicos

Eliminar el uso de los números mágicos. Comprobar que no se incluyen números para realizar comprobaciones y condicionales en el código

En java, se puede comprobar mediante la regla de CheckStyle MagicNumberMagicNumberMagicNumberMagicNumber, que permite controlar que no se utilizan números mágicos para realizar condicionales y comprobaciones

Grave

ACEACEACEACE----04040404 Matrices de Convención de código general

Manejo de los espacios Manejo de los espacios Manejo de los espacios Manejo de los espacios blancosblancosblancosblancos

Comprobar el buen uso de los espacios en blanco En el caso de Java, se pueden usar reglas definidas en CheckStyle como genericWhiteSpacesgenericWhiteSpacesgenericWhiteSpacesgenericWhiteSpaces para el tratamiento de los espacios blancos.

En XML , se comprobará que el documento está bien formado

Leve

Page 7: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 7 de 56

IIIInnnnddddicicicicaaaaddddoresoresoresores dddde revie revie revie revissssiónióniónión ddddeeee código estáticocódigo estáticocódigo estáticocódigo estático

CódigoCódigoCódigoCódigo Tipo PautaTipo PautaTipo PautaTipo Pauta IndicadorIndicadorIndicadorIndicador DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd

ACEACEACEACE----05050505 Matriz nomenclatura de objetos Java

Nomenclatura de Nomenclatura de Nomenclatura de Nomenclatura de parámetros y variablesparámetros y variablesparámetros y variablesparámetros y variables

Comprobar que la nomenclatura de los parámetros y variables de una aplicación cumple con lo establecido

Usando las reglas de CheckStyle , ParameterName, ParameterName, ParameterName, ParameterName, LocalVariableNLocalVariableNLocalVariableNLocalVariableName , LocalFinalVariableName, ame , LocalFinalVariableName, ame , LocalFinalVariableName, ame , LocalFinalVariableName, StaticVariableName, ClassTypeParameterName, StaticVariableName, ClassTypeParameterName, StaticVariableName, ClassTypeParameterName, StaticVariableName, ClassTypeParameterName, MethodTypeParameterName ParameterAssignmentMethodTypeParameterName ParameterAssignmentMethodTypeParameterName ParameterAssignmentMethodTypeParameterName ParameterAssignment se puede comprobar que los nombres de las variables y parámetros siguen un formato determinado. Es necesario parametrizarla de la siguiente de manera: ^[a-z][a-zA-Z0-9]*$ (todos) ^[A-Z]$ (MethodType...)

Critico

ACEACEACEACE----06060606 Matriz nomenclatura de objetos Java

Nomenclaturas de Nomenclaturas de Nomenclaturas de Nomenclaturas de constantesconstantesconstantesconstantes

Comprobar que la nomenclatura de los constantes de una aplicación cumple con lo establecido

Utilizar la regla de CheckStyle , ParameterNameParameterNameParameterNameParameterName que permite comprobar que los nombres de los paquetes siguen un formato determinado. Es necesario parametrizarla de la siguiente manera: module name="ParameterName"> <property name="format" value="^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$/> </module>

Critico

Page 8: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 8 de 56

IIIInnnnddddicicicicaaaaddddoresoresoresores dddde revie revie revie revissssiónióniónión ddddeeee código estáticocódigo estáticocódigo estáticocódigo estático

CódigoCódigoCódigoCódigo Tipo PautaTipo PautaTipo PautaTipo Pauta IndicadorIndicadorIndicadorIndicador DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd

ACEACEACEACE----07070707 Matriz nomenclatura de objetos Java

Nomenclatura de Nomenclatura de Nomenclatura de Nomenclatura de métodosmétodosmétodosmétodos

Comprobar que la nomenclatura de los métodos de una aplicación cumple con lo establecido

Utilizar la regla de CheckStyle , MMMMethodName ethodName ethodName ethodName que permite comprobar que los nombres de los métodos siguen un formato determinado. Es necesario parametrizarla de la siguiente manera: module name="MethodName"> <property name="format" value="^[a-z][a-zA-Z0-9]*$/> </module> Usar la regla AvoidDollarSigns:

Critico

ACEACEACEACE----08080808 Matriz nomenclatura de objetos Java

Nomenclatura de Nomenclatura de Nomenclatura de Nomenclatura de paquetespaquetespaquetespaquetes

Comprobar que la nomenclatura de los paquetes de una aplicación cumple con lo establecido

Utilizar la regla de CheckStyle , PackageNamePackageNamePackageNamePackageName que permite comprobar que los nombres de los paquetes siguen un formato determinado. Es necesario parametrizarla de la siguiente manera: module name="PackageName"> <property name="format" value="es.juntadeandalucia.^[a-z]+(\.[a-z][a-z0-9]*)*$". .^[a-z]+(\.[a-z][a-z0-9]*)*$"/> </module>

Critico

Page 9: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 9 de 56

IIIInnnnddddicicicicaaaaddddoresoresoresores dddde revie revie revie revissssiónióniónión ddddeeee código estáticocódigo estáticocódigo estáticocódigo estático

CódigoCódigoCódigoCódigo Tipo PautaTipo PautaTipo PautaTipo Pauta IndicadorIndicadorIndicadorIndicador DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd

ACEACEACEACE----09090909 Matriz nomenclatura de objetos Java

Nomenclatura de clasesNomenclatura de clasesNomenclatura de clasesNomenclatura de clases Comprobar que la nomenclatura de las clases de una aplicación cumple con lo establecido

Utilizar la regla de CheckStyle , TypeNameTypeNameTypeNameTypeName que permite comprobar que los nombres de los clases siguen un formato determinado. Es necesario parametrizarla de la siguiente manera: module name="TypeName"> <property name="format" value="^[A-Z][a-zA-Z0-9]*$/> </module> Usar la regla AvoidDollarSigns:

Critico

ACEACEACEACE----11110000 Matriz de convención de codificación Java

Formato del código Formato del código Formato del código Formato del código ---- Expresiones largasExpresiones largasExpresiones largasExpresiones largas

Comprobar el conjunto de otras recomendaciones que se realizan en la pauta.

Utilizar la regla AvoidStartImport para minimizar la inclusión de import. ‘*’

Usar la regla DesingforExtension para comprobar que una clase está diseñada para la herencia usar la regla LineLength

Grave

ACEACEACEACE----11111111 Matriz de convención de codificación Java

Estructura interna de Estructura interna de Estructura interna de Estructura interna de los ficheroslos ficheroslos ficheroslos ficheros

Comprobar la estructura del fichero y el tamaño del código. Comprobar el tamaño del código y la estructura del mismo mediante reglas de la herramienta CheckStyle. Se deben usar la regla DeclarationOrder y la regla FileLength que por defecto está a 2000 líneas.

Grave

ACACACACEEEE----12121212 Matriz de convención de codificación Java

Formato del código Formato del código Formato del código Formato del código ---- Ubicación de llaves “{ }”Ubicación de llaves “{ }”Ubicación de llaves “{ }”Ubicación de llaves “{ }”

Comprobar el correcto uso de las llaves

Configurar la herramienta CheckStyle para que compruebe la posición y existencia de las llaves en los bloques. Para ello es necesario configurar las reglas LeftCurly y RightCurly y NeedBraces , usar las reglas : IfStmtsMustUseBraces:; WhileLoopsMustUseBraces; IfStmtsMustUseBraces:; WhileLoopsMustUseBraces; IfStmtsMustUseBraces:; WhileLoopsMustUseBraces; IfStmtsMustUseBraces:; WhileLoopsMustUseBraces; IfElseStmtsMustUseBraces; ForLoopsMustUIfElseStmtsMustUseBraces; ForLoopsMustUIfElseStmtsMustUseBraces; ForLoopsMustUIfElseStmtsMustUseBraces; ForLoopsMustUseBraces:seBraces:seBraces:seBraces:

Leve

ACEACEACEACE----13131313 Matriz de convención de codificación Java

Formato del código Formato del código Formato del código Formato del código ---- Líneas en blancoLíneas en blancoLíneas en blancoLíneas en blanco

Comprobar el formato del código con respecto al uso de las líneas en blanco

Configurar el uso de la herramienta CheckStyle para que incluya las reglas de comprobación para el uso de blancos. (grupo de reglas WhiteSpaces)

Leve

Page 10: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 10 de 56

IIIInnnnddddicicicicaaaaddddoresoresoresores dddde revie revie revie revissssiónióniónión ddddeeee código estáticocódigo estáticocódigo estáticocódigo estático

CódigoCódigoCódigoCódigo Tipo PautaTipo PautaTipo PautaTipo Pauta IndicadorIndicadorIndicadorIndicador DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd

ACEACEACEACE----14141414 Matriz de convención de codificación Java

Formato del código Formato del código Formato del código Formato del código ---- Espacio en blancoEspacio en blancoEspacio en blancoEspacio en blanco

Comprobar el formato del código con respecto al uso del espacio en blanco

Configurar el uso de la herramienta CheckStyle para que incluya las reglas de comprobación para el uso de blancos. (grupo de reglas WhiteSpaces) usar GenericWhitespaceGenericWhitespaceGenericWhitespaceGenericWhitespace

Leve

ACEACEACEACE----15151515 Matriz verificación de excepciones

No eliminar o ignorar No eliminar o ignorar No eliminar o ignorar No eliminar o ignorar exexexexcepcionescepcionescepcionescepciones

Comprobar que no se elimina o ignoran excepciones Comprobar que cuando un método de una API lanza una excepción verificable, está tratando de indicar al código cliente que debe realizar alguna acción que revierta esta situación. Si la excepción verificable no tiene sentido en el contexto donde se ha capturado, se debe convertir en una excepción no verificable y lanzarla nuevamente, pero no nunca debe ignorarse con un bloque catch vacío y luego continuar con el flujo normal de ejecución. En PMD , EmptyCatchBlock y la regla En PMD , EmptyCatchBlock y la regla En PMD , EmptyCatchBlock y la regla En PMD , EmptyCatchBlock y la regla AvoidInstanceofChecksInCatchClause y la regla de findbugs AvoidInstanceofChecksInCatchClause y la regla de findbugs AvoidInstanceofChecksInCatchClause y la regla de findbugs AvoidInstanceofChecksInCatchClause y la regla de findbugs RV: Exception created and dropped rather than thrown RV: Exception created and dropped rather than thrown RV: Exception created and dropped rather than thrown RV: Exception created and dropped rather than thrown (RV_EXCEPTION_NOT_THROWN)(RV_EXCEPTION_NOT_THROWN)(RV_EXCEPTION_NOT_THROWN)(RV_EXCEPTION_NOT_THROWN)

Critico

ACEACEACEACE----16161616 Matriz de construcción Java

Otras recomendaciones Otras recomendaciones Otras recomendaciones Otras recomendaciones de Java de Java de Java de Java ---- Uso de Clone()Uso de Clone()Uso de Clone()Uso de Clone()

Comprobar el buen uso de clone() debe considerarse que * Es necesario evitar que el método clone lance una excepción del tipo, CloneNotSupportedException. * El método sólo debe implementarse si la clase implementa la interfaz Cloneable con la excepción de un método final que sólo arroja CloneNotSupportedException. * No debe de retornar null, hay que vigilar la sobrescritura del método * Los constructores y métodos que reciben arrays deben clonar objetos y almacenar la copia. Esto evita que los futuros cambios del usuario afecten a la funcionalidad interior.

Para comprobar el correcto uso de clone() Aplicar las reglas de pmd CloneMethodMustImplementCloneableCloneMethodMustImplementCloneableCloneMethodMustImplementCloneableCloneMethodMustImplementCloneable ProperCloneImplementationProperCloneImplementationProperCloneImplementationProperCloneImplementation CloneThrowsCloneNotSCloneThrowsCloneNotSCloneThrowsCloneNotSCloneThrowsCloneNotSupportedExceptionupportedExceptionupportedExceptionupportedException CN: Class implements Cloneable but does not define or use CN: Class implements Cloneable but does not define or use CN: Class implements Cloneable but does not define or use CN: Class implements Cloneable but does not define or use clone method (CN_IDIOM) de Findbugs clone method (CN_IDIOM) de Findbugs clone method (CN_IDIOM) de Findbugs clone method (CN_IDIOM) de Findbugs NP: Clone method may return null NP: Clone method may return null NP: Clone method may return null NP: Clone method may return null (NP_CLONE_COULD_RETURN_NULL) NP: equal(NP_CLONE_COULD_RETURN_NULL) NP: equal(NP_CLONE_COULD_RETURN_NULL) NP: equal(NP_CLONE_COULD_RETURN_NULL) NP: equals() s() s() s() method does not check for null argument method does not check for null argument method does not check for null argument method does not check for null argument (NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT)(NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT)(NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT)(NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT)

Grave

Page 11: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 11 de 56

IIIInnnnddddicicicicaaaaddddoresoresoresores dddde revie revie revie revissssiónióniónión ddddeeee código estáticocódigo estáticocódigo estáticocódigo estático

CódigoCódigoCódigoCódigo Tipo PautaTipo PautaTipo PautaTipo Pauta IndicadorIndicadorIndicadorIndicador DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd

ACEACEACEACE----17171717 Matriz de construcción Java

Manejo de las clases Manejo de las clases Manejo de las clases Manejo de las clases Java Java Java Java ---- Hacer buen uso Hacer buen uso Hacer buen uso Hacer buen uso de la herenciade la herenciade la herenciade la herencia

Comprobar que se realiza un buen uso de la herencia en la programación.

Se debe comprobar que se crean herencias en las clases de forma totalmente justificada. Es necesario tener claro que estamos creando un subobjeto proveniente de la clase de la que se hereda. Hacer uso de la herramienta CheckStyle y su regla DesignForExtensionDesignForExtensionDesignForExtensionDesignForExtension

Critico

ACEACEACEACE----18181818 Matriz de construcción Java

Manejo de las clases Manejo de las clases Manejo de las clases Manejo de las clases Java Java Java Java ---- Inicializar las Inicializar las Inicializar las Inicializar las clases en un estado clases en un estado clases en un estado clases en un estado conocidoconocidoconocidoconocido

Comprobar que las clases están inicializadas Es necesario comprobar que hemos definido las clases de forma que se encuentren inicializadas en un estado conocido. Se puede utilizar la regla de PMD EmptyStaticInitializeEmptyStaticInitializeEmptyStaticInitializeEmptyStaticInitializer y EmptyInitializeEmptyInitializeEmptyInitializeEmptyInitializer para descubrir inicializadores vacíos y la regla de findbugs SI: Static initializer creates instance before all static final SI: Static initializer creates instance before all static final SI: Static initializer creates instance before all static final SI: Static initializer creates instance before all static final fields assigned (SI_INSTANCE_BEFORE_FINALS_ASSIGNED) fields assigned (SI_INSTANCE_BEFORE_FINALS_ASSIGNED) fields assigned (SI_INSTANCE_BEFORE_FINALS_ASSIGNED) fields assigned (SI_INSTANCE_BEFORE_FINALS_ASSIGNED) de Findbugs SC: de Findbugs SC: de Findbugs SC: de Findbugs SC: Constructor invokes Thread.start() (SC_START_IN_CTOR) Constructor invokes Thread.start() (SC_START_IN_CTOR) Constructor invokes Thread.start() (SC_START_IN_CTOR) Constructor invokes Thread.start() (SC_START_IN_CTOR) IC: Initialization circularity (IC_INIT_CIRCULARITY) IC: Initialization circularity (IC_INIT_CIRCULARITY) IC: Initialization circularity (IC_INIT_CIRCULARITY) IC: Initialization circularity (IC_INIT_CIRCULARITY) UwF: Field not initialized in constructor UwF: Field not initialized in constructor UwF: Field not initialized in constructor UwF: Field not initialized in constructor (UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR)(UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR)(UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR)(UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR)

Grave

ACEACEACEACE----19191919 Matriz de construcción Java

Otras recomendaciones Otras recomendaciones Otras recomendaciones Otras recomendaciones de Java de Java de Java de Java ---- Uso de Uso de Uso de Uso de hashCode()hashCode()hashCode()hashCode()

Normalmente todos los contenedores que agrupan o comparan objetos usando comparaciones de igualdad, utilizan los hashcodes para determinar dicha igualdad. Se debe de asegurar que si una clase sobrescribe el método hashCode() hace lo propio con el método equals()

Utilizar las reglas: EqualsHashCode, de Utilizar las reglas: EqualsHashCode, de Utilizar las reglas: EqualsHashCode, de Utilizar las reglas: EqualsHashCode, de CheckStyle OverrideBothEqualsAndHashcode de PMD CheckStyle OverrideBothEqualsAndHashcode de PMD CheckStyle OverrideBothEqualsAndHashcode de PMD CheckStyle OverrideBothEqualsAndHashcode de PMD SuspiciousHashcodeMethodName de PMD SuspiciousHashcodeMethodName de PMD SuspiciousHashcodeMethodName de PMD SuspiciousHashcodeMethodName de PMD HE: Class defines equals() but not hashCode() (HE_EQUALS_NO_HASHCODE) de findbugs HE: Class defines equals() and uses Object.hashCode() (HE_EQUALS_USE_HASHCODE) HE: Class defines hashCode() but not equals() (HE_HASHCODE_NO_EQUALS) HE: Class defines hashCode() and uses Object.equals() (HE_HASHCODE_USE_OBJECT_EQUALS) HE: Class inherits equals() and uses Object.hashCode() (HE_INHERITS_EQUALS_USE_HASHCODE)

Critico

Page 12: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 12 de 56

IIIInnnnddddicicicicaaaaddddoresoresoresores dddde revie revie revie revissssiónióniónión ddddeeee código estáticocódigo estáticocódigo estáticocódigo estático

CódigoCódigoCódigoCódigo Tipo PautaTipo PautaTipo PautaTipo Pauta IndicadorIndicadorIndicadorIndicador DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd

ACEACEACEACE----20202020 Matriz de construcción Java

Manejo de métodos Manejo de métodos Manejo de métodos Manejo de métodos Java Java Java Java –––– Escribir métodos Escribir métodos Escribir métodos Escribir métodos que solo hagan una que solo hagan una que solo hagan una que solo hagan una cosacosacosacosa

Comprobar que no se dota de excesiva funcionalidad a un método.

Es importante no sobrecargar los métodos. En muchas ocasiones es mejor tener varios métodos que tener uno complejo. Comprobar la legibilidad y comprensión del código. Con la regla de PMD ExcessiveMethodLength ExcessiveMethodLength ExcessiveMethodLength ExcessiveMethodLength podemos tener un acercamiento a este problema. Con la regla CyclomaticComplexity se evalúa su complejidad

Critico

Page 13: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 13 de 56

IIIInnnnddddicicicicaaaaddddoresoresoresores dddde revie revie revie revissssiónióniónión ddddeeee código estáticocódigo estáticocódigo estáticocódigo estático

CódigoCódigoCódigoCódigo Tipo PautaTipo PautaTipo PautaTipo Pauta IndicadorIndicadorIndicadorIndicador DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd

ACEACEACEACE----21212121 Matriz de construcción Java

Otras recomendaciones Otras recomendaciones Otras recomendaciones Otras recomendaciones de Javade Javade Javade Java---- Uso de las Uso de las Uso de las Uso de las cadenas de caracterescadenas de caracterescadenas de caracterescadenas de caracteres

Comprobar el buen uso de las cadenas de caracteres * No es recomendable concatenar cadenas de caracteres mediante " + " , es más efectivo a niveles de rendimiento usar los métodos para ello como StringBuilder o StringBuffer. * No deben de realizarse comparaciones de cadenas de caracteres mediante los operadores != ni ==.Se recomienda el uso de del método equal. * No construir una cadena, el uso de la java.lang.String (String) es un gasto de memoria porque el objeto de su construcción será funcionalmente indistinguible de la cadena pasada como parámetro. Sólo tiene que utilizar el argumento de cadena directamente. * No haga un uso redundante de las cadenas de caracteres. Por ejemplo, llamando String.toString() es justamente una operación redundante. Simplemente haga uso de String. * La creación de un objeto java.lang.String nuevo utilizando el constructor sin argumentos malgasta memoria porque el objeto así creado será funcionalmente indistinguible de la cadena vacía constante "". Java garantiza que las constantes idénticas cadena serán representadas por el mismo objeto String. Por lo tanto, sólo debe utilizar la cadena vacía constante directamente. * No crear literales de forma repetitiva, encapsularlos en cadenas reutilizables * Use StringBuffer.length() para determinar el tamaño de StringBuffer mejor que usar using StringBuffer.toString().equals("") or StringBuffer.toString().length() * Realizar una estimación correcta del tamaño de Stringbuffer, sino será necesario rediseñarlo en tiempo de ejecución con la consecuencia de la bajada de rendimiento

Realizar las comprobaciones en PMD UseEqualsToCompareStringsUseEqualsToCompareStringsUseEqualsToCompareStringsUseEqualsToCompareStrings para las comparaciones y la regla InefficientStringBuffering InefficientStringBuffering InefficientStringBuffering InefficientStringBuffering para controlar la concatenación EEEEqualsNullqualsNullqualsNullqualsNull de PMD CompareObjectsWithEquals:CompareObjectsWithEquals:CompareObjectsWithEquals:CompareObjectsWithEquals: de PMD AvoidDuplicateLiterals de PMD AvoidDuplicateLiterals de PMD AvoidDuplicateLiterals de PMD AvoidDuplicateLiterals de PMD StringInstantiation: de PMD StringToSStringInstantiation: de PMD StringToSStringInstantiation: de PMD StringToSStringInstantiation: de PMD StringToString tring tring tring de PMD InefficientStringBuffering de PMD de PMD InefficientStringBuffering de PMD de PMD InefficientStringBuffering de PMD de PMD InefficientStringBuffering de PMD UseStringBufferLength de PMD UseStringBufferLength de PMD UseStringBufferLength de PMD UseStringBufferLength de PMD InsufficientStringBufferDeclaration InsufficientStringBufferDeclaration InsufficientStringBufferDeclaration InsufficientStringBufferDeclaration UselessStringValueOf UselessStringValueOf UselessStringValueOf UselessStringValueOf StringBufferInstStringBufferInstStringBufferInstStringBufferInstantiationWithChar antiationWithChar antiationWithChar antiationWithChar UseEqualsToCompareStrings ES: UseEqualsToCompareStrings ES: UseEqualsToCompareStrings ES: UseEqualsToCompareStrings ES: Comparison of String parameter using == or != Comparison of String parameter using == or != Comparison of String parameter using == or != Comparison of String parameter using == or != (ES_COMPARING_PARAMETER_STRING_WITH_EQ) de (ES_COMPARING_PARAMETER_STRING_WITH_EQ) de (ES_COMPARING_PARAMETER_STRING_WITH_EQ) de (ES_COMPARING_PARAMETER_STRING_WITH_EQ) de Findbugs ES: Findbugs ES: Findbugs ES: Findbugs ES: ComparComparComparComparison of String objects using == or != ison of String objects using == or != ison of String objects using == or != ison of String objects using == or != (ES_COMPARING_STRINGS_WITH_EQ) Dm: (ES_COMPARING_STRINGS_WITH_EQ) Dm: (ES_COMPARING_STRINGS_WITH_EQ) Dm: (ES_COMPARING_STRINGS_WITH_EQ) Dm: Method invokes inefficient new String(String) constructor Method invokes inefficient new String(String) constructor Method invokes inefficient new String(String) constructor Method invokes inefficient new String(String) constructor (DM_STRING_CTOR) Dm: Method (DM_STRING_CTOR) Dm: Method (DM_STRING_CTOR) Dm: Method (DM_STRING_CTOR) Dm: Method invokes toString() method on a String invokes toString() method on a String invokes toString() method on a String invokes toString() method on a String (DM_STRING_TOSTRIN(DM_STRING_TOSTRIN(DM_STRING_TOSTRIN(DM_STRING_TOSTRING Dm: Method G Dm: Method G Dm: Method G Dm: Method invokes inefficient new String() constructor invokes inefficient new String() constructor invokes inefficient new String() constructor invokes inefficient new String() constructor (DM_STRING_VOID_CTOR)(DM_STRING_VOID_CTOR)(DM_STRING_VOID_CTOR)(DM_STRING_VOID_CTOR)

Grave

Page 14: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 14 de 56

IIIInnnnddddicicicicaaaaddddoresoresoresores dddde revie revie revie revissssiónióniónión ddddeeee código estáticocódigo estáticocódigo estáticocódigo estático

CódigoCódigoCódigoCódigo Tipo PautaTipo PautaTipo PautaTipo Pauta IndicadorIndicadorIndicadorIndicador DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd

ACEACEACEACE----22222222 Matriz de construcción Java

Manejo de atributos y Manejo de atributos y Manejo de atributos y Manejo de atributos y variables en Java variables en Java variables en Java variables en Java –––– No No No No asignar variables o asignar variables o asignar variables o asignar variables o parámetros a parámetros a parámetros a parámetros a sísísísí mismasmismasmismasmismas

Comprobar que no se hacen auto asignaciones de variables o parámetros Tales asignaciones son inútiles, y puede indicar un error de lógica o un error tipográfico.

Se utiliza la herramienta PMD y sus reglas : NullAssignment:NullAssignment:NullAssignment:NullAssignment: y la regla de findbugs SA:SA:SA:SA: Double assignment of field Double assignment of field Double assignment of field Double assignment of field (SA_FIELD_DOUBLE_ASSIGNMENT) y la regla SA: Self (SA_FIELD_DOUBLE_ASSIGNMENT) y la regla SA: Self (SA_FIELD_DOUBLE_ASSIGNMENT) y la regla SA: Self (SA_FIELD_DOUBLE_ASSIGNMENT) y la regla SA: Self assignment of field (SA_FIELD_SELF_ASSIGNMENT) assignment of field (SA_FIELD_SELF_ASSIGNMENT) assignment of field (SA_FIELD_SELF_ASSIGNMENT) assignment of field (SA_FIELD_SELF_ASSIGNMENT) SA: Double assignment of local variable SA: Double assignment of local variable SA: Double assignment of local variable SA: Double assignment of local variable (SA_LOCAL_DOUBLE_ASSIGNMENT) SA: Self (SA_LOCAL_DOUBLE_ASSIGNMENT) SA: Self (SA_LOCAL_DOUBLE_ASSIGNMENT) SA: Self (SA_LOCAL_DOUBLE_ASSIGNMENT) SA: Self assignment of loassignment of loassignment of loassignment of local variable cal variable cal variable cal variable (SA_LOCAL_SELF_ASSIGNMENT)(SA_LOCAL_SELF_ASSIGNMENT)(SA_LOCAL_SELF_ASSIGNMENT)(SA_LOCAL_SELF_ASSIGNMENT)

Leve

ACEACEACEACE----23232323 Matriz de construcción Java

Otras recomendaciones Otras recomendaciones Otras recomendaciones Otras recomendaciones de Javade Javade Javade Java ---- Asignar a Null Asignar a Null Asignar a Null Asignar a Null las referencias que ya las referencias que ya las referencias que ya las referencias que ya no se usaran másno se usaran másno se usaran másno se usaran más

Comprobar que se asignan las referencias que ya no se usan más.

Con la regla NullAssignmentNullAssignmentNullAssignmentNullAssignment de PMD puede controlarse que referencias están asignadas a Null. Hay que vigilar que sean las que se desean.

Grave

ACEACEACEACE----24242424 Matriz de construcción Java

Otras recomendaciones Otras recomendaciones Otras recomendaciones Otras recomendaciones de Java de Java de Java de Java ---- Clases de uso Clases de uso Clases de uso Clases de uso de propósito generalde propósito generalde propósito generalde propósito general

Comprobar el buen uso de las clases de propósito general Implementar los métodos equals(), hashCode(), toString(), y clone() especialmente para clases que van a tener un uso de propósito genera

Grave

Page 15: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 15 de 56

IIIInnnnddddicicicicaaaaddddoresoresoresores dddde revie revie revie revissssiónióniónión ddddeeee código estáticocódigo estáticocódigo estáticocódigo estático

CódigoCódigoCódigoCódigo Tipo PautaTipo PautaTipo PautaTipo Pauta IndicadorIndicadorIndicadorIndicador DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd

ACEACEACEACE----25252525 Matriz de construcción Java

Otras recomendacioOtras recomendacioOtras recomendacioOtras recomendaciones nes nes nes de Java de Java de Java de Java ---- Uso de Uso de Uso de Uso de equals()equals()equals()equals()

* Se deben comprobar que no existan argumentos vacíos * Evitar llamadas a en dos referencias de diferentes tipos de clase sin subclases común. * Evitar que la llamada siempre devuelva o falso o cierto. * Comprobar las sobrescritura del método original para no introducir errores

Utilizar las siguientes reglas : SuspiciousEqualsMethodName de PMD SuspiciousEqualsMethodName de PMD SuspiciousEqualsMethodName de PMD SuspiciousEqualsMethodName de PMD ArrayIsStoredDArrayIsStoredDArrayIsStoredDArrayIsStoredDirectly de PMD NP: irectly de PMD NP: irectly de PMD NP: irectly de PMD NP: equals() method does not check for null argument equals() method does not check for null argument equals() method does not check for null argument equals() method does not check for null argument (NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT) (NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT) (NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT) (NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT) EC: Call to equals() with null argument (EC_NULL_EC: Call to equals() with null argument (EC_NULL_EC: Call to equals() with null argument (EC_NULL_EC: Call to equals() with null argument (EC_NULL_ARG) ARG) ARG) ARG) EC: Call to equals() comparing different types EC: Call to equals() comparing different types EC: Call to equals() comparing different types EC: Call to equals() comparing different types (EC_UNRELATED_TYPES) Eq: equals (EC_UNRELATED_TYPES) Eq: equals (EC_UNRELATED_TYPES) Eq: equals (EC_UNRELATED_TYPES) Eq: equals method always returns false (EQ_ALWAYS_FALSE) method always returns false (EQ_ALWAYS_FALSE) method always returns false (EQ_ALWAYS_FALSE) method always returns false (EQ_ALWAYS_FALSE) Eq: Eq: Eq: Eq: equals method always returns true (EQ_ALWAYS_TRUE) equals method always returns true (EQ_ALWAYS_TRUE) equals method always returns true (EQ_ALWAYS_TRUE) equals method always returns true (EQ_ALWAYS_TRUE) Eq: equals() method defined that doesn't override Eq: equals() method defined that doesn't override Eq: equals() method defined that doesn't override Eq: equals() method defined that doesn't override Object.equals(Object) (EQ_OTHER_USE_OBJECT) Object.equals(Object) (EQ_OTHER_USE_OBJECT) Object.equals(Object) (EQ_OTHER_USE_OBJECT) Object.equals(Object) (EQ_OTHER_USE_OBJECT) Eq: equals() method defined that Eq: equals() method defined that Eq: equals() method defined that Eq: equals() method defined that doesn't override equalsdoesn't override equalsdoesn't override equalsdoesn't override equals

(Object) (EQ_OTHER_NO_OBJECT) (Object) (EQ_OTHER_NO_OBJECT) (Object) (EQ_OTHER_NO_OBJECT) (Object) (EQ_OTHER_NO_OBJECT) HE: Signature declares use of unhashable class in hashed HE: Signature declares use of unhashable class in hashed HE: Signature declares use of unhashable class in hashed HE: Signature declares use of unhashable class in hashed construct construct construct construct (HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE(HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE(HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE(HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS) _CLASS) _CLASS) _CLASS)

Critico

ACEACEACEACE----26262626 Matriz de construcción Java

Manejo de instrucciones Manejo de instrucciones Manejo de instrucciones Manejo de instrucciones de operadores e de operadores e de operadores e de operadores e instrucciones instrucciones instrucciones instrucciones condicionales condicionales condicionales condicionales ---- Manejo Manejo Manejo Manejo de la de la de la de la instruccióninstruccióninstruccióninstrucción IfIfIfIf

Es recomendable que las instrucciones de tipo if sigan las siguientes recomendaciones: * No puede establecer un bloque de código vacío * No se deben utilizar para sentencias que siempre van a ser verdadero o falso * No introducir instrucciones if que sean colapsables entre sí mismas. Sustituirlas por un operador lógico para manejar la condición * Evitar asignar una literal booleano (true or false)a una variable booleana dentro de un if, lo más probable es que se trate de un intento de comparación

Se utilizan las siguientes reglas: CheckStyle, CheckStyle, CheckStyle, CheckStyle, DefaultComesLast UncondiDefaultComesLast UncondiDefaultComesLast UncondiDefaultComesLast UnconditionalIfStatement, PMD tionalIfStatement, PMD tionalIfStatement, PMD tionalIfStatement, PMD CollapsibleIfStatements, PMD CollapsibleIfStatements, PMD CollapsibleIfStatements, PMD CollapsibleIfStatements, PMD EmptyIfStmt: QBA: EmptyIfStmt: QBA: EmptyIfStmt: QBA: EmptyIfStmt: QBA: Method assigns boolean literal in boolean expression Method assigns boolean literal in boolean expression Method assigns boolean literal in boolean expression Method assigns boolean literal in boolean expression (QBA_QUESTIONABLE_BOOLEAN_ASS(QBA_QUESTIONABLE_BOOLEAN_ASS(QBA_QUESTIONABLE_BOOLEAN_ASS(QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT)IGNMENT)IGNMENT)IGNMENT)

Grave

Page 16: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 16 de 56

IIIInnnnddddicicicicaaaaddddoresoresoresores dddde revie revie revie revissssiónióniónión ddddeeee código estáticocódigo estáticocódigo estáticocódigo estático

CódigoCódigoCódigoCódigo Tipo PautaTipo PautaTipo PautaTipo Pauta IndicadorIndicadorIndicadorIndicador DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd

ACEACEACEACE----27272727 Matriz de construcción Java

Manejo de métodos Manejo de métodos Manejo de métodos Manejo de métodos Java Java Java Java –––– Hacer solo lo Hacer solo lo Hacer solo lo Hacer solo lo necesario en los necesario en los necesario en los necesario en los métodos constructoresmétodos constructoresmétodos constructoresmétodos constructores

Comprobar que se construyen los métodos constructores de manera que solo hagan lo necesario y no se excedan en la funcionalidad

Esta tarea es compleja, hay que determinar la complejidad de los constructores Se puede usar la regla de PMD UnnecessaryConstructorUnnecessaryConstructorUnnecessaryConstructorUnnecessaryConstructor que nos indica cuando un constructor no es necesario y la regla ConstructorCallsOverridableMethodConstructorCallsOverridableMethodConstructorCallsOverridableMethodConstructorCallsOverridableMethod

Critico

ACEACEACEACE----28282828 Matriz de construcción Java

Manejo de las clases Manejo de las clases Manejo de las clases Manejo de las clases Java Java Java Java ---- No declarar las No declarar las No declarar las No declarar las clases como finales, clases como finales, clases como finales, clases como finales, excepto por motivos de excepto por motivos de excepto por motivos de excepto por motivos de seguridadseguridadseguridadseguridad

Comprobar que no se declaran las clases como finales, a no ser que sea por un motivo excepcional.

Comprobar que las clases que se han declarado como final cumplen una funcionalidad de forma completa y no necesitaran ser extendidas en un futuro PMD , UnnecessaryFinalModifier

Critico

ACEACEACEACE----29292929 Matriz de construcción Java

Otras recomendaciones Otras recomendaciones Otras recomendaciones Otras recomendaciones de Java de Java de Java de Java –––– ManejoManejoManejoManejo de los de los de los de los modificadores en las modificadores en las modificadores en las modificadores en las sentenciassentenciassentenciassentencias

Comprobar que: * No declarar modificadores que no se utilicen * No declarar el modificador Final en los métodos si su clase se ha declarado como final * Evitar modificadores redundantes

Se utilizan las reglas: ModifierOrder ModifierOrder ModifierOrder ModifierOrder de check Style RedundantModifier de de check Style RedundantModifier de de check Style RedundantModifier de de check Style RedundantModifier de CheckStyle UnnecessaryFinalModifier de PMD CheckStyle UnnecessaryFinalModifier de PMD CheckStyle UnnecessaryFinalModifier de PMD CheckStyle UnnecessaryFinalModifier de PMD UnusedModifier de CheckStyleUnusedModifier de CheckStyleUnusedModifier de CheckStyleUnusedModifier de CheckStyle

Grave

ACEACEACEACE----30303030 Matriz de construcción Java

Manejo de métodos Manejo de métodos Manejo de métodos Manejo de métodos Java Java Java Java –––– No fabricar No fabricar No fabricar No fabricar métodos innecesariosmétodos innecesariosmétodos innecesariosmétodos innecesarios

Comprobar que no se crean métodos que no se utilicen y sean innecesarios

Hay que comprobar que se acceden a los métodos declarados. Con la regla UnusedPrivateMethodUnusedPrivateMethodUnusedPrivateMethodUnusedPrivateMethod de pmd puede comprobarse que no se usan los métodos privados

Grave

ACEACEACEACE----31313131 Matriz de construcción Java

Manejo de métodos Manejo de métodos Manejo de métodos Manejo de métodos Java Java Java Java ---- Evitar el mal uso Evitar el mal uso Evitar el mal uso Evitar el mal uso de los de los de los de los métodosmétodosmétodosmétodos get/setget/setget/setget/set

Comprobar que se utilizan de forma correcta Hay que comprobar que se acceden a los métodos declarados. Con la regla UnusedPrivateMethodUnusedPrivateMethodUnusedPrivateMethodUnusedPrivateMethod de pmd puede comprobarse que no se usan los métodos privados y comprobar que el uso de los mismos es el esperado.

Critico

Page 17: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 17 de 56

IIIInnnnddddicicicicaaaaddddoresoresoresores dddde revie revie revie revissssiónióniónión ddddeeee código estáticocódigo estáticocódigo estáticocódigo estático

CódigoCódigoCódigoCódigo Tipo PautaTipo PautaTipo PautaTipo Pauta IndicadorIndicadorIndicadorIndicador DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd

ACEACEACEACE----32323232 Matriz de documentación Java

Las clases y métodos Las clases y métodos Las clases y métodos Las clases y métodos deben estar deben estar deben estar deben estar documentadas con documentadas con documentadas con documentadas con JavadocJavadocJavadocJavadoc

Hacer uso del javadoc para realizar comentarios en los objetos JAVA

Se pueden comprobar de forma automática que se han realizado los comentarios para crear el Javadoc de los métodos, clases, paquetes, variables. Seleccionar las reglas de CheckStyle . JavadocTypeJavadocTypeJavadocTypeJavadocType JavadocMethodJavadocMethodJavadocMethodJavadocMethod JavadocVariableJavadocVariableJavadocVariableJavadocVariable Y harán la comprobación de forma automática.

Grave

Page 18: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 18 de 56

En la tabla siguiente se muestra el total de incumplimientos, organizados por severidad:

SSSSeeeevvvveeeerrrrididididaaaadddd NNNNºººº iiiincumncumncumncumplplplplimiimiimiimieeeennnntotototossss IndicadoresIndicadoresIndicadoresIndicadores

Critico 5 ACE-07, ACE-17, ACE-20, ACE-25, ACE-27

Grave 5 ACE-01, ACE-03, ACE-11, ACE-23, ACE-32

Leve 5 ACE-04, ACE-12, ACE-13, ACE-14, ACE-22

Debido al número de líneas de código procesadas, en lugar de verificar el número de incumplimientos detectado, en este caso es necesario analizar el porcentaje de cumplimiento de cada uno de los indicadores:

Se han analizado 90.894 líneas de código distribuidas en

� 134 paquetes

� 873 clases

� 5.946 métodos

Resultando un porcentaje de cumplimiento de indicadores de 99,499,499,499,4%%%% para VEAVEAVEAVEA y un 99999999,5,5,5,5%%%% para el AHAHAHAH.

Para el cálculo de dicho porcentaje, la herramienta SONAR, en base a la configuración de cada una de las reglas (PMD, CheckStyle y FindBugs) y el número de veces que las reglas se han violado, aplica la siguiente formula RCI = 100 - (weighted_violations/nloc * 100)

Por tanto, aplicando el criterio de baremación marcado por la Dirección del Proyecto, en la que es necesario superar el 90% de cumplimiento en código y teniendo en cuenta los resultados obtenidos, el

producto software es ACEPTADOACEPTADOACEPTADOACEPTADO.

Page 19: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 19 de 56

3333 ANÁLISIS DE LOS INCUMPLIMIENTOSANÁLISIS DE LOS INCUMPLIMIENTOSANÁLISIS DE LOS INCUMPLIMIENTOSANÁLISIS DE LOS INCUMPLIMIENTOS

A continuación se listan los indicadores en los que se ha detectado un incumplimiento, indicando la criticidad de resolución y las acciones a realizar e impacto en el sistema:

� PrioridadPrioridadPrioridadPrioridad: Indica el grado de resolución recomendada para la Ventanilla Electrónica, en función de la severidad del indicador y su aplicación en la tipología de aplicación analizada (Ventanilla Electrónica):

o Bloqueante: Resolución imprescindible del indicador para la liberación de la versión oficial del producto.

o Critica: Resolución requerida para cumplir con las exigencias mínimas calidad en código.

o Mayor: Resolución requerida para cumplir con las exigencias mínimas calidad en código.

o Menor: Resolución recomendada para elevar la calidad del código, aunque no es imprescindible su realización.

o Información: Resolución recomendada para elevar la calidad del código, aunque no es imprescindible su realización.

o N/A: No aplica la resolución del indicador, en base a la naturaleza del sistema y la tipología del indicador.

� Acciones a realizarAcciones a realizarAcciones a realizarAcciones a realizar: Conjunto de acciones a realizar sobre el código fuente del producto para completar la resolución del indicador asociado, indicándose los puntos del sistema a modificar.

IIIInnnnddddicaicaicaicaddddores ores ores ores dddde revie revie revie revissssión ión ión ión dddde código estáticoe código estáticoe código estáticoe código estático

CódigoCódigoCódigoCódigo DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd PrioridadPrioridadPrioridadPrioridad JustificaciónJustificaciónJustificaciónJustificación

ACEACEACEACE----01010101 Tamaño de los métodos . Comprobar que no existen métodos con un tamaño excesivo

Se puede utilizar una regla de PMD para controlar la excesiva funcionalidad de los métodos , para ello utilizar la regla ExcessiveMethodLengthExcessiveMethodLengthExcessiveMethodLengthExcessiveMethodLength, configurarla para que no acepte más de cien líneas de código y y y y la regla de cla regla de cla regla de cla regla de checkstyle , methodLenghtheckstyle , methodLenghtheckstyle , methodLenghtheckstyle , methodLenght

Grave Mayor Los métodos que excedan las 100 líneas de código deberán ser modularizados en la medida de lo posible.

Page 20: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 20 de 56

IIIInnnnddddicaicaicaicaddddores ores ores ores dddde revie revie revie revissssión ión ión ión dddde código estáticoe código estáticoe código estáticoe código estático

CódigoCódigoCódigoCódigo DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd PrioridadPrioridadPrioridadPrioridad JustificaciónJustificaciónJustificaciónJustificación

ACEACEACEACE----03030303 Eliminar el uso de los números mágicos. Comprobar que no se incluyen números para realizar comprobaciones y condicionales en el código

En java, se puede comprobar mediante la regla de CheckStyle MagicNumberMagicNumberMagicNumberMagicNumber, que permite controlar que no se utilizan números mágicos para realizar condicionales y comprobaciones

Grave Información Evitar todas las condiciones en las que se compare con números.

ACEACEACEACE----04040404 Comprobar el buen uso de los espacios en blanco En el caso de Java, se pueden usar reglas definidas en CheckStyle como genericWhiteSpacesgenericWhiteSpacesgenericWhiteSpacesgenericWhiteSpaces para el tratamiento de los espacios blancos.

En XML , se comprobará que el documento está bien formado

Leve Información Adecuar el código fuente para que se adapte a las reglas definidas para el tratamiento de los espacios en blanco.

ACEACEACEACE----07070707 Comprobar que la nomenclatura de los métodos de una aplicación cumple con lo establecido

Utilizar la regla de CheckStyle , MethodName MethodName MethodName MethodName que permite comprobar que los nombres de los métodos siguen un formato determinado. Es necesario parametrizarla de la siguiente manera: module name="MethodName"> <property name="format" value="^[a-z][a-zA-Z0-9]*$/> </module> Usar la regla AvoidDollarSigns:

Critico Mayor Cambiar el nombre de los métodos para que cumpla con el formato establecido

ACEACEACEACE----11111111 Comprobar la estructura del fichero y el tamaño del código.

Comprobar el tamaño del código y la estructura del mismo mediante reglas de la herramienta CheckStyle. Se deben usar la regla DeclarationOrder y la regla FileLength que por defecto está a 2000 líneas.

Grave Información Modularizar las clases que excedan el tamaño mediante la creación de nuevas clases que permitan agrupar los métodos y parámetros por funcionalidad

Page 21: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 21 de 56

IIIInnnnddddicaicaicaicaddddores ores ores ores dddde revie revie revie revissssión ión ión ión dddde código estáticoe código estáticoe código estáticoe código estático

CódigoCódigoCódigoCódigo DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd PrioridadPrioridadPrioridadPrioridad JustificaciónJustificaciónJustificaciónJustificación

ACEACEACEACE----12121212 Comprobar el correcto uso de las llaves

Configurar la herramienta CheckStyle para que compruebe la posición y existencia de las llaves en los bloques. Para ello es necesario configurar las reglas LeftCurly y RightCurly y NeedBraces , usar las reglas : IfStmtsMustUseBraces:; WhileLoopsMustUseBracIfStmtsMustUseBraces:; WhileLoopsMustUseBracIfStmtsMustUseBraces:; WhileLoopsMustUseBracIfStmtsMustUseBraces:; WhileLoopsMustUseBraces; es; es; es; IfElseStmtsMustUseBraces; IfElseStmtsMustUseBraces; IfElseStmtsMustUseBraces; IfElseStmtsMustUseBraces; ForLoopsMustUseBraces:ForLoopsMustUseBraces:ForLoopsMustUseBraces:ForLoopsMustUseBraces:

Leve Información Revisar el código fuente para posicionar las llaves en la línea de código adecuada

ACEACEACEACE----13131313 Comprobar el formato del código con respecto al uso de las líneas en blanco

Configurar el uso de la herramienta CheckStyle para que incluya las reglas de comprobación para el uso de blancos. (grupo de reglas WhiteSpaces)

Leve Información Revisar el código para eliminar las líneas en blanco que no cumplan con las reglas definidas

ACEACEACEACE----14141414 Comprobar el formato del código con respecto al uso del espacio en blanco

Configurar el uso de la herramienta CheckStyle para que incluya las reglas de comprobación para el uso de blancos. (grupo de reglas WhiteSpaces) usar GenericGenericGenericGenericWhitespaceWhitespaceWhitespaceWhitespace

Leve Información Revisar el código para corregir los espacios en blanco que no cumplan con las reglas definidas

ACEACEACEACE----17171717 Comprobar que se realiza un buen uso de la herencia en la programación.

Se debe comprobar que se crean herencias en las clases de forma totalmente justificada. Es necesario tener claro que estamos creando un subobjeto proveniente de la clase de la que se hereda. Hacer uso de la herramienta CheckStyle y su regla DesignForExtensionDesignForExtensionDesignForExtensionDesignForExtension

Critico Información Revisar que los métodos override están completamente justificados

Page 22: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 22 de 56

IIIInnnnddddicaicaicaicaddddores ores ores ores dddde revie revie revie revissssión ión ión ión dddde código estáticoe código estáticoe código estáticoe código estático

CódigoCódigoCódigoCódigo DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd PrioridadPrioridadPrioridadPrioridad JustificaciónJustificaciónJustificaciónJustificación

ACEACEACEACE----20202020 Comprobar que no se dota de excesiva funcionalidad a un método.

Es importante no sobrecargar los métodos. En muchas ocasiones es mejor tener varios métodos que tener uno complejo. Comprobar la legibilidad y comprensión del código. Con la regla de PMD ExcessiveMethodLength ExcessiveMethodLength ExcessiveMethodLength ExcessiveMethodLength podemos tener un acercamiento a este problema. Con la regla CyclomaticComplexity se evalúa su complejidad

Critico Mayor Modularizar los métodos que sean excesivamente largos permitiendo realizar la funcionalidad del método en sub-tareas

ACEACEACEACE----22222222 Comprobar que no se hacen auto asignaciones de variables o parámetros Tales asignaciones son inútiles, y puede indicar un error de lógica o un error tipográfico.

Se utiliza la herramienta PMD y sus reglas : NullAssignment:NullAssignment:NullAssignment:NullAssignment: y la regla de findbugs SA: Double SA: Double SA: Double SA: Double assignment of field assignment of field assignment of field assignment of field (SA_FIELD_DOUBLE_ASSIGNMENT) y la regla SA: (SA_FIELD_DOUBLE_ASSIGNMENT) y la regla SA: (SA_FIELD_DOUBLE_ASSIGNMENT) y la regla SA: (SA_FIELD_DOUBLE_ASSIGNMENT) y la regla SA: Self assignment of field Self assignment of field Self assignment of field Self assignment of field (SA_FIELD_SELF_ASSIGNMENT) SA:(SA_FIELD_SELF_ASSIGNMENT) SA:(SA_FIELD_SELF_ASSIGNMENT) SA:(SA_FIELD_SELF_ASSIGNMENT) SA: Double assignment of local variable Double assignment of local variable Double assignment of local variable Double assignment of local variable (SA_LOCAL_DOUBLE_ASSIGNMENT) SA: (SA_LOCAL_DOUBLE_ASSIGNMENT) SA: (SA_LOCAL_DOUBLE_ASSIGNMENT) SA: (SA_LOCAL_DOUBLE_ASSIGNMENT) SA: Self assignment of local variable Self assignment of local variable Self assignment of local variable Self assignment of local variable (SA_LOCAL_SELF_ASSIGNMENT)(SA_LOCAL_SELF_ASSIGNMENT)(SA_LOCAL_SELF_ASSIGNMENT)(SA_LOCAL_SELF_ASSIGNMENT)

Leve Mayor Evitar en la medida de lo posible la inicialización de parámetros a null, intentar inicializar los parámetros con objetos vacíos.

ACEACEACEACE----23232323 Comprobar que se asignan las referencias que ya no se usan más.

Con la regla NullAssignmentNullAssignmentNullAssignmentNullAssignment de PMD puede controlarse que referencias están asignadas a Null. Hay que vigilar que sean las que se desean.

Grave Mayor Comprobar que los parámetros que se establecen a null ya no se usan más desde su asignación.

Page 23: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 23 de 56

IIIInnnnddddicaicaicaicaddddores ores ores ores dddde revie revie revie revissssión ión ión ión dddde código estáticoe código estáticoe código estáticoe código estático

CódigoCódigoCódigoCódigo DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd PrioridadPrioridadPrioridadPrioridad JustificaciónJustificaciónJustificaciónJustificación

ACEACEACEACE----25252525 * Se deben comprobar que no existan argumentos vacíos * Evitar llamadas a dos referencias de diferentes tipos de clase sin subclases común. * Evitar que la llamada siempre devuelva o falso o cierto. * Comprobar las sobrescritura del método original para no introducir errores

Utilizar las siguientes reglas : SuspiciousEqualsMethodName de SuspiciousEqualsMethodName de SuspiciousEqualsMethodName de SuspiciousEqualsMethodName de PMD PMD PMD PMD ArrayIsStoredDirectly de PMD ArrayIsStoredDirectly de PMD ArrayIsStoredDirectly de PMD ArrayIsStoredDirectly de PMD NP: equals() method does not check for null NP: equals() method does not check for null NP: equals() method does not check for null NP: equals() method does not check for null argument argument argument argument (NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMEN(NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMEN(NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMEN(NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT) T) T) T) EC: EC: EC: EC: Call to equals() with null argument (EC_NULL_ARG) Call to equals() with null argument (EC_NULL_ARG) Call to equals() with null argument (EC_NULL_ARG) Call to equals() with null argument (EC_NULL_ARG) EC: Call to equals() comparing different types EC: Call to equals() comparing different types EC: Call to equals() comparing different types EC: Call to equals() comparing different types (EC_UNRELATED_TYPES) Eq: (EC_UNRELATED_TYPES) Eq: (EC_UNRELATED_TYPES) Eq: (EC_UNRELATED_TYPES) Eq: equals method alwaysequals method alwaysequals method alwaysequals method always returns false returns false returns false returns false (EQ_ALWAYS_FALSE) (EQ_ALWAYS_FALSE) (EQ_ALWAYS_FALSE) (EQ_ALWAYS_FALSE) Eq: equals method always returns true Eq: equals method always returns true Eq: equals method always returns true Eq: equals method always returns true (EQ_ALWAYS_TRUE) (EQ_ALWAYS_TRUE) (EQ_ALWAYS_TRUE) (EQ_ALWAYS_TRUE) Eq: equals() method defined that doesn't override Eq: equals() method defined that doesn't override Eq: equals() method defined that doesn't override Eq: equals() method defined that doesn't override Object.equals(Object) (EQ_OTObject.equals(Object) (EQ_OTObject.equals(Object) (EQ_OTObject.equals(Object) (EQ_OTHER_USE_OBJECT) HER_USE_OBJECT) HER_USE_OBJECT) HER_USE_OBJECT) Eq: equals() method defined that doesn't override Eq: equals() method defined that doesn't override Eq: equals() method defined that doesn't override Eq: equals() method defined that doesn't override equalsequalsequalsequals

(Object) (EQ_OTHER_NO_OBJECT) (Object) (EQ_OTHER_NO_OBJECT) (Object) (EQ_OTHER_NO_OBJECT) (Object) (EQ_OTHER_NO_OBJECT) HE: Signature declares use of unhashable class in HE: Signature declares use of unhashable class in HE: Signature declares use of unhashable class in HE: Signature declares use of unhashable class in hashed construct hashed construct hashed construct hashed construct (HE_SIGNATURE_DECLA(HE_SIGNATURE_DECLA(HE_SIGNATURE_DECLA(HE_SIGNATURE_DECLARES_HASHING_OF_UNHASRES_HASHING_OF_UNHASRES_HASHING_OF_UNHASRES_HASHING_OF_UNHASHABLE_CLASS) HABLE_CLASS) HABLE_CLASS) HABLE_CLASS)

Critico Critica Evitar el manejo de array en las llamadas a métodos, de igual forma, evitar la devolución directa de objetos de tipo array.

Incluir en los condicionales en los que intervenga el método “equal” la comprobación de si el objeto afectado es null.

Page 24: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 24 de 56

IIIInnnnddddicaicaicaicaddddores ores ores ores dddde revie revie revie revissssión ión ión ión dddde código estáticoe código estáticoe código estáticoe código estático

CódigoCódigoCódigoCódigo DDDDeeeesssscricricricrippppciónciónciónción ddddelelelel IIIInnnnddddicicicicaaaaddddorororor ¿Cu¿Cu¿Cu¿Cummmmpppplllle?e?e?e? OOOObbbbsssseeeervrvrvrvaaaacccciiiioooonnnneseseses SeveriSeveriSeveriSeveriddddaaaadddd PrioridadPrioridadPrioridadPrioridad JustificaciónJustificaciónJustificaciónJustificación

ACEACEACEACE----27272727 Comprobar que se construyen los métodos constructores de manera que solo hagan lo necesario y no se excedan en la funcionalidad

Esta tarea es compleja, hay que determinar la complejidad de los constructores Se puede usar la regla de PMD UnnecessaryConstructorUnnecessaryConstructorUnnecessaryConstructorUnnecessaryConstructor que nos indica cuando un constructor no es necesario y la regla ConstructorCallsOverridableMethodConstructorCallsOverridableMethodConstructorCallsOverridableMethodConstructorCallsOverridableMethod

Critico Mayor Eliminar los constructores que no sean necesarios

ACEACEACEACE----32323232 Hacer uso del javadoc para realizar comentarios en los objetos JAVA

Se pueden comprobar de forma automática que se han realizado los comentarios para crear el Javadoc de los métodos, clases, paquetes, variables. Seleccionar las reglas de CheckStyle . JavadocTypeJavadocTypeJavadocTypeJavadocType JavadocMethodJavadocMethodJavadocMethodJavadocMethod JavadocVariableJavadocVariableJavadocVariableJavadocVariable Y harán la comprobación de forma automática.

Grave Mayor Documentar los tipos, métodos y variables que no dispongan de javadoc

Page 25: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 25 de 56

4444 CONCLUSIONESCONCLUSIONESCONCLUSIONESCONCLUSIONES

Finalmente, tras describir los incumplimientos detectados en la aplicación en relación a la auditoría de código estático realizada, y la resolución propuesta para cada uno de ellos, se identifican las tareas a realizar por el equipo de desarrollo del proyecto, si bien estas tareas no implican un alto impacto en la calidad del código ya que la inmensa mayoría de los incumplimientos se basan en reglas de estilo asociadas a la programación.

4.14.14.14.1 Tareas asociadas a indicadores cuya resolución es bloqueante:Tareas asociadas a indicadores cuya resolución es bloqueante:Tareas asociadas a indicadores cuya resolución es bloqueante:Tareas asociadas a indicadores cuya resolución es bloqueante:

N/A

4.24.24.24.2 Tareas asociadas a indicadores cuya resolucTareas asociadas a indicadores cuya resolucTareas asociadas a indicadores cuya resolucTareas asociadas a indicadores cuya resolución es crítica:ión es crítica:ión es crítica:ión es crítica:

� Evitar el manejo de array en las llamadas a métodos, de igual forma, evitar la devolución directa de objetos de tipo array.

� Incluir en los condicionales en los que intervenga el método “equal” la comprobación de si el objeto afectado es null.

Indicadores:

� ACEACEACEACE----25 25 25 25 (* Se deben comprobar que no existan argumentos vacíos

* Evitar llamadas a dos referencias de diferentes tipos de clase sin subclases común.

* Evitar que la llamada siempre devuelva o falso o cierto.

* Comprobar las sobrescritura del método original para no introducir errores)

4.34.34.34.3 Tareas asociadas a indicadores cuya resolución es mayor:Tareas asociadas a indicadores cuya resolución es mayor:Tareas asociadas a indicadores cuya resolución es mayor:Tareas asociadas a indicadores cuya resolución es mayor:

� Los métodos que excedan las 100 líneas de código deberán ser modularizados en la medida de lo posible

Indicadores:

� ACEACEACEACE----01 01 01 01 (Tamaño de los métodos . Comprobar que no existen métodos con un tamaño excesivo)

� Cambiar el nombre de los métodos para que cumpla con el formato establecido

Indicadores:

� ACEACEACEACE----07 07 07 07 (Comprobar que la nomenclatura de los métodos de una aplicación cumple con lo establecido)

� Modularizar los métodos que sean excesivamente largos permitiendo realizar la funcionalidad del método en sub-tareas

Indicadores:

� ACEACEACEACE----20 20 20 20 (Comprobar que no se dota de excesiva funcionalidad a un método)

Page 26: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 26 de 56

� Evitar en la medida de lo posible la inicialización de parámetros a null, intentar inicializar los parámetros con objetos vacíos

Indicadores:

� ACEACEACEACE----22 22 22 22 (Comprobar que no se hacen auto asignaciones de variables o parámetros Tales asignaciones son inútiles, y puede indicar un error de lógica o un error tipográfico)

� Comprobar que los parámetros que se establecen a null ya no se usan más desde su asignación

Indicadores:

� ACEACEACEACE----23 23 23 23 (Comprobar que se asignan las referencias que ya no se usan mas)

� Eliminar los constructores que no sean necesarios

Indicadores:

� ACEACEACEACE----27 27 27 27 (Comprobar que se construyen los métodos constructores de manera que solo hagan lo necesario y no se excedan en la funcionalidad)

� Documentar los tipos, métodos y variables que no dispongan de javadoc

Indicadores:

� ACEACEACEACE----32 32 32 32 (Hacer uso del javadoc para realizar comentarios en los objetos JAVA)

4.44.44.44.4 Tareas asociadas a indicadores cuya resolución es menor:Tareas asociadas a indicadores cuya resolución es menor:Tareas asociadas a indicadores cuya resolución es menor:Tareas asociadas a indicadores cuya resolución es menor:

N/A

4.54.54.54.5 Tareas asociadas a indicadores cuya resolución es Tareas asociadas a indicadores cuya resolución es Tareas asociadas a indicadores cuya resolución es Tareas asociadas a indicadores cuya resolución es informacióninformacióninformacióninformación::::

� Evitar todas las condiciones en las que se compare con números.

Indicadores:

� ACEACEACEACE----03 03 03 03 (Eliminar el uso de los números mágicos. Comprobar que no se incluyen números para realizar comprobaciones y condicionales en el código)

� Adecuar el código fuente para que se adapte a las reglas definidas para el tratamiento de los espacios en blanco.

Indicadores:

� ACEACEACEACE----00004 4 4 4 (Comprobar el buen uso de los espacios en blanco)

� Modularizar las clases que excedan el tamaño mediante la creación de nuevas clases que permitan agrupar los métodos y parámetros por funcionalidad.

Indicadores:

� ACEACEACEACE----11 11 11 11 (Comprobar la estructura del fichero y el tamaño del código)

Page 27: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 27 de 56

� Revisar el código fuente para posicionar las llaves en la línea de código adecuada.

Indicadores:

� ACEACEACEACE----12 12 12 12 (Comprobar el correcto uso de las llaves)

� Revisar el código para eliminar las líneas en blanco que no cumplan con las reglas definidas.

Indicadores:

� ACEACEACEACE----13 13 13 13 (Comprobar el formato del código con respecto al uso de las líneas en blanco)

� Revisar el código para corregir los espacios en blanco que no cumplan con las reglas definidas.

Indicadores:

� ACEACEACEACE----14 14 14 14 (Comprobar el formato del código con respecto al uso del espacio en blanco)

� Comprobar que se realiza un buen uso de la herencia en la programación.

Indicadores:

� ACEACEACEACE----17 17 17 17 (Revisar que los métodos override están completamente justificados)

Debido al elevado porcentaje de cumplimiento dDebido al elevado porcentaje de cumplimiento dDebido al elevado porcentaje de cumplimiento dDebido al elevado porcentaje de cumplimiento de las reglas de código e indicadores establecidos (superior al 9e las reglas de código e indicadores establecidos (superior al 9e las reglas de código e indicadores establecidos (superior al 9e las reglas de código e indicadores establecidos (superior al 99999%), no se %), no se %), no se %), no se estima conveniente la realización de ninguna actuación al respecto, ya que los resultados obtenidos certifican la excelente estima conveniente la realización de ninguna actuación al respecto, ya que los resultados obtenidos certifican la excelente estima conveniente la realización de ninguna actuación al respecto, ya que los resultados obtenidos certifican la excelente estima conveniente la realización de ninguna actuación al respecto, ya que los resultados obtenidos certifican la excelente calidad del código fuente del sistema.calidad del código fuente del sistema.calidad del código fuente del sistema.calidad del código fuente del sistema.

En los anexos I yEn los anexos I yEn los anexos I yEn los anexos I y II se detallan los resultados obtenidos por la aplicación Sonar, utilizada para elaborar el presente II se detallan los resultados obtenidos por la aplicación Sonar, utilizada para elaborar el presente II se detallan los resultados obtenidos por la aplicación Sonar, utilizada para elaborar el presente II se detallan los resultados obtenidos por la aplicación Sonar, utilizada para elaborar el presente documento.documento.documento.documento.

Page 28: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 28 de 56

5555 GLOSARIOGLOSARIOGLOSARIOGLOSARIO

TérminoTérminoTérminoTérmino DescripciónDescripciónDescripciónDescripción

VEA Ventanilla Electrónica de la Administración

AH Arquetipo horizontal

MADEJA Marco de desarrollo de la Junta de Andalucía

Page 29: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 29 de 56

6666 BIBLIOGRAFÍA Y REFERENCIASBIBLIOGRAFÍA Y REFERENCIASBIBLIOGRAFÍA Y REFERENCIASBIBLIOGRAFÍA Y REFERENCIAS

ReferenciaReferenciaReferenciaReferencia TítuloTítuloTítuloTítulo CódigoCódigoCódigoCódigo

http://docs.codehaus.org/display/SONAR/Rules+Compliance+Index

Índice de cumplimiento de normas RCI

Page 30: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 30 de 56

7777 ANEXOANEXOANEXOANEXO IIII: Resultados SONAR : Resultados SONAR : Resultados SONAR : Resultados SONAR –––– VEA.VEA.VEA.VEA.

7.17.17.17.1 Report OverviewReport OverviewReport OverviewReport Overview

Static Analysis

Lines of code

79,911 122 packages

817 classes

5,372 methods

Comments

35.1% 43,308

comment lines

Complexity

2.4 15.7 /class

12,846 decision points

5.0% duplicated lines

Dynamic Analysis

Code CoverageCode CoverageCode CoverageCode Coverage

0.0%0.0%0.0%0.0%

0 tests0 tests0 tests0 tests

Test Success Test Success Test Success Test Success N/AN/AN/AN/A

N/A failuresN/A failuresN/A failuresN/A failures

N/A errorsN/A errorsN/A errorsN/A errors

Coding Rules Violations

Rules ComplianceRules ComplianceRules ComplianceRules Compliance

99.4%

7.27.27.27.2 Violations AnalysisViolations AnalysisViolations AnalysisViolations Analysis

ViolationsViolationsViolationsViolations

7,193

Most violated rulesMost violated rulesMost violated rulesMost violated rules

Design For Extension 6,780

Declaration Order 137

Local variable could be final 70

No Whitespace After 44

Null Assignment 40

Page 31: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 31 de 56

Most violatedMost violatedMost violatedMost violated filesfilesfilesfiles

EntregasConvocatoriaPageBean 179

EntregasPageBean 172

ConvocatoriasPageBean 160

MapeadorObjetosDozer 123

ConfiguracionesPageBean 122

Most complex filesMost complex filesMost complex filesMost complex files

MapeadorObjetosDozer 646

RealizEntregaPageBean 336

ServicioWebContinuarEntregaImplS

erviceStub

312

TrewaEntregasBOImpl 266

EntregaBOImpl 225

Most duplicated filesMost duplicated filesMost duplicated filesMost duplicated files

ServicioWebContinuarEntregaImplS

erviceStub

1,476

MapeadorObjetosDozer 581

TareaEntregaBorrarAHBO 396

EntregaDTO 374

EntregaSimpleDTO 366

Page 32: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 32 de 56

7.37.37.37.3 Violations DetailsViolations DetailsViolations DetailsViolations Details

Rule Design For ExtensionDesign For ExtensionDesign For ExtensionDesign For Extension

File Line

CondicionVisualSiempreVisibleBOImpl 20

PerfilesAHBOImpl 249, 240, 231, 222,

213, 204, 195, 186, 59

FirmaServidorHerramienta 23

CifradoHerramienta 161, 131, 102, 86

ServicioSolrImpl 212, 203, 194, 186, 175

Rule LLLLocal variable could be finalocal variable could be finalocal variable could be finalocal variable could be final

File Line

MensajeIndexador 109

AbstractDAOImpl 251, 249, 246, 238, 236, 211, 209, 197, 196, 179, 177, 175, 154, 152, 150, 136,

123, 113, 92

Rule Declaration OrderDeclaration OrderDeclaration OrderDeclaration Order

File Line

DominioDTO 77

ConfiguracionBOImpl 91

DocsApvolDTO 61

DefinicionDocumentoAdjuntoVO 57

DefinicionDocumentoAdjuntoDTO 103

DominiosBOImpl 39, 41

ResumenImportacionVO 23, 28, 33, 38

EntregasBOImpl 128

ConstantesNumericas 18, 20, 22, 24, 26, 28,

30, 32

Page 33: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 33 de 56

Rule Null AssignmentNull AssignmentNull AssignmentNull Assignment

File Line

PoderesUtils 136, 167

UtilidadesPdf 341

NoticiasBOImpl 40

ProcedimientoDetallePageBean 169

InfoPublicaPageBean 430, 448, 451

BusqAvanzadaExpPageBean 212, 245

EnvioIncidenciasPageBean 211

ConversorBooleanHibernate 58

ProcedimientosPageBean 441, 455, 466, 947,

950, 1009, 1035, 1036

Rule Whitespace AroundWhitespace AroundWhitespace AroundWhitespace Around

File Line

AlegacionDTO 71, 64

ConstantesAlegaciones 52, 50

EntregasConvocatoriaPageBean 3144

ServicioWebContinuarEntregaImplServiceStub 2005

TemaAyudaDTO 74

EncriptadorBOImpl 90, 90

UtilidadesVista 156, 156, 156, 156

EntregasBOImpl 603

ServicioWebObtenerEntregaImpl 221

Rule No Whitespace AfterNo Whitespace AfterNo Whitespace AfterNo Whitespace After

File Line

PoderesUtils 415

UtilidadesPdf 651, 736, 863, 903

ErroresEntregaBOImpl 43

EntregasBOImpl 482

DefEntregasTipoBOImpl 146

MigracionesBOImpl 287, 298, 365, 500, 510, 557, 676, 762,

956, 1093, 1346, 1443

Page 34: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 34 de 56

Rule Unnecessary constructorUnnecessary constructorUnnecessary constructorUnnecessary constructor

File Line

PerfilTrewaProcedimientoVO 32

cifrarFirmaTransaccion 21

DominioDTO 82

DocsApvolDTO 66

DefinicionDocumentoAdjuntoDTO 103

MensajesVO 46

PagoDTO 149

ResolucionVO 77

PropuestaResolucionVO 79

TipoSolicitudDTO 73

GrupoProcesosVO 38

ContadorVO 30

EntregaDTO 170

ExpedienteDTO 80

ExpedienteVO 55

GrupoProcesosDTO 54

ResolucionDTO 80

ProcedimientoVO 85

DominioVO 60

DefinicionFormularioDTO 79

Page 35: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 35 de 56

7.47.47.47.4 Resultados generales sobre el proyecto VEAResultados generales sobre el proyecto VEAResultados generales sobre el proyecto VEAResultados generales sobre el proyecto VEA

7.4.17.4.17.4.17.4.1 Esquema de resultadosEsquema de resultadosEsquema de resultadosEsquema de resultados

Page 36: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 36 de 56

7.4.27.4.27.4.27.4.2 Componentes específicosComponentes específicosComponentes específicosComponentes específicos

7.57.57.57.5 Resultados específicos sobre los componentes del proyecto VEAResultados específicos sobre los componentes del proyecto VEAResultados específicos sobre los componentes del proyecto VEAResultados específicos sobre los componentes del proyecto VEA

7.5.17.5.17.5.17.5.1 ahahahah----serviciosserviciosserviciosservicios----clienteclienteclientecliente

7.5.1.17.5.1.17.5.1.17.5.1.1 EsquemaEsquemaEsquemaEsquema de resultadosde resultadosde resultadosde resultados

Page 37: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 37 de 56

7.5.1.27.5.1.27.5.1.27.5.1.2 Componentes específicosComponentes específicosComponentes específicosComponentes específicos

7.5.27.5.27.5.27.5.2 veaveaveavea----serviciosserviciosserviciosservicios----clienteclienteclientecliente

7.5.2.17.5.2.17.5.2.17.5.2.1 Esquema de resultadosEsquema de resultadosEsquema de resultadosEsquema de resultados

Page 38: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 38 de 56

7.5.2.27.5.2.27.5.2.27.5.2.2 Componentes específicosComponentes específicosComponentes específicosComponentes específicos

7.5.37.5.37.5.37.5.3 veaveaveavea----servservservserviciosiciosiciosicios

7.5.3.17.5.3.17.5.3.17.5.3.1 Esquema de resultadosEsquema de resultadosEsquema de resultadosEsquema de resultados

Page 39: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 39 de 56

7.5.3.27.5.3.27.5.3.27.5.3.2 Componentes específicosComponentes específicosComponentes específicosComponentes específicos

7.5.47.5.47.5.47.5.4 veaveaveavea----serviciosserviciosserviciosservicios----ccccoreoreoreore

7.5.4.17.5.4.17.5.4.17.5.4.1 Esquema de resultadosEsquema de resultadosEsquema de resultadosEsquema de resultados

Page 40: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 40 de 56

7.5.4.27.5.4.27.5.4.27.5.4.2 Componentes específicosComponentes específicosComponentes específicosComponentes específicos

7.5.57.5.57.5.57.5.5 veaveaveavea----web web web web

7.5.5.17.5.5.17.5.5.17.5.5.1 Esquema de resultadosEsquema de resultadosEsquema de resultadosEsquema de resultados

Page 41: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 41 de 56

7.5.5.27.5.5.27.5.5.27.5.5.2 Componentes específicosComponentes específicosComponentes específicosComponentes específicos

Page 42: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 42 de 56

7.5.67.5.67.5.67.5.6 veaveaveavea----consola consola consola consola

7.5.6.17.5.6.17.5.6.17.5.6.1 Esquema de resultadosEsquema de resultadosEsquema de resultadosEsquema de resultados

7.5.6.27.5.6.27.5.6.27.5.6.2 Componentes específicosComponentes específicosComponentes específicosComponentes específicos

Page 43: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 43 de 56

7.5.77.5.77.5.77.5.7 ahahahah----serviciosserviciosserviciosservicios----ccccoreoreoreore

7.5.7.17.5.7.17.5.7.17.5.7.1 Esquema de resultadosEsquema de resultadosEsquema de resultadosEsquema de resultados

Page 44: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 44 de 56

7.5.7.27.5.7.27.5.7.27.5.7.2 Componentes específicosComponentes específicosComponentes específicosComponentes específicos

Page 45: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 45 de 56

7.5.87.5.87.5.87.5.8 ahahahah----serviciosserviciosserviciosservicios----locallocallocallocal----corecorecorecore

7.5.8.17.5.8.17.5.8.17.5.8.1 Esquema de resultadosEsquema de resultadosEsquema de resultadosEsquema de resultados

7.5.8.27.5.8.27.5.8.27.5.8.2 Componentes específicosComponentes específicosComponentes específicosComponentes específicos

Page 46: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 46 de 56

7.5.97.5.97.5.97.5.9 ahahahah----webwebwebweb----ccccoreoreoreore

7.5.9.17.5.9.17.5.9.17.5.9.1 Esquema de resultadosEsquema de resultadosEsquema de resultadosEsquema de resultados

7.5.9.27.5.9.27.5.9.27.5.9.2 Componentes específicosComponentes específicosComponentes específicosComponentes específicos

Page 47: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 47 de 56

8888 ANEXOANEXOANEXOANEXO IIIIIIII: Resultados SONAR : Resultados SONAR : Resultados SONAR : Resultados SONAR –––– Arquetipo horizonArquetipo horizonArquetipo horizonArquetipo horizontal.tal.tal.tal.

8.18.18.18.1 Report OverviewReport OverviewReport OverviewReport Overview

Static Analysis

Lines of code

11,543 15 packages

72 classes

613 methods

22.8% duplicated lines

Comments

27.6% 4,404

comment

lines

Complexity

3.1 26.5 /class

1,908 decision points

Dynamic Analysis

Code CoverageCode CoverageCode CoverageCode Coverage

0.0%0.0%0.0%0.0%

0 tests0 tests0 tests0 tests

Test Success Test Success Test Success Test Success N/AN/AN/AN/A

N/A failuresN/A failuresN/A failuresN/A failures

N/A errorsN/A errorsN/A errorsN/A errors

Coding Rules Violations

Rules ComplianceRules ComplianceRules ComplianceRules Compliance

99.5%

8.28.28.28.2 Violations AnalysisViolations AnalysisViolations AnalysisViolations Analysis

ViolationsViolationsViolationsViolations

391

Most vMost vMost vMost violated rulesiolated rulesiolated rulesiolated rules

Design For Extension 346

Whitespace Around 6

Excessive Method Length 9

Declaration Order 18

Excessive Parameter List 3

Page 48: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 48 de 56

Most violated filesMost violated filesMost violated filesMost violated files

TrewaEntregasAHBOImpl 33

ProcesarEntregaImplServiceStub 26

ConfiguracionAVBOImpl 26

GeneradorNumeradorImplServiceStub 24

FormularioPilotoPageBean 24

Most complex filesMost complex filesMost complex filesMost complex files

EntregaAHBOImpl 374

TrewaEntregasAHBOImpl 294

AltaExpedienteThread 224

GeneradorNumeradorImplServiceSt ub 206

ProcesarEntregaImplServiceStub 206

Most duplicated filesMost duplicated filesMost duplicated filesMost duplicated files

GeneradorNumeradorImplServiceSt ub 1,349

ProcesarEntregaImplServiceStub 1,348

AltaExpedienteThread 900

EntregaAHBOImpl 790

TrewaEntregasAHBOImpl 145

Page 49: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 49 de 56

8.38.38.38.3 Violations DetailsViolations DetailsViolations DetailsViolations Details

Rule Design For ExtensionDesign For ExtensionDesign For ExtensionDesign For Extension

File Line

ValidarEntregaBOImpl 83, 67

RecargaContexto 64, 47, 36

FormularioPilotoPageBean 646, 636, 627, 616,

606, 595, 585, 574,

564, 554, 545, 536,

527, 518, 508

Rule Whitespace AroundWhitespace AroundWhitespace AroundWhitespace Around

File Line

TrewaEntregasAHBOImpl 562, 562, 562

ProcesarEntregaImplServiceCallbackHandler 36, 29, 16

Rule Excessive Method LengthExcessive Method LengthExcessive Method LengthExcessive Method Length

File Line

AltaExpedienteThread 1609

EntregaAHBOImpl 305

GeneradorNumeradorImplServiceStub 194, 326

ProcesarEntregaImplServiceStub 192, 324

IndexacionAHBOImpl 60

TrewaEntregasAHBOImpl 1146

FormularioPilotoPageBean 305

Rule Declaration OrderDeclaration OrderDeclaration OrderDeclaration Order

File Line

ProcesamientoXML 36

GeneradorNumeradorImplServiceStub 102, 120, 146, 161,

177, 559, 1190

PieBOImpl 56

ProcesarEntregaImplServiceStub 34, 100, 118, 144, 160,

175, 506, 588, 1189

Page 50: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 50 de 56

Rule Excessive Parameter ListExcessive Parameter ListExcessive Parameter ListExcessive Parameter List

File Line

EntregaAHBOImpl 2413, 2479

AltaExpedienteThread 1422

Rule Magic NumberMagic NumberMagic NumberMagic Number

File Line

GeneradorNumeradorImplServiceStub 47

ProcesarEntregaImplServiceStub 43

Rule Security Security Security Security ---- Array is stored directlyArray is stored directlyArray is stored directlyArray is stored directly

File Line

ProcesamientoBBDD 951

VolcarRecibiThread 160

Rule Security Security Security Security ---- Method returns internal arrayMethod returns internal arrayMethod returns internal arrayMethod returns internal array

File Line

ProcesamientoBBDD 946

Rule Null AsNull AsNull AsNull Assignmentsignmentsignmentsignment

File Line

TrewaEntregasAHBOImpl 1958

Page 51: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 51 de 56

8.48.48.48.4 Resultados generales sobre el proyecto AHResultados generales sobre el proyecto AHResultados generales sobre el proyecto AHResultados generales sobre el proyecto AH

8.4.18.4.18.4.18.4.1 Esquema de resultadosEsquema de resultadosEsquema de resultadosEsquema de resultados

Page 52: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 52 de 56

8.4.28.4.28.4.28.4.2 Componentes específicosComponentes específicosComponentes específicosComponentes específicos

Page 53: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 53 de 56

8.58.58.58.5 Resultados específicos sobre los componentes del proyecto AHResultados específicos sobre los componentes del proyecto AHResultados específicos sobre los componentes del proyecto AHResultados específicos sobre los componentes del proyecto AH

8.5.18.5.18.5.18.5.1 ahahahah----serviciosserviciosserviciosservicios

8.5.1.18.5.1.18.5.1.18.5.1.1 Esquema de resultadosEsquema de resultadosEsquema de resultadosEsquema de resultados

Page 54: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 54 de 56

8.5.1.28.5.1.28.5.1.28.5.1.2 Componentes específicosComponentes específicosComponentes específicosComponentes específicos

8.5.28.5.28.5.28.5.2 ahahahah----webwebwebweb

8.5.2.18.5.2.18.5.2.18.5.2.1 Esquema de resultadosEsquema de resultadosEsquema de resultadosEsquema de resultados

Page 55: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 55 de 56

8.5.2.28.5.2.28.5.2.28.5.2.2 Componentes específicosComponentes específicosComponentes específicosComponentes específicos

8.5.38.5.38.5.38.5.3 ahahahah----serviciosserviciosserviciosservicios----clienteclienteclientecliente----locallocallocallocal

8.5.3.18.5.3.18.5.3.18.5.3.1 Esquema de resultadosEsquema de resultadosEsquema de resultadosEsquema de resultados

Page 56: Análisis de código estático

Consejería de Hacienda y Administración Pública

D.G. de Tecnologías para Hacienda y la Administración Electrónica

Ventanilla Electrónica

Análisis de código estático

VEA200E_OTR_Análisis de código estático_v01r00 Página 56 de 56

8.5.3.28.5.3.28.5.3.28.5.3.2 CCCComponentes específicosomponentes específicosomponentes específicosomponentes específicos