Sunteți pe pagina 1din 25

Unidades temáticas de Ingeniería del Software

Fundamentos del diseño


3ª edición (1999)

Facultad de Informática
justificación del diseño
Las actividades de diseño afectan al éxito de la realización del
software y a la facilidad del mantenimiento, ayudando a construir
sistemas estables.
El diseño hace posible la transformación de los requisitos en un
producto acabado mediante la obtención de modelos físicos del
software.

El diseño es el proceso en el que se asienta la calidad del


desarrollo de software.

Fundamentos del diseño 2


contenidos
El diseño del software
Directrices para evaluar un diseño
Criterios técnicos para un buen diseño
Los métodos de diseño
Conceptos de diseño
Abstracción
Refinamiento
Modularidad
Arquitectura del software
Jerarquía de control
Partición estructural
Estructura de datos
Procedimiento del software
Ocultación de información
Diseño modular efectivo
Heurísticas de diseño
Referencias bibliográficas

Fundamentos del diseño 3


el diseño del software
El diseño del software se compone de un diseño de datos, un diseño
arquitectó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ón
en las estructuras de datos necesarias para implementar el software.
• El diseño arquitectónico define la relación entre los principales
elementos estructurales del programa.
• El diseño de la interfaz describe cómo se comunica el software
consigo mismo, con los sistemas que operan con él y con los
operadores que lo emplean.
• El diseño procedimental transforma elementos estructurales de la
arquitectura del programa en una descripción procedimental de los
componentes de software.

Fundamentos del diseño 4


directrices para evaluar un diseño
El diseño debe implementar todos los requisitos explícitos contenidos
en el modelo de análisis así como todos los requisitos implícitos que
desea el cliente.
El diseño debe ser una guía que puedan leer y entender los que
construyan el código y los que prueban y mantienen el software.
El diseño debería proporcionar una idea completa de lo que es el
software, enfocando los dominios de datos, funcional y de
comportamiento desde la perspectiva de la implementación.

Fundamentos del diseño 5


criterios técnicos para un buen diseño
Debe presentar relaciones jerárquicas del tipo cliente-servidor entre
componentes.
Debe ser modular, es decir, estar dividido en forma lógica en
componentes que realicen funciones y subfunciones específicas.
Debe contener abstracciones de datos y procedimentales.
Debe producir componentes que exhiban características funcionales
independientes.
Debe conducir a interfaces que reduzcan la complejidad de las
conexiones entre los componentes y el entorno exterior.
Debe producirse usando un método que pudiera repetirse según la
información obtenida durante el análisis de requisitos del software.

Fundamentos del diseño 6


los métodos de diseño
Los enfoques de diseño han evolucionado desde los criterios de
desarrollo de programas modulares y métodos para refinar la
arquitectura software de manera descendente en la jerarquía hasta la
orientación a objetos, pasando por los métodos que proponen
transformar el flujo de datos o la estructura de datos en una definición
del 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 sus
interfaces.
• Heurísticas para el refinamiento y la partición.
• Consejos para valorar la calidad.

Fundamentos del diseño 7


conceptos de diseño
Los conceptos de diseño ayudan a responder a las siguientes
cuestiones:
• ¿qué criterios pueden emplearse para la partición del software en
componentes individuales?
• ¿cómo se extraen la función o la estructura de datos de una
representación conceptual del software?
• ¿hay criterios uniformes que definen la calidad técnica de un diseño de
software?

Abstracción Partición estructural


Refinamiento Estructura de datos
Modularidad Procedimiento del software
Arquitectura del software Ocultación de la información
Jerarquía de control

Fundamentos del diseño 8


abstracción
Capacidad que permite trabajar a diferentes niveles de detalle, yendo
de lo más abstracto a lo más concreto.
Al nivel superior de abstracción, se establece una solución en
té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 manera
que pueda implementarse directamente.
Existen tres tipos de abstracciones: procedimentales, de datos y de
control.
En los diferentes niveles del diseño, se crean abstracciones
procedimentales, de datos y de control.

Fundamentos del diseño 9


abstracción (cont.)
Abstracción procedimental
Se trata de una secuencia dada de instrucciones que tiene una
función específica y limitada.
Abstracción de datos
Es una colección determinada de datos que describen un objeto de
datos.
Abstracción de control
Implica un mecanismo de control del programa sin especificar
detalles internos.

Fundamentos del diseño 10


refinamiento
Es un proceso de elaboración que permite ampliar una declaración
original, dando cada vez más detalles.
El refinamiento paso a paso (Wirth, 1971) es una estrategia de diseño
descendente donde la arquitectura de un programa se desarrolla
refinando sucesivamente niveles de detalle procedimental.
Se empieza con un enunciado de función o descripción de información
definida a un alto nivel de abstracción sin proporcionar ninguna
información sobre los procesos internos de la función o la estructura
interna de la información.
El refinamiento ayuda al diseñador a revelar detalles de bajo nivel a
medida que progresa el diseño.

