2009-06-23 13 views
18

Recientemente utilicé NDepend y produjo un buen informe en mis ensamblados .net y pdbs relacionados.¿Qué es la abstracción frente al gráfico de inestabilidad?

Lo más interesante que encontré en el informe fue la abstracción frente a la inestabilidad gráfica. Quería entender esto con todo detalle, leí sus documentos y metrices en línea, pero solo podría ayudar en cierta medida.

Principalmente deseo comprender cómo evaluar correctamente el gráfico y las técnicas para controlar la abstracción con estabilidad.

Hay un muy buen artículo here que habla de esto pero, además de esto, ¿qué necesito para controlarlo? [Control de abstracción con la estabilidad]'

alt text

Respuesta

25

Abstracción es una medida de la rigidez de un sistema de software. Más alta es la abstracción, menor rigidez (o mayor flexibilidad) y viceversa. Si los componentes del sistema dependen de clases o interfaces abstractas, tal sistema es más fácil de extender y cambiar que si dependiera directamente de clases concretas.

La estabilidad es una medida de tolerancia al cambio en cuanto a qué tan bien el sistema de software permite cambios sin romperlo. Esto se determina analizando las interdependencias de los componentes del sistema.

Robert C. Martin's article en OO metrics describe estos conceptos en términos más cuantitativos.

extracto del artículo:

La responsabilidad, la independencia y la estabilidad de una categoría puede medirse contando los dependencias que interactúan con esa categoría. Se han identificado tres indicadores:

Ca: Acoplamientos aferentes: el número de clases fuera de esta categoría que dependen de las clases dentro de esta categoría.

Ce: Los acoplamientos eferentes: El número de clases dentro de esta categoría que dependen de las clases fuera de esta categoría.

I: Inestabilidad: (Ce ÷ (Ca + Ce)): esta métrica tiene la gama [0,1]. I = 0 indica una categoría máximamente estable. I = 1 indica una categoría máximamente inestable.

A: Abstracción: (# clases abstractas en la categoría ÷ # total de clases en la categoría). Este rango métrico es [0,1]. 0 significa concreto y 1 significa completamente abstracto.

En cualquier sistema de software particularmente grande, el equilibrio es crítico. En este caso, un sistema debería equilibrar la abstracción con la estabilidad para ser "bueno". La posición en el gráfico A-I muestra esto. Por favor, lea el artículo para la explicación.

0

Tanto la abstracción como la inestabilidad pueden usarse solas para evaluar su código. Usted sabe de antemano qué tan abstracto o estable debe ser algún módulo.Por ejemplo, desea que la capa de presentación sea moderadamente abstracta y altamente estable, ya que los módulos inferiores dependen de ella. Por otro lado, desea que la capa de infraestructura sea altamente concreta (baja abstracción) y altamente inestable, ya que debe implementar qué capas superiores son exigentes.

Una vez que está claro, puede combinar la abstracción y la inestabilidad en un gráfico, y ese es el gráfico de inestabilidad-abstracción. Desea que su código muestre tanta abstracción como sea estable, a fin de equilibrar las necesidades para admitir futuros cambios en los requisitos.

Pero de todos modos, debe comprender bien las métricas de inestabilidad y abstracción antes de tratar de entenderlas trabajando juntas. Se pueden encontrar algunos ejemplos de lo que significa la inestabilidad en este artículo: How to Use Module Coupling and Instability Metrics to Guide Refactoring

Hay un artículo relacionado derivar una consulta CQLinq que mide la inestabilidad de todos los módulos de la aplicación: How to Measure Module Coupling and Instability Using NDepend

Cuestiones relacionadas