Grupo 2
| Nombre y Apellidos | Correo URJC | Usuario GitHub |
|---|---|---|
| Marcos García García | m.garciaga.2022@alumnos.urjc.es | marcosgrc |
| Adrián Muñoz Serrano | a.munozse.2022@alumnos.urjc.es | adri04ms |
| Jorge Padilla Rodríguez | j.padilla.2021@alumnos.urjc.es | Jorge-PR |
| Naroa Martín Simón | n.martins.2022@alumnos.urjc.es | NaroaMS04 |
| Alberto Mayoral Gómez | a.mayoral.2022@alumnos.urjc.es | Albermg27 |
| Icíar Moreno López | i.morenolo.2022@alumnos.urjc.es | IciarML |
| Laura Pineda Ballesteros | l.pineda.2022@alumnos.urjc.es | lauraxpb |
Para esta práctica he realizado las siguientes tareas: organizar la plantilla inicial del documento ANALISIS_CALIDAD.md, añadir el code smell 1 (Literales duplicados) detectado por SonarCloud y añadir dos code smells detectados manualmente, el 1 (Duplicación de código en métodos deposit) y el 4 (Método demasiado largo).
| Nº | Commits |
|---|---|
| 1 | Plantilla de la memoria .md |
| 2 | Bad Smell: Duplicación de código en métodos deposit |
| 3 | Bad Smells: Literales duplicados y Método demasiado largo |
Para esta práctica he realizado las siguientes tareas: he identificado manualmente dos code smells en el proyecto; Data Clumps y Magic Numbers, ambos localizados en la clase AccountService.java. Además, he añadido el code smell 2 (Variable local no utilizada) y el code smell 3 (Comparación de Strings con operador de identidad) detectados por SonarCloud.
| Nº | Commits |
|---|---|
| 1 | Bad Smells: Data Clumps y Magic Numbers |
| 2 | Bad Smells SonarCloud: Variable local no utilizada y Comparación de Strings con operador de identidad |
Durante esta práctica he realizado la detección manual de los siguientes code smells: bad smell 11, referente a la existencia de código muerto dentro del método deposit; bad smell 12, que describe código duplicado o redundante dentro del método deposit; bad smell 13, que muestra cómo aparece código duplicado (la validación de una variable) a lo largo de los métodos deposit, withdraw y transfer; bad smell 14, donde vemos que el método rm tiene un nombre poco comunicativo.
| Nº | Commits |
|---|---|
| 1 | Bad smell 11: código muerto dentro del método deposit |
| 2 | Bad smells 12 y 13: código duplicado en deposit y en varios métodos |
| 3 | Bad smell 14: nombre de método poco comunicativo |
En esta práctica me he encargado de revisar a mano la clase AccountService.java para encontrar fallos de diseño que SonarCloud no detecta. He analizado dos problemas: Primitive Obsession, que trata sobre cómo el uso excesivo de tipos básicos (como double o String) para el dinero o las cuentas puede causar errores; y Feature Envy, donde he explicado que el servicio está "cotilleando" demasiado el saldo de las cuentas en lugar de dejar que la propia clase Account gestione su lógica interna.
| Nº | Commits |
|---|---|
| 1 | Bad smells 8 and 9 added: Primitive Obsession y Feature Envy |
En esta práctica he realizado una revisión manual del código para identificar problemas de calidad. Como resultado, detecté dos code smells: Mysterious Names / Non-Descriptive Names, relacionado con el uso de nombres poco descriptivos que dificultan la comprensión del código, y Large Class, que indica que una clase tiene demasiadas responsabilidades, afectando a la mantenibilidad y organización del sistema.
| Nº | Commits |
|---|---|
| 1 | Bad Smell 2: Mysterious Names / Non-Descriptive Names |
| 2 | Bad Smell 3: Large Class |
En esta práctica me he encargado de combinar el análisis automático de SonarCloud con una inspección manual de la clase AccountService.java. Mi enfoque se ha centrado en detectar problemas de acoplamiento y falta de polimorfismo que degradan la mantenibilidad del sistema. He analizado en profundidad dos problemas críticos: el uso de Switch Statements en el sistema de avisos, que obligaría a modificar el servicio cada vez que se añada un canal de comunicación, y la Intimidad Inapropiada en la comparación de cuentas, donde el servicio manipula datos internos de las entidades rompiendo el encapsulamiento.
| Nº | Commits |
|---|---|
| 1 | Bad Smell - Switch Statement |
| 2 | Bad Smell - Inappropriate Intimacy |
En esta práctica he añadido dos nuevos bad smells en la memoria de análisis: Generic Exception Catching (captura genérica de excepciones en controladores) y Temporary Stub / Incomplete Business Logic (algoritmo de aprobación de préstamos con retorno fijo de aprobado).
| Nº | Commits |
|---|---|
| 1 | Bad smells 15 y 16 añadidos en ANALISIS_CALIDAD.md |
Para esta práctica he realizado las siguientes tareas: crear la estructura inicial de AccountServiceTest, los tests del método deposit y los tests para el método createAccount. También he refactorizado los bad smells: literales duplicados, código duplicado (deposit) y método grande (transfer), y añadí la explicación de la refactorización en el fichero ANALISIS_CALIDAD. Finalmente, he creado el test E2E que prueba la transferencia entre cuentas propias, además de crear la estructura inicial de la clase TransferE2ETest.
Para esta práctica he realizado las siguientes tareas: implementación de los tests unitarios getAccount y getUserAccounts en AccountServiceTest. He refactorizado los bad smells en AccountService: eliminación de la variable no utilizada seccondAccount, corrección de la comparación de Strings con .equals(), y extracción de límites numéricos (Magic Numbers) a constantes. Además, he validado la refactorización de sendNotification (Data Clump) y he creado el test E2E de transferencia entre cuentas de distintos usuarios.
En esta práctica he implementado los tests unitarios necesarios para cubrir la totalidad del código del método transfer, entre los que se encuentran los tests parametrizados transfer_invalidAmounts_throwsException, transfer_accountNotFound_throwsException, y transfer_validParametersAndSuccess_allNotificationScenarios, así como el resto de tests relacionados con este método. De la misma manera, he realizado las refactorizaciones necesarias para los Bad Smells 11, 12, 13 y 14, así como la explicación de estos en el fichero ANALISIS_CALIDAD.md. Posteriormente, he implementado la prueba automática de sistema que verifica que no se puede realizar una transferencia si la cantidad supera los 20.000€. Mencionar también la incorporación en el pom.xml del plugin de JACOCO necesario para comprobar la cobertura del código.
He implementado pruebas unitarias para los métodos de consulta de saldo y transacciones (getBalance y getTransactions), asegurando que la recuperación de datos sea precisa. En cuanto a la refactorización, he corregido los "bad smells" de Primitive Obsession y Feature Envy mediante el uso de Value Objects, mejorando la encapsulación y la robustez del modelo de dominio. Además, he ajustado las aserciones de los tests para adaptarlas a los nuevos parámetros definidos. Por último, he desarrollado una prueba de sistema (E2E) con Selenium que garantiza que el sistema bloquea correctamente cualquier intento de transferencia cuando la cuenta de origen y destino son la misma, protegiendo la integridad de la base de datos.
Para esta práctica he añadido nuevas pruebas unitarias y test E2E, además de participar en la refactorización de varios bad smells y en la documentación del análisis de calidad. En concreto, he desarrollado los tests unitarios del método rm(String accountNumber), he realizado la refactorización del bad smell Mysterious Names / Non-Descriptive Names, he actualizado la documentación del bad smell Large Class en el fichero ANALISIS_CALIDAD.md y he implementado una prueba E2E que verifica que no se puede realizar una transferencia si la cantidad es negativa.
He realizado las pruebas unitarias para asegurar que el proceso de sacar dinero funciona correctamente en todos los casos (método withdraw). He simplificado el sistema de notificaciones para que no haya código repetido y sea más fácil de mantener (Bad Smell Switch Statement). También he corregido la forma en la que las cuentas se comparan entre sí para mejorar la organización del código (Bad Smell Inappropriate Intimacy). Por último, he programado una prueba de sistema que verifica que el sistema bloquea las transferencias si el cliente no tiene dinero suficiente.
En esta práctica he ampliado la batería de pruebas E2E en TransferE2ETest, añadiendo el escenario que valida que no se puede transferir a una cuenta destino inexistente. Además, he ajustado el setup del test para limpiar también las notificaciones antes de cada ejecución, garantizando el aislamiento entre pruebas y evitando interferencias por datos residuales.
| Nº | Commits |
|---|---|
| 1 | [Test E2E: No se puede realizar una transferencia a una cuenta inexistente + ajuste de setup] (https://github.com/Albermg27/cs-2026-grupo-2/commit/d1c5f8f83b4c2cbc649ebba61be2f68198f9d5f2) |