Please enable JavaScript.
Coggle requires JavaScript to display documents.
Fundamentos del diseño de software - Coggle Diagram
Fundamentos del diseño de software
El proceso de diseño
Proceso donde se traducen los requisitos
en una representación del software
Desde el punto de vista de la gestión del proyecto
Diseño preliminar
Transformación de los requisitos
en los datos y la arquitectura del software
Diseño detallado
Refinamiento y de la representación
arquitectónica
Estructura de datos refinada y a las
representaciones algorítimicas del software
Relación entre los puntos de vista de gestión y técnicos
Punto de vista técnico
Diseño arquitectónico
*
Diseño procedimental
*
Diseño de datos
*
*
Diseño detallado
Diseño preliminar
Punto de vista gestión
Diseño de la interfaz
*
*
Diseño y calidad del software
Calidad del diseño se evalúa con
serie de revisiones técnicas formales (RTF)
¿Objetivos?
Garantizar el software representado según los estándares
establecidos
Reunión y sólo tendrá éxito si está bien
planificada, controlada y atendida
¿Criterios para la calidad del software?
6 more items...
Conseguir un software desarrollado de forma uniforme
Verificar que el software alcanza sus requisitos
Hacer que los proyectos sean manejables
Descubrir errores de funciónes, lógica o implementaciónes (cualquier representación del software)
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
Diseño
Según Taylor
Proceso de aplicar distintas técnicas y principios
¿Cuál es el propósito?
Definir dispositivo, proceso o sistema tan detalladamente que permita
su realización física
Primer paso de la fase de desarrollo de cualquier producto
Ingeniería del software y diseño del software
Establecidos los requisitos del software, diseño es primera de tres actividades técnicas
Codificación
Se transforma información para finalmente obtener un software
validado
Prueba
Diseño
Metodologías de diseño
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
Diseño de datos
Transforma el modelo de campo de información
¿Ventajas del diseño de software?
Sistema falla menos cuando se realicen pequeños cambios
Menos riesgo de construir un sistema inestable
Sistema cuya calidad pueda ser evaluada más adelante,
cuando quede poco tiempo
Fundamentos del diseño
Ayuda al desarrollador del software a responder
¿Cómo se separan los detalles de una función?
¿Existen criterios uniformes que definan la calidad técnica de un
diseño de software?
¿Qué criterios puedo utilizar para dividir el software en componentes
individuales?
Arquitectura del software
Se refiere a dos características importantes del software
La estructura jerárquica de los módulos del software
La estructura de los datos
Obtiene mediante proceso de partición, que
relaciona problemas del mundo real
Solución de software
Evolución de la estructura
Problema a ser resuelto con software
Jerarquía de control
Representa organización jerárquica de módulos de un programa
Terminos 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 componentes del programa que pueden ser invocados por un módulo
Conectividad
Conjunto componentes los que se invoca
directamente o se utilizan sus datos
Profundidad
Número de niveles de control
Modularidad
Software se divide en componentes con nombres y ubicaciones determinados (módulos)
¿Software monolítico?
Programa grande compuesto de un solo módulo
¡Divide y vencerás!
Facilita el desarrollo del software, pero hasta un cierto límite
Estructura de datos
Representación de la lógica que existe entre los
elementos individuales de información
struct _student Jhon
Refinamiento
Niklaus Wirth (Refinamiento sucesivo)
Es una primera estrategia de diseño descendente propuesta por Niklaus
¿Cómo se desarrolla la arquitectura de un programa?
En niveles sucesivos de refinamiento de los detalles procedimentales
Desarrolla una jerarquía descomponiendo función sucesiva llegando a sentencias (lenguaje de programación)
Procedimientos del software
Procedimiento dentro de un módulo
Procedimiento realizado por capas
Procesamiento de un módulo puede suponer la llamada a otros módulos
Se centra en los detalles de procesamiento de cada módulo individual
Abstracción
En los niveles inferiores de abstracción
Se utiliza una orientación más procedimental
Diferentes niveles de abstracción, trabajamos
para crear abstracciones de datos y procedimientos
Abstracción de datos
Conjunto de datos que describen un objeto
3 more items...
Abstracción procedimenta
Determinada secuencia de instrucciones que tienen una función limitada y específica
En el nivel más bajo de abstracción
Se establece una solución, de forma que pueda implementarse directamente
Nivel superior de abstracción
Solución en términos generales, en lenguaje natural
Ocultamiento de información
Módulos deben especificarse
Información del módulo inaccesible de módulos que no necesiten tal información.
Según Michael A. Jackson (El principio de la sabiduría de un programador)
Reconocer diferencia entre obtener un programa funcione y uno que funcione correctamente
Diseño modular efectivo
Fundamentos del diseño anteriores sirven para incentivar los diseños
modulares
¿Ventajas?
Facilita los cambios
Implementación más sencilla
Reduce la complejidad
Permite el desarrollo paralelo de partes diferentes de un sistema
Tipos de módulos
Módulos incrementales (También se les conoce como corrutinas)
Pueden ser interrumpidos antes que terminen por el software de la aplicación
Se restablece posteriormente su ejecución en el punto en que se interrumpió
Módulos paralelos
Se ejecuta a la vez que otro módulo en entornos multiprocesadores
Módulos secuenciales
Ejecuta secuencialmente una tarea
Independencia funcional
Derivación directa de modularidad, de la
abstracción y ocultamiento de información
¿Ventajas?
Facilidad para la prueba y el mantenimiento
Reduce la propagación de errores
Creación de interfaces sencillas
Fomenta la reutilización de módulos
Módulos independientes fáciles de desarrollar
Acoplamiento
Medida de la interconexión entre módulos de una
estructura de programa
¿Ventajas de un bajo acoplamiento?
Software más fácil de
comprender y menos propenso al efecto onda
¿Efecto onda?
Es la propagación de errores a lo
largo del sistema
Cohesión
Extensión del concepto de ocultamiento de información
¿Ventajas?
Poca interacción con procedimientos que ejecutan otras partes de un programa
Representación de la escala de cohesión
Un módulo cohesivo sólo hace (idealmente) una cosa
Módulo cohesivo ejecuta una tarea sencilla de un procedimiento de software