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
Una vez se tienen los Requisitos de Software le siguen las fases; diseño, codificación y prueba
mediante metodologías de diseño se logran:
Diseño Arquitectónico
Diseño Procedimental
Diseño de datos
Desarrollar con un diseño nos permite darle estabilidad al proyecto
Las fases de diseño, codificación y prueba absorben el 75% o más del coste de
la ingeniería del software
El proceso de diseño
Dos etapas:
Diseño preliminar
Diseño detallado
Diseño y calidad del software
El diseño se evalúa con Revisiones Técnicas Formales (RTF)
Tienen como objetivos:
Lograr software uniforme
Verificar cumplimiento de requisitos
Lograr proyecto manejable
Descubrir errores
Garantizar estándares
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
Fundamentos del Diseño
Arquitectura del software
Se refiere a la estructura jerárquica de los módulos del software y la estructura de los datos
Se obtiene a través de un proceso de partición que relaciona los problemas del mundo real con las soluciones software
Jerarquía de control
Se refiere a la organización jerárquica de los módulos de un programa, representada en diagramas de árbol
Implica términos como profundidad, anchura, grado de salida, grado de entrada, visibilidad y conectividad para describir la estructura del programa
Modularidad
Implica dividir el software en componentes llamados módulos, que se integran para cumplir con los requisitos
Evita la complejidad excesiva de un programa monolítico
Divide y vencerás
Estructura de datos
Es la representación de la relación entre los elementos de información
Afecta al diseño del programa
Determina la organización, métodos de acceso y tratamiento de la información en el software
Refinamiento
Es una estrategia de diseño descendente en la que se desarrolla la arquitectura de un programa en niveles sucesivos
Comienza con una declaración de la función o información a un nivel alto de abstracción y luego se añaden detalles progresivamente
Procedimientos del software
Se enfocan en los detalles de procesamiento de cada módulo
Los procedimientos pueden llamar a otros módulos, formando una representación procedimental por capas
Abstracción
Implica representar una solución en diferentes niveles de detalle
En el nivel superior, se describe la solución de manera general en lenguaje natural
A medida que se desciende a niveles más bajos, se utilizan detalles más procedimentales
En el nivel más bajo, se establece la solución para su implementación directa
Permiten representar un objeto
a diferentes niveles de detalle
Ocultamiento de información
Implica que los módulos deben definirse de manera que la información (procedimientos y datos) sea inaccesible para otros módulos que no la necesitan
Facilita las modificaciones y reduce la propagación de errores en el software
Diseño modular efectivo
Tipos de módulos
Módulos incrementales
Módulos paralelos
Módulos secuenciales
Los fundamentos de diseño incentivan los diseños modulares
Los diseños modulares:
Facilitan los cambios
Permiten una implementación más fácil
Reducen la complejidad
Permiten el desarrollo paralelo de partes diferentes de un sistema
Independencia funcional
Se logra mediante módulos con funciones claras y pocas relaciones con otros módulos
La independencia se evalúa con cohesión y acoplamiento como criterios cualitativos
Cohesión
:
Se refiere a que un módulo realiza una tarea simple y requiere poca interacción con otros módulos
Un módulo cohesivo idealmente hace una sola cosa
Es importante para lograr una mayor independencia funcional en el software
Acoplamiento
Se refiere a la interconexión entre módulos
Buscamos minimizar el acoplamiento para tener interfaces simples entre módulos
Resulta en software más comprensible y menos propenso a errores que se propagan por todo el sistema
Se deriva de la modularidad, la abstracción y el ocultamiento de información