Como ya se ha visto por las distintas métricas estudiadas, la complejidad de un programa crece con su tamaño: los programas largos son más difíciles de escribir y comprender, contienen habitualmente más errores, y su depuración resulta más compleja. Con objeto de reducir esta complejidad, los diseñadores de software han hecho un uso progresivo de técnicas de modularización y diseño estructurado. Entre las diversas ventajas de las técnicas de diseño se pueden destacar las siguientes:
Aunque estos beneficios también son discutidos y para ello se alega toda clase de inconvenientes, en general se admite que el paso a la modularidad es un gran salto adelante. Pero el problema que se plantea ahora se refiere a los módulos en si: ¿Cuál es el tamaño idóneo, la complejidad máxima, la extensión adecuada de un módulo? Algunas de las métricas vistas hasta el momento tratan este problema. Así algunos autores estiman que el tamaño de un módulo debe oscilar entre las 50-200 líneas de código. Otros simplemente indican que un módulo debe completar una función por sí solo. La complejidad límite de un módulo se fija en algunos casos en un número de complejidad ciclomática igual a 10. Otras discusiones se centran en la organización de los módulos en el programa: estructuras en árbol, o lineales. Con objeto de obtener una valoración de los módulos y una disposición que pueda emplearse como base para comparaciones, surgen las métricas orientadas al diseño. Muchas de estas métricas son generalizaciones de otras referidas a ámbitos más restringidos (números de complejidad ciclomática, métricas de la ciencia del software). Uno de los estudios más completos relativos a la cuestión de valorar los módulos software es el llevado a cabo por Troy y Zweben en el que se relaciona una serie de métricas básicas con valores de calidad representados por la tasa de modificaciones en pruebas. En este estudio, un gran sistema fue dividido en módulos usando varias convenciones de diseño. Cada módulo se codificó, probó y preparó para la 2 – 26 integración. Se registraron los cambios realizados en cada módulo. Cada implementación de diseño se acompañó de un gráfico que representaba las interconexiones entre los módulos. En total se obtuvieron veintiuna métricas asociadas a cada gráfico. Los principios que dirigen estas métricas son: • Acoplamiento: Se mide como el número de interconexiones entre módulos. El acoplamiento crece con el número de llamadas, o con la cantidad de datos compartidos. Se supone que un diseño con un acoplamiento alto puede contener más errores. Se cuantifica como el número de conexiones por nodo del gráfico de diseño. • Cohesión: Valora las relaciones entre los elementos de un módulo. En un diseño cohesivo, las funciones están ubicadas en un solo módulo. Los diseños con una cohesión baja contendrán más errores. Las medidas que valoren la información compartida entre módulos cuantificarán la cohesión. • Complejidad: Un diseño debe ser lo más simple posible. La complejidad crece con el número de construcciones de control, y el número de módulos de un programa. Un diseño complejo contendrá más errores. La complejidad se evidencia en el número de elementos del gráfico de diseño. • Modularidad: El grado de modularidad afecta a la calidad del diseño. Es preferible un exceso a un defecto de modularidad, pues en este último caso contendrá más errores. La cuantificación de la modularidad se obtiene midiendo la cantidad de elementos del gráfico. • Tamaño: Un diseño con grandes módulos, o gran profundiad en su gráfico contendrá más errores. De echo, la complejidad y el tamaño están muy relacionados y las consecuencias de un exceso de cualquiera de los dos principios tienen los mismo resultados.
Las conclusiones finales del estudio sugieren que a pesar de la correlación encontrada entre los factores estudiados y los errores encontrados, sigue habiendo una serie de factores no detectados que determinan a su vez la calidad de un diseño. De todas formas es posible afirmar que las interconexiones entre módulos, y la complejidad de los diseños aumentan notablemente los errores, y disminuyen la calidad. |