Unidad
4 Modelo de Diseño
4.1 Estrategias de diseño
Los principales
pasos del proceso de desarrollo son los siguientes:
• Análisis del problema: da como resultado un modelo de objeto y
una lista de operaciones.
• Diseño: da como resultado un modelo de objeto de código, un
diagrama de dependencia de módulos y especificaciones de módulos.
• Implementación: da como resultado un código ejecutable.
El resultado principal del análisis de un problema es un modelo de
objeto que describe las entidades fundamentales del mismo y sus relaciones con
otro problema. (El libro de texto del curso utiliza el término "modelo de
datos" para referirse a esto). Conviene escribir descripciones breves para
cada uno de los conjuntos y cada una de las relaciones del modelo de objeto,
explicando lo que significan. Aunque nos parezcan evidentes en el momento de
escribirlas, es fácil olvidar más tarde el significado de algún término.
Además, muchas veces una descripción que nos parecía clara resulta no serlo
tanto cuando la vemos por escrito. Por ejemplo, en mi grupo de trabajo estamos
diseñando un nuevo componente de control de tráfico aéreo, y hemos descubierto
que en nuestro modelo de objeto el término Flight resulta bastante confuso y que
es importante describirlo con claridad.
La fase de diseño produce como resultado principal un modelo de
objeto de código que muestra la forma en la que se implementa el estado del
sistema, y un diagrama de dependencia de módulos que representa la división del
sistema en módulos y el modo en que éstos se relacionan entre sí. En el caso de
módulos que presenten complicaciones, resulta también conveniente disponer de
un esquema con las especificaciones del módulo antes de comenzar la
codificación.
Estas
propiedades clave son:
• Extensibilidad. El diseño debe ser capaz de soportar nuevas
funciones. Aunque sea perfecto en todos los demás aspectos, un sistema que no
muestre disposición a integrar el más ligero cambio o perfeccionamiento resulta
inservible. Quizás no haya necesidad de añadir nuevas funciones, pero siempre
es posible que se produzcan alteraciones en el dominio del problema que exijan
introducir cambios en el programa.
• Fiabilidad. El sistema debe tener un comportamiento fiable, lo
que no significa solamente que no se bloquee ni corrompa los datos; debe además
realizar todas sus funciones correctamente y de la forma prevista por el
usuario. (Lo que, por cierto, quiere decir que tampoco basta con que el sistema
satisfaga una especificación confusa; debe satisfacer una que el usuario
comprenda fácilmente, de forma que
éste
pueda predecir su comportamiento). La disponibilidad es una característica
importante si el sistema es distribuido, mientras que en los sistemas en tiempo
real tiene más importancia el tiempo: no tanto que el sistema sea rápido, sino
que complete las tareas en el tiempo previsto. La forma de contemplar la
fiabilidad varía mucho de un sistema a otro. Así, la falta de precisión a la
hora de presentar imágenes es menos grave en un navegador que en un programa de
edición electrónica. Los conmutadores telefónicos, por su parte, deben cumplir
estándares de disponibilidad extraordinariamente altos, si bien ello ocasiona
de vez en cuando errores de desvío de llamadas. Los pequeños retrasos quizás no
importen mucho cuando se trata de un cliente de correo electrónico, pero son
inaceptables en el caso del controlador de un reactor nuclear.
•
Eficiencia. El consumo de recursos por parte del sistema debe ser racional, lo
que una vez más depende del contexto. Una aplicación que se ejecuta en un
teléfono móvil no puede asumir la misma disponibilidad de memoria que la que se
ejecuta en un ordenador de consola. Los recursos más específicos son el tiempo
y el espacio que consume el programa que se ejecuta. Pero no hay que olvidar
que, como ha demostrado Microsoft, el tiempo empleado en el desarrollo del
programa puede tener idéntica importancia, al igual que otro recurso que no se
debe pasar por alto: el dinero. Un diseño que se implemente de modo económico
puede ser preferible a otro que funcione mejor conforme a otros parámetros pero
que resulte más caro.