Documentación · Historia en git

km hotspots

Análisis de hotspots

Encuentra hotspots: archivos que cambian con frecuencia Y además tienen alta complejidad. Se basa en el método de Adam Thornhill (“Your Code as a Crime Scene”).

km hotspots [path]

Fórmula

Score = Commits × Complexity

Los archivos con puntaje alto concentran el riesgo: cambian mucho y son complejos, así que son los candidatos más valiosos para refactorizar.

Por defecto, la complejidad se mide con la indentación total (la suma de los niveles lógicos de indentación de todas las líneas de código), siguiendo el método original de Thornhill en “Your Code as a Crime Scene”. Usa --complexity cycom para medirla con la complejidad ciclomática.

Requiere un repositorio git. Los commits de merge se excluyen de la cuenta.

Opciones:

FlagDescripción
--format {table,json,short,terse}Formato de salida (por defecto: table)
--include-testsIncluye los archivos de test en el análisis (excluidos por defecto)
--top NMuestra solo los N primeros archivos (por defecto: 20)
--sort-by METRICOrdena por score, commits o complexity (por defecto: score)
--since DURATIONConsidera solo los commits desde este momento (p. ej. 30d, 6m, 1y)
--complexity METRICindent (por defecto, Thornhill) o cycom (ciclomática)

Unidades de duración: d (días), m (meses, aprox. 30 días), y (años, aprox. 365 días).

Ejemplo de salida (por defecto, complejidad por indentación):

Hotspots (Commits × Total Indent Complexity)
──────────────────────────────────────────────────────────────────────────────
 File                    Language Commits Total Indent      Score
──────────────────────────────────────────────────────────────────────────────
 src/main.rs                 Rust      18        613      11034
 src/loc/counter.rs          Rust       7       1490      10430
 src/dups/detector.rs        Rust       7       1288       9016
 src/dups/mod.rs             Rust       9        603       5427
 src/report/mod.rs           Rust       4        998       3992
──────────────────────────────────────────────────────────────────────────────

Score = Commits × Total Indentation (Thornhill method).
High-score files are change-prone and complex — prime refactoring targets.

Ejemplo de salida (--complexity cycom):

Hotspots (Commits × Cyclomatic Complexity)
──────────────────────────────────────────────────────────────────────────────
 File                     Language Commits Cyclomatic      Score
──────────────────────────────────────────────────────────────────────────────
 src/loc/counter.rs           Rust       7        115        805
 src/dups/mod.rs              Rust       9         44        396
 src/main.rs                  Rust      18         21        378
 src/cycom/analyzer.rs        Rust       4         92        368
 src/dups/detector.rs         Rust       7         46        322
──────────────────────────────────────────────────────────────────────────────

Score = Commits × Cyclomatic Complexity.
High-score files are change-prone and complex — prime refactoring targets.