Skip to content

Calidad

Angel Luis Lara Martin edited this page Dec 11, 2024 · 4 revisions

En este apartado se detalla como hemos llevado a cabo el proceso de calidad del proyecto. Para ello, hemos usado SonarQube para pasar los controles de calidad requeridos. Los errores que ha detectado el programa fueron etiquetados como: Consistencia, Intencionabilidad, Adaptabilidad y Responsabilidad.

Metodología utilizada

Se realizaron análisis con Sonar integrado con github actions garantizando un control de calidad continuo en cada commit. Las ramas analizadas fueron en un principio únicamente develop, para después ampliar el análisis a las ramas de release y master con el objetivo de poder llevar un control adecuado durante el despliegue de las versiones.

Resumen

Tipo error Antes Después Mejora
Consistencia 61 0 100%
Intencionalidad 103 0 100%
Adaptabilidad 20 0 100%
Responsabilidad 0 0 100%
TOTAL 184 0 100%

Se consiguió una mejora del 100% respecto al código original.

Desglose de errores por secciones:

ERRORES DE CONSISTENCIA

Los errores en la parte de consistencia han sido los siguientes:

- Update this logger to use ".class": Este error nos dice que para inicializar el logger no se esta usando la interfaz LogoutSuccessHandler en vez de una clase concreta.

image

Solución

image

- Rename this field "IUBusqueda" to match the regular expression '^[a-z][a-zA-Z0-9]*$': ste error indica que el campo IUBusqueda en la clase GestorClientes no sigue la convención de nombres en Java.

image

Solución

image

** - Remove this unused import 'jakarta.servlet.ServletException'** - Remove this unused import 'jakarta.servlet.http.HttpSession': Estos tipos de errores de eliminar imports que no se usan han sido muy usuales en el codigo, por lo que pondremos un par de ejemplos, ya que son errores con soluciones muy simples.

image

Solución

image

ERRORES DE INTENCIONABILIDAD

Los errores en la parte de intencionabilidad han sido los siguientes:

- Remove the parentheses around the "requests" parameter: Este error simplemente nos pedia borrar unos parentesis que no hacian ninguna función y no eran necesarios.

image

Solución

image

- Remove this unnecessary import: same package classes are always implicitly imported. - Remove this unused import 'org.springframework.ui.Model': Estos dos errores son iguales que los del apartado de consistencia, sin imports que no se usan y hay que eliminarlos en el código.

image

Solución

image

- Remove this useless assignment to local variable "pedido": Este error nos indica que la variable "pedido" ha sido asignada pero no se usa en ningún lugar del código después de esta asignación.

image

Solución

image

- Remove usage of generic wildcard type: Este error nos dice que evitemos el uso del tipo genérico comodín (?) en el retorno del método.

image

Solución

image

- Format specifiers should be used instead of string concatenation: Este error nos indica que en vez de concatenar cadenas en las instrucciones de registro de log, deberíamos utilizar especificadores de formato ({}) proporcionados por el framework de logging.

image

Solución

image - Use the built-in formatting to construct this argument: Este error se produce porque utilizabamos la concatenación manual en vez de aprovechar las capacidades de formato del logger, como placeholders ({}).

image

Solución

image

- Add a call to "setComplete()" on the SessionStatus object in a "@RequestMapping" method: El error nos dice que falta una llamada a setComplete() en un controlador con anotación @SessionAttributes. Este método debe ser invocado cuando deseamos limpiar el atributo de sesión después de completar el flujo del controlador.

image

Solución

image

- Replace this lambda with method reference 'ItemMenu::getPrecio': Este error indica que la expresión lambda utilizada para calcular el precio total puede simplificarse utilizando una referencia de método. Esto es posible porque la función lambda simplemente llama a un método en cada elemento del flujo. Este tipo de errores también has sido abundantes.

image

Solución

image

- Replace this usage of 'Stream.collect(Collectors.toList())' with 'Stream.toList()' and ensure that the list is unmodified: Este error indica que podemos reemplazar el uso de Stream.collect(Collectors.toList()) por Stream.toList(). Este error también ha sido abundante en el código.

image

Solución

image

- Call "restauranteOpt.isPresent()" or "!restauranteOpt.isEmpty()" before accessing the value: Este error ocurre porque el código intenta acceder al valor dentro de un Optional sin verificar adecuadamente si está presente o no, lo que puede llevar a un NoSuchElementException.

image

Solución

image

