Fundamentos del diseño

25
Unidades temáticas de Ingeniería del Software Facultad de Informática Fundamentos del diseño 3ª edición (1999)

Transcript of Fundamentos del diseño

Page 1: Fundamentos del diseño

Unidades temáticas de Ingeniería del Software

Fa

cultad de Info

rmá

tica

Fundamentos del diseño3ª edición (1999)

Page 2: Fundamentos del diseño

Fundamentos del diseño 2

justificación del diseño

Las actividades de diseño afectan al éxito de la realización delsoftware y a la facilidad del mantenimiento, ayudando a construirsistemas estables.

El diseño hace posible la transformación de los requisitos en unproducto acabado mediante la obtención de modelos físicos delsoftware.

El diseño es el proceso en el que se asienta la calidad deldesarrollo de software.

Page 3: Fundamentos del diseño

Fundamentos del diseño 3

contenidos

El diseño del softwareDirectrices para evaluar un diseñoCriterios técnicos para un buen diseñoLos métodos de diseñoConceptos de diseñoAbstracciónRefinamientoModularidadArquitectura del softwareJerarquía de controlPartición estructuralEstructura de datosProcedimiento del softwareOcultación de informaciónDiseño modular efectivoHeurísticas de diseñoReferencias bibliográficas

Page 4: Fundamentos del diseño

Fundamentos del diseño 4

el diseño del software

El diseño del software se compone de un diseño de datos, un diseñoarquitectónico, un diseño de la interfaz y un diseño procedimental.

• El diseño de datos transforma el modelo de dominio de la informaciónen las estructuras de datos necesarias para implementar el software.

• El diseño arquitectónico define la relación entre los principaleselementos estructurales del programa.

• El diseño de la interfaz describe cómo se comunica el softwareconsigo mismo, con los sistemas que operan con él y con losoperadores que lo emplean.

• El diseño procedimental transforma elementos estructurales de laarquitectura del programa en una descripción procedimental de loscomponentes de software.

Page 5: Fundamentos del diseño

Fundamentos del diseño 5

directrices para evaluar un diseño

El diseño debe implementar todos los requisitos explícitos contenidosen el modelo de análisis así como todos los requisitos implícitos quedesea el cliente.

El diseño debe ser una guía que puedan leer y entender los queconstruyan el código y los que prueban y mantienen el software.

El diseño debería proporcionar una idea completa de lo que es elsoftware, enfocando los dominios de datos, funcional y decomportamiento desde la perspectiva de la implementación.

Page 6: Fundamentos del diseño

Fundamentos del diseño 6

criterios técnicos para un buen diseño

Debe presentar relaciones jerárquicas del tipo cliente-servidor entrecomponentes.

Debe ser modular, es decir, estar dividido en forma lógica encomponentes que realicen funciones y subfunciones específicas.

Debe contener abstracciones de datos y procedimentales.

Debe producir componentes que exhiban características funcionalesindependientes.

Debe conducir a interfaces que reduzcan la complejidad de lasconexiones entre los componentes y el entorno exterior.

Debe producirse usando un método que pudiera repetirse según lainformación obtenida durante el análisis de requisitos del software.

Page 7: Fundamentos del diseño

Fundamentos del diseño 7

los métodos de diseño

Los enfoques de diseño han evolucionado desde los criterios dedesarrollo de programas modulares y métodos para refinar laarquitectura software de manera descendente en la jerarquía hasta laorientación a objetos, pasando por los métodos que proponentransformar el flujo de datos o la estructura de datos en una definicióndel diseño.

Características comunes de los métodos de diseño• Un mecanismo para la transformación de un modelo de análisis en

una representación del diseño.

• Una notación para representar componentes funcionales y susinterfaces.

• Heurísticas para el refinamiento y la partición.

• Consejos para valorar la calidad.

Page 8: Fundamentos del diseño

Fundamentos del diseño 8

conceptos de diseño

Los conceptos de diseño ayudan a responder a las siguientescuestiones:

• ¿qué criterios pueden emplearse para la partición del software encomponentes individuales?

• ¿cómo se extraen la función o la estructura de datos de unarepresentación conceptual del software?

• ¿hay criterios uniformes que definen la calidad técnica de un diseño desoftware?

Abstracción

Refinamiento

Modularidad

Arquitectura del software

Jerarquía de control

Partición estructural

Estructura de datos

Procedimiento del software

Ocultación de la información

Page 9: Fundamentos del diseño

Fundamentos del diseño 9

abstracción

