🧮 Cálculo del KPI de Calidad de Código
🎯 Escala de Calificación
⭐ A (90-100): Excelente - Código de alta calidad, listo para producción sin reservas
✅ B (75-89): Bueno - Calidad sólida con áreas menores de mejora
⚠️ C (60-74): Aceptable - Requiere atención en algunas áreas críticas
🚨 D (40-59): Mejorable - Necesita trabajo significativo antes de producción
❌ F (0-39): Crítico - Requiere refactorización inmediata, no apto para producción
📊 Fórmula del KPI
El KPI se calcula como una suma ponderada de 10 métricas clave de SonarQube, cada una normalizada a una escala de 0-100:
KPI = (DeudaTécnica × 15%) + (Bloqueantes × 10%) + (Críticos × 8%) + (Bugs × 12%) + (Vulnerabilidades × 15%) + (Seguridad × 10%) + (Duplicación × 10%) + (Cobertura × 12%) + (Complejidad × 4%) + (ComplejidadCognitiva × 4%)
⚖️ Pesos por Categoría
🔴 Seguridad (35%): Vulnerabilidades (15%) + Security Hotspots (10%) + Bloqueantes (10%)
🟡 Mantenibilidad (27%): Deuda Técnica (15%) + Cobertura (12%)
🟠 Fiabilidad (20%): Bugs (12%) + Críticos (8%)
🔵 Calidad (18%): Duplicación (10%) + Complejidad (4%) + Complejidad Cognitiva (4%)
🔍 Normalización de Métricas
Deuda Técnica: 100 - (sqale_index / 24) → penaliza 4.17 pts por cada hora
Issues: 100 - (bugs × 5), 100 - (bloqueantes × 20), 100 - (críticos × 10)
Vulnerabilidades: 100 - (vulnerabilidades × 15) → alto impacto por cada vulnerabilidad
Duplicación: 100 - duplicated_lines_density → penaliza proporcionalmente
Cobertura: coverage (directo) → mayor cobertura = mejor score
Complejidad: 100 - (complexity / 50), 100 - (cognitive_complexity / 1.5)
🎯 ¿Por qué estos pesos?
Seguridad (35%): Es crítica para evitar brechas y ataques. Tiene el mayor peso porque un fallo de seguridad puede comprometer todo el sistema.
Mantenibilidad (27%): Código mantenible reduce costos a largo plazo. La deuda técnica y cobertura de tests son fundamentales.
Fiabilidad (20%): Bugs y code smells críticos afectan directamente la experiencia del usuario y la estabilidad.
Calidad (18%): Código limpio y simple facilita cambios futuros, aunque tiene menor impacto inmediato.