conceptos de diseño

46
Ingeniería en Sistemas de Información Diseño de Sistemas (3K1)

Upload: juan-pablo-bustos-thames

Post on 24-May-2015

12.862 views

Category:

Documents


6 download

DESCRIPTION

UTN-FRT. Cátedra de Diseño de Sistemas. Unidad I. Conceptos de Diseño. 3K1 - 2011

TRANSCRIPT

Page 1: Conceptos de diseño

Ingeniería en Sistemas de Información

Diseño de Sistemas(3K1)

Page 2: Conceptos de diseño

f) Ingeniería del Software Asistida por Computadora. Clasificación de CASE

 

Sommerville. Sección 4.5  

C. Proceso de Diseño Pressman. Cap. 13.2 Introducción.

 

I. Fases del diseño. Pressman. Sección 13.1Sommerville. Sección 4.3.2

II. Diseño y calidad del software Pressman. 13.2.1

III. Principios y conceptos del diseño. Pressman. Sección 13.3 y 13.4

IV. Documentación del Diseño. Pressman, Sección 13.8

V. Análisis y Diseño Orientado a Objetos Sommerville, Cap.14Larman, 2ª. Ed., Cap. 1.4Pressman, Cap.21 y 22

VI. Modelos de dominio, Casos de Uso. (revisión)

Larman, 1ª. Ed.,Cap. 9/11Larman, 2a. Ed. Cap. 9/11

VII. Del Análisis al Diseño Larman, 1ª. Ed. Cap. 15 Larman, 2ª. Ed. Cap. 14

Contenidos de la Unidad 1Introducción al Diseño

Page 3: Conceptos de diseño

Durante las últimas cuatro décadas ha habido una evolución de los Conceptos fundamentales de Diseño de Software.

El grado de interés en cada concepto ha variado con los años.

Cada uno de ellos proporciona la base desde donde el diseñador podrá aplicar los mejores Métodos de Diseño.

Cada uno ayudará al Ingeniero del Software a responder a estas preguntas:

Conceptos del Diseño(Pressman 13.4)

Page 4: Conceptos de diseño

¿Qué criterios usamos para la partir el software en componentes individuales?

¿Cómo se puede separar la función y la estructura de datos de una representación conceptual del software?

¿Existen criterios uniformes que definen la calidad técnica de un Diseño de Software?

Conceptos del DiseñoPreguntas que permiten

responder

Page 5: Conceptos de diseño

«El comienzo de la sabiduría para un ingeniero del software es reconocer la diferencia entre hacer que un programa funcione y conseguir que lo haga correctamente». [Jackson]

Los Conceptos de Diseño de Software fundamentales proporcionan el marco de trabajo necesario para conseguir que lo haga correctamente.

Conceptos del Diseño

Page 6: Conceptos de diseño

«La abstracción es una de las formas fundamentales en que los hombres enfrentan a la complejidad»

Cuando buscamos una solución modular a cualquier problema, pueden existir varios niveles de abstracción.

En el nivel más alto, la solución se expone como una medida extensa, empleando el lenguaje del entorno del problema.

En niveles inferiores de abstracción, se toma una orientación más procedimental.

Conceptos del DiseñoLa Abstracción

Page 7: Conceptos de diseño

La terminología orientada a problemas va emparejada con la terminología orientada a la implementación en un esfuerzo por solucionar el problema.

En el nivel más bajo de abstracción, se establece la solución para poder implementarse directamente.

La noción psicológica de «abstracción» permite concentrarse en un problema a algún nivel de generalización sin tener en consideración los datos irrelevantes de bajo nivel;

La abstracción permite trabajar con conceptos y términos familiares en el entorno del problema, sin tener que transformarlos en una estructura no familiar.

Conceptos del DiseñoLa Abstracción

Page 8: Conceptos de diseño

Cada paso del proceso del software es un refinamiento en el nivel de abstracción para la solución del software.

Durante el Análisis de los requisitos del software, la solución del software se establece en términos «familiares del entorno del problema».

A medida que nos adentramos en el Diseño, se reduce el nivel de abstracción.

Finalmente el nivel de abstracción más bajo se alcanza cuando se genera el código fuente.