Capacidad que permite trabajar a diferentes niveles de detalle, yendode lo más abstracto a lo más concreto.

Al nivel superior de abstracción, se establece una solución entérminos amplios usando el lenguaje del entorno del problema.

A niveles más bajos, se toma una orientación más procedimental.

Al nivel inferior de abstracción, la solución se establece de maneraque pueda implementarse directamente.

Existen tres tipos de abstracciones: procedimentales, de datos y decontrol.

En los diferentes niveles del diseño, se crean abstraccionesprocedimentales, de datos y de control.

Page 10: Fundamentos del diseño

Fundamentos del diseño 10

abstracción (cont.)

Abstracción procedimental

Se trata de una secuencia dada de instrucciones que tiene unafunción específica y limitada.

Abstracción de datos

Es una colección determinada de datos que describen un objeto dedatos.

Abstracción de control

Implica un mecanismo de control del programa sin especificardetalles internos.

Page 11: Fundamentos del diseño

Fundamentos del diseño 11

refinamiento

Es un proceso de elaboración que permite ampliar una declaraciónoriginal, dando cada vez más detalles.

El refinamiento paso a paso (Wirth, 1971) es una estrategia de diseñodescendente donde la arquitectura de un programa se desarrollarefinando sucesivamente niveles de detalle procedimental.

Se empieza con un enunciado de función o descripción de informacióndefinida a un alto nivel de abstracción sin proporcionar ningunainformación sobre los procesos internos de la función o la estructurainterna de la información.

El refinamiento ayuda al diseñador a revelar detalles de bajo nivel amedida que progresa el diseño.

Page 12: Fundamentos del diseño

Fundamentos del diseño 12

modularidad

Es un atributo del software que permite que sea intelectualmentemanejable al estar dividido en componentes que se integran parasatisfacer los requisitos.

La arquitectura del software conlleva modularidad; es decir, se divideel software en componentes identificables y tratables por separado,denominados módulos, que están integrados para satisfacer losrequisitos del programa.

Región de costes mínimos

Costes totales del software

Costes de integración

Número de módulos

Co

ste

s o

esf

uer

zo

Costes/módulo