Fundamentos del diseño 11


modularidad
Es un atributo del software que permite que sea intelectualmente
manejable al estar dividido en componentes que se integran para
satisfacer los requisitos.
La arquitectura del software conlleva modularidad; es decir, se divide
el software en componentes identificables y tratables por separado,
denominados módulos, que están integrados para satisfacer los
requisitos del programa.
Costes totales del software

Costes de integración
Costes o esfuerzo

Región de costes mínimos

M
{

Costes/módulo

Número de módulos

Fundamentos del diseño 12


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 su
capacidad 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

Fundamentos del diseño 13


arquitectura del software
Estructura global del software y las maneras en que esa estructura
proporciona integridad conceptual a un sistema.
La arquitectura es la estructura jerárquica de los componentes del
programa, la manera de interactuar de estos componentes, y la
estructura 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

Fundamentos del diseño 14


jerarquía de control
La estructura del programa representa la organización de los
componentes e implica una jerarquía de control.
La jerarquía de control representa dos características de la arquitectura
del programa:
• La visibilidad indica el conjunto de componentes que pueden ser
invocados o sus datos ser utilizados por un componente dado (incluso
indirectamente).
• La conectividad indica el conjunto de componentes a los que
directamente se invoca o sus datos son utilizados en un determinado
módulo.

Fundamentos del diseño 15


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 Grado de salida

a b c
Profundidad

d e k l m

f g h n o p q

Grado de entrada
i j r

Anchura
Fundamentos del diseño 16
partición estructural
La estructura del programa debería partirse tanto horizontalmente
como 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, el
mantenimiento 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 de
ser susceptibles a efectos secundarios cuando se hacen cambios y
tendrán por tanto mejor capacidad de mantenimiento.

Fundamentos del diseño 17


estructura de datos
Es una representación de la relación lógica entre los elementos
individuales de datos.
La organización y complejidad de la estructura de datos están
limitadas sólo por el ingenio del diseñador.
Las estructuras de datos clásicas son: elemento escalar, vector
secuencial, array (matriz), lista enlazada, estructura de datos
jerárquica.
Las estructuras jerárquicas se encuentran en aplicaciones que
requieran categorización y capacidad de asociación de la información.
Las estructuras de datos pueden representarse a diferentes niveles de
abstracción.

Fundamentos del diseño 18


procedimiento del software
Se centra en los detalles de procesamiento de cada módulo
individualmente.
Debe proporcionar una especificación exacta del procesamiento,
incluyendo la secuencia de acontecimientos, puntos exactos de
decisión, operaciones repetitivas e incluso la organización o estructura
de los datos.
Existe una relación entre la estructura de programa y el procedimiento
del software; el procesamiento indicado para cada módulo debe incluir
una referencia a todos los módulos subordinados al módulo que se
describe.

Fundamentos del diseño 19


ocultación de información
Capacidad de un componente para que la información (procedimiento
y datos) contenida dentro del mismo sea inaccesible a otros
componentes que no la necesitan.
Implica que se puede conseguir una modularidad eficaz definiendo un
conjunto de módulos independientes que se comunican entre ellos
sólo la información necesaria para conseguir la función del software.
Define y refuerza las restricciones de acceso tanto al detalle
procedimental dentro del módulo como a cualquier estructura de datos
local empleada por el módulo.
Proporciona ventajas en el mantenimiento del software, ya que los
errores son más difíciles de propagar al estar ocultos la mayoría de los
datos y los procedimientos a otras partes del software.

Fundamentos del diseño 20


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 de
diferentes 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 una
aversió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.

Fundamentos del diseño 21


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 entre
módulos.
En el diseño intentamos conseguir el menor nivel posible de
acoplamiento.

Fundamentos del diseño 22


diseño modular efectivo (cont.)

Bajo Niveles de cohesión Niveles de acoplamiento


Coincidental Sin acoplamiento directo
Lógica De datos
Temporal Por estampado
Procedimental De control
Comunicativa Externo
Secuencial Común
Funcional Del contenido
Alto

Fundamentos del diseño 23


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 del
control de ese módulo.
• Evaluar las interfaces de los módulos para reducir la complejidad, la
redundancia y mejorar la consistencia.
• Definir módulos cuya función sea predecible, pero evitar módulos que
sean demasiado restrictivos.
• Intentar conseguir módulos de entrada controlada evitando las
conexiones patológicas.
• Empaquetar el software basándose en las restricciones del diseño y
los requisitos de portabilidad.

Fundamentos del diseño 24


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

Fundamentos del diseño 25

S-ar putea să vă placă și