Dos de las
críticas que se hacían al modelo de ciclo de vida en cascada eran que es
difícil tener claros todos los requisitos del sistema al inicio del proyecto, y
que no se dispone de una versión operativa del programa hasta las fases finales
del desarrollo, lo que dificulta la detección de errores y deja también para el
final el descubrimiento de los requisitos inadvertidos en las fases de
análisis. Para paliar estas deficiencias se ha propuesto un modelo de ciclo de
vida basado en la construcción de prototipos.
En primer lugar,
hay que ver si el sistema que tenemos que desarrollar es un buen candidato a
utilizar el paradigma de ciclo de vida de construcción de prototipos o al
modelo en espiral. En general, cualquier aplicación que presente mucha
interacción con el usuario, o que necesite algoritmos que puedan construirse de
manera evolutiva, yendo de lo mas general a lo más específico es una buena
candidata. No obstante, hay que tener en cuenta la complejidad: si la
aplicación necesita que se desarrolle una gran cantidad de código para poder
tener un prototipo que enseñar al usuario, las ventajas de la construcción de
prototipos se verán superadas por el esfuerzo de desarrollar un prototipo que
al final habrá que desechar o modificar mucho. También hay que tener en cuenta
la disposición del cliente para probar un prototipo y sugerir modificaciones de
los requisitos. Puede ser que el cliente ‘no tenga tiempo para andar jugando’ o
‘no vea las ventajas de este método de
desarrollo’.
También es
conveniente construir prototipos para probar la eficiencia de los algoritmos
que se van a implementar, o para comprobar el rendimiento de un determinado
componente del sistema en condiciones similares a las que existirán durante la
utilización del sistema. Es bastante frecuente que el producto de ingeniería
desarrollado presente un buen rendimiento durante la fase de pruebas realizada
por los ingenieros antes de entregarlo al cliente pero que sea muy ineficiente,
o incluso inviable, a la hora de almacenar o procesar el volumen real de
información que debe manejar el cliente. En estos casos, la construcción de un
prototipo de parte del sistema y la realización de pruebas de rendimiento,
sirven para decidir, antes de empezar la fase de diseño, cuál es el modelo más
adecuado de entre la gama disponible para el soporte hardware o cómo deben
hacerse los accesos para obtener buenas respuestas en tiempo cuando la
aplicación esté ya en funcionamiento.
En otros casos,
el prototipo servirá para modelar y poder mostrar al cliente cómo va a
realizarse la E/S de datos en la aplicación, de forma que éste pueda hacerse
una idea de como va a ser el sistema final, pudiendo entonces detectar
deficiencias o errores en la especificación aunque el modelo no sea más que una
cáscara vacía.
Según esto un prototipo puede tener
alguna de las tres formas siguientes:
§ un prototipo, en papel o ejecutable
en ordenador, que describa la interacción hombre-máquina y los listados del
sistema.
§ un prototipo que implemente algún(os)
subconjunto(s) de la función requerida, y que sirva para evaluar el rendimiento
de un algoritmo o las necesidades de capacidad de almacenamiento y velocidad de
cálculo del sistema final.
§ un programa que realice en todo o
en parte la función deseada pero que tenga características (rendimiento,
consideración de casos particulares, etc.) que deban ser mejoradas durante el
desarrollo del proyecto.
La secuencia de
tareas del paradigma de construcción de prototipos puede verse en la siguiente
figura.
Si se ha decidido construir un prototipo, lo primero que
hay que hacer es realizar un modelo del sistema, a partir de los requisitos que
ya conozcamos. En este caso no es necesario realizar una definición completa de
los requisitos, pero sí es conveniente determinar al menos las áreas donde será
necesaria una definición posterior más detallada.
Luego se procede
a diseñar el prototipo. Se tratará de un diseño rápido, centrado sobre todo en
la arquitectura del sistema y la definición de la estructura de las interfaces
más que en aspectos de procedimiento de los programas: nos fijaremos más en la
forma y en la apariencia que en el contenido.
A partir del
diseño construiremos el prototipo. Existen herramientas especializadas en
generar prototipos ejecutables a partir del diseño. Otra opción sería utilizar
técnicas de cuarta generación. La posibilidad más reciente consiste en el uso
de especificaciones formales, que faciliten el desarrollo incremental de
especificaciones y permitan la prueba de estas especificaciones.
En cualquier
caso, el objetivo es siempre que la codificación sea rápida, aunque sea en
detrimento de la calidad del software generado.
Una vez listo
el prototipo, hay que presentarlo al cliente para que lo pruebe y sugiera
modificaciones. En este punto el cliente puede ver una implementación de los
requisitos que ha definido inicialmente y sugerir las modificaciones necesarias
en las especificaciones para que satisfagan mejor sus necesidades.
A partir de estos
comentarios del cliente y los cambios que se muestren necesarios en los
requisitos, se procederá a construir un nuevo prototipo y así sucesivamente
hasta que los requisitos queden totalmente formalizados, y se pueda entonces
empezar con el desarrollo del producto final.
Por tanto, el
prototipado es una técnica que sirve fundamentalmente para la fase de análisis
de requisitos, pero lleva consigo la obtención de una serie de subproductos que
son útiles a lo largo del desarrollo del proyecto:
§ Gran parte del trabajo realizado
durante la fase de diseño rápido (especialmente la definición de pantallas e
informes) puede ser utilizada durante el diseño del producto final. Además,
tras realizar varias vueltas en el ciclo de construcción de prototipos, el
diseño del mismo se parece cada vez más al que tendrá el producto final.
§ Durante la fase de construcción de
prototipos será necesario codificar algunos componentes del software que
también podrán ser reutilizados en la codificación del producto final, aunque
deban de ser optimizados en cuanto a corrección o velocidad de procesamiento.
No obstante,
hay que tener en cuenta que el prototipo no es el sistema final, puesto que
normalmente apenas es utilizable. Será demasiado lento, demasiado grande,
inadecuado para el volumen de datos necesario, contendrá errores (debido al
diseño rápido), será demasiado general (sin considerar casos particulares, que
debe tener en cuenta el sistema final) o estará codificado en un lenguaje o
para una máquina inadecuadas, o a partir de componentes software previamente
existentes. No hay que preocuparse de haber desperdiciado tiempo o esfuerzos
construyendo prototipos que luego habrán de ser desechados, si con ello hemos
conseguido tener más clara la especificación del proyecto, puesto que el tiempo
perdido lo ahorraremos en las fases siguientes, que podrán realizarse con menos
esfuerzo y en las que se cometerán menos errores que nos obliguen a volver
atrás en el ciclo de vida.
Hay que tener en cuenta que un análisis de
requisitos incorrecto o incompleto, cuyos errores y deficiencias se
detecten a la hora de las pruebas o tras entregar el software al cliente, nos
obligará a repetir de nuevo las fases de análisis, diseño y codificación, que
habíamos realizado cuidadosamente, pensando que estábamos desarrollando el
producto final. Al tener que repetir estas fases, sí que estaremos desechando
una gran cantidad de trabajo, normalmente muy superior al esfuerzo de construir
un prototipo basándose en un diseño rápido, en la reutilización de trozos de
software preexistentes y en herramientas de generación de código para informes
y manejo de ventanas.
Uno de los problemas que suelen aparecer
siguiendo el paradigma de construcción de prototipos, es que con demasiada
frecuencia el prototipo pasa a ser parte del sistema final, bien sea por
presiones del cliente, que quiere tener el sistema funcionando lo antes posible
o bien porque los técnicos se han acostumbrado a la máquina, el sistema operativo
o el lenguaje con el que se desarrolló el prototipo. Se olvida aquí que el
prototipo ha sido construido de forma acelerada, sin tener en cuenta
consideraciones de eficiencia, calidad del software o facilidad de
mantenimiento, o que las elecciones de lenguaje, sistema operativo o máquina
para desarrollarlo se han hecho basándose en criterios como el mejor
conocimiento de esas herramientas por parte los técnicos que en que sean
adecuadas para el producto final.
El utilizar el
prototipo en el producto final conduce a que éste contenga numerosos errores
latentes, sea ineficiente, poco fiable, incompleto o difícil de mantener. En
definitiva a que tenga poca calidad, y eso es precisamente lo que se quiere
evitar aplicando la ingeniería del software.
BANCO DE PREGUNTAS
¿Qué formas puede tener un prototipo?
¿El
prototipado es una técnica que sirve fundamentalmente para la fase de .....?
¿Cuál es uno de los problemas que suelen aparecer
siguiendo el paradigma de construcción de prototipos?
No hay comentarios:
Publicar un comentario