Conceptos del DiseñoLa Abstracción

Page 9: Conceptos de diseño

A medida que alcanzamos diferentes niveles de abstracción, creamos abstracciones procedimentales y de datos.

Abstracción procedimental => secuencia de instrucciones con una función específica y limitada.

Ejemplo de abstracción procedimental => «abrir» una puerta.

«Abrir» implica una secuencia larga de pasos procedimentales:

Llegar a la puerta; alcanzar y agarrar el picaporte; girarlo y tirar la puerta; separarse al mover la puerta, etc.

Conceptos del DiseñoLa Abstracción

Page 10: Conceptos de diseño

Abstracción de datos => colección de datos que describe un objeto de datos.

En el contexto de la abstracción procedimental abrir, hay una abstracción de datos llamada puerta.

La abstracción de datos para puerta son el conjunto de atributos que describen esta puerta.

Ejemplo => tipo de puerta, dirección de apertura, mecanismo de apertura, peso, dimensiones.

La abstracción procedimental abrir hace uso de la información contenida en los atributos de la abstracción de datos puerta.

Conceptos del DiseñoLa Abstracción

Page 11: Conceptos de diseño

La abstracción de control es la tercera forma de abstracción que se utiliza en el diseño del software.

Al igual que las abstracciones procedimentales y de datos, este tipo de abstracción implica un mecanismo de control de programa sin especificar los datos internos.

Un ejemplo de abstracción de control es el semáforo de sincronización que se utiliza para coordinar las actividades en un sistema operativo.

Conceptos del DiseñoLa Abstracción

Page 12: Conceptos de diseño

Consejo: Como diseñador, trabaje mucho y duro para derivar abstracciones, tanto procedimentales como de datos, que sirvan para el problema que tenga en ese momento, pero que también se puedan volver o utilizar en otras situaciones.

Conceptos del DiseñoLa Abstracción

Page 13: Conceptos de diseño

El refinamiento paso a paso es una estrategia de diseño descendente propuesta originalmente por Wirth.

El desarrollo de un programa se realiza refinando sucesivamente los niveles de detalle procedimentales.

Una jerarquía se desarrolla descomponiendo una sentencia macroscópica de función (una abstracción procedimental) paso a paso hasta alcanzar las sentencias del lenguaje de programación.

Conceptos del DiseñoRefinamiento

Page 14: Conceptos de diseño

Wirth brinda una visión general del Refinamiento: En cada paso (del Refinamiento), se descomponen una o

varias instrucciones del programa en instrucciones más detalladas.

Esta descomposición sucesiva (refinamiento de especificaciones) termina cuando todas las instrucciones se expresan en función de cualquier lenguaje de programación.

Así como se refinan las tareas, los datos también se tienen que refinar, descomponer o estructurar, en paralelo con el programa.

Todos los pasos del refinamiento implican decisiones de diseño.

Conceptos del DiseñoRefinamiento

Page 15: Conceptos de diseño

El Proceso de Refinamiento de Programas es similar al proceso de refinamiento y partición que se utiliza durante el Análisis.

La diferencia radica en el nivel de detalle de implementación que se haya tomado en consideración, no en el enfoque.

Consejo => Existe la tendencia de entrar en detalle inmediatamente, saltándose los pasos de refinamiento.

Ésto conduce a errores y omisiones y hace que el diseño sea más difícil de revisar.

Realice el refinamiento paso a paso.

Conceptos del DiseñoRefinamiento

Page 16: Conceptos de diseño

El Refinamiento es un proceso de Elaboración. Se comienza con una sentencia de función que se define a

un nivel alto de abstracción. Esta sentencia describe la función conceptualmente,

pero no proporciona información sobre su funcionamiento interno.

El refinamiento hace que el diseñador trabaje sobre la sentencia original, proporcionando cada vez más detalles a medida que van teniendo lugar sucesivamente todos y cada uno de los refinamientos (Elaboración).

Conceptos del DiseñoRefinamiento

Page 17: Conceptos de diseño

El software se divide en componentes que se abordan por separado, llamados Módulos, que se integran para satisfacer los requisitos del problema.

Modularidad => Único atributo del software que permite gestionar un programa intelectualmente.

