Guía SDLC - Fases y metodologías del ciclo de vida del desarrollo de software

Cuando decidí aprender a codificar por mí mismo hace casi cuatro años, nunca había oído hablar del ciclo de vida del desarrollo de software, y mucho menos había pensado en él.

Como desarrollador nuevo, estaba enfocado en aprender las tecnologías que me ayudarían a conseguir ese codiciado primer trabajo de desarrollador, no los matices de cómo operaban esos equipos.

Cuando me enteré de ellos, pensé que serían inútiles para mí porque me consideraba un desarrollador web, no un desarrollador de software.

Desde entonces, aprendí que esto no podría estar más lejos de la verdad y que estos principios / prácticas juegan un papel importante en mis actividades diarias (ya sea que me dé cuenta o no).

Tengo la suerte de ver cómo el código que escribo, las características que construyo y los errores que introduzco sin darme cuenta (más de lo que quiero admitir) afectan al usuario final y su experiencia. Esa experiencia me ayudó a dar forma a mi forma de pensar sobre el proceso de creación de productos y la resolución de problemas para mis usuarios.

He tenido algo de tiempo para pensar en las diferencias (y similitudes) que ofrece cada uno de estos enfoques. En esencia, cada uno se centra en ofrecer software de alta calidad de la manera más eficiente y rentable posible.

Profesionalmente, solo he usado una o dos de estas metodologías. Pero todavía encuentro valor en al menos una comprensión básica de todos ellos.

Todas estas metodologías siguen una serie de fases similares a este diagrama:

Entonces, aquí están los métodos del ciclo de vida del desarrollo de software (sin ningún orden en particular):

  • Apoyarse
  • Ágil
  • Cascada
  • Iterativo
  • Espiral
  • Operaciones de desarrollo

Analicemos las diferencias y similitudes de cada método.

Apoyarse

La metodología Lean se basa en gran medida y se compone de siete principios.

Sin ningún orden específico son:

  1. Eliminar residuos
  2. Amplificar el aprendizaje
  3. Decidir lo más tarde posible
  4. Entregue lo más rápido posible
  5. Empoderar al equipo
  6. Construir integridad
  7. Ver / optimizar el todo

Cada principio tiene un propósito específico con beneficios que se complementan entre sí.

La eliminación del desperdicio (funciones adicionales, trabajo incompleto, compromisos gerenciales, etc.) crea más valor para el cliente que, a su vez, mejora la satisfacción.

Ampliar el aprendizaje permite a los equipos reinvertir en su capacidad para entregar productos a los clientes.

Decidir lo más tarde posible se refiere a todas las decisiones importantes, dando a los equipos un enfoque basado en opciones o basado en conjuntos. Esto permite que los equipos recopilen hechos en lugar de opiniones para ayudar a influir en las decisiones cuando se toman.

Entregar lo más rápido posible se explica por sí mismo: cree el producto lo más rápido posible para entregarlo a los clientes para su evaluación / iteración.

En un escenario típico, los gerentes reparten asignaciones / trabajo a los desarrolladores. En la metodología Lean, los desarrolladores "enseñan" a los gerentes cómo escuchar a las "personas en las trincheras", lo que influye en las decisiones / elecciones de la administración.

Esto ayuda a los equipos a sentirse más capacitados para hablar sobre ideas y soluciones.

Hacer de la integridad una regla en lugar de una excepción significa que el cliente confía en el sistema que se está construyendo. El cliente sabe que el sistema se está construyendo para soportar la cantidad adecuada de crecimiento y "estiramiento" si es necesario.

Me gusta pensar en la parte de la integridad de la misma manera que estar sentado en una silla. Cuando te sientas en la silla, crees que fue construida con el mejor material que te sostendrá cada vez que te sientes durante la vida útil de la silla. El cliente necesita esa misma confianza en el producto que se está construyendo.

Por último, ver y optimizar el conjunto se refiere a la totalidad del sistema que se está construyendo. Al optimizar para el todo, consideramos el software no como una suma de muchos componentes, sino como una entidad grande que está optimizada para la eficiencia.

