En Ingeniería del Software, un modelo de proceso de desarrollo de software puede verse como una manera de dividir el trabajo en distintas actividades (o el ciclo de vida del producto en distintas fases) con la intención de lograr la mejor gestión y el mejor resultado para el proyecto. Estos modelos pueden incluir la definición previa de entregables específicos y otros artefactos que son creados y completados por el equipo para diseñar, codificar, probar y mantener el software en cuestión.

Todos los modelos de procesos están compuestos en su mayoría por distintas fases que varían, aunque ligeramente, de modelo en modelo.

  • Fase de definición
    • Planificación del proyecto de desarrollo software
    • Ingeniería de requisitos / Extracción de información
    • Análisis (estudio) de esos requisitos
  • Fase de desarrollo
    • Diseño del software
    • Generación del código
    • Pruebas del software
  • Fase de mantenimiento
    • Corrección de errores y reajustes que a veces provienen de nuevos requisitos e implican repetir las actividades de fases anteriores

Modelo en cascada

El modelo en cascada es un enfoque secuencial de desarrollo en el cual el trabajo fluye de manera secuencial («como una cascada») a través de las distintas fases:

  • Especificación de requisitos
  • Diseño de software
  • Implementación
  • Pruebas
  • Integración
  • Despliegue
  • Mantenimiento

El modelo en cascada es un enfoque, casi utópico, de la Ingeniería tradicional aplicado a la Ingenieria de Software. Un modelo en cascada estricto desaprueba la revisión y repetición de etapas anterior una vez estas se han completado. Sin embargo existe un enfoque más flexible (realista) que permite realizar arreglos y cambios en etapas ya completadas e incluso solapar actividades de fases consecutivas para evitar la rigidez del flujo de trabajo.

Desarrollo mediante prototipos

Este es un enfoque del desarrollo de software que se basa en la creación de prototipos (software con funcionalidad parcial, incompleta). Se suele usar como parte de otros modelos de proceso más tradicionales.

Los principios básicos son:

  • Reducir los riesgos inherentes del proyecto estableciendo el desarrollo en fragmentos mas pequeños y logrando, en un entorno propenso a cambios, que estos tengan menor impacto.
  • El usuario involucrado durante el desarrollo (probando prototipos) incrementa la aceptación de la implementación del producto final.
  • Pequeños prototipos con modificaciones son mostrados al cliente y sirve para confirmar que se han comprendido sus requisitos.
  • Muchos de los prototipos se generan con la expectativa de ser descartados, sin embargo, en algunos casos el prototipo puede evolucionar y convertirse en el producto final.
  • Es necesario un entendimiento fundamental de los problemas del negocio para evitar resolver los problemos incorrectos, despilfarrando esfuerzo al desarrollar prototipos que son prescindibles.

Desarrollo ágil

Son métodos que ponen el énfasis en agilizar el desarrollo, cuidando más la interacción auto-organizada entre personas y la entrega de software funcionando que la elaboración de documentación o el seguimiento estricto de protocolos y procesos de actuación. Algunos métodos ágiles de desarrollo de software:

  • Adaptive Software Development (ASD)
  • Agile Unified Process (AUP)
  • Crystal Clear
  • Feature Driven Development (FDD)
  • Lean Software Development (LSD)
  • Kanban
  • Open Unified Process (OpenUP)
  • Programación Extrema (XP)
  • Método de desarrollo de sistemas dinámicos (DSDM)
  • Scrum

Conclusiones

El desarrollo de software es uno de los pilares fundamentales de la Informática y al cual se dedican muchas horas de esfuerzos en universidades, centros de investigación y empresas de todos los tamaños.

Conforme la tecnología va avanzando, van apareciendo nuevas soluciones, nuevas formas de programación, nuevos lenguajes, y un sin fin de herramientas que intentan realizar el trabajo del desarrollador un poco mas fácil. También surgen nuevos modelos de proceso de desarrollo y nuevas metodologías que tratan de adaptar la manera de trabajar a las necesidades concretas de una organización y de sus proyectos. Es importante conocer bien estos modelos, para tener un esquema mental que nos permita gestionar proyectos y organizar equipos de manera racional, cuando abordemos el desarrollo de software, especialmente en el caso de aplicaciones grandes y complejas.