- Use try-with-resources or close this "Statement" in a "finally" clause: Este error nos dice que debemos asegurarnos de cerrar el "Statement" después de usarlo.

image

Solución

image

- Change the visibility of this constructor to "protected": Este error nos dice que cambiemos el contructor de public a protected de un método.

image

Solución

image

- Replace this instanceof check and cast with 'instanceof UserDetails userdetails': Este error nos indica que usemos el patrón de coincidencia de tipo introducido en Jva 16, que nos permite combinar el operador "instanceof" con una declaración de variable.

image

Solución

image

- Remove this and every subsequent useless "eq(...)" invocation; pass the values directly: Este error nos dice que eliminemos las invocacciones ineccesarias a eq(), y que en su lugar, pasemos los valores directamente en la llamada a "verify".

image

Solución

image

- Immediately return this expression instead of assigning it to the temporary variable "usuario": Este error nos idica que retornemos directamente la nueva instancia de "Usuario" en lugar de asignarla a una variable temporal.

image

Solución

image

- Add a nested comment explaining why this method is empty, throw an UnsupportedOperationException or complete the implementation: Este error simplemente nos pedia que comentasemos el porque el método "contextLoads" está vacío.

image

Solución

image

- Remove this 'public' modifier: Este error nos decía de eliminar el modificador public porque en esta clase, porque al ser una clase prueba no necesitan ser públicas.

image

Solución

image

- "entityManager" is the name os a field in "EntidadDAO":

image

ERRORES DE ADAPTABILIDAD

Los errores en la parte de adaptabilidad han sido los siguientes:

- Refactor this method to not always return the same value:

image

- Rename "usuario" which hides the field declared at line 33: Este error también ha sido abundante en varios fragmentos a lo largo del código, y pide renombrar la variable local en el método correspondiente de cada variable.

image

Solución

image

- Replace this use of System.out by a logger: Este error nos pide reemplazar el System.out por un logger.

image

Solución

image

- Define a constant instead of duplicating this literal "repartidor" 4 times: Otro error muy común a lo largo del código ha sido este que nos pide definir diferentes constantes, en vez de duplicarlas a lo largo del código.

image

Solución

image

- Format specifiers should be used instead of string concatenation: Este error nos pide que en vez de concatenar cadenas, deberíamos utilizar especificadores de formato.

1

Solución

2

- Remove this unused import 'com.fasterxml.jackson.annotation.JsonBackReference': Este error nos pide eliminar la biblioteca com.fasterxml.jackson.annotation.JsonBackReference', porque no se esta utilizando.

image

- "entityManager" is the name of a field in "EntidadDAO": Este error nos pide cambiar el nombre de entityManager.

image

**- Remove this unused import 'es.uclm.delivery.dominio.entidades.CodigoPostal': Este error nos pide que eliminemos la biblioteca es.uclm.delivery.dominio.entidades.CodigoPostal, porque no se esta utilizando.

image

- Remove this unused import 'org.springframework.ui.Model': Este error no pide que eliminemos la biblioteca org.springframework.ui.Model, porque no se esta usando.

image

- Remove usage of generic wildcard type: Este error nos pide eliminar el tipo genérico comodín (?), para obtener mayor claridad.

image

Solución:

image

- Catch a list of specific exception subtypes instead: Este error nos pide que utilicemos excepciones mas especificas.

image

Solución:

image

- Remove this unused import 'jakarta.persistence.EntityManager': Este erro nos pide que eliminemos la biblioteca jakarta.persistence.EntityManager, porque no se esta utilizando.

image

- Remove this unused import 'jakarta.persistence.PersistenceContext': Este error nos pide que eliminemos la biblioteca jakarta.persistence.PersistenceContext, porque no se esta utilizando.

image

- Change the visibility of this constructor to "protected": Este erro nos pide que cambiemos la visibilidad public del constructor a protected.

image

Solución:

image

- Remove this unused import 'java.util.Optional': Este erro nos pide que eliminemos la biblioteca java.util.Optional, porque no se esta utilizando.

image

- Catch a list of specific exception subtypes instead: Este error nos pide que utilicemos excepciones mas especificas.

image

Solución:

image

- Remove this unused import 'java.util.stream.Collectors': Este error nos pide que eliminemos la biblioteca java.util.stream.Collectors, ya que no se esta usando.

image

ERRORES DE RESPONSABILIDAD

En cuánto a los errores de responsabilidad no hemos detectado ningún error en nuestro código.

Clone this wiki locally