Esto significa que durante el desarrollo, el producto se divide en partes manejables y que los errores inadvertidos no solo se descubren sino que se resuelven rápidamente.

Ágil

Este es el enfoque de "fallar rápido" para crear software.

Pone énfasis en lanzamientos pequeños e incrementales con ciclos de lanzamiento continuos. Con cada iteración, los equipos se esfuerzan por identificar y abordar los pequeños problemas antes de que se conviertan en grandes problemas.

Esto también significa que los equipos deben involucrar a las partes interesadas (personas / organizaciones a las que el código puede afectar en última instancia, como gerentes, líderes técnicos, directores de tecnología y clientes) para obtener sus comentarios.

Si es un autónomo, sus partes interesadas serían sus clientes; en última instancia, debe garantizar su satisfacción con el trabajo antes de continuar.

Agile es técnicamente una rama de la metodología Lean con algunas diferencias notables: principalmente prioriza la satisfacción del cliente desde el principio y permite a los equipos responder rápidamente a los comentarios de los clientes.

Aunque está más allá del alcance de este artículo, existe otro marco más complejo dentro de Agile que se llama SCRUM. Esta metodología se utiliza para proyectos grandes y extremadamente complejos e incluso se ha utilizado fuera del desarrollo de software.

Cascada

La metodología de cascada es, según la mayoría de las cuentas, la más antigua de la lista. Nunca tuvo la intención de ser un modelo para el desarrollo de software y se inició en el mundo de la construcción y la fabricación.

Este enfoque es simple en su estructura: termine todas las partes de una fase antes de pasar a la siguiente fase con más impulso hacia el final del proyecto a medida que se completan las etapas. El comienzo y la finalización de cada etapa (excepto la primera) y la finalización dependen de la finalización / transferencia de información de la etapa anterior.

Bajo el enfoque de cascada, cada etapa tiene su propio plan de proyecto rígido que finaliza con pruebas para el trabajo completado previamente. Cabe señalar que este enfoque no se recomienda para proyectos más grandes o de mayor duración debido a la rigidez antes mencionada.

Piensa en la génesis de esta metodología y la entenderás mejor. Proviene del mundo de la construcción / fabricación, donde es común completar una fase a la vez. Durante la construcción de una casa, no comenzaría a instalar la tubería antes de que se haya colocado el marco.

Esa no es la forma en que funciona el desarrollo de software en general. Como todos sabemos, a veces es necesario volver a visitar una fase que antes se pensaba que estaba terminada.

Iterativo

Esto se conoce como el "enfoque repetitivo" o el enfoque de "hacerlo mejor en la próxima ronda" debido a las diferentes oportunidades que brinda para mejorar el producto con cada iteración del ciclo.

Soy parcial (como todos lo somos: D), pero este es mi ciclo de vida favorito para el desarrollo. Creo que funciona mejor para mi situación actual, tanto en mi carrera como autónomo como en mi carrera, porque me permite "avanzar constantemente mientras hago las cosas mejor".

Con el enfoque iterativo, los equipos implementan una solución, prueban esa solución, evalúan su efectividad / rendimiento y luego identifican otras áreas de mejora. Esto sucede para cada ciclo (iteración) del proceso de desarrollo.

Con cada versión lanzada viene otra iteración hasta que el producto final se completa y está listo para ser lanzado a los usuarios.

Una de las grandes características del enfoque iterativo es que usted y su equipo obtienen una versión funcional del software al principio del proceso de desarrollo. Esto puede ser especialmente útil para mostrárselo a las partes interesadas para evaluar su respuesta / comentarios.

Uno de los grandes inconvenientes de este enfoque es que puede consumir una gran cantidad de recursos muy rápidamente. Imagine todas las personas, horas, correcciones de errores y salarios que entran en cada iteración del ciclo de desarrollo y obtendrá una buena imagen del uso de recursos.

