Please enable JavaScript.
Coggle requires JavaScript to display documents.
Fundamentos del diseño de software - Coggle Diagram
Fundamentos del diseño de software
Ingeniería del software y diseño del software
El diseño es técnicamente la parte central de la ingeniería del software
Se desarrollan, revisan y se documentan los refinamientos progresivos de las estructuras de datos, de la estructura del programa y de los detalles procedimentales.
Da como resultado representaciones cuya
calidad puede ser evaluada
Se toman las decisiones que afectarán finalmente al éxito
Es la única forma mediante la que podemos traducir con precisión los
requisitos del cliente en un producto o sistema acabado
Metodologías de diseño
Diseño de datos
Transforma el modelo de campo de información, creado durante el análisis, en las estructuras de datos
Diseño arquitectónico
Define las relaciones entre los principales elementos estructurales del programa
Diseño procedimental
Transforma los elementos estructurales en
una descripción procedimental del software
Las fases de diseño, codificación y prueba absorben el 75% o más del coste de la ingeniería del software
Sin diseño
Nos arriesgamos a construir un sistema inestable
Errores cuando se realicen pequeños cambios
Sistemas que sean difícil de
probar
Un sistema cuya calidad no pueda ser evaluada hasta más adelante
El proceso de diseño
DISEÑO Y CALIDAD DEL SOFTWARE
la calidad del diseño se evalúa mediante una
serie de revisiones técnicas formales (RTF)
Objetivos
Descubrir los errores en la función, la lógica o la implementación de
cualquier representación del software
Verificar que el software alcanza sus requisitos
Garantizar que el software se ha representado según los estándares
establecidos.
Conseguir un software desarrollado de forma uniforme.
Hacer que los proyectos sean manejables
Cada RTF se lleva a cabo mediante una reunión
Criterios para determinar la calidad del
software
Un diseño debe ser modular, es decir, el software debe estar dividido
en elementos que realicen funciones específicas
Un diseño debe tener representaciones distintas y separadas de los
datos y de los procedimientos
Un diseño debe llevar a módulos que exhiban características
funcionales independientes
Un diseño debe conducir a interfaces que reduzcan la complejidad de
las conexiones entre los módulos y el exterior
Un diseño debe tener una organización jerárquica.
Un diseño debe obtenerse mediante un método que sea reproducible y que esté dirigido por la información obtenida durante el análisis de requerimientos
CARACTERÍSTICAS COMUNES DE LAS METODOLOGÍAS DE DISEÑO
Notación para representar los componentes funcionales y sus
interfaces
Heurísticas para el refinamiento y la partición
Mecanismo para la traducción de requisitos en una representación de
diseño
Criterios para la valoración de la calidad.
Se traducen los requisitos
en una representación del software, que se acerca mucho al código fuente
Etapas
Diseño preliminar
Se centra en la transformación de los requisitos
en los datos y la arquitectura del software
Diseño detallado
Se ocupa del refinamiento y de la representación arquitectónica que lleva a una estructura de datos refinada y a las representaciones algorítimicas del software.
Muchas aplicaciones modernas requieren un diseño de la interfaz
Fundamentos del diseño
ABSTRACCIÓN
Niveles de abstracción
Nivel superior
Se establece una solución en términos
generales, en lenguaje natural.
Niveles inferiores
Se
utiliza una orientación más procedimenta
Nivel más bajo
Se establece una solución, de forma que pueda implementarse
directamente
Cada paso de los procesos de la ingeniería del software es un refinamiento del
nivel de abstracción de la solución software
El nivel más bajo de abstracción se alcanza cuando se genera el
código fuente
Conforme ocurre creamos abstracciones de datos y de procedimientos
Abstracción de datos
Es un conjunto de datos que describen un
objeto
Abstracción procedimental
Es una determinada secuencia de
instrucciones que tienen una función limitada y específica
REFINAMIENTO
Refinamiento sucesivo
1ra estrategia de diseño descendente
propuesta por Niklaus Wirth
La arquitectura de un programa se desarrolla en
niveles sucesivos de refinamiento de los detalles procedimentales
Se desarrolla una jerarquía descomponiendo una función de forma sucesiva hasta que se llega a las sentencias del lenguaje de programación
MODULARIDAD
El software se divide en componentes con nombres y ubicaciones
determinados
El software monolítico no puede ser estudiado fácilmente por un lector
Conclusión
Divide y vencerás
La modularidad del
software facilita el desarrollo del mismo, pero hasta un cierto límite
Si llegáramos a dividir el problema en infinitos módulos, los módulos tendrían una complejidad y un esfuerzo mucho menor
Crecería el coste asociado a la
creación de interfaces entre los módulos
ARQUITECTURA DEL SOFTWARE
Se refiere a
La estructura jerárquica de los módulos del software
La estructura de los datos
Se obtiene mediante un proceso de partición, que
relaciona los problemas del mundo real con las soluciones software para resolver los problemas
software.
JERARQUÍA DE CONTROL
Representa la organización jerárquica de los módulos de un programa e implica una jerarquía de control
La representación de jerarquía se suele representar con diagramas de árbol
Términos relacionados
Grado de salida
Número de módulos que controla un módulo
Grado de entrada
Número de módulos que controlan a un módulo
Anchura
Amplitud global del control
Visibilidad
Conjunto de component es del programa que pueden ser
invocados por un módulo
Profundidad
Número de niveles de control
Conectividad
Conjunto de co mponentes a los que se invoca
directamente o se utilizan sus datos
ESTRUCTURA DE DATOS
Representación de la lógica que existe entre los
elementos individuales de información
La estructura de datos es tan importante como la estructura del programa en la representación de la arquitectura del software.
Dicta la organización, los métodos de acceso, el grado
de asociatividad y las alternativas para el tratamiento de la información
PROCEDIMIENTOS DEL SOFTWARE
Se centra en los detalles de procesamiento de cada módulo individual
Debe proporcionar una especificación precisa del
procesamiento, incluyendo
la secuencia de sucesos
los puntos concretos de
decisiones
la repetición de operaciones
la organización/estructura de
los datos
Representación procedimental del software por
capas
Relación entre la estructura y el procedimiento, ya que el procesamiento de un módulo puede suponer la llamada a otros módulos
OCULTAMIENTO DE INFORMACIÓN
Los módulos deben especificarse de forma que la información contenida dentro de un módulo sea inaccesible a otros que no necesiten tal información
Se trata de definir una serie de módulos independientes que se
comuniquen sólo a través de la información necesaria
El uso de ocultamiento de información en el diseño facilitará las modificaciones,
prueba y mantenimiento del software
Diseño modular efectivo
TIPOS DE MÓDULOS
. Módulos secuenciales
Se ejecutan sin interrupción aparente por parte del software de la aplicación, es
decir ejecutan secuencialmente una tarea.
Módulos incrementales
También se les conoce como corrutinas, y pueden ser interrumpidos antes de que terminen por el software de la aplicación, y restablecerse posteriormente su ejecución en el punto en que se interrumpió.
Módulos paralelos
Un módulo paralelo se ejecuta a la vez que otro módulo en entornos
multiprocesadores.
Características de ejecución del módulo
Historial de incorporación
Momento en que se incluye
el módulo en la descripción del software en lenguaje fuente
Mecanismo de activación
Se refiere a la forma en que se invoca a
un módulo
Referencia
Interrupción
Camino de control
Describe la forma en que se
ejecuta internamente, y son los que se describen a continuación
INDEPEND ENCIA FUNCIONAL
Se mide con
Cohesión
Un modulo cohesivo ejecuta una tarea sencilla de un procedimiento de software y requiere poca interacción con procedimientos que ejecutan otras partes de un programa
Dicho de forma sencilla, un módulo cohesivo sólo hace (idealmente) una cosa.
Lo importante es intentar conseguir una cohesión alta y saber reconocer la
cohesión baja
Acoplamiento
El acoplamiento es una medida de la interconexión entre los módulos de una
estructura de programa
El acoplamiento depende de la complejidad de las interfaces entre los módulos
y de los datos que pasan a través de la interfaz
n el diseño de software buscamos el acoplamiento más bajo posible.
Cada módulo se centra en una subfunción específica de los requerimientos y tenga una interfaz sencilla
Consecuencias positivas
Creación de interfaces sencillas
Facilidad para la prueba y el mantenimiento
Módulos independientes fáciles de desarrollar
Se reduce la propagación de errores
Se fomenta la reutilización de módulos
Propiedades
Facilita los cambios
Implementación más sencilla
Reduce la complejidad
Permite el desarrollo paralelo de partes diferentes de un sistema
Definición de diseño según Taylor
"Proceso de aplicar distintas técnicas y principios con el propósito de definir un dispositivo, proceso o sistema con los suficientes detalles como para permitir su realización física”
Diseño de software
Cambian continuamente al aparecer nuevos métodos
Su problema es que
se encuentra en una etapa relativamente temprana en su evolución.
Existen técnicas
de diseño de software para poder evaluar la calidad del software