Las metodologías de trabajo cambian y el software debe adaptarse a los nuevos tiempos, por este motivo, frente al tradicional desarrollo en cascada surge un nuevo modelo de software ágil basado en la idea de que los requisitos y las soluciones evolucionen con el tiempo según las necesidades del proyecto.
Desarrollo en cascada
También es conocido como modelo en cascada y denominado así por la posición de sus fases – en forma de cascada – durante el desarrollo de un proyecto. Este enfoque ordena de forma rigurosa las etapas del proceso para el desarrollo de software y el inicio de cada etapa debe esperar a la finalización de la etapa anterior. Una etapa no
finaliza hasta que se lleve a cabo una revisión final de la fase y solo si esta es superada, el proyecto podrá continuar avanzando.
[box type=»note» align=»» class=»» width=»»]
Ejemplo más común de metodología en cascada:
1. Análisis de requisitos
2. Diseño del Sistema
3. Diseño del Programa
4. Codificación
5. Verificación
6. Pruebas
7. Mantenimiento[/box]
Esta es la mejor manera de detectar cualquier error en el diseño. Sin embargo, también genera un aumento de los costes de desarrollo, ya que la detección de ese error obliga a rediseñar y reprogramar el código afectado. Un problema similar surge cuando es preciso introducir cambios en las fases más avanzadas del proyecto, lo que supone un importante esfuerzo para los desarrolladores.
El ejemplo más común de la metodología de desarrollo de software en cascada es la que se compone de las siguientes fases:
- Análisis de requisitos: durante esta fase se analizan las necesidades de los usuarios finales del software para determinar qué objetivos debe cubrir y se extrae una memoria llamada SRD o documento de especificación de requisitos, que contiene la especificación completa de lo que debe hacer el sistema sin entrar en detalles internos.
- Diseño del sistema: descompone y organiza el sistema en elementos que puedan elaborarse por separado, aprovechando las ventajas del desarrollo en equipo. Como resultado surge el SDD (Documento de Diseño del Software), que contiene la descripción de la estructura relacional global del sistema y la especificación de lo que debe hacer cada una de sus partes, así como la manera en que se combinan unas con otras.
- Diseño del programa: es la fase en donde se realizan los algoritmos necesarios para el cumplimiento de los requerimientos del usuario, así como también los análisis necesarios para saber qué herramientas usar en la etapa de codificación.
- Codificación: en esta fase se implementa el código fuente, haciendo uso de prototipos así como de pruebas y ensayos para corregir errores.
- Pruebas: los elementos, ya programados, se ensamblan para componer el sistema y se comprueba que funciona correctamente y que cumple con los requisitos, antes de ser entregado al usuario final.
- Verificación: el usuario final ejecuta el sistema, para ello los programadores ya realizaron exhaustivas pruebas para comprobar que el sistema no falle.
- Mantenimiento: una de las etapas más críticas, ya que se destina un 75 % de los recursos, es el mantenimiento del software, ya que al utilizarlo como usuario final puede ser que no cumpla con todas nuestras expectativas.
Desarrollo ágil
En contra punto, el desarrollo ágil de software es un enfoque completamente novedoso, donde los requisitos y las soluciones evolucionan según van surgiendo nuevas necesidades en los proyectos. Este tipo de desarrollo ha supuesto un enfoque radical para la toma de decisiones en los proyectos de software. En este caso, el trabajo se realiza mediante la colaboración de equipos auto-organizados y multidisciplinarios, inmersos en un proceso de toma de decisiones a corto plazo compartido.
Existen muchos métodos de desarrollo ágil y la mayoría minimiza riesgos desarrollando software en lapsos cortos conocidos como iteraciones. Una iteración debe tener una duración aproximada de entre una y cuatro semanas y, además, debe incluir varias fases: planificación, análisis de requisitos, diseño, codificación, revisión y documentación. La iteración no busca el producto acabado, por lo que no añade demasiada funcionalidad al mismo, pero debe lograr una versión de prueba o “demo” totalmente carente de errores al finalizar la iteración. Una vez se ha logrado esa versión de prueba y ha finalizado la iteración, el equipo vuelve a plantear y evaluar las prioridades del proyecto.
Este tipo de desarrollo fomenta la comunicación cara a cara de los desarrolladores frente a las técnicas tradicionales basadas en documentos técnicos, por eso los equipos ágiles buscan oficinas abiertas conocidas como bullpen o plataformas de lanzamiento y suelen ser criticados por su falta de documentación técnica.
Ventajas del desarrollo en cascada
- Realiza un buen funcionamiento en equipos débiles y productos maduros, por lo que se requiere menos capital y herramientas para hacerlo funcionar de manera óptima.
- Es un modelo fácil de implementar y entender.
- Está orientado a documentos.
- Es un modelo conocido y utilizado con frecuencia.
- Promueve una metodología de trabajo efectiva basada en definir antes que diseñar y diseñar antes que codificar.
Ventajas del desarrollo ágil
- Esta metodología es mucho más eficiente y rápida a la hora de trabajar con proyectos múltiples.
- El desarrollo ágil aumenta la productividad.
- Simplifica el manejo de la sobrecarga de procesos. Las metodologías por iteración simplifican el proceso de entrega versus validación lo cual además permite adoptar cambios sobre la marcha del alcance del proyecto.
- Mejora la gestión del riesgo.
En definitiva, el panorama en el desarrollo de software está sufriendo la misma problemática que el resto de sectores, tanto industriales como de servicios: la rapidez frente a la calidad, la flexibilidad frente a la fuerza de la costumbre, el método moderno adaptado a las necesidades de hoy en día frente al método tradicional y conocido.
Mientras que el desarrollo de software en cascada asegura un buen funcionamiento basado en el análisis constante y ordenado, el desarrollo ágil asegura una mayor rapidez y flexibilidad basándose en el análisis de las necesidades de cada proyecto. Las versiones de prueba, con posibilidad de mejorarse o adaptarse a las necesidades de cada empresa, chocan de forma irremediable contra los softwares cerrados – que no permiten realizar cambios ágiles – basados en las metodologías en cascada.
Desde nuestro punto de vista el desarrollo ágil tiene significativas ventajas frente al desarrollo en cascada, pero ¿qué tipo de metodología de desarrollo les parece más eficaz?