Este documento presenta notas sobre el diseño de software de un curso de ingeniería de software. Explica conceptos clave del diseño como abstracción, refinamiento, arquitectura, modularidad y patrones. También describe guías para un diseño de calidad como el uso de estilos y patrones reconocidos, y la representación del diseño usando notaciones efectivas. Finalmente, cubre elementos del diseño como datos, arquitectura e interfaces.
1. (c) P. Gomez-Gil, INAOEP. 2009 1
DISEÑO DE SOFTWARE
1ª. Parte
NOTAS DEL CURSO
Ingeniería de Software I
DRA. MARIA DEL PILAR GÓMEZ GIL
INAOEP
Versión:25-10-2009
2. (c) P. Gomez-Gil, INAOEP. 2009 2
Pasando del Análisis al Diseño
[Pressman 05]
3. (c) P. Gomez-Gil, INAOEP. 2009 3
Diseño
Es el proceso de aplicar varias
técnicas y principios con el propósito
de definir un dispositivo, proceso o
sistema con suficiente detalle que
permita su realización física.
Diseño es mas que programar o
escribir código…
4. (c) P. Gomez-Gil, INAOEP. 2009 4
Guías para un Diseño de Calidad
. . .Hay una diferencia entre hacer que
un software trabaje, y hacerlo que
trabaje correctamente. . .
5. (c) P. Gomez-Gil, INAOEP. 2009 5
Guías para un Diseño de Calidad (cont.)
1. Un buen diseño debe tener una arquitectura que:
1. Se ha creado utilizando estilos o patrones “reconocidos”
2. Esta hecho de componentes
3. Se puede implementar de una manera evolutiva, facilitando la
implementación y las pruebas
2. Un buen diseño es modular, es decir, puede partirse de
manera lógica en elementos o subsistemas.
3. Un buen diseño contiene representaciones
diferenciales de datos, arquitectura, interfaces y
componentes.
6. (c) P. Gomez-Gil, INAOEP. 2009 6
Guías para un Diseño de Calidad (cont.)
4. Un buen diseño debe conducir a estructuras
de datos que son apropiadas para las clases a
implementarse, y que resultan de patrones
reconocidos.
5. Un buen diseño debe llevar a componentes
que presentan características funcionales
independientes.
6. Un buen diseño debe conducir a interfaces que
reducen la complejidad de las conexiones
entre componentes y el medio externo.
7. (c) P. Gomez-Gil, INAOEP. 2009 7
Guías para un Diseño de Calidad
(cont.)
Un buen diseño debe llevarse a cabo
utilizando métodos repetibles y que es
conducida por la información obtenida en el
análisis.
Un buen diseño debe representarse usando
una notación que es efectiva en la manera que
comunica el significado del diseño.
8. (c) P. Gomez-Gil, INAOEP. 2009 8
Atributos de Calidad en el Diseño
Funcionalidad
Usabilidad
Confiabilidad
Desempeño
Sustentabilidad …y que significa todo esto??
9. Conceptos fundamentales de Diseño
1. Abstracción
2. Refinamiento
3. Arquitectura
4. Modularidad
5. Patrones
6. Clases del diseño
(c) P. Gomez-Gil, INAOEP. 2009 9
10. (c) P. Gomez-Gil, INAOEP. 2009 10
Conceptos fundamentales de diseño:
Abstracción y Refinamiento
1. ABSTRACCIÓN
La solución a cualquier problema se presenta en
varios niveles de abstracción. En el nivel mas alto se
presenta una solución general. En el nivel mas bajo se
presenta una solución que puede implementarse
directamente.
2. REFINAMIENTO
La arquitectura de un programa se desarrolla a través
del detallado sucesivo de niveles.
11. (c) P. Gomez-Gil, INAOEP. 2009 11
Conceptos fundamentales de diseño:
3. Arquitectura
La arquitectura de software se refiere a la estructura
global del software y la manera en que esta estructura
proporciona integridad conceptual al sistema.
Representa los componentes que tiene el software,
como interactúan y la estructura de los datos que usan
estos componentes
El uso de patrones arquitectónicos permitirán a los
diseñadores reutilizar componentes
La arquitectura del diseño se puede representar
utilizando diferentes modelos: Estructurales, Plantillas,
Dinámicos, de procesos, y funcionales.
12. Conceptos fundamentales de diseño:
4. Modularidad
Es un atributo del software que permite que un programa
sea manejable intelectualmente hablando.
Teóricamente el aumento en el número de módulos
disminuye la complejidad, y por lo tanto el esfuerzo de
resolver un problema; entonces con un número infinito
de módulos tendríamos un problema de complejidad
cero.
Sin embargo el aumento en el número de módulos
genera un aumento en el costo por comunicación entre
módulos.
(c) P. Gomez-Gil, INAOEP. 2009 12
13. (c) P. Gomez-Gil, INAOEP. 2009 13
Número de módulos vs. costo
COSTO O ESFUERZO
NÚMERO DE MÓDULOS
costo por
interface
costo por módulo
Región de
mínimo costo
14. (c) P. Gomez-Gil, INAOEP. 2009 14
Otras características de modularidad
COHESIÓN
Es la medida de la fuerza funcional de un módulo o
clase. Se busca que la clase tenga la cohesión mas
alta posible, lo cual ocurre cuando todos sus
elementos contribuyen a la ejecución de una misma
tarea.
ACOPLAMIENTO
Es la medida de la interdependencia relativa entre
clases. Se busca que exista el mínimo posible de
acoplamiento entre clases, lo cual sucede cuando
las clases se comunican solamente por medio de
mensajes.
15. (c) P. Gomez-Gil, INAOEP. 2009 15
Conceptos fundamentales de diseño:
5. Patrones
Un patrón de diseño describe una estructura de
diseño que resuelve un problema de diseño
particular, dentro de un contexto específico.
Un patrón de diseño provee información que
permite al diseñador determinar si el patrón es
aplicable, si puede re-usarse y si se puede usar
como guía para desarrollar algún patrón similar
con estructura diferente.
16. (c) P. Gomez-Gil, INAOEP. 2009 16
Conceptos Fundamentales del diseño (cont.)
6. Clases de Diseño
Las clases generadas en el análisis definen el dominio
del problema.
En el diseño, las clases se definen de manera que se
refinan las clases obtenidas en el análisis a fin de que se
puedan implementar,
El diseño crea un nuevo conjunto de clases que permiten
implementar la infraestructura de software que va a
sostener la solución.
17. (c) P. Gomez-Gil, INAOEP. 2009 17
Niveles de clases del diseño
Se sugieren 5 niveles de clases de diseño:
Clases para el manejo de la interfaz con el
usuario
Clases para el dominio del negocio
Clases para el proceso
Clases para la persistencia
Clases de administración y control del sistema
18. Características de clases “bien
formadas”
Completa y suficiente. Una clase de diseño debe tener
todos los atributos y métodos razonablemente esperados para
existir.
Primitividad. Los métodos se deben enfocar en resolver UN
servicio de la clase. Una vez que se ha implementado un
servicio a través de un método, la clase no debe proveer
ninguna otra manera de hacer la misma cosa
Alta cohesión. Una clase con un diseño cohesivo tiene un
conjunto pequeño y enfocado de responsabilidades y enfoca
exclusivamente sus atributos y métodos a cumplir esas
responsabilidades
Bajo acoplamiento. Aunque las clases tienen que colaborar
entre sí, esta colaboración debe ser lo mínimo necesario
(c) P. Gomez-Gil, INAOEP. 2009 18
19. El modelo de diseño
Puede verse desde 2 posibles dimensiones: proceso y
abstracción
La dimensión del proceso indica la evolución del modelo
confirme se van ejecutado el proceso de desarrollo de
software
La dimensión de abstracción representa el nivel de
detalle que surge cuando cada elemento del modelo de
análisis se va transformando en su equivalente de
diseño, y posteriormente se va refinando iterativamente
La línea punteada en la figura indica la frontera (difusa)
entre análisis y diseño
(c) P. Gomez-Gil, INAOEP. 2009 19
20. (c) P. Gomez-Gil, INAOEP. 2009 20
Dimensiones del modelo de diseño
[Pressman 05]
21. Elementos de diseño de datos
Crea el modelo de datos e información,
representado en un nivel de abstracción alto, y
se va refinando progresivamente
En la implementación este modelo de datos se
traduce en bases de datos, las cuales en un
futuro formarán “warehouses” que permitirán el
manejo de sistemas administradores de
conocimiento de la empresa
(c) P. Gomez-Gil, INAOEP. 2009 21
22. Elementos de diseño de arquitectura
El modelo de arquitectura se obtiene
principalmente de 3 fuentes:
1. Información acerca del dominio de
aplicación del software a construirse
2. Elementos del modelo de análisis tales
como diagramas de flujo o clases generadas
en el análisis sus relaciones y
colaboraciones
3. Disponibilidad de patrones de arquitectura
(c) P. Gomez-Gil, INAOEP. 2009 22
23. Elementos de diseño de interfaz
Los elementos de diseño de interfaz describen
como la información fluye entrando y saliendo del
sistema, y como se comunican a través de los
componentes definidos como parte de la
arquitectura
Hay 3 elementos importantes en el diseño de
interfaces:
1. Interfaz con el usuario
2. Interfaces externas con otros sistemas, dispositivos,
redes u otros productores o consumidores de
información
3. Interfaces internas entre los diferentes componentes
de diseño
(c) P. Gomez-Gil, INAOEP. 2009 23
24. Diseño de interfaces externas
Requiere información definitiva sobre la
entidad a la cual la información se manda
o recibe.
Debe incluir pruebas de errores y
características de seguridad
(c) P. Gomez-Gil, INAOEP. 2009 24
25. Diseño de interfaces internas
Está fuertemente relacionado con el diseño a nivel
componentes (diseño detallado)
En algunos casos, una interface se diseña de igual
manera que una clase.
Según la OMG “una interfaz es un especificador
de operaciones externamente visibles (publicas)
de una clase, componente u otro clasificador
(incluyendo subsistemas) sin la especificación de
una estructura interna”
Una interfaz es un conjunto de operaciones que
describe alguna parte del comportamiento de un
sistema y las operaciones necesarias para
accesar esas operaciones
(c) P. Gomez-Gil, INAOEP. 2009 25