Skip to content

ucudal/ANDIS_ArchitectureMetrics

Repository files navigation

UCU

Universidad Católica del Uruguay

Facultad de Ingeniería y Tecnologías

Análisis y diseño de aplicaciones I y II

ArchitectureMetrics: Librería para calcular métricas de arquitectura

Build status Descargar desde NuGet Deploy to Pages

Important

La 📖 documentación de esta librería está publicada aquí.

Esta librería proporciona herramientas para analizar y medir la estabilidad y calidad de una arquitectura de software, utilizando las métricas y principios definidos por Robert C. Martin, usando ArchUnit.

Para cada componente -donde en este contexto componente es un ensamblado- calcula las siguientes métricas:

  • Fan-in o acoplamiento aferente: cuántos otros componentes dependen del componente dado.

  • Fan-out o acoplamiento eferente: de cuántos otros componentes depende un componente dado.

  • Abstractness: Proporción de tipos abstractos o extensibles -interfaces, clases abstractas, registros abstractos, tipos genéricos- respecto del total de tipos

  • Instability: Medida de qué tan susceptible es el componente al cambio $I = \frac{Ce}{Ca + Ce}$

  • Distance: Distancia de la secuencia principal $D = |A + I - 1|$

Note

Para el cálculo de las métricas de abstracción se consideran tipos abstractos:

  • Interfaces interface
  • Clases abstractas abstract class
  • Records abstractos abstract record
  • Tipos genéricos class<T>

Estructura del proyecto

ANDIS_ArchitectureMetrics/
├── src/
│   └── Ucu.Andis.ArchitectureMetrics/           # Librería principal
│       ├── Models/                              # Modelos de datos
│       │   ├── Component.cs                     # Definición de componente
│       │   ├── ComponentMetrics.cs              # Contenedor de métricas
│       │   ├── ComponentDependencies.cs         # Grafo de dependencias
│       │   └── ComponentCouplings.cs            # Métricas de acoplamiento
│       └── Calculators/                         # Motores de cálculo
│           └── MetricsCalculator.cs             # Calculador principal
│
├── tests/
│   └── Ucu.Andis.ArchitectureMetrics.Tests/     # Casos de prueba
│
├── docs/                                        # Documentación
├── README.md                                    # Este archivo
└── ANDIS_ArchitectureMetrics.sln                # Archivo de solución

Uso

using Ucu.Andis.ArchitectureMetrics;
using ArchUnitNET.Loader;

// Cargar assemblies
var architecture = new ArchLoader()
    .LoadAssemblies(
        typeof(Domain.Entity).Assembly,
        typeof(Application.Command).Assembly,
        typeof(Infrastructure.Repository).Assembly,
        typeof(API.Controller).Assembly
    )
    .Build();

// Construir componentes desde los assemblies
var components = MetricsCalculator.BuildAssemblyComponents(
    architecture,
    "MyApp.Domain",
    "MyApp.Application",
    "MyApp.Infrastructure",
    "MyApp.API"
);

// Calcular métricas
var metrics = MetricsCalculator.CalculateMetrics(components);

// Usar métricas para análisis
foreach (var metric in metrics)
{
    Console.WriteLine($"{metric.Name}:");
    Console.WriteLine($"  Fan-In: {metric.FanIn}");
    Console.WriteLine($"  Fan-Out: {metric.FanOut}");
    Console.WriteLine($"  Abstractness: {metric.Abstractness:F4}");
    Console.WriteLine($"  Instability: {metric.Instability:F4}");
    Console.WriteLine($"  Distance: {metric.Distance:F4}");
}

Requisitos

  • .NET 8.0 o posterior
  • TngTech.ArchUnitNET 0.13.3 o compatible

Instalación desde NuGet

dotnet add package Ucu.Andis.ArchitectureMetrics

O en tu archivo .csproj:

<ItemGroup>
  <PackageReference Include="Ucu.Andis.ArchitectureMetrics" Version="1.0.0"/>
</ItemGroup>

Compilación

dotnet build

Ejecutar tests

dotnet test

Publicación

Los números de versión tienen la forma x.y.z donde x.y lo indica el desarrollador y z se incrementa automáticamente. La publicación del paquete es a través de una GitHub Action.

Ejecución automática

Esta acción se ejecuta automáticamente de la siguiente forma:

git tag v0.0
git push origin v0.0

donde 0.0 es el número de versión deseado.

En caso de que el tag ya exista, eliminarlo primero con:

git tag -d v0.0
git push origin --delete v0.0

Ejecución manual

La acción se puede ejecutar manualmente. En el momento de ejecutarla va a pedir el numero de versión 0.0.

Documentación

La documentación de la API se genera usando Doxygen. Consulte la carpeta docs/ para documentación detallada.

cd docs
doxygen

About

Biblioteca para el cálculo de métricas de arquitectura

Resources

License

Stars

Watchers

Forks

Contributors

Languages