Skip to content

Comandos

pfranccino edited this page Jun 7, 2026 · 1 revision

Comandos

Los cuatro CLIs comparten flags comunes: --engine static|dynamic|auto, --config <path>, --quiet y --json. Toda la salida de esta página se generó ejecutando los comandos contra tests/fixtures/leaf_coupling (10 módulos), así que es reproducible.

El proyecto de ejemplo leaf_coupling tiene este grafo: app → cart, checkout, core; cart, checkout → payments; payments → core, database, model, network, util; database, model, network, util → core; y legacy → app.


1 · gradle-analyzer — dependencias internas

gradle-analyzer <ruta_al_modulo>
Flag Descripción Default
--format plantuml|mermaid|all Formato de salida all
--output-dir <dir> Directorio de salida diagrams
--engine static|dynamic|auto Motor de extracción static
--exclude <module> Excluir un módulo (puede repetirse)
--focus <module[,module]> Limitar el grafo a estos módulos y sus vecinos
--config <path> Ruta a analyzer_config.json auto-detect
--quiet Suprime output de progreso off
--json Salida JSON a stdout off

Genera: diagrams/gradle-dependencies.puml · .mmd · gradle-report.txt

Salida real
$ gradle-analyzer tests/fixtures/leaf_coupling
🚀 Analizador de Dependencias via Gradle
======================================================================
📁 Escaneando módulos en: .../tests/fixtures/leaf_coupling

  • app
  • cart
  • checkout
  • core
  • database
  • legacy
  • model
  • network
  • payments
  • util

✓ 10 módulos encontrados

🔍 Analizando dependencias (motor: static)...
  ✓ app: 3 dependencia(s)
  ✓ cart: 1 dependencia(s)
  ✓ checkout: 1 dependencia(s)
  ○ core: sin dependencias internas
  ✓ database: 1 dependencia(s)
  ✓ legacy: 1 dependencia(s)
  ✓ model: 1 dependencia(s)
  ✓ network: 1 dependencia(s)
  ✓ payments: 5 dependencia(s)
  ✓ util: 1 dependencia(s)

✓ Análisis completado: 15 dependencias detectadas

📊 Generando archivos...
======================================================================
✓ PlantUML: diagrams/gradle-dependencies.puml
✓ Mermaid:  diagrams/gradle-dependencies.mmd
✓ Reporte:  diagrams/gradle-report.txt

El reporte de texto (gradle-report.txt) lista dependencias por módulo y estadísticas:

======================================================================
DEPENDENCIAS POR MÓDULO
======================================================================

📦 app
  → cart  [implementation]
  → checkout  [implementation]
  → core  [implementation]

📦 payments
  → core  [implementation]
  → database  [implementation]
  → model  [implementation]
  → network  [implementation]
  → util  [implementation]

...

======================================================================
ESTADÍSTICAS
======================================================================

Módulos más utilizados:
  • core: usado por 6 módulo(s)
  • payments: usado por 2 módulo(s)
  ...

Módulos sin dependencias internas (1):
  • core

Módulos no utilizados por otros (1):
  • legacy

Ejemplos:

gradle-analyzer /ruta/proyecto/payments --format mermaid            # solo Mermaid
gradle-analyzer /ruta/proyecto/payments --exclude test-utils        # excluir módulos
gradle-analyzer /ruta/proyecto/payments --output-dir docs/diagrams  # output custom

2 · gradle-externals — llamadas externas

gradle-externals <ruta_proyecto> <nombre_modulo>

Responde: "¿qué módulos de fuera de mi feature lo están consumiendo?" — clave antes de un refactor.

Flag Descripción Default
--format plantuml|mermaid|all Formato de salida all
--output-dir <dir> Directorio de salida external-calls
--engine static|dynamic|auto Motor de extracción static
--config <path> Config personalizado auto-detect
--quiet Suprime output de progreso off
--json Salida JSON a stdout off

Genera: external-calls/<modulo>-external-calls.puml · .mmd · <modulo>-external-report.txt

Salida real
$ gradle-externals tests/fixtures/leaf_coupling payments
======================================================================
ANÁLISIS DE LLAMADAS EXTERNAS A PAYMENTS
======================================================================

Proyecto: .../tests/fixtures/leaf_coupling
Módulo analizado: payments

======================================================================
MÓDULOS EXTERNOS QUE LLAMAN
======================================================================

📦 cart
  └─→ payments  [implementation]

📦 checkout
  └─→ payments  [implementation]

======================================================================
ESTADÍSTICAS
======================================================================

Módulos más llamados desde fuera:
  • payments: 2 llamada(s)

3 · gradle-sanity — sanidad arquitectónica

gradle-sanity <ruta_al_modulo>
Flag Descripción Default
--output-dir <dir> Directorio de salida sanity
--engine static|dynamic|auto Motor de extracción static
--config <path> Config personalizado auto-detect
--quiet Suprime output de progreso off
--json Salida JSON a stdout off
--fail-on-cycle exit 1 si se detecta algún ciclo off
--fail-on-score-below N exit 1 si el score es menor a N off