Dentro de este enfoque hay un subconjunto de principios desarrollados por Rational Software Corporation (comprado por IBM) llamado Rational Unified Process (RUP) que consta de 4 fases:

  • Comienzo
  • Elaboración
  • Construcción
  • Transición (lanzamiento de producto)

Este conjunto de principios está destinado a ser flexible y adaptado a las necesidades de cada equipo que lo utilice.

Espiral

La metodología en espiral es probablemente la más flexible de las seis. Es una metodología basada en riesgos, identificándolos y negándolos. El riesgo (identificación y aversión) impulsa todas las decisiones en este modelo. Se divide en cuatro subfases:

  • Planificación (objetivos)
  • Análisis de riesgo (identificar posibles obstáculos)
  • Desarrollar y probar (versión actual y próxima)
  • Evaluación (revisión de la fase actual y plan para la siguiente fase)

Cada iteración de cada fase comienza con la planificación de la siguiente fase. De esta forma se identifican los riesgos potenciales antes de que se encuentren. Esto también permite un plan de acción cuando surgen dichos riesgos.

Durante las fases, los equipos también trabajan para mitigar estos riesgos y su impacto en futuras iteraciones del desarrollo en espiral.

A medida que continúa el proceso de desarrollo, cada una de estas cuatro subfases se repite en forma de espiral. Esto permite múltiples rondas de refinamiento para cada subfase hasta su finalización.

Operaciones de desarrollo

Si realiza una búsqueda rápida, no encontrará escasez de información sobre este método de ciclo de vida de desarrollo. Es el nuevo chico del barrio el que reúne a los equipos de operaciones de tecnología de la información y desarrollo de software.

Estos equipos trabajan en conjunto para proporcionar actualizaciones pequeñas pero impactantes a los productos que vienen a un ritmo frecuente. A su vez, esto crea un ciclo continuo de retroalimentación y mejora que impulsa el desarrollo.

Esta metodología particular también es conocida por automatizar las partes manuales del desarrollo (piense en la implementación).

El objetivo general de esta metodología es, como la mayoría de las demás, acortar el ciclo de vida del desarrollo y proporcionar productos de calidad.

Uno de los inconvenientes de esta metodología son los importantes cambios de mentalidad y cultura dentro de una organización. Los equipos que pueden haber estado acostumbrados a trabajar en muchas cosas encuentran que sus tareas se reducen a solo una o dos.

Por ejemplo, un desarrollador de propósito general puede encontrar que ahora solo se le asigna la parte de prueba o la parte de la experiencia del usuario final.

Llevándolo todo a casa

Espero que ahora pueda ver la importancia y los beneficios de cada una de estas metodologías. Cada uno de ellos posee sus propias fortalezas y debilidades.

Son, en su nivel más básico, un conjunto de pautas y principios que buscan brindar un trabajo eficiente y de alta calidad a las partes interesadas.

Cuando comencé a aprender a codificar, no tenía un mentor. Al compartir lo que he aprendido, espero ayudar a aquellos que están aprendiendo a codificar cuando y donde puedan.

Quiero compartir tanta información y experiencia como sea posible con otros desarrolladores. Si está aprendiendo a programar por sí mismo o si es un desarrollador experimentado, espero que este artículo le ayude, aunque sea de una manera pequeña.

Echa un vistazo a mi blog donde publico con frecuencia artículos sobre desarrollo web.

Mientras estás allí, ¿por qué no te suscribes a mi boletín? Puede hacerlo en la parte superior derecha de la página principal del blog. Me gusta enviar artículos interesantes (míos y otros), recursos y herramientas para desarrolladores de vez en cuando.

Si tiene preguntas sobre este artículo o simplemente, en general, mis mensajes directos están abiertos, venga a saludar en Twitter o en cualquiera de mis otras cuentas de redes sociales, que puede encontrar debajo del boletín de noticias, regístrese en la página principal o en mi perfil aquí :)

¡Que tengas un día increíble y feliz codificación, amigo!