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.