Customer Management System

Análisis completo de calidad, refactorización y gestión de deuda técnica sobre un sistema empresarial legado — CSDT 2026.

Curso Estado Entregas Tests CI Sonar

Metrics Dashboard

Métricas consolidadas del análisis SonarQube Cloud sobre la línea base del proyecto

Security Rating
E

Vulnerabilidades identificadas y priorizadas — 4 issues de seguridad

Reliability Rating
D

14 issues de confiabilidad (2 high, 12 medium)

Maintainability
A

69 code smells — deuda manejable, ventana de oportunidad

Test Coverage
45%

100+ tests unitarios — de 0% inicial a ~45% final

Issues Totales
76

621 minutos de deuda técnica estimada

Security Hotspots
7

100% revisados manualmente durante el curso

Duplicación
0%

Sin copia masiva de bloques — señal positiva

Code Smells
35+

Identificados en análisis inicial — 6 categorías de severidad

Distribución de Issues

Concentración y severidad de la deuda técnica identificada

Por Severidad

🔴 Blocker2 (2.7%)
🟠 Critical10 (13.3%)
🟡 Major30 (40.0%)
⚪ Minor34 (44.0%)

Concentración por Archivo

AbstractController.java21 issues (28%)
AbstractService.java11 issues (14.7%)
RandomUtility.java7 issues (9.3%)
RandomController.java7 issues (9.3%)
SecurityConfig.java4 issues (5.3%)

52 de 76 issues (69.3%) concentrados en 5 archivos base

Bitácora del Curso

5 entregables completados entre febrero y marzo de 2026

Feb 12, 2026
Refactoring + Code Smells
✅ Completado
Feb 19, 2026
Clean Code + XP Practices
✅ Completado
Mar 15, 2026
Primera Entrega SonarQube
✅ Completado
Mar 22, 2026
DevEx + Productivity
✅ Completado
Mar 29, 2026
Deuda Técnica en CI/CD
✅ Completado

Project Deliverables

Análisis detallado por entregable del curso

Entregable 1 📅 Feb 12, 2026 Ver documento →
Refactoring + Code Smells
Identificación y análisis de más de 35 code smells distribuidos en 6 categorías de severidad. El nivel de deuda técnica fue clasificado como alto, con áreas críticas en seguridad, arquitectura y mantenibilidad.

🔴 Hallazgos Críticos de Seguridad

  • Credenciales hardcodeadas if(login.equals("admin")) — OWASP A07
  • Contraseñas en texto plano en application.properties — OWASP A02
  • CSRF deshabilitado http.csrf().disable() — OWASP A01
  • SQL dinámico sin sanitizar (@Lob query) — OWASP A03
  • WebSecurityConfigurerAdapter deprecated
  • main() con lógica BCrypt en clase de configuración

🟡 Refactorizaciones Propuestas

Extract Method Builder Pattern Introduce DTO Constructor Injection Replace Inheritance Extract Class Magic String → Constant Criteria API

🟠 Problemas de Arquitectura

God Class Field Injection Clases Vacías Violación SRP JSF + Spring Mezclados
Entregable 2 📅 Feb 19, 2026 Ver documento →
Clean Code + XP Practices
Evaluación de 11 características de Clean Code con evidencia directa del repositorio y mapeo de violaciones a principios SOLID. Propuesta de prácticas XP para transformar el proyecto.

Evaluación Clean Code

CaracterísticaEstado
Nombres significativos⚠️ Parcial
Funciones pequeñas (SRP)❌ No cumple
Clases cohesivas❌ No cumple
DRY / Sin duplicación❌ No cumple
KISS (sin reflexión)❌ No cumple
Seguridad en el código❌ Crítico
Pruebas automatizadas❌ No cumple

Principios SOLID Violados

SRPAbstractController cambia por múltiples razones
OCPNuevo gráfico requiere modificar if/else existentes
DIPControllers dependen de otros controllers

Prácticas XP Aplicadas

TDDCIRefactoring ContinuoPair ProgrammingSmall ReleasesCollective Ownership
Entregable 3 📅 Mar 15, 2026 Ver documento →
Modelos de Calidad — SonarQube (ISO/IEC 25010)
Análisis integral basado en ISO/IEC 25010 con evidencia de SonarQube Cloud. Diagnóstico de 6 dimensiones de calidad, identificación de hallazgos bloqueantes y plan de remediación priorizado.

Hallazgos Bloqueantes y Críticos

SeveridadArchivoHallazgo
🔴 BLOCKERSecurityConfig.java:39Contraseña comprometida
🔴 BLOCKERUnitService.java:20Campo entityManager oculta herencia
🟠 CRITICALMainRestController:20Entidad JPA expuesta en REST
🟠 CRITICALAbstractController:158new Random() por llamada
🟠 CRITICALAbstractController:27Campo list no transient

Incorporación de Tests

  • 0.0% cobertura inicial → ~45% final
  • 100+ tests unitarios con JUnit
  • MockMvc + Mockito para endpoints REST
  • JaCoCo: umbrales 55% líneas / 10% ramas

Deuda por Paquete

controller/39 issues (52%) · 265 min
service/14 issues (18.7%) · 156 min
util/7 issues (9.3%) · 36 min
model/5 issues (6.7%) · 10 min
configs/4 issues (5.3%) · 85 min

Plan de Remediación

1° Seguridad2° Arquitectura3° Testabilidad4° Higiene técnica
Entregable 4 📅 Mar 22, 2026 Ver documento →
DevEx + Developer Productivity (SPACE Framework)
Análisis de la experiencia del desarrollador bajo los marcos DevEx y SPACE. Se evaluaron feedback loops, carga cognitiva y estado de flujo, contrastados con métricas objetivas del repositorio.