{M

Page 13: Fundamentos del diseño

Fundamentos del diseño 13

modularidad (cont.)

Las cuestiones a considerar son:• ¿cuánto deberíamos modularizar el software?

• ¿cómo definimos un módulo apropiado de un tamaño?

... la respuesta está en los métodos de diseño empleados.

Criterios para evaluar un método de diseño con respecto a sucapacidad de definir un sistema modular eficaz (Meyer, 1988)

• capacidad de descomposición modular

• capacidad de empleo de componentes modulares

• capacidad de comprensión modular

• continuidad modular

• protección modular

Page 14: Fundamentos del diseño

Fundamentos del diseño 14

arquitectura del software

Estructura global del software y las maneras en que esa estructuraproporciona integridad conceptual a un sistema.

La arquitectura es la estructura jerárquica de los componentes delprograma, la manera de interactuar de estos componentes, y laestructura de los datos usados por estos componentes.

Propiedades que deberían formar parte del diseño arquitectónico• Propiedades estructurales

• Propiedades extra-funcionales

• Familias de sistemas relacionados

Page 15: Fundamentos del diseño

Fundamentos del diseño 15

jerarquía de control

La estructura del programa representa la organización de loscomponentes e implica una jerarquía de control.

La jerarquía de control representa dos características de la arquitecturadel programa:

• La visibilidad indica el conjunto de componentes que pueden serinvocados o sus datos ser utilizados por un componente dado (inclusoindirectamente).

• La conectividad indica el conjunto de componentes a los quedirectamente se invoca o sus datos son utilizados en un determinadomódulo.

Page 16: Fundamentos del diseño

Fundamentos del diseño 16

jerarquía de control (cont.)

Medidas de la estructura del programa• La profundidad es el número de niveles de control.• La anchura es la amplitud global del control.• El grado de salida es el número de módulos controlados por otros módulos.• El grado de entrada es el número de módulos que controlan directamente a un

módulo dado.

M

a b c

d e l mk

f g h

i j r

o p qn

Grado de salida

Grado de entrada

Anchura

Pro

fund

idad

Page 17: Fundamentos del diseño

Fundamentos del diseño 17

partición estructural

La estructura del programa debería partirse tanto horizontalmentecomo verticalmente.

Partición horizontal• Define ramas separadas de la jerarquía modular para cada función

principal del programa.

• Las arquitecturas de partición horizontal facilitan la prueba, elmantenimiento y propaga menos efectos secundarios.

Partición vertical• sugiere que el control y el trabajo se distribuyan descendentemente en

la arquitectura del programa.

• Las arquitecturas de partición vertical tienen menos probabilidad deser susceptibles a efectos secundarios cuando se hacen cambios ytendrán por tanto mejor capacidad de mantenimiento.

Page 18: Fundamentos del diseño

Fundamentos del diseño 18

estructura de datos

Es una representación de la relación lógica entre los elementosindividuales de datos.

La organización y complejidad de la estructura de datos estánlimitadas sólo por el ingenio del diseñador.

Las estructuras de datos clásicas son: elemento escalar, vectorsecuencial, array (matriz), lista enlazada, estructura de datosjerárquica.

Las estructuras jerárquicas se encuentran en aplicaciones querequieran categorización y capacidad de asociación de la información.

Las estructuras de datos pueden representarse a diferentes niveles deabstracción.

Page 19: Fundamentos del diseño

Fundamentos del diseño 19

procedimiento del software

Se centra en los detalles de procesamiento de cada móduloindividualmente.

Debe proporcionar una especificación exacta del procesamiento,incluyendo la secuencia de acontecimientos, puntos exactos dedecisión, operaciones repetitivas e incluso la organización o estructurade los datos.

Existe una relación entre la estructura de programa y el procedimientodel software; el procesamiento indicado para cada módulo debe incluiruna referencia a todos los módulos subordinados al módulo que sedescribe.

Page 20: Fundamentos del diseño

Fundamentos del diseño 20

ocultación de información

Capacidad de un componente para que la información (procedimientoy datos) contenida dentro del mismo sea inaccesible a otroscomponentes que no la necesitan.

Implica que se puede conseguir una modularidad eficaz definiendo unconjunto de módulos independientes que se comunican entre ellossólo la información necesaria para conseguir la función del software.

Define y refuerza las restricciones de acceso tanto al detalleprocedimental dentro del módulo como a cualquier estructura de datoslocal empleada por el módulo.

Proporciona ventajas en el mantenimiento del software, ya que loserrores son más difíciles de propagar al estar ocultos la mayoría de losdatos y los procedimientos a otras partes del software.

Page 21: Fundamentos del diseño

Fundamentos del diseño 21

diseño modular efectivo

Las ventajas de un diseño modular son:• Reduce la complejidad.

• Facilita los cambios.

• Facilita la implementación al fomentar el desarrollo en paralelo dediferentes partes de un sistema.

Independencia funcional.• Deriva directamente de los conceptos de modularidad, abstracción y

ocultación de la información.

• Se adquiere desarrollando módulos con una clara función y unaaversión a la excesiva interacción con otros módulos.

• Se mide con dos criterios cualitativos: la cohesión y el acoplamiento.

• Es la clave de un buen diseño.

Page 22: Fundamentos del diseño

Fundamentos del diseño 22

diseño modular efectivo (cont.)

La cohesión es la medida de la fuerza funcional relativa de un módulo.

En el diseño se intenta conseguir una alta cohesión.

El acoplamiento es la medida de la interdependencia relativa entremódulos.

En el diseño intentamos conseguir el menor nivel posible deacoplamiento.

Page 23: Fundamentos del diseño

Fundamentos del diseño 23

diseño modular efectivo (cont.)

Niveles de cohesión

CoincidentalLógica

TemporalProcedimentalComunicativa

SecuencialFuncional

Niveles de acoplamiento

Sin acoplamiento directoDe datos

Por estampadoDe controlExternoComún

Del contenido

Bajo

Alto

Page 24: Fundamentos del diseño

Fundamentos del diseño 24

heurísticas de diseño

Las heurísticas de diseño para una modularidad efectiva son:• Evaluar la primera iteración del diseño para reducir el acoplamiento y

mejorar la cohesión.

• Intentar minimizar las estructuras con mucho grado de salida.

• Mantener el alcance del efecto de un módulo dentro del alcance delcontrol de ese módulo.

• Evaluar las interfaces de los módulos para reducir la complejidad, laredundancia y mejorar la consistencia.

• Definir módulos cuya función sea predecible, pero evitar módulos quesean demasiado restrictivos.

• Intentar conseguir módulos de entrada controlada evitando lasconexiones patológicas.

• Empaquetar el software basándose en las restricciones del diseño ylos requisitos de portabilidad.

Page 25: Fundamentos del diseño

Fundamentos del diseño 25

referencias bibliográficas

Pressman, R. Ingeniería del software: un enfoque práctico. McGraw-Hill, 1998.