El propósito de la descomposición modular es dividir el sistema en un conjunto de elementos
y definir sus interfaces. En otras palabras, descompone el problema en diferentes módulos para resolverlo de manera más sencilla. Estos módulos representan una actividad completa y se resuelven de manera independiente. El diseño del problema se vuelve más sencillo para que el enfoque lo tenga la resolución del problema. A la resolución de estos módulos se le llama refinamiento por pasos. Los módulos pueden ser planificadas, codificadas, comprobadas y depuradas de manera independiente y luego se combinan. Las ventajas de la descomposición modular son la claridad, la reducción de costos y la reutilización. Los pasos a seguir en la descomposición modular son: 1. Identificar los módulos a resolver. 2. Describir cada uno de los módulos. 3. Describir las relaciones ente los módulos. Una descomposición modular debe poseer ciertas características mínimas para que pueda considerarse viable, estas son: - Independencia funcional - Acoplamiento - Cohesión - Comprensibilidad - Adaptabilidad Independencia funcional Cada módulo debe realizar una función específica y concreta y es recomendable reducir las relaciones entre cada módulo. Cada función se realiza en un módulo distinto ya que si las funciones son independientes, los módulos tendrán independencia funcional. Acoplamiento Es una medida para la interconexión de módulos en la estructura del programa. El grado de acoplamiento mide la relación entre dos módulos dependiendo del tipo de conexión y la complejidad de la interface. - Fuerte o Por contenido: cuando desde un módulo se pueden cambiar datos de otro. o Común: se utiliza una zona común de datos a los que varios módulos tienen acceso. - Moderado o De control: la zona común es un dispositivo externo al cual los módulos se encuentran ligados. Esto conlleva que exista un cambio en el formato de datos y que afecte a los módulos. o Por etiqueta: en un intercambio de datos se realiza mediante una referencia a la estructura de los datos. - Débil o De datos: viene dado por los datos que intercambian los módulos. o Sin acoplamiento directo: es el acoplamiento que no existe. Cohesión Se refiere a la coherencia de un módulo que ejecuta una tarea sencilla en un procedimiento de software y que requiere poca interacción con procedimientos que se ejecutan en otras partes de un programa. Se podría decir que un módulo que posee coherencia es aquel que realiza una sola cosa.