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.
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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
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
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.
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.
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
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
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.
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.
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
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)
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)
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.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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