Ideas Útiles para la Construcción de Diagramas de Flujo de Datos (DFD)
- Identificar todos los elementos exógenos.
- Identificar sus relaciones con el sistema.
- Trabajar según alguna de las siguientes filosofías:
- De entradas a salidas.
- De salidas a entradas.
- Desde una posición intermedia hacia adelante o hacia atrás.
Conclusiones sobre los Diagramas de Flujo de Datos (DFD)
- Valiosa herramienta de comunicación:
- Entre usuario, analista, diseñador y programador.
- Se puede combinar con el uso de prototipos.
- Fácil de entender y de aprender.
- Facilita las relaciones con el usuario.
- Amplia difusión en la ingeniería de software.
Conceptos y Principios del Diseño de Software
El diseño es un proceso a través del cual los requisitos establecidos en la fase de análisis deben traducirse en una representación —que se sugiere modular— del producto de software que se precisa construir. Esta representación se acompaña de los procedimientos en virtud de los cuales cada módulo debe llevar a cabo su tarea, y de las estructuras de datos que debe procesar.
Conceptos y Principios del Diseño Estructurado
El diseño estructurado es un método de configuración de la organización modular del software que se desarrolla a partir de los flujos de datos contenidos en la especificación de requisitos obtenida en la fase de análisis mediante un enfoque estructurado. En este sentido, puede decirse que este enfoque consiste en el diseño de programas como estructuras de funciones únicas y de relativa independencia.
Efectividad del Diseño de Software
Para poder evaluar la efectividad de una representación de diseño, es preciso establecer lo que se denomina en Ingeniería de Software «criterios para un buen diseño», entre los cuales es posible destacar los siguientes:
- El diseño debe exhibir una organización jerárquica con mecanismos de control que no atenten contra la independencia relativa de cada componente de la jerarquía.
Modularidad en el Diseño de Software
Un módulo es una unidad claramente definida y manejable que forma parte de los elementos constituyentes del software.
La modularidad consiste básicamente en la partición del software en elementos con nombres y direcciones separadas que se denominan módulos. Estos módulos, en su composición, generan la totalidad necesaria para resolver el problema global que da origen a la necesidad de construir un producto de software.
Beneficios de la Modularidad
La modularidad conduce a programas más simples, ya que pueden ser comprendidos, verificados, programados, depurados, mejorados y alterados por partes.
Módulo: Fan-out y Fan-in
El Fan-out es una medida del número de módulos controlados directamente por otro módulo (es decir, el número de subordinados inmediatos que posee).
El Fan-in indica cuántos módulos controlan directamente un determinado módulo (es decir, el número de superiores inmediatos que posee).
Un módulo que controla a otro se dice que es «superordinado» a este, y recíprocamente, un módulo controlado por otro se dice que es «subordinado».
Abstracción en el Diseño
Cuando se considera una solución modular para enfrentar un problema, esta puede plantearse en distintos niveles de abstracción. Un nivel superior de abstracción supone una solución en términos amplios, usando un lenguaje del entorno del problema. En niveles más bajos, se toma una orientación más procedimental, combinando una terminología orientada al problema con una orientada a la implementación. El nivel más bajo de abstracción permite que la solución pueda implementarse directamente.
Refinamiento Gradual
El refinamiento gradual es una estrategia de diseño top-down cuyo origen es la propuesta de Niklaus Wirth (WIRTH-71), quien postuló que «La arquitectura de un programa se desarrolla refinando sucesivamente los niveles de detalle de los procedimientos. De este modo, se desarrolla una jerarquía de procedimientos al descomponer sucesivamente una sentencia global hasta alcanzar sentencias específicas a nivel de un lenguaje de programación».
Factores de Calidad del Diseño de Software
Acoplamiento
El acoplamiento corresponde al grado de interdependencia entre dos módulos. Entendido así, minimizar el acoplamiento aparece entonces como una determinante prioritaria al configurar las conformaciones estructurales.
La obtención de módulos tan independientes como sea posible puede lograrse principalmente de tres maneras:
- Eliminando relaciones innecesarias.
- Reduciendo el número de relaciones necesarias.
- Debilitando la dependencia de las relaciones necesarias.
Cohesión
La cohesión corresponde a la medida de la relación funcional de los elementos de un módulo. Los elementos de un módulo corresponden a instrucciones, definiciones de datos o llamadas a otros módulos. La idea es organizar estos elementos de tal manera que tengan una mayor relación entre ellos a la hora de realizar la tarea específica del módulo.
Diseño Detallado
Especificación por Interfaz-Función
La especificación por interfaz-función permite definir un módulo sin entrar en excesivos detalles. La interfaz del módulo contiene los parámetros de entrada y de salida, mientras que la función del módulo describe las tareas que este realiza. Se permite el uso de tablas, fórmulas, lenguaje natural, etc., lo que permite variar el grado de formalismo en la definición del módulo, generalmente dando bastante libertad a los programadores. Su inclusión como comentario en el código final facilita el mantenimiento.
