Introducción: El propósito de la fase de Diseño en el Ciclo de Vida del Desarrollo de Software es producir una solución a un problema dado en el documento SRS(Software Requirement Specification). El resultado de la fase de diseño es el Documento de Diseño de Software (SDD).
Básicamente, el diseño es un proceso iterativo de dos partes. La primera parte es el Diseño Conceptual que indica al cliente lo que hará el sistema. La segunda es el Diseño Técnico que permite a los constructores del sistema comprender el hardware y el software reales necesarios para resolver el problema del cliente.
Diseño conceptual del sistema:
- Escrito en un lenguaje sencillo, es decir, comprensible para el cliente.
- Explicación detallada de las características del sistema.
- Describe la funcionalidad del sistema.
- Es independiente de la implementación.
- Enlazado con el documento de requisitos.
Diseño técnico del sistema:
- Componente de hardware y diseño.
- Funcionalidad y jerarquía del componente de software.
- Arquitectura de software
- Arquitectura de red
- Estructura de datos y flujo de datos.
- Componente de E/S del sistema.
- Muestra la interfaz.
Modularización: La modularización es el proceso de dividir un sistema de software en múltiples módulos independientes donde cada módulo funciona de forma independiente. Hay muchas ventajas de la modularización en la ingeniería de software. Algunos de ellos se dan a continuación:
- Fácil de entender el sistema.
- El mantenimiento del sistema es fácil.
- Un módulo puede ser utilizado muchas veces como sus necesidades. No es necesario escribirlo una y otra vez.
Acoplamiento: El acoplamiento es la medida del grado de interdependencia entre los módulos. Un buen software tendrá un bajo acoplamiento.
Tipos de acoplamiento:
- Acoplamiento de datos: Si la dependencia entre los módulos se basa en que se comunican pasando sólo datos, se dice que los módulos están acoplados a datos. En el acoplamiento de datos, los componentes son independientes entre sí y se comunican a través de datos. Las comunicaciones de los módulos no contienen datos de trampolín. Ejemplo-sistema de facturación de clientes.
- Acoplamiento de sellos En el acoplamiento de sellos, la estructura de datos completa se pasa de un módulo a otro. Por lo tanto, implica datos tramp. Puede ser necesario debido a factores de eficiencia- esta elección hecha por el diseñador perspicaz, no un programador perezoso.
- Acoplamiento de control: Si los módulos se comunican pasando información de control, entonces se dice que están acoplados por control. Puede ser malo si los parámetros indican un comportamiento completamente diferente y bueno si los parámetros permiten la factorización y la reutilización de la funcionalidad. Ejemplo- función de ordenación que toma una función de comparación como argumento.
- Acoplamiento externo: En el acoplamiento externo, los módulos dependen de otros módulos, externos al software que se desarrolla o a un tipo de hardware concreto. Ej: protocolo, archivo externo, formato de dispositivo, etc.
- Acoplamiento común: Los módulos tienen datos compartidos como estructuras de datos globales.Los cambios en los datos globales significan rastrear a todos los módulos que acceden a esos datos para evaluar el efecto del cambio. Por lo tanto, tiene desventajas como la dificultad en la reutilización de los módulos, la reducción de la capacidad de controlar los accesos a los datos y la reducción de la mantenibilidad.
- Acoplamiento de contenido: En un acoplamiento de contenido, un módulo puede modificar los datos de otro módulo o el flujo de control se pasa de un módulo a otro. Esta es la peor forma de acoplamiento y debe evitarse.
Cohesión: La cohesión es una medida del grado en que los elementos del módulo están funcionalmente relacionados. Es el grado en que todos los elementos dirigidos a realizar una misma tarea están contenidos en el componente. Básicamente, la cohesión es el pegamento interno que mantiene unido el módulo. Un buen diseño de software tendrá una alta cohesión.
Tipos de cohesión:
- Cohesión funcional: Cada elemento esencial para una computación única está contenido en el componente. Una cohesión funcional realiza la tarea y las funciones. Es una situación ideal.
- Cohesión secuencial: Un elemento emite unos datos que se convierten en la entrada de otro elemento, es decir, flujo de datos entre las partes. Se da de forma natural en los lenguajes de programación funcional.
- Cohesión comunicacional: Dos elementos operan sobre los mismos datos de entrada o contribuyen hacia los mismos datos de salida. Ejemplo- actualizar registro int la base de datos y enviarlo a la impresora.
- Cohesión procedimental: Los elementos de cohesión procedimental aseguran el orden de ejecución. Las acciones siguen estando débilmente conectadas y es poco probable que sean reutilizables. Ej- calcular el GPA del estudiante, imprimir el registro del estudiante, calcular el GPA acumulativo, imprimir el GPA acumulativo.
- Cohesión temporal: Los elementos están relacionados por su cohesión temporal. Un módulo relacionado con la cohesión temporal todas las tareas deben ser ejecutadas en el mismo lapso de tiempo. Esta cohesión contiene el código para inicializar todas las partes del sistema. Muchas actividades diferentes ocurren, todos en el tiempo de init.
- Cohesión lógica: Los elementos están relacionados lógicamente y no funcionalmente. Ej- Un componente lee entradas de cinta, disco y red. Todo el código de estas funciones está en el mismo componente. Las operaciones están relacionadas, pero las funciones son significativamente diferentes.
- Cohesión Coincidente: Los elementos no están relacionados(sin relación). Los elementos no tienen ninguna relación conceptual que no sea la ubicación en el código fuente. Es accidental y la peor forma de cohesión. Ej- imprimir la siguiente línea e invertir los caracteres de una cadena en un solo componente.
¡Atención lector! No deje de aprender ahora. Hazte con todos los conceptos importantes de la Teoría del CS para las entrevistas de SDE con el Curso de Teoría del CS a un precio asequible para el estudiante y prepárate para la industria.