-
Notifications
You must be signed in to change notification settings - Fork 1
Calidad
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.
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.
| 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.
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.

Solución

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

Solución

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

Solución

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.

Solución

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

Solución

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

Solución

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

Solución

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

Solución
- 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 ({}).

Solución

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

Solución

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

Solución

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

Solución

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

Solución

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

Solución

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

Solución

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

Solución

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

Solución

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

Solución

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

Solución

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

Solución

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

Los errores en la parte de adaptabilidad han sido los siguientes:
- Refactor this method to not always return the same value:

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

Solución

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

Solución

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

Solución

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

Solución

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

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

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

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

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

Solución:

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

Solución:

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

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

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

Solución:

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

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

Solución:

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

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