Desarrollo Agile
Desarrollo Agile
Desarrollo Agile
Noviembre 1, 2004
Resumen
Desde su aparición, el mercado consumidor de software ha ido cambiando en
cuanto a sus requerimientos de tiempos, ámbito de negocios y tecnología que lo soporta. La
producción de software entonces se vio exigida por tiempos de entrega cada vez más cortos e
inamovibles, frecuentes cambios de requerimientos, mayor calidad y mayores desafíos
tecnológicos. Estas exigencias están en constante aumento porque los negocios dependen cada
vez más del software, llegando al punto de requerir una nueva forma de trabajo.
En respuesta, a esta evolución del mercado consumidor, la industria debió
adaptarse y mejorar. Para ello surge la ingeniería de software sustentada en los procesos de
desarrollo que resultan exitosos en otras ingenierías para mitigar los problemas que se
presentan al construir software. Esto provocó la aparición de procesos y metodologías con
fuerte orientación hacia la documentación intensiva y altos niveles de ceremonia en las tareas.
Sin embargo una gran parte de los proyectos no disponen de los recursos
humanos, tecnológicos y económicos para poder afrontar la adopción de las prácticas
tradicionales de la ingeniería de software. Como resultado de esta situación surge el concepto
de metodologías ágiles que permiten llevar adelante el desarrollo de software como una
ingeniería focalizándose en los resultados por sobre el proceso.
Existen múltiples métodos que responden a los principios del desarrollo ágil,
donde se pueden mencionar a SCRUM, XP o RUP Ágil. Cada uno de ellos tiene
características particulares, que permite aplicar el más conveniente para cada situación o
incluso combinarlos. SCRUM se centra en la administración del proyecto y los recursos; XP
se focaliza en la codificación y entregas; RUP Ágil se presenta como una versión simplificada
del Rational Unified Process.
El contexto de la industria de software de la República Argentina se caracteriza
por proyectos de corta o mediana duración con asignación limitada de recursos. Presentando
así un escenario permeable a la aplicación de metodologías ágiles, que permite al desarrollo
de software mantenerse dentro los parámetros de la ingeniería de software, respondiendo
efectivamente a las exigencias del mercado.
Página 2 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Contenidos
Resumen ............................................................................................................. 2
Contenidos .......................................................................................................... 3
Introducción y descripción ................................................................................. 4
La visión ágil del proceso de desarrollo de software ................................ 5
Principios de los Métodos de Desarrollo Ágil.................................................... 6
Desarrollo Iterativo e Incremental............................................................. 7
Desarrollo Evolutivo y Adaptativo ........................................................... 8
Planeamiento guiado por Riesgos y por necesidades del Cliente ............. 9
Análisis Evolutivo de Requerimientos .................................................... 10
Iteraciones de Tiempo Fijo...................................................................... 11
Metodologías Ágiles ......................................................................................... 12
Descripción de los métodos Ágiles elegidos........................................... 12
Scrum ...................................................................................................... 13
Extreme Programming ............................................................................ 16
Rational Unified Process Ágil................................................................. 22
Contrastación entre Ciclo de Vida en Cascada e Iterativo ............................... 27
Requerimientos........................................................................................ 28
Planificación............................................................................................ 29
Diseño...................................................................................................... 31
Construcción............................................................................................ 32
Pruebas .................................................................................................... 32
Puesta en Producción .............................................................................. 33
Introducción a los Métodos Ágiles en proyectos pequeños y grandes ............. 35
Tipos de Proyectos en la Argentina......................................................... 37
Posible aplicación de las metodologías ágiles en el contexto argentino . 38
Desmitificaciones .................................................................................... 39
Conclusiones..................................................................................................... 41
Bibliografía ....................................................................................................... 44
Apéndice A - Manifiesto para el Desarrollo Ágil de Software ........................ 45
Los Principios detrás del Manifiesto para el Desarrollo Ágil de Software ...... 45
Página 3 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Introducción y descripción
Con la conformación de la informática como área de estudio a partir de los
años 50, se ha intentado siempre acercarla a alguna de las ciencias o prácticas existentes en
otros ámbitos. Primero se la aproximó a las ciencias matemáticas dando lugar a los
calculadores científicos, luego estuvo muy próxima de la electrónica con el advenimiento de
los transistores y de las telecomunicaciones cuando surgieron las primeras redes de
computadores.
A mediados de la década de los 80, el desarrollo de software comenzó a tomar
cuerpo como disciplina en sí despegando a la informática de las ciencias y prácticas antes
mencionadas. Ésta nueva orientación, la de la construcción de programas y piezas de software
que manipulan y procesan información, comenzó a estar más relacionada a requerimientos
empresariales de soporte operativo y toma de decisiones y no tanto con problemas de
hardware y/o comunicaciones.
La concepción del desarrollo de software como una práctica industrial de gran
escala trajo consigo problemas que hasta ese momento no habían sido tenidos en cuenta o
carecían de importancia debido a la orientación de la disciplina. La problemática encontrada
se fundamenta con el incumplimiento de plazos y estimaciones de esfuerzos, el aumento
desmedido de los costos fuera de presupuesto y las diferencias encontradas entre el producto
software construido y los requerimientos del cliente.
En la última década, el desarrollo de software ha ido adquiriendo técnicas y
mejores prácticas de otras disciplinas que intentan mitigar los problemas encontrados en el
proceso de construcción de software. Dichas prácticas provienen de ramas de la ingeniería
(principalmente de la industrial y la civil) pero también existen técnicas provenientes de la
medicina, administración de empresas y ciencias sociales.
Todas estas prácticas, sumadas al entendimiento de que el proceso de
construcción de software abarca no sólo la implementación de piezas de software en un
lenguaje de programación o tecnología, sino que incluye también aspectos relacionados con la
gestión de personal, requerimientos, planificación, gestión de presupuestos, riesgos,
contrataciones y acuerdos, etc., conllevan al concepto de Ingeniería de Software.
En el presente trabajo de investigación, intentaremos contrastar dos visiones
existentes que surgieron a partir de la concepción del desarrollo de software como una rama
de la ingeniería.
Página 4 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Página 5 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Como se observa, las dos visiones resultan opuestas sobre el mismo proceso.
Siendo este hecho el origen del siguiente interrogante: ¿Como puede la metodología que da
respaldo a este proceso responder a situaciones y problemáticas completamente opuestas? La
respuesta es que existen metodologías distintas para cada concepción del proceso. Es
importante destacar que éste trabajo de investigación se centrará en las metodologías que
conciben el desarrollo de software como un proceso creativo. Debido a esto, a continuación se
analizarán las mejores prácticas que dichas metodologías utilizan y promueven.
Figura 1: Comparación del riesgo a lo largo del tiempo según el ciclo de vida
Página 8 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
lo que el cliente o usuario percibe y transmite como necesario. Los métodos adaptativos están
muy relacionados a la práctica de planificación guiada por el cliente.
Página 9 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Página 11 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Metodologías Ágiles
Tal como dice Alistair Cockburn: Ser ágil no es sino declarar maniobrabilidad
frente a los cambios de los requerimientos, la tecnología y entender los cambios de situación.
Ser ágil es también una declaración de prioridades en un proyecto. Eso es ser ágil.
(Cockburn, 2001)
Con esta visión de agilidad, muchos grandes desarrolladores o lideres de
proyectos comenzaron a delinear y establecer distintos métodos que podían diferenciarse entre
si por las implementaciones pero que su hilo conductor siempre respondía a este concepto.
Finalmente en el año 2001, en Utah EE.UU. todos los representantes fueron invitados a un
taller de dos días en Snowbird. Martin Fowler cuenta: Todos estábamos conscientes del hecho
de que había mucho en común, y este reconocimiento era mucho mayor que las diferencias
entre los procesos. Además de un contacto útil entre los líderes de procesos, había también la
idea de emitir una declaración conjunta - una llamada a las armas en favor de más procesos
de software ágiles (Fowler, 2000).
Y justamente lo que obtuvieron fue una declaración de los principios y valores
comunes de los procesos ágiles llamada Manifiesto Ágil (Apéndice A). Martin Fowler
continúa diciendo: El manifiesto fue sólo eso, una publicación que actuó como un punto de
partida para aquellos que compartían estas ideas básicas. Uno de los frutos del esfuerzo fue
la creación de un cuerpo más longevo, la Alianza Ágil. La Alianza Ágil es una organización
sin fines de lucro que busca promover el conocimiento y la discusión de todos los métodos
ágiles. (Fowler, 2000).
Las metodologías ágiles son métodos que contribuyen y dan soporte al proceso
creativo de software. En todos los casos adoptan el Manifiesto y los principios Ágiles como
pilares de los mismos.
Página 12 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Scrum
Scrum nace en Hardvard en el año 1986 de la mano de Ikujiro Nonaka y
Hirotaka Takeuchi quienes escriben The New Product Development Game (Harvard Business
Review 86116:137-146, 1986) y luego elabora The Knowledge Creating Company (Oxford
University Press, 1995) referido al desarrollo ágil de software. En ambos libros, refieren a las
técnicas de manejo usadas para el desarrollo de software en proyectos que poseen un entorno
caótico.
En el año 2001 es redactado el Manifiesto Ágil, documento en el cual Jeff
Sutherland, Ken Schwaber, y Mike Beedle se basaron para reforzar los conceptos ya
exhibidos por Nonaka y Takeuchi. Agregando finalmente las reglas y artefactos al método
planteado para llegar finalmente a lo que hoy se conocen como Scrum.
Scrum es un método ágil que trabaja con ciclos iterativos e incrementales tanto
para el desarrollo de un software como para el manejo de cualquier equipo o proyecto.
Su nombre es tomado del Rugby y es por ello que el espíritu de Scrum es la
visión del desarrollo de Software como un Juego de Equipo. Donde el Líder del Proyecto es
considerado un Coach y en el equipo el compromiso es una de las claves.
Dentro de los métodos ágiles Scrum es el único que presenta todos sus ciclos
de igual tiempo de duración: 30 días. Los mismos se denominan Sprints, que en los términos
del Rugby significa “Jugada”. Es por ello que este método dividirá la complejidad del
proyecto o partido en las distintas Jugadas.
Scrum es un método muy sencillo pero tiene reglas y roles muy claros. El
primer rol es el de Product Owner. Este rol será ocupado por el cliente o aquella persona que
el cliente designe a trabajar con el resto del equipo. La característica más importante es que el
Product Owner será quien pueda establecer las prioridades en una lista de requerimientos a
realizar.
De esta forma se puede evidenciar que Scrum es un método fuertemente
basado en Client Driven Planning. Ya que será el cliente quien guiará acerca de qué
requerimiento implementar primero.
El segundo rol es el del Scrum Master. Este es el rol más importante de este
método, ya que se trata del Líder de Proyecto, el cual debe desempeñarse como un Coach. Su
perfil estará conformado por un cincuenta por ciento técnico ya que debe poder guiar o
solucionar problemas de esta índole. Sin significar que deba controlar el código de sus
Página 13 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
desarrolladores, sino muy por el contrario debe confiar en lo que estos realicen. Será además
quien deba mantener el foco de cada Sprint en el Sprint Goal o misión de cada incremento.
Será el encargado de llevar adelante cada reunión y completar o actualizar cada uno de los
documentos que el método posee.
Los dos roles siguientes son los del equipo de desarrollo y el resto de los
stakeholders involucrados en el Proyecto. Las diferencias se pueden encontrar en las
responsabilidades que tendrán. Ambos perfiles serán muy tenidos en cuenta
fundamentalmente al momento de priorizar los requerimientos. Ya que al adoptar la practica
de Client Driven Planning es muy importante tener en cuenta la factibilidad técnica y
cualquier otro aspecto que afecte la correcta implementación de dichos requerimientos.
El ciclo de vida de Scrum esta compuesto por tres áreas: Pre-Game (Pre-
Juego), Game (Juego) y Post-Game (Post-Juego). Encontrando dentro de cada etapa las
siguientes tareas, características y funciones.
todos los requerimientos que el proyecto completo debe abarcar. Siendo el Sprint Backlog la
lista priorizada de todos los requerimientos que es Sprint debe cumplir.
Scrum posee además una serie de reuniones o encuentros definidos en los
cuales se podrán definir, especificar y actualizar estos Backlogs.
El momento donde se formaliza la actividad de reconocimiento de
requerimientos para un Sprint recibe el nombre de Sprint Planning Meeting o reunión de
Planeamiento del Sprint. En ella se reúne todo el equipo, los stakeholders y el cliente y se
define el Sprint Backlog y el Sprint Goal. Siendo este último una oración que resume el
espíritu de lo que se quiere lograr en esa iteración.
Otra de las reuniones características de este Método son las Daily Scrum
Meetings o reuniones diarias de Scrum, donde todo el equipo se reúne y el ScrumMaster
pregunta a cada uno de ellos: ¿Que hiciste ayer? ¿Qué harás hoy? ¿Qué dificultades tuviste?
Estas tres preguntas serán las que le permitirán de forma diaria saber como esta avanzando el
proyecto y que dificultades han surgido. Pudiendo con esta información el Scrum Master
actualizar el Sprint Backlog y una lista de dificultades encontradas. En esta lista quedarán
documentados los inconvenientes que el equipo ha tenido para cada requerimiento del
Backlog.
Es importante destacar que la Daily Scrum Meeting se realiza cada día del
proyecto en el mismo horario y lugar. Teniendo en cuenta que su duración no debe exceder
los 20 minutos. Es por ello que se plantea que se haga lejos de cualquier maquina de café o
sitio de recreación y preferentemente se lleve a cabo de pie.
La última de estas reuniones es la Sprint Review Meeting donde el
ScrumMaster durante 4 horas realiza la demostración de lo realizado durante ese Sprint.
Página 15 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Extreme Programming
XP es el método ágil de desarrollo iterativo e incremental más reconocido y
practicado debido a su simplicidad y a la claridad de sus prácticas.
Como lo define su creador Kent Beck, XP es un método iterativo e incremental
que hace hincapié en la satisfacción del cliente mediante la creación rápida de software de
gran valor, técnicas de desarrollo útiles y sostenibles, y flexibilidad en respuesta a los
cambios.
Como la palabra programming lo indica, provee explícitamente métodos a los
desarrolladores que les permiten responder ante requerimientos de cambio con mayor
confiabilidad, aún en una etapa avanzada del proyecto, y aún así producir código de calidad.
(Larman, 2003)
Otra definición, es la de Ron Jeffries, pupilo de Beck: Extreme Programming
es una disciplina de desarrollo de software basada en los valores de simplicidad,
comunicación, realimentación y coraje. Funciona reuniendo a todo el equipo junto utilizando
Página 16 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
de prácticas simples, con suficiente realimentación que permita que el equipo entienda el
estado actual y pueda ajustar las prácticas a cada situación particular. (Jeffries, 2001)
La palabra extreme se debe a que sus creadores tomaron ciertas prácticas ya
conocidas en la industria del software y las llevaron al extremo. Larman hace una buena
síntesis de las mismas (Larman, 2003):
• Realizar pruebas (Testing) es muy útil, por lo cual se aconseja realizar pruebas
unitarias para casi todos los bloques de código fuente y pruebas de aceptación para
funcionalidad del sistema.
• Las revisiones de código son muy buenas, por lo cual se aconseja realizar
revisiones en todo momento y durante todo el proyecto.
• La integración frecuente del código es también útil, por lo cual se aconseja
automatizar el proceso de integración para que funcione 24 x 7 en una máquina
dedicada a realizar builds.
• Las iteraciones cortas y su realimentación temprana son esenciales. Se aconseja
realizar iteraciones de entre una y tres semanas.
• Que el cliente esté involucrado es muy importante. Se aconseja mantener al cliente
próximo al equipo durante todo el proyecto, incluso en el mismo lugar físico.
• La comunicación es crucial, se aconseja sentar a todo el equipo junto, incluyendo
al cliente e involucrar a todo el equipo en la planificación, correcciones y
evaluación del avance del proyecto.
Prácticas
XP se basa en 12 prácticas básicas que ayudan a que el equipo de desarrollo
mantenga el rumbo en forma disciplinada a medida que va tomando requerimientos
cambiantes. Estas prácticas no son todas novedosas sino que existían con anterioridad y lo
novedoso fue juntarlas y hacer que fueran interdependientes.
Las prácticas pueden ser clasificadas en tres niveles de generalidad. El primer
nivel está relacionado al proyecto como proceso y a la relación con el cliente y el equipo. El
segundo nivel se identifica con prácticas asociadas únicamente al equipo. Por último, el tercer
nivel especifica técnicas de programación.
Página 17 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Página 18 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Página 19 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
6) Refactoring
Debido que durante una iteración, se realiza automáticamente y en forma
continua una integración del código, es esencial que cada vez que se rediseñe o se modifique
un bloque de código el mismo continúe funcionando igual o mejor que antes del cambio.
Para que esto sea posible, se utiliza la práctica de Refactoring que permite
modificar un bloque de código de tal modo de que sea más claro o robusto pero sin impactar
en su funcionalidad. Esta práctica define reglas que hay que tener en cuenta a la hora de la
modificación y técnicas para realizar los cambios de manera correcta. Algunas herramientas
de desarrollo actuales ya poseen asistentes que permiten realizar refactoring sobre bloques de
código de manera correcta. (Fowler et al., 1999)
Página 20 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Página 21 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
muchos factores que nos alejan del código limpio, y más aún del código que funciona. Lo que
promueve el TDD como solución para estas fuerzas es guiar el desarrollo por pruebas
automatizadas que se ejecutan periódicamente a lo largo de casi todo el código generado.
(Beck, 2002)
El TDD es más que una práctica, es un estilo de programación cuyo lema es:
Escribir nuevo código sólo si una prueba automatizada ha fallado. Esto implica que antes de
escribir cualquier bloque de código, se debe generar un código de prueba que será ejecutado
para probar el código aún no escrito. Al ejecutar la prueba, y debido a que no existe código a
ser probado por la prueba, la prueba fallará y eso llevará a escribir el nuevo código. Una vez
escrito se vuelven a repetir los pasos hasta que la prueba sea exitosa. Estos pasos se realizan
con un máximo de 15-20 minutos entre pasos. (Beck, 2002)
La automatización de la ejecución de las pruebas generadas se lleva a cabo
mediante la utilización de herramientas. Esto es consistente con la práctica de integración
continua permitiendo que en todo momento exista código integrado y libre de errores.
Página 22 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
La concepción del RUP es que pueda ser ajustado y configurado para ser
aplicable en proyectos de diferentes tamaños, dominios de aplicación, tecnología y contexto.
Precisamente esta característica es el que posibilita crear una versión “ágil” del RUP, como se
ha realizado en otros casos como RUP para e-business, RUP para proyectos pequeños o para
implementaciones de tecnologías en particular como J2EE, Java, .NET y otras.
Página 23 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Página 24 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Figura 5: Esfuerzo de cada disciplina a lo largo de las fases del ciclo de vida
Página 25 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
• Criterios de éxito: por ejemplo el caso de negocio, permite enfocar cada iteración
para alcanzar los hitos correspondientes.
• Un diseño: representando al sistema que está siendo construido, tanto lo ya
realizado como lo que aún está por construirse.
• Una lista de riesgos: siendo un proceso guiado por riesgos, es importante llevar un
registro cuidados de los mismos y atender a ellos.
• Una lista de defectos u otros tipos de solicitudes de cambio: son esenciales para la
planificación de las siguientes iteraciones.
Larman propone una configuración más explícita del proceso y describe los
artefactos a producir en cada disciplina (Larman, 2003):
• Administración de Requerimientos: se requiere el documento de visión,
especificaciones suplementarias y el modelo de casos de uso.
• Diseño: se producen el modelo de diseño, el modelo de datos y una versión corta
del documento de arquitectura del software.
• Pruebas: un documento con el plan de pruebas, describiendo los objetivos y
métodos con que se probará.
• Administración del Proyecto: el plan de desarrollo, con los hitos y recursos a
aplicar; el plan de las iteraciones, se genera previo a cada iteración y tiene el
detalle de la iteración; lista de riesgos, indicando la gravedad y como mitigarlos.
• Administración de Configuraciones y Cambios: el caso de desarrollo, precisamente
un documento que describe como se configura el proceso para este proyecto;
solicitud de cambio, el estándar que será utilizado durante el proyecto.
También llamado Modelo Clásico o Modelo Lineal Secuencial, es
el paradigma más antiguo y más extensamente utilizado en la Ingeniería del
Software.
Página 26 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Página 27 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Requerimientos
El modelo en cascada requiere como uno de sus principales componentes el
relevamiento exhaustivo de todos los requerimientos funcionales y no funcionales que el
sistema va a comprender.
Para poder realizar esta tarea por lo general se suelen utilizar las prácticas de la
Ingeniería de Requerimientos. La cual plantea el proceso de requerimientos con las siguientes
actividades: elicitación, especificación y validación.
La elicitación tiene como propósito hacer del analista un experto en el dominio.
Para ello realizará entrevistas, prototipos y reuso de conocimiento anterior. Utilizará literatura
sobre el tema, software existente y similar para el caso en cuestión, estándares internacionales
de la industria y consultará con especialistas en el área.
La especificación requiere del análisis y asimilación de los conocimientos
obtenidos en la elicitación conjuntamente con la síntesis y organización de los conceptos. Los
cuales se evidenciarán mediante modelos orientados al usuario y a los desarrolladores que
permitan lograr un acuerdo entre las partes y sirvan de guías para la construcción del sistema.
Por último, la validación busca que los modelos realizados en la etapa de
especificación sean realmente consistentes.
Estas actividades se realizarán mediante diversas técnicas, tales como Léxico
Extendido del Lenguaje y escenarios, casos de uso, análisis de formularios, entre otros.
Las ventajas del modelo en casada con respecto a los requerimientos es que al
tratarse de una de las actividades más importantes, el esfuerzo que se le dedicará para poder
Página 28 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
realizar las etapas antes mencionadas será muy importante. Contando con recursos
especializados en la materia que trabajarán exhaustivamente con el cliente para identificar
todos los requisitos necesarios para el sistema. Esto hará que a principios del proyecto se
cuente con una documentación muy clara de todo aquello que la aplicación debe cumplir.
Las desventajas de este modelo ya se han mencionado cuando se realizó el
cuadro comparativo entre las visiones de software como proceso predictivo y proceso
creativo. Donde se mencionaban los siguientes aspectos:
Es muy difícil que el cliente exponga los requisitos de forma completa al
principio del proyecto. Siendo que el modelo en cascada asume que esto sucede.
En proyectos de mediano y largo plazo es normal que los requerimientos
cambien parcial o completamente produciendo que el tiempo y costos invertidos en ellos no
se puedan recuperar. Además, dada la naturaleza lineal de este ciclo de vida, a los proyectos le
suele costar mucho adaptarse a estos cambios.
En contraposición con esto, las metodologías ágiles que poseen la visión del
proceso de desarrollo de software como un proceso creativo utilizan para el análisis de
requerimientos las prácticas de análisis evolutivo de requerimientos. Donde la principal
ventaja está dada en que los requerimientos solo se analizarán en forma exhaustiva dentro de
la iteración donde este requisito será implementado. Optimizando el esfuerzo de análisis de
los mismos, ya que solo se tendrá en cuenta requerimientos que se implementarán en ese
momento. Permitiendo además al equipo focalizarse por completo en los requisitos que hayan
sido elegidos para esa iteración.
Planificación
La planificación tal vez sea la disciplina más cuestionada en las metodologías
ágiles. Sin embargo la crítica suele aparecer por la gran diferencia respecto de la planificación
tradicional y no por falta de efectividad de la planificación ágil.
El enfoque clásico, que supone la secuencialidad de las actividades, facilita la
planificación ya que la misma es realizada en base a poca información y generalmente de
origen teórico. Otro aspecto importante en este tipo de planificación es su semejanza con la
planificación que se realiza en otras ingenierías, por lo tanto la experiencia previa,
herramientas y las métricas suelen ser conocidas. El resultado de este proceso de
planificación intensivo como primer actividad del desarrollo, es un plan detallado para el resto
del ciclo de vida. El nivel de detalle utilizado suele imponer fechas de comienzo para las
Página 29 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Página 30 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Diseño
En el modelo cascada, la etapa de diseño se centra en realizar especificaciones
técnicas detalladas a respecto de cómo se va a construir la solución a implementar en la etapa
de construcción. Para dicho propósito, se utilizan herramientas tales como la Carta de
Estructura, los Árboles de Decisión, Tablas de Decisión y los Diagramas de Transición de
Estados que permiten definir claramente las entradas y salidas de cada una de las piezas de
software que serán construidas en la siguiente etapa.
El diseño del modelo en cascada consta de un conjunto de tareas que se
corresponden con aquellas definidas en la etapa de planificación y que deben permitir diseñar
la construcción de una solución a los requerimientos especificados en la etapa de análisis de
requerimientos. En el plan se definieron los entregables, esfuerzo y fechas de inicio y fin de
cada una de las tareas.
Por otro lado, el diseño ágil se basa en los principios de los métodos iterativos
e incrementales donde las tareas de diseño pueden variar en cada iteración y no siguen un plan
detallado global sino que se van ajustando y redefiniendo según el conjunto de requerimientos
a implementar en cada iteración y el feedback recolectado.
En las primeras iteraciones, el diseño ágil se centra principalmente en definir
las piezas de software fundamentales que conforman el esqueleto del sistema. A dicho
conjunto se lo denomina arquitectura del sistema y comprende no sólo especificaciones sino
también ejecutables que permiten verificar que la arquitectura funciona. En la definición de la
arquitectura, se toman los requerimientos que mayor impacto pueden tener en la estructura
base del sistema a construir o que mayor riesgo significan.
Tomando como base ésta arquitectura se continúa diseñando las distintas
piezas de software que irán conformando el sistema y que serán especificadas en cada
iteración a medida que el proyecto avanza y se estipulan los requerimientos a implementar en
cada una de ellas. Algunas buenas prácticas son la utilización de patrones de diseño,
definición de responsabilidades de clases mediante patrones GRASP y modelado visual
mediante de diagramas de clases y paquetes de UML.
Cabe destacar que el diseño ágil promueve la reutilización de componentes, la
simplicidad de las especificaciones y minimizar el re-trabajo a la hora de definir un diseño.
Página 31 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Construcción
La práctica de construcción o implementación contempla diferentes tareas
entre las que se incluyen la codificación en un lenguaje de programación, la esquematización
de repositorios de datos y la creación de documentos y/o entregables.
En un modelo en cascada, la construcción se plantea únicamente como la
traducción de las especificaciones de diseño a un lenguaje de programación. Dichas
especificaciones están absolutamente detalladas y cualquier cambio propuesto en la
construcción será considerado un error de diseño que deberá ser analizado y corregido antes
de proseguir con la construcción.
En un modelo ágil, la construcción posee mayor libertad de acción ya que el
diseño ágil no llega hasta un nivel exhaustivo de detalle sino que deja para la etapa de
construcción algunas consideraciones técnicas muy específicas. Un cambio propuesto en la
construcción de una especificación de diseño o inclusive de una construcción de una iteración
anterior será visto como un refactoring.
Pruebas
Esta disciplina tiene por objetivo determinar si el resultado del desarrollo
satisface el objetivo último del sistema a construir, tal como lo percibe el cliente.
El proceso tradicional contempla toda una etapa de pruebas en forma previa a
la puesta en marcha. Este concepto de pruebas está asociado a la verificación del
cumplimiento de objetivos, sin esforzarse en el aseguramiento. De un plan detallado, basado
en un proceso específico se espera que sus resultados sean asegurados por el proceso en sí
mismo. La dificultad radica en lograr la coincidencia de los objetivos definidos al comienzo
con los objetivos al final del proceso de desarrollo.
El desarrollo basado en metodologías ágiles promueve que las pruebas estén
presentes durante prácticamente todas las actividades de todas las disciplinas. Por eso se
verifica constantemente lo que se construye. En cada iteración los requerimientos que se
analizan se prueban al diseñar, el diseño se prueba al construir, lo construido se prueba contra
lo requerido, los entregables se verifican respecto de los objetivos del plan correspondiente. Y
el resultado de la iteración se entrega al cliente para su escrutinio, lo que el cliente informa
acerca de los resultados se tiene en cuenta para las siguientes iteraciones.
Página 32 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Puesta en Producción
La puesta en producción es una disciplina de alto impacto, en especial para el
cliente, donde se afectan recursos operativos de la organización que utilizará el sistema
desarrollado. Esta disciplina implica múltiples tareas, muchas de ellas se relacionan poco con
la construcción de software, como puede ser la creación de manuales de usuario o el
entrenamiento de los mismos.
Según la cascada de disciplinas propuesta por el modelo tradicional esta puesta
en producción sucede luego de las pruebas y antes del contacto del usuario con el sistema.
Entonces se podría concluir que no hay pruebas sobre la puesta en producción, se la supone
libre de errores y por otra parte significaría que el usuario no conoce al sistema por lo cual se
dificulta que la aceptación de las pruebas tenga realmente valor. En la realidad práctica no
ocurre de esta manera, por lo tanto el proceso lineal no se cumple exactamente de la forma en
que está definido.
Página 33 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Página 34 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
large team
small team
Methodology Weight
Figura 8: Gráfico del Peso de la Metodología
Página 35 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Life
(L)
L6 L20 L40 L100 L200 L500 L1000
Essential
money
(E) E6 E20 E40 E100 E200 E500 E1000
Discretionary
money
(D) D6 D20 D40 D100 D200 D500 D1000
Comfort
(C)
C6 C20 C40 C100 C200 C500 C1000
Página 36 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
etiqueta en la caja indica el máximo daño y la carga comunes a esos proyectos (esto es, D40
se refiere a proyectos con entre 20 y 40 personas y potencial pérdida de dinero discrecional).
Los proyectos que encajan en diferentes cajas deberían utilizar diferentes políticas.
(Cockburn, 2002)
Página 37 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Prácticas generales
• Desarrollo iterativo e incremental
• Planeamiento adaptativo
• Análisis de requerimientos evolutivos
• Iteraciones timeboxed
• Simplicidad
Página 38 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Herramientas recomendadas
Product Backlog
Iteration Backlog
Desmitificaciones
Si bien todas las prácticas de los métodos ágiles están en consonancia con los
principios fundamentales, la aplicabilidad de muchas de ellas no resulta sencilla. Esto se debe
principalmente a las características de los proyectos locales y a la idiosincrasia del equipo de
desarrollo.
Un ejemplo concreto es el de Programación en Parejas (Pair Programming)
donde las personas trabajan de a pares en la misma máquina durante todo el proyecto. El
hecho de trabajar de esta forma requiere una fuerte predisposición y conducta del equipo de
desarrollo a aceptar comentarios y correcciones por parte de su par durante todo el día laboral.
Hay que tener también en cuenta la cultura de la organización; si el objetivo principal de la
misma no es el desarrollo de software, tal vez existan políticas, procedimientos o normas que
se contraponen con esta forma de trabajo.
Otro caso es el de Desarrollo Guiado por Pruebas (Test Driven Development o
TDD) en el cual es imprescindible que el equipo de desarrollo posea una fuerte capacitación
en las herramientas y técnicas de TDD; no resulta tan intuitivo programar casos de prueba, es
por ellos que se requiere un importante conocimiento funcional por parte de cada integrante
del equipo. Por último, es clave para el éxito de la aplicación de la técnica el contar con
suficiente experiencia en la misma para poder implementar todos los casos posibles de prueba
para cada pieza de software a construir.
La técnica de Entregas Diarias (Daily Build) dentro de la práctica de
Integración Continua también puede llevar a conflictos durante su implementación.
Generalmente, el hecho de tener que realizar entregas todos los días, conlleva a la necesidad
Página 39 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Página 40 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Conclusiones
Desde el principio de este trabajo de investigación se intentó mostrar la
diferencia que presenta la ingeniería de software por sobre las otras ingenierías.
Comprendiendo que el proceso de desarrollo de software no puede asemejarse directamente a
la producción masiva de productos. Ya que el contexto donde se desarrolla conjuntamente con
el producto resultante es distinto debido a su carácter creativo y la dificultad que presenta al
momento de captar los requerimientos y características que el mismo debe cumplir.
Uno de los puntos que se intentó mostrar es como hacer llegar la ingeniería de
software a aquellos proyectos de corto plazo y recursos limitados. Donde la aplicación de las
tareas que comprenden las metodologías tradicionales requiere una dedicación de recursos
que compite con el cumplimiento del objetivo principal: construir y entregar software
funcional que cumple con los requerimientos al momento que el cliente lo necesite.
Las metodologías ágiles son una opción para aquellos equipos de desarrollo
que desean construir software bajo este contexto pero sin dejar de cumplir con la ingeniería de
software. La característica diferencial es la priorización de los resultados por sobre la
documentación intensiva, ya que promulgan realizar sólo lo necesario en forma simple
permitiendo cumplir con los objetivos y adaptarse a los cambios.
Es posible planificar el proyecto, estandarizar los procedimientos, y organizar
el equipo aplicando una metodología ágil. La forma en que se realiza esto es mediante el
seguimiento de ciertos principios y la aplicación de ciertas prácticas. Ágil no significa hacerlo
improvisadamente sino hacer solo aquello que produzca resultados.
Los métodos propuestos son de reciente aparición, todos se ajustan a los
principios, pero muchos de ellos con enfoques distintos. Esto ofrece un amplio espectro de
alternativas para atacar un mismo problema, no existiendo una receta única. El origen de estos
métodos es la práctica del desarrollo de software, por lo tanto no resulta difícil de
implementarlas a otros equipos que también realizan desarrollos. Adherir a algún método es
formalizar prácticas que tal vez ya se hacen naturalmente en esos equipos.
En el contexto, de los proyectos de software de la Argentina, la aplicación de
estas metodologías puede contribuir a elevar el nivel de organización, calidad y productividad
de la industria, manteniendo niveles competitivos por no exigir gran cantidad de recursos.
En el caso de Scrum, las dos características más relevantes de este método son
el manejo de backlogs, y las reuniones diarias del equipo. Dichas prácticas aplicadas al
Página 41 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
desarrollo de software actual estarían resolviendo alguna de las problemáticas que hoy en día
encontramos como frecuentes errores o necesidades de los proyectos argentinos.
El primero de ellos es la falta de comunicación en el equipo de desarrollo, lo
que genera muchas veces que el líder del proyecto no conozca de ciertos riesgos o trabas que
se están presentando en el correcto desempeño de las tareas de los miembros del equipo.
Ocasionando desvíos en los tiempos y costos del proyecto que podrían haber sido evitados
simplemente incorporando mayor comunicación entre los integrantes. Siendo esto uno de los
motivos más importantes para realizar las reuniones diarias de equipo, las cuales les permiten
tanto a los integrantes como al líder conocer día a día cómo se desarrollan las tareas y con que
dificultades se han encontrado.
El segundo inconveniente suele ser la falta de actualización en los estados de
avances de los proyectos conjuntamente con el desconocimiento puntual de las tareas a lograr
en el corto y mediano plazo. El cual surge por lo general de no poseer un documento que
contenga dichas tareas con un nivel de avance constante del mismo. Esto genera que no se
pueda analizar continuamente el estado del proyecto detectando en forma temprana desvíos
que permitan tomar acciones correctivas para logar los objetivos planteados. Además de no
poder focalizar al equipo de desarrollo únicamente en las tareas que se deben realizar para
lograr las metas planteadas para esa etapa del proyecto. Esto es fácilmente solucionable con la
aplicación del Sprint Backlog, el cual contendrá los objetivos a lograr para dicha etapa del
proyecto siendo actualizado diariamente por el ScrumMaster en las Daily Scrum Meetings.
Ambas prácticas resultan sumamente simples y no generan mayor carga de
trabajo en los equipo de desarrollo. Pero la aplicación de las mismas, traerían muchos
beneficios en dos de los aspectos más importantes y conflictivos de los proyectos de
desarrollo de software que son: tener más control acerca del cumplimiento de los tiempos y
costos estipulados y poseer un estado actualizado durante todo el proyecto.
En el caso de Extreme Programming o XP, el contexto socio-económico de la
Argentina limita la aplicación de muchas de sus prácticas como ser programación por parejas,
donde no es común que un cliente acepte tener dos desarrolladores por máquina, o la práctica
de integración continua, donde se requiere de un ambiente de software y hardware dedicado a
la generación de builds.
Otras prácticas son más aplicables localmente, como ser las de talleres de
programación, entregas frecuentes y la definición de estándares de codificación. Estas
prácticas ayudan a mitigar los riesgos existentes en proyectos pequeños, donde se requiere de
Página 42 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
una muy acertada estimación de tiempos o esfuerzo de las tareas y contar con un equipo de
trabajo bien sincronizado e interdisciplinario. Las entregas frecuentes posibilitan obtener
feedback temprano por parte del cliente minimizando el riesgo de una mala interpretación e
los requerimientos por parte del equipo.
Para el caso de RUP Ágil las condiciones son algo distintas, aquí no se trata de
tareas sumamente sencillas, pero que son simples de aplicar en organizaciones que tengan en
marcha otros proyectos bajo RUP. Utilizar un pequeño subconjunto de RUP cuando el
proyecto sea de las características mencionadas en este trabajo puede ser cumplido sin
mayores exigencias.
Como se ve en los ejemplos, utilizar metodologías ágiles no representa grandes
esfuerzos, deben tenerse en cuenta ciertas situaciones comunes que afectan a los proyectos en
la Argentina.
En primer lugar considerando la disponibilidad y costos de capacitación,
consultoría y mentoring acerca de metodologías ágiles que lamentablemente en la Argentina
no contamos, al menos en forma amplia, con oferta de cursos y servicios de consultoría que
puedan utilizarse para acompañar a la incorporación del equipo.
En segundo lugar con respecto a la experiencia y capacitación donde una de las
formas de adopción de alguno de estos métodos es mediante la incorporación de personal con
experiencia en otros proyectos donde se haya utilizado. En este caso en la Argentina será
difícil encontrar este tipo de características por los motivos expresados anteriormente.
Igualmente en el caso particular de RUP es fundamental tener en cuenta que
empresas donde ya se cuente con esta metodología es sumamente sencillo adaptarlo para
utilizar la versión de RUP Ágil que le permitirá mantener dicha metodología y sus estándares
de calidad a proyectos más pequeños en los cuales no se creía poder llegar a aplicarla.
Es por ello que podemos concluir finalmente en que en el contexto de los
proyectos de software de la Argentina, la aplicación de las metodologías ágiles puede
contribuir notoriamente a elevar el nivel de organización, calidad y productividad de la
industria, manteniendo niveles competitivos por no exigir gran cantidad de recursos.
Página 43 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Bibliografía
Clements P. A Rational Design Process: How and why to Fake It. IEEE Transactions on
Software Engineering. Feb. 1986.
Cockburn, Alistair. Learning From Agile Software Development. Octubre 2002. Artículo de
Crosstalk - The journal of Defense Software Engineering.
http://www.stsc.hill.af.mil/crosstalk/2002/10/cockburn.html
Fowler, Martin et al. Refactoring: Improving the Design of Existing Code. Addison Wesley
- Junio 1999
Kruchten, Philippe. From Waterfall to Iterative Lifecycle – A tough transition for project
managers. Rational Software Corporation White Paper, 2000.
Kruchten, Philippe. Agility with the RUP. Artículo publicado en Cutter IT Journal Vol. 14
Nro. 12, Diciembre 2001.
Larman, Craig. Agile and Iterative Development: A Manager's Guide. Addison Wesley, 2003.
Página 44 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Página 45 de 46
DESARROLLO DE SOFTWARE CON METODOLOGÍAS ÁGILES
Besprosvan Sol, Del Zotto German y Ponce Rodrigo
Página 46 de 46