El software monolítico (programa grande formado por un Único módulo) no puede ser entendido fácilmente.

La cantidad de rutas de control, la amplitud de referencias, la cantidad de variables y la complejidad global lo hará difícil de entender.

Conceptos del DiseñoModularidad

Page 18: Conceptos de diseño

Esto es obvio: Se tarda más en resolver un problema difícil.

Esto lleva a una conclusión: «divide y vencerás» es más fácil resolver un problema complejo cuando se rompe en piezas manejables.

Consejo => No modularice de más. La simplicidad de cada módulo se eclipsará con la complejidad de la integración.

Conceptos del DiseñoModularidad

Page 19: Conceptos de diseño

El esfuerzo (costo) para desarrollar un módulo individual disminuye a medida que aumenta el número total de módulos.

Con los mismos requisitos, tener más módulos conduce a un tamaño menor de cada módulo.

Sin embargo, a medida que aumenta el número de módulos, también crece el esfuerzo (costo) asociado con la integración de módulos.

Conceptos del DiseñoModularidad

Page 20: Conceptos de diseño

¿Cómo se define un módulo con un tamaño adecuado?

La respuesta se encuentra en los métodos utilizados para definir los módulos dentro de un sistema.

Hay 5 criterios que ayudan a definir un sistema modular efectivo:

Conceptos del DiseñoModularidad

Page 21: Conceptos de diseño

Capacidad de descomposición modular. Si un Método de Diseño proporciona un mecanismo

sistemático para descomponer el problema en subproblemas, reducirá la complejidad de todo el problema, consiguiendo así una solución modular efectiva.

Capacidad de empleo de componentes modulares. Si un Método de Diseño permite ensamblar los

componentes de diseño (reusables) existentes en un sistema nuevo, producirá una solución modular que no inventa nada ya inventado.

Conceptos del DiseñoCriterios para definir

Modularidad

Page 22: Conceptos de diseño

Capacidad de comprensión modular. Si un módulo se puede comprender como una

unidad autónoma (sin referencias a otros módulos) será más fácil de construir y de cambiar.

Continuidad modular. Si pequeños cambios en los requisitos del sistema

provocan cambios en los módulos individuales, en vez de cambios generalizados en el sistema, se minimizará el impacto de los efectos secundarios de los cambios.

Conceptos del DiseñoCriterios para definir

Modularidad

Page 23: Conceptos de diseño

Protección modular. Si dentro de un módulo se produce una

condición aberrante y sus efectos se limitan a ese módulo, se minimizará el impacto de los efectos secundarios inducidos por los errores.

Conceptos del DiseñoCriterios para definir

Modularidad

Page 24: Conceptos de diseño

Un Sistema se puede diseñar modularmente, aunque su implementación sea «monolítica».

=> El Software puede diseñarse modularmente.

El código se puede desarrollar «en línea». Aunque el código fuente del programa puede no

tener un aspecto modular a primera vista, se ha mantenido la filosofía y el programa proporcionará los beneficios de un sistema modular.

Conceptos del DiseñoModularidad: Corolario

Page 25: Conceptos de diseño

Arquitectura del Software => «Estructura Global del Software y a las formas en que esa Estructura proporciona la integridad conceptual de un sistema».

Es la estructura jerárquica de los componentes del programa (módulos), la manera en que los componentes interactúan y la estructura de datos que van a utilizar los componentes.

«Componentes» => representan los elementos principales del sistema y sus interacciones.

Conceptos del DiseñoArquitectura del Software

Page 26: Conceptos de diseño

Objetivo del Diseño del Software => derivar una representación arquitectónica de un sistema.

Esta representación sirve como marco de trabajo desde donde se llevan a cabo actividades de diseño más detalladas.

Un conjunto de patrones arquitectónicos permiten que el ingeniero del software reutilice los conceptos a nivel de diseño.

Conceptos del DiseñoArquitectura del Software

Page 27: Conceptos de diseño

Propiedades que deben especificarse en el Diseño Arquitectónico:

Propiedades Estructurales: Definen los componentes de un sistema (módulos, objetos, filtros) y la manera en que éstos se empaquetan e interactúan unos con otros.

