Combinando disciplina con metodologías ágiles

Si bien es cierto que el desarrollo de software implica la ejecución de procesos y metodologías acordes a al desarrollo, es necesario la aplicación de procesos ágiles de desarrollo de software o también conocidos como metodologías liviana, con el fin de enfocarse en la gente que participa y en los resultados como mejoramiento de calidad de los productos, proceso, minimización de costos y tiempo. Las metodologías ágiles se centran en las iteraciones que se obtienen en cada una de las etapas del ciclo de vida del proceso de desarrollo: planificación, análisis de requerimientos, diseño, codificación, revisión y documentación; y en la adaptabilidad de procesos para la construcción del software. La idea es que en cada iteración se obtenga un demo funcional, es decir, sin errores.

Por lo general estas metodologías son consideradas indisciplinadas por la falta de documentación técnica, pero las características que esta posee y la facilidad al aplicar las distintas metodologías como Programación extrema (XP), Crystal clear, Adaptived Software Development (ASD), Rational Unified Process (RUP) y otras, hacen que se torne disciplinaria. La disciplina consiste en la ejecución adecuada de dichas metodologías; tecnologías ágiles; integración de modelos como CMMI, Cobit, ISO; procesos adaptables y de mejores prácticas de desarrollo de software que pueden ser utilizadas desde la construcción de pequeñas aplicaciones y componentes de un sistema, hasta el desarrollo y construcción de un sistema empresarial completo. Una de las principales características de las metodologías ágiles es la insistencia en la planificación adaptable a cambios y enfocada a personas. Lo que significa un gran esfuerzo y agilidad de parte del equipo de desarrollo y el mejoramiento continuo de de sus procesos.

Como características de metodologías ágiles se tiene que:

  • Dan énfasis en las pruebas la aplicación en construcción y una continua integración de cada uno de sus componentes.
  • Mantiene sencillez en la definición, diseño y desarrollo de cada componente que constituye el software o producto.
  • Documenta solamente lo necesario, se centra en lo más importante del software o producto, el código fuente.
  • Permite validar la habilidad de desarrollar software en un equipo de ingeniería de software o en una organización a través de una evaluación estándar.
  • Permite establecer reuniones de avances y recopilación de requerimientos.
  • Se adaptan a las necesidades y entorno cambiante de los proyectos.


El hecho de aplicar metodologías ágiles a un determinado proyecto, no quiere decir que no se pueda aplicar otras, de hecho la combinación con metodologías tradicionales resulta muy interesante, se puede involucrar prácticas de ambas metodologías de tal forma que obtendríamos una metodología conjunta por cada proyecto. El único problema que existiría es definir cada una de las prácticas que se deben utilizar y, si es necesario definir parámetros para identificar cuál de ellas aplicar.

¿Pero, qué es ser ágil? La agilidad en el desarrollo de software se describe como un marco de trabajo en que se busca aplicar mejores prácticas para minimizar los riesgos de un proyecto a través de iteraciones muy cortas pero funcionales.

La integración de modelos, metodologías, procesos mejorados y nuevas tendencias, seguramente incrementarán el nivel de éxito de los proyectos y la calidad de los productos. Pero sería importante tomar en cuenta la capacidad de comunicación y trabajo del equipo de desarrollo de software, además, de procesos o modelos de bajo nivel como Personal Software Process (PSP) para complementar los otros modelos y lograr un desarrollo de software eficaz y una respuesta adecuada e inmediata al cambio, principalmente en aquellos proyectos en los que intervienen requisitos inestables.

Lo más importante que toda organización o equipo de software debe tener en cuenta es que, no existe una metodología ideal para un proyecto en la que se aplique. La metodología seleccionada sea esta ágil o tradicional, siempre dependerá directamente del equipo de desarrollo, la organización, lo cambiante del entorno y lo primordial, la aceptación de los usuarios finales.

Proceso de la Ingeniería de Requisitos

Es muy importante definir cuál es el proceso de ingeniería de requisitos ya que esto nos va a servir para la obtención correcta de los requerimientos. Se han definido diversos modelos a nivel de toda la Ingeniería de Software, así tenemos para el desarrollo de aplicaciones web, de escritorio, o sencillamente se ha definido un estándar, pero en general, la mayor parte de estos procesos tienen un símil y lo único que buscan es recopilar la mayor cantidad de requerimientos correctos para así conformar una buena estructura que servirá de base para el desarrollo de un proyecto.