Diagnóstico DevEx

DimensiónEstado
🔄 Feedback Loops⚠️ Mixto — CI activo, onboarding manual
🧠 Cognitive Load❌ Alto — JSF + Spring + SQL + reflexión
🌊 Flow State❌ Limitado — deuda interrumpe el foco

Framework SPACE

😊 SatisfactionNo medible — señales mixtas
🎯 PerformanceMejorando, con riesgo técnico
📈 ActivityPositiva en historial Git
🤝 CollaborationFuerte — PRs + docs centralizados
⚡ EfficiencyPor debajo — setup manual

Estado del Repo al Momento del Análisis

IndicadorValor
Archivos Java main67
Clases de test16
Archivos XHTML (UI)17
CI configurado✅ build.yml
JaCoCo umbrales55% / 10%

Oportunidades Priorizadas

  • Actualizar README con estado real del proyecto
  • Simplificar setup de base de datos
  • Separar REST controllers de backing beans JSF
  • Normalizar observabilidad con encuestas DevEx
Entregable 5 📅 Mar 29, 2026 Ver documento →
Deuda Técnica en Procesos — CI/CD con SonarQube + Trivy
Implementación de un pipeline de integración continua completo con GitHub Actions. Build automatizado, ejecución de pruebas unitarias, análisis estático con SonarQube Cloud y escaneo de seguridad con Trivy.

Pipeline Implementado

1
Setup JDK 8 + Maven cache
Entorno reproducible con caché de dependencias
2
mvn -B verify
Build + Unit Tests + JaCoCo en cada push/PR
3
SonarQube Analysis
Deuda técnica, calidad y hotspots automáticos
4
Trivy Scanner (fs scan)
CVEs en dependencias + secrets + misconfigs
5
Upload SARIF → GitHub Security
Resultados visibles en Security > Code Scanning

Resultados SonarQube en CI

Coverage45.2%
Duplicated lines0.0%
Issues totales76
Deuda estimada621 minutos
Security Hotspots7
MaintainabilityA (1.0)

¿Por qué Trivy?

Sin rate limits BD Aquasecurity ~5-10s escaneo Open Source Apache CVEs Java/Maven Secrets detection SARIF nativo

Hallazgos Clave del Proyecto

Los descubrimientos más importantes a lo largo de los 5 entregables

Lo que encontramos al inicio

35+ Code Smells Identificados

Distribuidos en seguridad, arquitectura, persistencia, código legacy y mantenibilidad. Nivel de deuda clasificado como alto.

Seguridad E — Vulnerabilidades Activas

Credenciales hardcodeadas, CSRF desactivado, CORS abierto, contraseñas en texto plano, entidades expuestas en REST.

0% de Cobertura — Sin Tests

El repositorio inicial no tenía carpeta src/test. Ningún test automatizado. Cualquier cambio tenía riesgo de regresión.

God Class AbstractController

28% de toda la deuda concentrada en un solo archivo. Mezclaba REST, JSF, reflexión, utilidades y estado mutable.

Lo que implementamos durante el curso

✅ 100+ Tests Unitarios

De 0% a ~45% de cobertura con JUnit, MockMvc y Mockito. JaCoCo configurado con umbrales mínimos como criterio de calidad.

✅ CI/CD con GitHub Actions

Build + tests + SonarQube + Trivy en cada push y pull request. Evidencia automática y auditable de calidad del código.

✅ 5 Documentos de Análisis

Deuda técnica, clean code, modelos de calidad, DevEx/SPACE y procesos CI/CD. Trazabilidad completa del trabajo académico.

✅ Propuestas de Refactorización

Catálogo con antes/después en código real: Builder, DTO, Constructor Injection, Extract Class, Criteria API y más.

Stack Tecnológico Analizado

Tecnologías del sistema base y herramientas de calidad incorporadas durante el curso

☕ Java 1.8
Lenguaje base
⚠️ Limitante de modernización
🍃 Spring Boot 1.5.7
Framework principal
⚠️ APIs deprecated identificadas
🔐 Spring Security
Autenticación
⚠️ Configuración insegura detectada
🖥️ JSF / PrimeFaces
Interfaz de usuario
⚠️ Mezcla con REST genera carga cognitiva
💾 Spring Data JPA
Persistencia
⚠️ Eager fetching excesivo
🗄️ MySQL / PostgreSQL
Base de datos
⚠️ Credenciales en texto plano
📦 Maven
Build & dependencias
✅ Pipeline configurado con JaCoCo
📊 SonarQube Cloud
Análisis de calidad
✅ Integrado en CI automático
⚙️ GitHub Actions
CI/CD
✅ Build + tests + análisis por PR
🔒 Trivy
Seguridad
✅ CVE scanning + secrets detection
🧪 JaCoCo
Cobertura
✅ Umbrales 55% líneas / 10% ramas
🧬 Mockito + MockMvc
Testing
✅ 100+ tests unitarios incorporados

Conclusión General

La Maintainability A no compensa una Security E, una Reliability D, 7 hotspots sin revisar y 0.0% de cobertura inicial. El proyecto es funcional pero inmaduro en calidad integral. La deuda está concentrada y recuperable — si se actúa en el orden correcto: primero seguridadestabilidad estructuraltestabilidadlimpieza técnica.

The Team

D
David Santiago Castro Sierra
@daviidc29
J
Jesus Alberto Jauregui Conde
@JesusJC15
J
Juan David Rodriguez Rodriguez
@Enigmus12
📋 Ver Reporte Completo del Proyecto →