El ciclo de vida del software
El ciclo de vida del software es el proceso de dividir el trabajo de creación del software en diferentes fases. Esta división
de actividades se realiza con el objetivo de mejorar el producto final y simplificar la gestión del proyecto.
Todo comienza con una necesidad o problema que se pretende resolver. El objetivo es obtener una solución a esa
necesidad. En el principio del ciclo de vida tenemos una necesidad que nos están planteando una serie de personas.
Como resultado obtendremos una combinación de software y otros elementos resuelven esta necesidad.
Sin embargo, excepto que la necesidad sea muy simple, existe un abismo entre la necesidad y su solución. ¿Cómo llego
fácilmente de “quiero vender productos por internet” a toda la funcionalidad que requiere un portal de comercio
electrónico actual?
Consideremos solamente algunos puntos obvios. Debemos tener en cuenta el registro de los usuarios, la exposición
de los productos, las diferentes modalidades de pago y el seguimiento de los productos durante su transporte, en
otros. Podríamos llenar páginas con la cantidad de cosas necesarias para su funcionamiento.
Es posible realizar mentalmente esta conversión de necesidad a solución para problemas sencillos. Pero seamos
realistas, la mayoría de los problemas sencillos ya están resueltos.
Si nos quedan solamente los problemas complejos tendremos que asumir que no es posible desarrollar una solución
en un solo paso mental. Tendremos que dividir el trabajo necesario para desarrollar la solución en múltiples pasos.
Fases del ciclo de vida del software
Las etapas que componen este camino problema-solución varían según a quién le preguntes, pero las más reconocidas
son las siguientes:
•
•
•
•
•
•
Requerimientos
Análisis
Diseño
Implementación
Validación
Despliegue
¿Qué se hace en cada una de estas etapas?
Requerimientos: El problema a solucionar puede tener infinidad de particularidades y casos especiales. La realidad es
muy compleja y no es posible solucionar todos los problemas que existen incluyendo todas las posibles variaciones y
casos especiales de los mismos.
Por lo tanto, en los requerimientos se define lo que vamos a realizar o que partes de esta problemática planteada
vamos a solucionar. Indefectiblemente hay cosas que quedarán afuera y no podrán ser incluidos en nuestra solución.
Los requerimientos son fundamentales para delimitar claramente qué es lo que se va a hacer y qué es lo que no se va
a hacer.
En el caso que habíamos planteado previamente, sobre un portal de ventas online, encontraremos que podríamos
aceptar muchos medios de pago.
Es probable es que en un principio no aceptemos todos los medios de pago disponibles en el mercado. Los
requerimientos establecerán claramente cuáles son los medios de pago que podrán ser utilizados en la solución a
desarrollar. Por ejemplo, si solamente se podrán aceptar cobros en tarjeta de crédito se excluye automáticamente el
efectivo como medio de pago. De esta manera se delimita la funcionalidad de la solución.
Análisis: Una vez que hemos establecido claramente las limitaciones que va a tener nuestra solución tenemos que
entender en detalle el problema. De esto trata la etapa de análisis. Vamos a sumergirnos en el problema, vamos a
analizarlo en detalle y vamos a aprender todas las cosas que no sepamos del dominio sobre el que estamos trabajando.
Por ejemplo, si nunca he realizado una aplicación de ventas online voy a tener que aprender el vocabulario qué se
utiliza en esa área. Voy a tener que aprender cómo trabajan las empresas del rubro y voy a tener que plantear cuáles
de estas cosas tienen sentido para la situación sobre la que estoy trabajando.
En la fase de análisis vamos a profundizar nuestro entendimiento del problema y de la solución posible qué podamos
ofrecer.
Diseño: La etapa de diseño se construye en base a lo que hemos aprendido en la etapa de análisis. Vamos a plantear
cómo va a funcionar la solución que vamos a ofrecer.
En la etapa de análisis lo que queremos hacer es entender el problema y los aspectos que necesitamos abordar para
que la solución sea efectiva. En el diseño vamos a concentrarnos en cómo vamos a lograr los objetivos planteados.
Vamos a establecer los detalles de la solución utilizando términos técnicos. Por lo tanto, la mayoría del lenguaje
utilizado en esta fase está compuesto necesariamente por tecnicismos. Nos alejamos de las definiciones en lenguaje
natural y vamos a utilizar términos que se utilizan en la construcción del software.
Uno de los problemas que nos encontramos al pasar a la fase de diseño es que estamos planteando la solución en
términos técnicos y esto hace que sea difícil la comunicación con las personas que tienen el problema que estamos
buscando solucionar. Lo más probable es que a las personas sin conocimientos técnicos les cueste entender lo que
estamos diciendo y podamos terminar en importantes malentendidos. Debemos ser imaginativos y plantear
estrategias que nos permitan validar este la utilidad del diseño con las personas interesadas en la solución.
Implementación: En esta fase se lleva a cabo la construcción de la solución.
Si nuestra solución es un software esta fase involucra programarlo. Sin embargo, es posible que nuestra solución no
consista cien por ciento en un software. Si se trata de tareas que van a continuar siendo manuales la implementación
involucrará documentar las tareas, asignar responsabilidades y establecer los procesos a seguir. Para las tareas
manuales nos serán muy útiles conceptos de administración de empresas porque estaremos gestionando recursos
humanos y no tecnológicos.
Es posible también que no necesitemos programar todo y podamos usar alguna tecnología que nos permita
implementar la solución sin desarrollarla en un lenguaje de programación tradicional. Podríamos utilizar bots,
asistentes virtuales o cualquier otra tecnología que no involucre programación en forma directa pero que nos permita
llegar a la solución planteada.
Sin embargo, como estamos tratando de resolver problemas complejos, la mayoría de las veces vamos a encontrar la
necesidad de implementar una buena parte de la solución programando debido a que las otras opciones no ofrecen
las funcionalidades que necesitamos.
Validación: Luego de haber implementado la solución debemos estar seguros de que realmente es una solución válida
para el problema planteado. En la fase de validación se verifica qué la solución que hemos construido resuelve el
problema de manera adecuada y efectiva.
En esta etapa una de las actividades más populares y utilizadas es la de testing. Por lo tanto, mucha gente asume que
esta fase consiste simplemente en efectuar las actividades de testing. Sin embargo, verificar que la solución es
adecuada requiere de una diversidad de técnicas de las cuales el testing es solamente una de ellas. Entonces vamos a
identificar a esta fase como validación. El nombre indica que vamos a validar nuestra solución contra el problema de
manera que estemos seguro de que es una solución adecuada.
Despliegue: En esta fase ponemos nuestra solución en funcionamiento y a disposición de los usuarios. Si nuestra
solución involucra software lo distribuimos y ponemos en funcionamiento de manera que esté disponible para cada
usuario. Esto puede involucrar instalar software en diferentes dispositivos, actualizar el software en un servidor o
publicarlo en alguna tienda de aplicaciones entre otras posibilidades.
Si nuestra solución involucra tareas manuales capacitaremos a los usuarios sobre la manera en qué deben realizar las
tareas, estableceremos los controles para asegurarnos de que la tarea se sigue realizando de manera adecuada en el
tiempo, etcétera.
Al finalizar esta etapa la solución estará disponible para los usuarios para que puedan comenzar a utilizarla cuando lo
consideren necesario.
Mantenimiento: Finalmente algunos proponen una fase adicional conocida como mantenimiento. En esta etapa
vamos a analizar constantemente los nuevos requerimientos que vayan surgiendo para nuestra solución. Ya sea por
cambios en la modalidad de trabajo de la organización, por cambios legales, impositivos o sociales nuestra solución
puede convertirse en inadecuada. Esta fase no tiene fin y se basa en tener al día la solución implementando los nuevos
requerimientos que van surgiendo constantemente.
Sin embargo, esta definición implica que se realizan todas las fases anteriores una sola vez y en el mantenimiento
pasamos del requerimiento a la solución directamente. En mi opinión esta etapa no tiene mucho sentido y es
incongruente con el resto del ciclo de vida. ¿Si el diseño es necesario para lograr nuestros objetivos de manera
adecuada, porque vamos a realizarlo una sola vez? ¿Por qué en este punto funcionaria el pasar de los requerimientos
a la solución en un solo paso mental? ¿En el curso del ciclo de vida nos hemos transformado en super humanos?
Así que vamos a desechar esta etapa y en otro momento analizaremos como realizar el mantenimiento de la solución
de manera adecuada.