Proceso de la Ingenier�a de Requisitos

 

En la figura, se muestra un esquema del proceso de la ingeniería de requisitos basado en la Ingeniería de Software de Gestión. El proceso se cumple en cinco fases: viabilidad, captura y análisis, especificación, validación y gestión de requisitos.

 

Estudio de viabilidad: Este permitirá rendir un informe tanto al equipo de desarrollo del proyecto como al usuario o cliente, donde se verificará si el proyecto vale la pena desarrollarlo. Es de vital importancia para la satisfacción de los objetivos del negocio.

 

Captura y Análisis: En esta fase el desarrollador o su equipo de desarrollo entran en contacto con el usuario final o con el cliente para determinar el alcance del proyecto o del sistema que se desea construir, además, se debe identificar cuáles son los servicios que prestará el sistema, su rendimiento, sus necesidades y restricciones, y cuáles son los objetivos esperados.

 

Especificación: Aquí se debe obtener un documento de especificación de requisitos, en cual se llega a definir de una forma completa, precisa y verificable cada uno de los requerimientos o necesidades que debe satisfacer el sistema a desarrollar, además de sus respectivas restricciones (software, hardware).

 

Validación: Consiste en mostrar o comprobar que cada uno de los requisitos obtenidos definen el sistema o proyecto que se va a construir y que desea el cliente. En esta etapa solamente entran aquellos requisitos que se mencionaron ya en la especificación.

 

Gestión: Se realiza la comprensión y control de los cambios de cada una de los requisitos, sean estos requisitos estables (corresponden al estado del sistema) o volátiles (representan eventos que hacen que el sistema realice una función dada).

¿Qué es Ingeniería de Requisitos (IR)?

Existen varios conceptos o significados acerca de la ingeniería de requisitos que nos proporcionan varios autores según su nivel de experiencia, sentido común o simplemente por su forma de ver los requerimientos respecto al desarrollo de un determinado proyecto. En la ingeniería­ de requisitos principalmente se identifican dos aspectos muy importantes, el primero que es el propósito del sistema que se va a desarrollar y el segundo, el contexto en el que será usado. En base a estas características, se definen algunos conceptos como:

 

(i)     La ingeniería de requisitos o los requisitos en sí, constituyen el enlace entre las necesidades reales de los clientes, usuarios y otros participantes vinculados al sistema. La ingeniería de requisitos consiste en un conjunto de actividades y transformaciones que pretenden comprender las necesidades de un sistema software y convertir la declaración de estas necesidades en una descripción completa, precisa y documentada de los requerimientos del sistema siguiendo un determinado estándar.[1]

 

(ii)        La ingeniería de requisitos es un área de investigación que procura atacar un punto fundamental en el proceso, que es la definición de lo que se quiere producir.[2]

 

(iii)   Es una condición o necesidad de un usuario para resolver un problema o alcanzar un objetivo. Una condición o capacidad que debe estar presente en un sistema o componentes de sistema para satisfacer un contrato, estándar, especificación u otro documento formal. Una representación documentada de una condición o capacidad de un sistema.[3]

 

La Ingeniería de Requerimientos en si cumple un papel primordial en el proceso de construcción y producción de un software, es decir que, estará basado en función de las necesidades planteadas por los clientes en un nivel muy general, donde se descubre, documenta, analiza y se define los servicios o componentes de lo que se desea producir, además de las restricciones que tendrá el producto o software. Su principal tarea consiste en la definición del proceso a seguir en la construcción de un software, y de facilitar la comprensión de lo que el cliente requiera. La obtención correcta de los requerimientos puede llegar a describir con claridad, sin ambigüedades, en forma consistente y compacta, el comportamiento de un sistema.

 

De tal manera que, basarse en la extracción de requisitos y sobre todo que sean correctos, lo único que se pretende en la construcción no solo de grandes sistemas software sino también simples, es la de minimizar los problemas relacionados al desarrollo de sistemas, claro está en proporción a la realidad de cada proyeto, con lo que se logra reducción de tiempo en la construcción, reducción de errores, y los más importante no solo para el cliente sino también para el desarrollador, evita gastar dinero más de lo planeado y determinado para el proyecto.


[1] José Manuel Márquez, Docente de la Universidad de Valladolid.

[2] Ing. Leidy Fernández Sánchez.

[3] IEEE.