Articulo de referencia

Connascencia

Connascence es una métrica de diseño de software introducida por Meilir Page-Jones que cuantifica el grado y el tipo de dependencia entre componentes de software, evaluando su f...

Connascence es una métrica de diseño de software introducida por Meilir Page-Jones que cuantifica el grado y el tipo de dependencia entre componentes de software, evaluando su fuerza (dificultad de cambio) y localidad (proximidad en el código fuente ). Se puede categorizar como estática (analizable en tiempo de compilación) o dinámica (detectable en tiempo de ejecución) e incluye formas como Connascence de Nombre, Tipo y Posición, cada una de las cuales representa diferentes características de dependencia y niveles de fragilidad. [ 1 ] [ 2 ]

Acoplamiento vs. Connascencia

El acoplamiento describe el grado y la naturaleza de la dependencia entre componentes de software, centrándose en lo que comparten (por ejemplo, datos, flujo de control , tecnología) y cuán estrechamente están vinculados. Evalúa dos dimensiones clave: la fuerza, que mide la dificultad de cambiar la dependencia, y el alcance (o visibilidad), que indica cuán expuesta está la dependencia a través de módulos o límites. Los tipos de acoplamiento tradicionales suelen incluir el acoplamiento de contenido, el acoplamiento común, el acoplamiento de control, el acoplamiento de marca de tiempo, el acoplamiento externo y el acoplamiento de datos. [ 1 ] [ 3 ] [ 2 ]

Connascence, introducido por Meilir Page-Jones, proporciona un marco sistemático para analizar y medir las dependencias de acoplamiento. Evalúa las dependencias en función de tres dimensiones: fuerza, que mide el esfuerzo necesario para refactorizar o modificar la dependencia; localidad, que considera cuán cerca física o lógicamente están los componentes dependientes en el código; y grado, que mide cuántos componentes se ven afectados por la dependencia. Connascence se puede categorizar en formas estáticas (detectables en tiempo de compilación) y dinámicas (detectables en tiempo de ejecución). Connascence estático se refiere a dependencias en tiempo de compilación, como las firmas de métodos, mientras que Connascence dinámico se refiere a dependencias en tiempo de ejecución, que pueden manifestarse en formas como Connascence de tiempo, valores o algoritmos. [ 1 ] [ 3 ] [ 2 ]

Cada tipo de acoplamiento puede presentar múltiples tipos de connascencia, un tipo específico o, en raras ocasiones, ninguno, dependiendo de cómo se implemente la dependencia. Los tipos comunes de connascencia incluyen la connascencia de nombre, tipo, posición y significado. Ciertos tipos de acoplamiento se alinean naturalmente con tipos de connascencia específicos; por ejemplo, el acoplamiento de datos a menudo implica la connascencia de nombre o tipo. Sin embargo, no todas las combinaciones de acoplamiento y connascencia tienen un significado práctico. Las dependencias que dependen del orden de los parámetros en la firma de un método demuestran la connascencia de posición, que es frágil y difícil de refactorizar porque reordenar los parámetros rompe la interfaz. Por el contrario, la connascencia de nombre, que depende de los nombres de los campos o parámetros, es generalmente más resistente a los cambios. Los tipos de connascencia en sí mismos presentan una jerarquía natural de fuerza, considerándose la connascencia de nombre típicamente más débil que la connascencia de significado. [ 1 ] [ 3 ] [ 2 ]

Las dependencias que abarcan los límites de los módulos o los sistemas distribuidos suelen tener mayores costos de coordinación, lo que aumenta la dificultad de la refactorización y la propagación de cambios a través de límites distantes. Las prácticas modernas, como la inyección de dependencias y la programación basada en interfaces, se emplean a menudo para reducir la fuerza de acoplamiento y mejorar la mantenibilidad de las dependencias. [ 1 ] [ 3 ] [ 2 ]

Mientras que el acoplamiento identifica lo que se comparte entre los componentes, la connascencia evalúa cómo se comportan esas dependencias, cómo se propagan los cambios y cuán difícil es refactorizarlas. La fuerza, la localidad y el grado están interrelacionados; las dependencias con alta fuerza, amplio alcance y que abarcan límites distantes son significativamente más difíciles de refactorizar y mantener. En conjunto, el acoplamiento proporciona una visión general de alto nivel de las relaciones de dependencia, mientras que la connascencia ofrece un marco granular para analizar la fuerza, la localidad, el grado y la resiliencia al cambio de las dependencias, lo que apoya el diseño de sistemas robustos y mantenibles. [ 1 ] [ 3 ] [ 2 ]

Referencias

  1. 1 2 3 4 5 6 Guía práctica para el diseño de sistemas estructurados . ISBN 978-0136907695.
  2. 1 2 3 4 5 6 Fundamentos de la arquitectura de software: Un enfoque de ingeniería . ISBN 978-1492043454.
  3. 1 2 3 4 5 Diseño de aplicaciones con uso intensivo de datos: Las grandes ideas detrás de sistemas confiables, escalables y mantenibles . ISBN 978-1449373320.