¿Cómo se hace el software? Ciclos de vida
El ciclo de vida del software es una de las decisiones importantes que toma todo equipo de desarrollo, pues una mala elección entorpece la obtención de los objetivos del producto
Todo producto de software “vive” un ciclo:
Primero, es concebido, hay una necesidad que lo requiere
Se hace un trabajo para decidir cómo hacerlo, construirlo y probarlo hasta su aceptación
Es puesto en manos de los usuarios, quienes lo utilizan
Recibe mantenimiento; correctivo, si es reparado; adaptativo, si se agregan o cambian funciones
Es retirado de la operación, porque es reemplazado o simplemente ya no es necesario.
Esto es lo que se llama “el ciclo de vida del software”, que es una de las decisiones importantes que toma todo equipo de desarrollo, pues esto define muchos hechos de lo que ocurrirá durante la creación del software. Una mala elección en el ciclo de vida entorpece la obtención de los objetivos del producto.
Reitero que todos los productos de software pasan por esas etapas, sin embargo no quiero decir que todos los equipos hacen igual las fases. El ciclo de vida, o la forma, de hacer el software es (y debe ser) diferente para cada trabajo para que éste dé los mejores resultados.
En el mundo ideal, cada equipo debe definir el Ciclo de vida para cada producto de software. Incluso, en muchos desarrollos se combinan dos o más estrategias de ciclo de vida. Para que esto pueda funcionar, es necesario que entendamos cómo se estructura un ciclo de vida y algunas estrategias definidas hoy en día.
Ciclos de vida predictivos
Estos modelos de ciclo de vida se basan en la planificación detallada, donde todas las actividades se establecen desde un inicio y se van completando gradualmente. Algunos de ellos permiten la revisión y actualización del plan, pero el conjunto de actividades ya se encuentran definidos y estandarizados.
A continuación te menciono cuáles son y sus características principales.
Ciclo de vida en Cascada (Waterfall)
El ciclo de vida en cascada define cinco etapas principales del trabajo en el desarrollo del software. Su principal característica es la linealidad: cada etapa debe terminarse por completo para avanzar a la siguiente y no existe la posibilidad de regresar a una fase anterior.
El progreso del trabajo se mide con base en las actividades concluidas y el software suele verse y usarse hasta el final de la fase de verificación.
Es conocido como “el método tradicional de desarrollo”.
Ciclo de vida en Espiral
El modelo en espiral consiste en la repetición cíclica de cuatro etapas: definición de objetivos, resolución de riesgos, desarrollo del producto y planificación de siguiente fase.
El propósito de definir los ciclos es reducir la incertidumbre inicial de los proyectos de software, donde cada iteración construye sobre lo aprendido en la anterior. Cabe destacar que los ciclos iniciales están orientados a construir prototipos, y es a partir del cuarto ciclo que se construye el software final.
Ciclo de vida Incremental
El ciclo de vida incremental tiene su base en el modelo en cascada, pues ejecuta las actividades linealmente. La diferencia principal es que el alcance de la solución se maneja en torno a “Releases” o versiones, procurando reducir el tiempo en que se obtiene una solución funcional el producción.
El nombre “incremental” se debe a que cada nuevo release construye sobre la anterior, por lo que las funciones van incrementando en cada versión.
Ciclo de vida por prototipos
El ciclo de vida por prototipos es una variante del modelo en espiral, pues busca reducir la incertidumbre y validar la factibilidad de una idea.
El ciclo por prototipos realiza el trabajo de análisis, diseño y especificación construyendo, evaluando y mejorando prototipos, hasta que la idea es validada y se continúa con el desarrollo del software, siguiendo waterfall, espiral o incremental, o se desecha la idea al probarse su inviabilidad.
Ciclos de vida adaptativos
Los ciclos de vida adaptativos están diseñados para facilitar el cambio en los requerimientos. Principalmente, están diseñados para eliminar la insatisfacción de los usuarios, pues reduce el tiempo de retroalimentación a ciclos muy cortos, con lo que se incrementa la probabilidad de obtener una solución adecuada.
A continuación te menciono cuáles son y sus características principales.
Ciclo de vida Ágil
El ciclo de vida basado en Ágil se caracteriza por ajustar el desarrollo en ciclos cortos, llamados “time boxes” o “sprint” (como en Scrum). La planificación de cada ciclo corto consiste en elegir de un “backlog” los requerimientos posibles en esa cantidad de tiempo, que desarrollarán un producto de software utilizable al concluir su desarrollo; habitualmente, este producto es conocido como “MVP”. Cada ciclo concluye con una demostración y retroalimentación de los usuarios, para incorporar sus comentarios en el backlog y el siguiente time box.
La retroalimentación, introspección, adaptación y comunicación diarias son características de esta forma de trabajo.
Ciclo de vida Lean
El ciclo de vida Lean se caracteriza, principalmente, por reducir la cantidad de trabajo en progreso (WIP). Existe un backlog, en el que se encuentran definidos los requerimiemntos y el trabajo por hacer, pero no se realiza una planificación por iteraciones, sino que cada integrante del equipo toma el siguiente elemento de alta prioridad del backlog y lo desarrolla sin la ceremonia de actualizar un plan.
No existen fechas estáticas, pues las demostraciones pueden hacerse en cualquier momento y los despliegues a producción no siguen una temporalidad, se basan en criterios definidos por el equipo.
Ciclo de vida CI / CD
El ciclo de vida de Integración Continua (CI) y Entrega Continua (CD) se basa en la automatización, en medida de lo posible, de las tareas de creación de ejecutables y despliegue en producción. Los equipos solamente tienen un repositorio MASTER de código, sin ramificaciones, que siempre debe contener versiones estables, listas para crear un ejecutable. Un conjunto de scripts automáticos toman el repositorio central, crean un ejecutable y realizan las pruebas; cuando éstas son satisfactorias, el ejecutable se publica como un “release candidate”. Este proceso puede ocurrir una vez al día o varias veces al día.
La característica de Entrega Continua agrega scripts, que automatizan el proceso de actualización: despliegan la infraestructura, validan las pruebas de regresión, instalan el release candidate y recuperan los fallos en caso de errores en la actualización.
Estos ciclos de vida heredan muchas características de ágil y lean, en cuanto a la necesidad o no de la planificación.
Ciclo de vida Exploratorio
El ciclo de vida exploratorio es una forma de ejecutar experimentos controlados. El propósito es proponer y validar ideas viables o crear una necesidad que no existía. Las actividades consisten en crear requerimientos a través de prototipos, de los cuales se construyen varias alternativas. Estos prototipos, la mayoría de las veces, no son hechos a través de la programación del software, sino que se hacen usando varios medios y herramientas: papel, simulaciones, modelos físicos, etcétera.
Cuando una alternativa tiene suficiente aceptación, se inicia un desarrollo de software utilizando algún otro ciclo de vida, aunque es muy frecuente que no se valide ninguna idea y se deseche todo.
En una siguiente entrega, te hablaré de cómo elegir un ciclo de vida para el desarrollo que vas a hacer y cuáles consideraciones debes hacer para decidir la transición de una estrategia a otra. Además, exploraremos las necesidades y habilidades que debes tener para poder hacer funcionar una estrategia.
¡Hasta la próxima!