El detalle de qué mide cada métrica y cómo se calcula el score está en Métricas de sanidad.

Salida real (tabla de métricas)
$ gradle-sanity tests/fixtures/leaf_coupling
...
======================================================================
MÉTRICAS POR MÓDULO
======================================================================

  Módulo                           Ca    Ce       I  Estado
  ──────────────────────────────  ────  ────  ──────  ──────────────────────────────
  app                               1     3    0.75  🟠 Moderadamente inestable
  cart                              1     1    0.50  🟡 Moderadamente estable
  checkout                          1     1    0.50  🟡 Moderadamente estable
  core                              6     0    0.00  🟢 Estable
  database                          1     1    0.50  🟡 Moderadamente estable
  legacy                            0     1    1.00  🔴 Inestable (módulo hoja)
  model                             1     1    0.50  🟡 Moderadamente estable
  network                           1     1    0.50  🟡 Moderadamente estable
  payments                          2     5    0.71  🟠 Moderadamente inestable
  util                              1     1    0.50  🟡 Moderadamente estable
======================================================================
PUNTUACIÓN DE SANIDAD
======================================================================

  Puntaje base:                                    100
  Ciclos (0 × 20 pts):                              -0
  Violaciones SDP (0 × 10 pts):                     -0
  Api innecesario (0 × 5 pts):                      -0
  Fan-out excesivo (0 × 3 pts):                     -0
  Versiones hardcodeadas (0 × 2 pts):               -0
  Lógica compartida mal ubicada (2 issue(s)):       -0
  ───────────────────────────────────────────────────
  PUNTUACIÓN FINAL:                               100 / 100

  Resultado: 🟢 Excelente — arquitectura de dependencias muy sana
Salida JSON (--json, ideal para CI)
$ gradle-sanity tests/fixtures/leaf_coupling --json --quiet
{
  "path": "tests/fixtures/leaf_coupling",
  "score": 100,
  "modules": {
    "core":     { "ca": 6, "ce": 0, "I": 0.0 },
    "payments": { "ca": 2, "ce": 5, "I": 0.71 },
    "legacy":   { "ca": 0, "ce": 1, "I": 1.0 }
  },
  "cycles": [],
  "sdp_violations": [],
  "api_issues": [],
  "fan_out_issues": [],
  "version_issues": [],
  "orphan_modules": [],
  "coupling_issues": [
    { "module": "app",      "kind": "app",     "I": 0.75, "ca": 1, "max_ca": 0 },
    { "module": "payments", "kind": "feature", "I": 0.71, "ca": 2, "max_ca": 1 }
  ]
}

El bloque modules se muestra recortado: el JSON real incluye los 10 módulos.


4 · gradle-impact — impacto de cambios

gradle-impact <ruta_proyecto> <modulo>

Responde: "¿qué módulos se rompen si cambio este módulo?" Construye el grafo invertido de dependencias y hace BFS desde el target, asignando un nivel a cada módulo impactado (1 = directo, 2 = transitivo, etc.).

Flag Descripción Default
--format plantuml|mermaid|all Formato de salida all
--output-dir <dir> Directorio de salida impact
--engine static|dynamic|auto Motor de extracción static
--config <path> Config personalizado auto-detect
--quiet Suprime output de progreso off
--json Salida JSON a stdout off

Genera: impact/<modulo>-impact.puml · .mmd · <modulo>-impact-report.txt

Salida real
$ gradle-impact tests/fixtures/leaf_coupling core
======================================================================
IMPACTO DE CAMBIOS EN: CORE
======================================================================

Proyecto      : .../tests/fixtures/leaf_coupling
Módulo        : core
Total módulos : 10

  Nivel 1 — dependientes directos (6):
    • app
    • database
    • model
    • network
    • payments
    • util

  Nivel 2 — dependientes transitivos (3):
    • cart
    • checkout
    • legacy

  🔥 Impacto total: 9 módulos (90% del proyecto)
     Cambiar core requiere verificar 9 módulo(s).

En leaf_coupling, core es el módulo base: tocarlo impacta al 90% del proyecto. Es exactamente lo que las métricas de sanidad marcan con Ca=6, I=0.00 (muy estable → muchos dependen de él).


Generar imágenes desde PlantUML

Los .puml y .mmd son texto; para convertirlos a PNG/SVG:

plantuml diagrams/gradle-dependencies.puml          # PNG
plantuml -tsvg diagrams/gradle-dependencies.puml    # SVG (escalable)
brew install plantuml          # macOS
sudo apt install plantuml      # Ubuntu/Debian
choco install plantuml         # Windows

Los .mmd los renderiza GitHub directamente (bloque ```mermaid) o mermaid.live.