Please enable JavaScript.
Coggle requires JavaScript to display documents.
Fundamentos del diseño de software - Coggle Diagram
Fundamentos del diseño de software
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"
Ingeniería del software y diseño del software
El diseño procedimental transforma los elementos estructurales en una descripción procedimental del software.
Para integrar y validar el software, se llevan a cabo las pruebas.
El diseño arquitectónico define las relaciones entre los principales elementos estructurales del programa.
El diseño es un paso fundamental de la fase de desarrollo.
El diseño de datos transforma el modelo de campo de información, necesario para implementar el software.
El diseño es la única forma mediante la que podemos traducir con precisión los requisitos del cliente .
El diseño da como resultado representaciones cuya calidad puede ser evaluada.
El diseño es técnicamente la parte central de la ingeniería del software.
Sin diseño, nos arriesgamos a construir un sistema inestable.
El proceso de diseño
El diseño detallado se ocupa del refinamiento y de la representación arquitectónica.
Diseño de la interfaz.
El diseño preliminar se centra en la transformación de los requisitos en los datos y la arquitectura del software.
2.1. Diseño y Calidad del Software
La calidad del diseño se evalúa mediante una serie de revisiones técnicas formales (RTF)
3) Garantizar que el software se ha representado según los estándares establecidos.
4) Conseguir un software desarrollado de forma uniforme.
2) Verificar que el software alcanza sus requisitos.
5) Hacer que los proyectos sean manejables.
1) Descubrir los errores en la función, la lógica o la implementación de cualquier representación del software.
Criterios para determinar la calidad del software
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.
2) Un diseño debe ser modular, es decir, el software debe estar dividido en elementos que realicen funciones específicas.
5) Un diseño debe conducir a interfaces que reduzcan la complejidad de las conexiones entre los módulos y el exterior.
1) Un diseño debe tener una organización jerárquica.
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.
2.2. Características Comunes de las Metodologías de Diseño
Las metodologías de diseño todas tienen varias características comunes
2) Notación para representar los componentes funcionales y sus interfaces.
3) Heurísticas para el refinamiento y la partición.
1) Mecanismo para la traducción de requisitos en una representación de diseño.
4) Criterios para la valoración de la calidad.
Independientemente de la metodología se tiene que aplicar una serie de conceptos fundamentales al diseño de datos, arquitectónico y procedimental
Fundamentos del diseño
Preguntas a resolver
¿Cómo 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?
¿Qué criterios puedo utilizar para dividir el software en componentes individuales?
Cita de Michael A. Jackson
“El principio de la sabiduría de un programador está en reconocer la diferencia entre obtener un programa que funcione y uno que funcione correctamente”.
3.1. Abstracción
Una abstracción de datos es un conjunto de datos que describen un objeto, como puede ser el DNI de una persona, que está compuesta por conjunto de partes de información.
Una abstracción procedimental es una determinada secuencia de instrucciones que tienen una función limitada y específica, como puede ser “mover objeto”, que supone la secuencia de pasos.
Niveles de abstracción
En los niveles inferiores de abstracción se utiliza una orientación más procedimental.
En el nivel más bajo de abstracción, se establece una solución, de forma que pueda implementarse directamente.
En el nivel superior de abstracción se establece una solución en términos generales.
3.2. Refinamiento
El refinamiento sucesivo es una primera estrategia de diseño descendente propuesta por Niklaus Wirth
Se desarrolla una jerarquía descomponiendo una función de forma sucesiva hasta llegar a el lenguaje de programación.
3.3. Modularidad
Divide y vencerás
La modularidad del software facilita el desarrollo del mismo
El software se divide en componentes, que se denominan módulos y que se integran para satisfacer los requisitos del proveedor
3.4. Arquitectura del Software
La estructura de los datos
La estructura jerárquica de los módulos del software
3.5. Jerarquía de Control
Estructura del programa y representa la organización jerárquica de los módulos
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
Profundidad: Número de niveles de control
Conectividad: Conjunto de componentes a los que se invoca directamente o se utilizan sus datos.
3.6. Estructura de Datos
Es una representación de la lógica que existe entre los elementos individuales de información
Dicta la organización, los métodos de acceso, el grado de asociatividad y las alternativas para el tratamiento de la información
3.7. Procedimientos del Software
Procedimiento dentro de un módulo
1 more item...
Representación procedimental del software por capas
1 more item...
3.8.Ocultamiento de Información
2 more items...
Diseño modular efectivo
Un diseño modular:
Facilita los cambios
Implementación más sencilla
Reduce la complejidad
Permite el desarrollo paralelo de partes diferentes de un sistema
4.1. Tipos de Módulos
La definición de módulos en una arquitectura de software se utiliza la abstracción y ocultamiento de información
El mecanismo de activación se refiere a la forma en que se invoca a un módulo
El camino de control de un módulo describe la forma en que se ejecuta internamente, y son los que se describen a continuación.
El historial de incorporación se refiere al momento en que se incluye el módulo en la descripción del software en lenguaje fuente.
4.1.1. Módulos secuenciales
Se ejecutan sin interrupción aparente por parte del software de la aplicación, es decir ejecutan secuencialmente una tarea.
4.1.2. Módulos incrementales
Se les conoce como corrutinas pueden ser interrumpidos antes de que terminen por el software de la aplicación, y restablecerse posteriormente
4.1.3. Módulos paralelos
Un módulo paralelo se ejecuta a la vez que otro módulo en entornos multiprocesadores.
4.2. Independencia Funcional
La independencia funcional se adquiere desarrollando módulos con una función clara y con pocas relaciones con otros módulos
Esta independencia tiene varias consecuencias positivas como son:
Facilidad para la prueba y el mantenimiento
Se reduce la propagación de errores
Creación de interfaces sencillas
Se fomenta la reutilización de módulos
Módulos independientes fáciles de desarrollar
4.2.1. Cohesión
La cohesión es una extensión del concepto de ocultamiento de información requiere poca interacción con procedimientos que ejecutan otras partes de un programa.
4.2.2 Acoplamiento
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
En el diseño de software buscamos el acoplamiento más bajo posible
Es una medida de la interconexión entre los módulos de una estructura de programa
Una conectividad sencilla entre módulos da como resultado un software más fácil de comprender