Customer Management System
Análisis completo de calidad, refactorización y gestión de deuda técnica sobre un sistema empresarial legado — CSDT 2026.
Metrics Dashboard
Métricas consolidadas del análisis SonarQube Cloud sobre la línea base del proyecto
Vulnerabilidades identificadas y priorizadas — 4 issues de seguridad
14 issues de confiabilidad (2 high, 12 medium)
69 code smells — deuda manejable, ventana de oportunidad
100+ tests unitarios — de 0% inicial a ~45% final
621 minutos de deuda técnica estimada
100% revisados manualmente durante el curso
Sin copia masiva de bloques — señal positiva
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
Concentración por Archivo
52 de 76 issues (69.3%) concentrados en 5 archivos base
Bitácora del Curso
5 entregables completados entre febrero y marzo de 2026
Project Deliverables
Análisis detallado por entregable del curso
🔴 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 (
@Lobquery) — OWASP A03 WebSecurityConfigurerAdapterdeprecatedmain()con lógica BCrypt en clase de configuración
🟡 Refactorizaciones Propuestas
🟠 Problemas de Arquitectura
Evaluación Clean Code
| Característica | Estado |
|---|---|
| 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
Prácticas XP Aplicadas
Hallazgos Bloqueantes y Críticos
| Severidad | Archivo | Hallazgo |
|---|---|---|
| 🔴 BLOCKER | SecurityConfig.java:39 | Contraseña comprometida |
| 🔴 BLOCKER | UnitService.java:20 | Campo entityManager oculta herencia |
| 🟠 CRITICAL | MainRestController:20 | Entidad JPA expuesta en REST |
| 🟠 CRITICAL | AbstractController:158 | new Random() por llamada |
| 🟠 CRITICAL | AbstractController:27 | Campo 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
Plan de Remediación
Diagnóstico DevEx
| Dimensión | Estado |
|---|---|
| 🔄 Feedback Loops | ⚠️ Mixto — CI activo, onboarding manual |
| 🧠 Cognitive Load | ❌ Alto — JSF + Spring + SQL + reflexión |
| 🌊 Flow State | ❌ Limitado — deuda interrumpe el foco |
Framework SPACE
| 😊 Satisfaction | No medible — señales mixtas |
| 🎯 Performance | Mejorando, con riesgo técnico |
| 📈 Activity | Positiva en historial Git |
| 🤝 Collaboration | Fuerte — PRs + docs centralizados |
| ⚡ Efficiency | Por debajo — setup manual |
Estado del Repo al Momento del Análisis
| Indicador | Valor |
|---|---|
| Archivos Java main | 67 |
| Clases de test | 16 |
| Archivos XHTML (UI) | 17 |
| CI configurado | ✅ build.yml |
| JaCoCo umbrales | 55% / 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
Pipeline Implementado
Entorno reproducible con caché de dependencias
Build + Unit Tests + JaCoCo en cada push/PR
Deuda técnica, calidad y hotspots automáticos
CVEs en dependencias + secrets + misconfigs
Resultados visibles en Security > Code Scanning
Resultados SonarQube en CI
| Coverage | 45.2% |
| Duplicated lines | 0.0% |
| Issues totales | 76 |
| Deuda estimada | 621 minutos |
| Security Hotspots | 7 |
| Maintainability | A (1.0) |
¿Por qué Trivy?
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
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 seguridad → estabilidad estructural → testabilidad → limpieza técnica.