Por ejemplo, los objetos se empaquetan para encapsular: los datos y el procesamiento que manipula los datos e interactúan mediante la invocación de métodos.

Conceptos del DiseñoArquitectura del Software

Page 28: Conceptos de diseño

Propiedades Extra-Funcionales: El Diseño Arquitectónico debe ocuparse de lograr los

requisitos de rendimiento, capacidad, fiabilidad, seguridad, capacidad de adaptación y otras características del sistema.

Familias de sistemas relacionados. El Diseño Arquitectónico se dibuja sobre patrones

repetibles basados en diseños de familias de sistemas similares.

El diseño debe reutilizar los bloques de construcción arquitectónicos.

Conceptos del DiseñoArquitectura del Software

Page 29: Conceptos de diseño

El Diseño Arquitectónico se puede representar mediante 5 tipos distintos de modelos :

Modelos Estructurales => representan la arquitectura como una colección organizada de componentes de programa.

Modelos de Marco de Trabajo => aumentan el nivel de abstracción del diseño. Identifican los marcos de trabajo (Patrones) repetibles en tipos similares de aplicaciones.

Conceptos del DiseñoArquitectura del Software

Page 30: Conceptos de diseño

Modelos Dinámicos => tratan sobre el Comportamiento de la Arquitectura. Indican cómo puede cambiar la estructura del sistema en función de los acontecimientos externos.

Modelos de Proceso => se centran en el diseño del proceso técnico de negocios al cual tiene que adaptar el sistema.

Modelos Funcionales => se utilizan para representar la jerarquía funcional de un sistema.

Conceptos del DiseñoArquitectura del Software

Page 31: Conceptos de diseño

La Jerarquía de Control, llamada «estructura de programa», representa la organización de los componentes de programa (módulos) e implica una jerarquía de control.

El diagrama más común es el de forma de árbol, que representa el control jerárquico para las arquitecturas de llamada y de retorno.

Conceptos del DiseñoJerarquía de Control

Page 32: Conceptos de diseño

Según la Figura siguiente, la profundidad y el ancho indican la cantidad de niveles de control y el ámbito de control global, respectivamente.

El grado de salida mide el número de módulos que son controlados directamente por otro módulo.

El grado de entrada indica la cantidad de módulos que controlan directamente a un módulo dado.

La relación de control entre los módulos se expresa así: un módulo que controla a otro módulo es superior a éste, e inversamente, un módulo controlado por otro es subordinado del controlador.

Conceptos del DiseñoJerarquía de Control

Page 33: Conceptos de diseño

Conceptos del DiseñoJerarquía de Control

Page 34: Conceptos de diseño

Si el estilo arquitectónico de un sistema es jerárquico, la estructura del programa se puede dividir tanto horizontal como verticalmente.

El enfoque más simple de la división horizontal define tres particiones -entrada, transformación de datos (procesamiento) y salida-.

La división horizontal de la arquitectura proporciona ventajas: Software más fácil de probar. Software más fácil de mantener Propaga menos efectos secundarios Software más fácil de ampliar

Conceptos del DiseñoDivisión Estructural

Page 35: Conceptos de diseño

Como las funciones principales se desacoplan unas de otras, el cambio tiende a ser menos complejo y la extensión del sistema es más fácil de llevar, sin efectos secundarios.

Desventaja de la división horizontal: Los datos pasan a través de interfaces de módulos que pueden complicar el control global del flujo del programa.

Conceptos del DiseñoDivisión Estructural

Page 36: Conceptos de diseño

La División Vertical o Factorización (Factoring) sugiere que la estructura de control (toma de decisiones) y el trabajo se distribuyan de manera descendente.

Los módulos superiores harán funciones de control y no trabajo de procesamiento.

Los módulos inferiores deberán ser los trabajadores => a cargo de todas las tareas de entrada, proceso y salida.

Conceptos del DiseñoDivisión Estructural

Page 37: Conceptos de diseño

Un cambio en un Módulo de Control (parte superior de la estructura) tiene mayor probabilidad de propagar efectos secundarios a sus módulos subordinados.

Un cambio en un módulo trabajador, por su nivel bajo en la estructura, es menos probable que propague efectos secundarios.

El comportamiento básico de un programa es menos probable que cambie.

