Académique Documents
Professionnel Documents
Culture Documents
LECTURA SEMANAL
En alianza con
Colombia
Figura 1. Componentes generales de un proceso de Software.
Planificación
Gestión de
DEFINICIÓN Requerimientos
Análisis
Codificación
Prueba
Colombia
2. Desarrollo. En la segunda fase general común a los procesos de software, es necesario
responder a la pregunta “¿Cómo?”. ¿Cómo dará el software respuesta a las necesidades del
cliente? ¿Cómo satisfará los requerimientos expresados, documentados y analizados en la
fase previa? ¿Cuál es la estructura interna más adecuada para cumplir con las necesidades
presentes? La respuesta a estas preguntas da paso a la posibilidad de escribir código que
responda de manera real a las necesidades encontradas, a la vez que cumple con los
requisitos de calidad y robustez esperados. Los componentes generales de esta fase son:
● Diseño. Aquí, con base en los documentos generados durante la fase de análisis, es posible
determinar una estructura interna eficiente, eficaz, robusta y en general, adecuada para
solucionar el problema identificado. El resultado de esta fase es un conjunto de documentos
que describen esta estructura y le permiten a los desarrolladores comenzar la escritura del
código con la certeza de que están basados en una estructura sólida y adecuada al
problema.
● Codificación. En esta parte del proceso se escribe de manera efectiva el código que, al
ser ejecutado, ofrecerá la solución esperada al problema identificado y analizado con
anterioridad. Es en este punto cuando realmente se genera el software en su acepción más
técnica. Nótese que para poder llegar con confianza a este punto, es necesario haber
completado los procesos anteriores de una manera cabal. Sin embargo, haber realizado de
manera adecuada el tránsito por los componentes previos, a pesar de consumir tiempo, es
una garantía de que se minimizan las probabilidades de cometer errores durante la
codificación, que pueden ser mucho más costosos después.
● Prueba. Este componente, que a veces se incorpora de manera estrecha con el anterior,
resulta de importancia obvia. La correcta ejecución del código, así como la correcta
traducción de los requerimientos identificados a una aplicación completamente funcional
dependen en gran medida de la supervisión que se dé a los resultados de la codificación.
Los esquemas de pruebas son muchos y variados. Sin embargo, resulta evidente su extrema
importancia.
3. Mantenimiento. Hoy en día, resulta claro para la mayor parte de los desarrolladores de
software, que el ciclo de vida de un producto no termina en la entrega. Uno de los factores
de éxito de un producto y por tanto de la compañía que lo genera, es la capacidad de
adaptarse al cambio constante que resulta apenas natural en los ambientes de producción
actuales. El rapidísimo ritmo de cambio presente en la mayor parte de los escenarios de
acción del software hacen que sea imperativo contar con estrategias y mecanismos para
garantizar la adaptabilidad de los productos entregados. Cambios requeridos por
necesidades variables de los clientes, del ambiente, o como prevención de futuras
necesidades son normales en el ámbito del desarrollo de software. En esta fase se lidia con
estos requerimientos.
El ámbito que cubre este módulo tiene que ver con los aspectos de análisis y diseño de un
producto de software. Los aspectos iniciales de planeación, así como las pruebas y gestión
del cambio serán contemplados, entre otros elementos, en módulos posteriores, en tanto que
los aspectos relacionados con la codificación fueron abordados en módulos previos a éste.
Con una visión general de los componentes comunes de todo proceso de software, es
posible abordar con algo más de detalle las aproximaciones más específicas a dichos
procesos. No se pretende aquí describir de manera detallada y definitiva los diferentes
procesos existentes. Se busca más bien definir cuáles son las abstracciones más comúnmente
utilizadas para describir los diferentes enfoques que se utilizan cuando se enfrenta un
En alianza con
Colombia
proyecto de desarrollo. Con esto dicho, existen algunos modelos de proceso que
tradicionalmente han sido utilizados en la industria del software. Dichos modelos son:
1. MODELO EN CASCADA
El modelo en cascada fue el primer modelo formal de desarrollo de software en hacerse
público y en ser utilizado de manera generalizada. Es por definición el modelo más simple, y
contempla un conjunto de etapas encadenadas de la manera como se muestra en la figura.
Dichas etapas son:
1. Análisis y definición de requerimientos. La idea en esta etapa es obtener un modelo del
sistema a implementar con base en las necesidades del usuario. De esta manera se definen
los objetivos a cumplir y las restricciones a tener en cuenta.
2. Diseño del sistema y del software. Se pretende en esta fase y a partir de las necesidades
identificadas de manera previa, definir la arquitectura y la estructura general interna del
sistema a implementar.
3. Implementación y prueba de unidades. Aquí se lleva a cabo la codificación de las
unidades de código que reflejen el diseño definido con anterioridad. Cada una de ellas es
probada para garantizar que cumple con los requerimientos adecuados.
4. Integración y prueba del sistema. Una vez implementadas y probadas las unidades
particulares, éstas son integradas en el sistema final y el mismo es probado como un todo,
para garantizar que el funcionamiento total es el esperado.
5. Funcionamiento y mantenimiento. Es aquí donde el sistema es puesto en marcha en su
ambiente final y cualquier cambio que sea necesario realizar es implementado. Estos cambios
pueden surgir de errores no detectados previamente, o de requerimientos que no habían sido
identificados con anterioridad.
En principio, en un modelo en cascada, cada fase debe esperar a que la anterior termine
para poder comenzar, aunque en términos prácticos esto no sucede. Lo que usualmente
pasa es que se hacen varias iteraciones de cada una de las fases, hasta que llega un punto
en el que resulta necesario detener este proceso para poder pasar a la siguiente fase.
En alianza con
Colombia
Debido a la compartimentalización del trabajo en fases separadas, esta detención implica
en ocasiones que se queden requerimientos sin identificar o problemas de diseño o
implementación sin corregir y que solamente serán detectados en la fase final, al poner en
marcha el sistema como un todo. Esta condición hace que esa fase final sea usualmente la
más compleja y la más larga de un proceso que sigue este modelo. En general, se
recomienda utilizar el modelo en cascada para proyectos en los que los requerimientos sean
claramente conocidos y se espere que no cambien demasiado a lo largo del proyecto.
En alianza con
Colombia
El modelo evolutivo es recomendable por encima del modelo en cascada para proyectos
de software no muy grandes. Uno de los inconvenientes que tiene es que la necesidad de
incorporar cambios a prototipos ya desarrollados hace que la arquitectura y el diseño
interno de la aplicación necesiten cambiar sustancialmente y este no es un proceso que sea
sencillo en aplicaciones relativamente complejas. A medida que crece la complejidad del
software aumenta la dificultad para incorporar modificaciones, lo que al final puede generar
un producto inestable o con un diseño poco adecuado.
No obstante lo mencionado en el párrafo anterior, el modelo evolutivo presenta grandes
ventajas cuando se utiliza en el marco de un proyecto para el que no se tienen claros por
completo los requerimientos (Esto puede ser cierto incluso para el cliente, quien en ocasiones
tiene dudas acerca del conjunto final de requerimientos para el software). Aquí, un enfoque
evolutivo permite la detección y refinamiento de dichos requerimientos por medio de la
utilización de prototipos, lo que puede resultar al final, en un ahorro de tiempo y esfuerzo, con
una claridad mayor.
En alianza con
Colombia
6. Validación y pruebas. De manera similar a la presentada en los modelos anteriores, durante
la validación y pruebas se realizan los controles que determinan el correcto cumplimiento por
parte de la solución de los requerimientos definidos de manera inicial.
Figura 4. Modelo basado en componentes
4. MODELO INCREMENTAL
Este modelo presenta una aproximación intermedia entre los modelos en cascada y evolutivo,
que busca evitar los inconvenientes de cada uno (para el modelo en cascada es necesario
definir todos los requerimientos antes de poder comenzar el desarrollo y el modelo evolutivo,
a pesar de ser más flexible en ese sentido puede generar sistemas débiles y difíciles de
mantener).
Bajo el esquema incremental, se define en conjunto con el cliente, qué es lo que éste espera
del software en términos de requerimientos. Luego, dichos requerimientos son priorizados y
divididos en incrementos de tal manera que cada uno ofrezca funcionalidad creciente al
producto. Cuando este proceso de división ha sido terminado, cada uno de los incrementos
definidos puede ser desarrollado con un enfoque que puede ser el de un modelo en
cascada. Cada vez que se termina el desarrollo de un incremento, su funcionalidad es
agregada a la entrega anterior, aumentando la utilidad del producto.
Una de las mayores ventajas del modelo incremental es que el cliente puede poner en
funcionamiento el sistema sin tener que esperar demasiado. Al haber sido priorizados los
requerimientos, aquellos que son más importantes son entregados primero, lo que los somete a
pruebas durante más tiempo que los que no son tan importantes, lo cual es deseable para
garantizar la calidad del producto.
Una de las metodologías basada en el concepto de incrementos que es más popular hoy en
día es Programación Extrema o Extreme Programming. En la videoconferencia de esta semana
se hablará en detalle de esta metodología, comparándola con RUP (Rational Unified
Process), una metodología muy estructurada que es uno de sus principales rivales en el medio
del desarrollo de software.
5. MODELO EN ESPIRAL
El modelo en espiral surge de una propuesta hecha por Barry Boehm en un artículo publicado
en 1986. Como su nombre lo indica, está basado en el concepto de modelar el proceso de
En alianza con
Colombia
desarrollo de un producto de software no en un modelo lineal, sino en una estructura espiral
en la que cada ciclo modela una fase del proceso. Siguiendo esta línea de pensamiento, el
ciclo más interno de la espiral podría trabajar sobre la especificación de requerimientos para
el producto, mientras que el siguiente podría ocuparse del análisis y el siguiente del diseño,
luego de lo cual vendría un ciclo que se ocupe de la implementación, etc.
Cada uno de los ciclos definidos para la espiral se divide en cuatro cuadrantes, así:
Definición de objetivos. La idea aquí es determinar qué se pretende alcanzar en este ciclo
particular del proceso, así como identificar los riesgos que se presentan para alcanzar dichos
objetivos. Alrededor de estos riesgos se elaborarán planes de alternativas.
Evaluación y manejo de riesgos. Para cada uno de los riesgos identificados se crea un plan
de gestión con el fin de minimizarlo. Esto se logra mediante un análisis detallado del riesgo y
el planteamiento de alternativas de solución y manejo para el mismo.
Desarrollo y pruebas. Una vez se han identificado los riesgos y definido planes de acción
para su control se determina el modelo adecuado para la implementación del producto.
Dependiendo de los riesgos encontrados, podría optarse por un modelo en cascada, o uno
evolutivo, o basado en prototipos.
Planeación. Al finalizar cada ciclo de la espiral, se evalúa el avance del proyecto y los
riesgos aun existentes y se determina si es viable continuar al siguiente ciclo (Es necesario
recordar que cada ciclo se ocupa de intereses diferentes dentro de la evolución del
proyecto). De ser así, se elaboran los planes para dicho ciclo.
Colombia
comunicación con el cliente, complejidad de la aplicación, dificultades con el lenguaje),
determinándose luego las acciones a tener en cuenta para la mitigación de dichos riesgos
(planificación de reuniones periódicas, reevaluación de la arquitectura, capacitación del
personal), para culminar con la mitigación de los riesgos mediante la aplicación de los planes
definidos, seguida por la planeación del siguiente ciclo, en caso de que se considere viable
hacerlo así.
En alianza con
Colombia