Please enable JavaScript.
Coggle requires JavaScript to display documents.
Fundamentos del diseño de software - Coggle Diagram
Fundamentos del diseño de software
El diseño es el primer paso de la fase de desarrollo de cualquier producto o sistema de ingeniería
"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"
1)Ingeniería de software y diseño de software
Diseño, codificación y prueba son las primeras tres actividades técnicas. Cada una transforma la información obtenida en los requisitos de software de forma que al final se obtiene un software valido
Durante el diseño se desarrollan, revisan y se documentan los refinamientos progresivos de las estructuras de datos, estructura del programa y de los detalles procedimentales
Mediante algunas metodologías de diseño se realiza
Diseño de datos:
Transforma el modelo de campo de información creado durante el análisis de las estructuras de datos que se van a requerir para implementar el software
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
Después del diseño se genera el código fuente y, para integrar y validar el software se lleva a cabo las pruebas
Sin diseño nos arriesgamos a construir un sistema inestable, un sistema que falle cuando se realicen pequeños cambios, dificil de probar, cuya calidad no pueda ser evaluada y un despilfarro de dinero
2)Proceso de Diseño
Proceso mediante el que se traducen los requisitos en una representación del software, similar al código fuente
Diseño preliminar:
Se centra en la trasformacion de los requisitos en los datos y la arquitectura
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 algoritmicas del software
Además muchas aplicaciones requieren un diseño de la interfaz
Diseño y calidad de software
La calidad del diseño se evalúa mediante una serie de revisiones técnicas formales (RTF)
1)Descubrir los errores en la función, la lógica o la implementación de cualquier software alcanza sus requisitos
2)Verificar que el software alcanza sus requisitos
3)Garantizar que el software se ha representado según los estándares establecidos
4)Conseguir un software desarrollado de forma uniforme
5)Hacer que los proyectos sean manejables
Criterios para determinar la calidad del software
1)Un diseño debe tener una organización jerárquica
2)Un diseño debe ser modular, es decir, el software debe estar dividido en elementos que realicen funciones especificas
3)Un diseño debe tener representaciones distintas y separadas de los datos y de los procedimientos
4)Un diseño debe llevar a módulos que exhiban características funcionales independientes
5)Un diseño debe conducir a interfaces que reduzcan la complejidad de las conexiones entre los módulos y el exterior
6)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
Caracteristicas comunes de las metodologías de diseño:
Independiente de la metodología de diseño que se utilice, todas tienen varias características comunes:
1)Mecanismo para la traducción de requisitos en una representación de diseño
2)Notación para representar los componentes funcionales y sus interfaces
3)Heurística para el refinamiento y la partición
4)Criterios para la valoración de la calidad
3)Fundamentos de diseño
Ayudan a responder estas preguntas
Que criterios puedo utilizar para dividir el software en componentes individuales?
Como se separan los detalles de una función o de la estructura de los datos de la representación conceptual del software?
Existen criterios uniformes que definan la calidad técnica de un diseño de software?
Abstracción
Cuando se considera una solución modular para cualquier problema pueden formularse varios niveles de abstracción
En el nivel superior se establece una solución en lenguaje natural
En los niveles inferiores se utiliza una orientación mas procedimental
En el nivel mas bajo de abstracción se establece una solución, de forma que pueda implementarse directamente
El nivel mas bajo de abstraccion se alcanza cuando se genera el código fuente
Conforme nos movemos por los diferentes niveles de abstracción, trabajamos para crear abstracciones de datos y procedimientos
Abstracción de datos:
En un conjunto de datos que describen un objeto (Por ejemplo el carnet de una persona)
Abstracción procedimental:
Es una determinada secuencia de instrucciones que tienen una función limitada y especifica.
Refinamiento
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
Comenzamos con una declaración de la función a un nivel superior de abstracción, es decir que no proporciona información sobre el funcionamiento interno, si no que se va realizando sucesivamente, dando cada vez mas detalles
Modularidad
El software se divide en componentes que se denominan módulos que se integran para satisfacer los requisitos del proveedor
La modularidad del software facilita el desarrollo del mismo pero hasta un cierto limite (Divide y vencerás) ya que podria crecer el coste asociado a la creacion de interfaces entre modulos
Arquitectura del software
Se refiere a dos caracteristicas importantes del software
Arquitectura jerárquica
Estructura de datos
La arquitectura del software se obtiene mediante un proceso de participación, que relaciona los problemas del mundo real con las soluciones de software para resolver los problemas software
Jerarquia 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 aunque también se pueden utilizar otros tipos de notaciones
Estructura de datos
Es una representación de la lógica que existe entre los elementos individuales de información
La estructura de datos dicta la organización, los métodos de acceso, el grado de asociatividad y las alternativas para el tratamiento de la información
Procedimiento dentro de un modulo
Debe proporcionar una especificación precisa del procesamiento, incluyendo la secuencia de sucesos, los puntos concretos de decisiones, la repetición de operaciones e incluso la organización/estructura de datos
Ocultamiento de información
Sugiere que los módulos deben especificarse de forma que la información contenida dentro de un modulo sea inaccesible a otros módulos que no necesiten tal información
El uso de ocultamiento de información facilita las modificaciones, prueba y mantenimiento del software
Trata de definir una serie de módulos independientes que se comuniquen solo a través de la información necesaria para realizar la función de software
Diseño modular efectivo
Todos los fundamentos del diseño anteriores sirven para incentivar los diseños modulares
Reduce la complejidad, facilita los cambios, implementación mas sencilla y permite el desarrollo paralelo de partes diferentes de un sistema
Tipos de módulos
Módulos secuenciales:
Se ejecuta sin interrupción aparente por parte del software de la aplicación, es decir, ejecutan secuencialmente una tarea
Módulos incrementales:
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:
Se ejecuta a la vez que otro modulo en entornos multiprocesadores
Independencia funcional
Es una derivación directa de la modularidad de la abstracción y del ocultamiento de la información
Se adquiere desarrollando módulos con una función clara y con pocas relaciones con otros módulos, de forma que cada módulo se centra en una subfunción especifica de los requerimientos y tenga una interfaz sencilla
Consecuencias positivas
Módulos independientes faciles de desarrollar
Creacion de interfaces sencillas
Facilidad para la prueba y el mantenimiento
Se reduce la propagacion de errores
Se fomenta la reutilizacion de módulos
La independencia se mide con dos criterios cualitativos
Cohesión
Es una extensión del concepto de ocultamiento de información
Un módulo cohesivo ejecuta una tarea sencilla de procedimiento de software y requiere poca interacción con procedimientos que ejecutan otras partes de un programa (Solo hace una cosa)
la idea es evitar la alta cohesión en el diseño de los módulos
Acoplamiento
Medida de interconexión entre los módulos y de los datos que pasan a través de la interfaz
Depende de la complejidad de las interfaces entre los módulos y de los datos que pasan a través de la interfaz
Se busca el acoplamiento mas bajo posible. Una conectividad sencilla entre módulos da como resultado un software mas facil de comprender y menos propenso al efecto onda (propagación de errores a lo largo del sistema)