Por eso, las estructuras con división vertical son menos susceptibles a efectos secundarios cuando hay cambios y se pueden mantener mejor -un factor de calidad clave-.

Conceptos del DiseñoDivisión Estructural

Page 38: Conceptos de diseño

Consejo => los módulos-trabajador tienden a cambiar de forma más frecuente que los módulos de control.

Si se colocan en la parte inferior de la estructura, se reducen los efectos secundarios (originados por el cambio).

Conceptos del DiseñoDivisión Estructural

Page 39: Conceptos de diseño

La Estructura de Datos es una representación de la relación lógica entre elementos individuales de datos.

Como la estructura de la información afectará invariablemente al diseño procedimental final, la estructura de datos es tan importante como la estructura de programa para la representación de la arquitectura del software.

Conceptos del DiseñoEstructura de Datos

Page 40: Conceptos de diseño

Elemento escalar => Estructura de Datos más simple. Representa un solo elemento de información que

puede ser tratado por un identificador => se puede acceder a él especificando un sola dirección en memoria.

El tamaño y formato de un elemento escalar puede variar.

Por ejemplo: una entidad lógica de un bit de tamaño; un entero o número de coma flotante con un tamaño de 8 a 64 bits; una cadena de caracteres de cientos o miles de bytes.

Conceptos del DiseñoEstructura de Datos

Page 41: Conceptos de diseño

Cuando los elementos escalares se organizan como una lista o grupo contiguo, se forma un vector secuencia.

Los vectores son las estructuras de datos más comunes y abren la puerta a la indexación variable de la información.

Cuando el vector secuencial se amplía a dos, tres o un número arbitrario de dimensiones, se crea un espacio n-dimensional.

El espacio n-dimensional más común es la matriz bidimensional (array).

Conceptos del DiseñoEstructura de Datos

Page 42: Conceptos de diseño

Los elementos, vectores y espacios (nodos) pueden estar organizados en diversos formatos.

Una lista enlazada es una estructura de datos que organiza elementos escalares, vectores o espacios (nodos) no contiguos y les permite ser procesados como una lista.

Cada nodo contiene la organización de datos y un puntero o más, que indican la dirección de almacenamiento del siguiente nodo de la lista.

Se pueden añadir nodos en cualquier punto de la lista.

Conceptos del DiseñoEstructura de Datos

Page 43: Conceptos de diseño

Otras estructuras de datos incorporan o construyen con las estructuras de datos fundamentales descriptas.

Por ejemplo, una estructura de datos jerárquica se implementa con listas multienlazadas, que contienen elementos escalares, vectores y espacios n-dimensionales.

Consejo: lnvierta todo el tiempo necesario para diseñar estructuras de datos (el mismo invertido en diseñar algoritmos). Ello ahorra, a la larga, mucho tiempo.

Conceptos del DiseñoEstructura de Datos

Page 44: Conceptos de diseño

El Procedimiento de Software se centra en el Procesamiento de cada módulo individualmente.

El Procedimiento debe brindar una especificación precisa de procesamiento, incluyendo la secuencia de sucesos, los puntos de decisión, las operaciones repetitivas y la estructura/organización de datos.

Hay, una relación entre la Estructura y el Procedimiento. El Procesamiento de cada módulo debe incluir una

referencia a todos los módulos subordinados a él. => La Representación Procedimental del Software se

distribuye en capas.

Conceptos del DiseñoProcedimiento de Software

Page 45: Conceptos de diseño

La «Modularidad» nos conduce a esta pregunta: «¿Cómo se puede descomponer un software

para obtener el mejor conjunto de módulos?» El principio de ocultación de información sugiere

que los módulos se caracterizan por las decisiones de diseño que (cada uno) oculta al otro.

=> Los módulos deben diseñarse para que su información (procedimiento y datos) interna sea inaccesible a otros módulos que no necesiten esa información.

Conceptos del DiseñoOcultación de la

Información

Page 46: Conceptos de diseño

Ocultación => permite una modularidad efectiva definiendo un conjunto de módulos independientes que se comunican entre sí intercambiando sólo la información necesaria para lograr la función del software.

La abstracción ayuda a la ocultación.

Conceptos del DiseñoOcultación de la

Información