Descripción Metodologias Ágiles
Descripción Metodologias Ágiles
Descripción Metodologias Ágiles
INFORME TÉCNICO
Cascada
Prototipado o espiral.
Proceso unificado de desarrollo – RUP
Métodologias ágiles: Scrum, XP, Lean, DSDM.
En marzo de 2001 diecisiete críticos de los modelos de mejora del desarrollo de software
basados en procesos, convocados por Kent Beck, quien había publicado un par de años
antes Extreme Programming Explained, se reunieron en Salt Lake City para tratar sobre
técnicas y procesos para desarrollar software. En la reunión surgió el término “Métodos
Ágiles” para definir a los métodos que estaban surgiendo como alternativa a las
metodologías formales (CMMI, SPICE) a las que consideraban excesivamente “pesadas”
y rígidas por su carácter normativo y fuerte dependencia de planificaciones detalladas
previas al desarrollo. Los integrantes de la reunión resumieron los principios sobre los que
se basan los métodos alternativos en cuatro postulados, lo que ha quedado denominado
como Manifiesto Ágil.
Valores En vez de
Individuos e iteraciones Proceso y herramientas
Software funcionando Documentación extensiva
Colaboración con el cliente Negociación contractual
Respuesta ante el cambio Seguir un plan.
Fuente: autor
Tras los cuatro valores descritos, los firmantes redactaron los siguientes, como los
principios que de ellos se derivan:
Esta metodología fue formulada por Kent Beck. Define un proceso iterativo e incremental
con pruebas unitarias continuas y entregas frecuentes. El cliente o un representante del
cliente son integrados al equipo de desarrollo. Recomienda que el desarrollo de las
funciones del producto sea realizado por dos personas en el mismo puesto (programación
por pares). Antes de incorporar nueva funcionalidad, se deben corregir todos los defectos
encontrados. Constantemente, se llevan a cabo pruebas de regresión a fin de detectar los
posibles errores. (Beck, 1999)
ROL DESCRIPCIÓN
Programador Es el encargado de la implementación del sistema y escribir las pruebas
unitarias. La comunicación entre los miembros del equipo de desarrollo
y los demás miembros es fundamental.
Cliente Se encarga de escribir y validar las historias de usuario y las pruebas
funcionales para validar su implementación. También define la prioridad
a las historias de usuario y decide cuales se implementan en cada
iteración, enfocado en aportar mayor valor al negocio.
Encargado de Pruebas (Tester) Ayuda al cliente a escribir las pruebas funcionales, ejecuta estas
pruebas, define y difunde los resultados al equipo de desarrollo, es el
responsable de las herramientas de soporte para las pruebas.
Encargado de seguimiento Proporciona realimentación al equipo en el proceso XP. Se encarga de
(Tracker) verificar el grado de acierto en las estimaciones realizadas y el tiempo
real dedicado, comunicando los resultados para mejorar futuras
estimaciones. También realiza el seguimiento del proceso de cada
iteración y evalúa si los objetivos son alcanzables con las restricciones
de tiempo y recursos presentes. Determina los cambios a realizar para
poder lograr los objetivos de la iteración.
Entrenador (Coach) Es el responsable del proceso global. Debe conocer muy bien el
proceso XP para proveer guías a los miembros del equipo de forma que
apliquen las prácticas XP y se siga el proceso correctamente.
Consultor Es un miembro externo al equipo con un conocimiento específico en
algún tema necesario para el proyecto. Guía al equipo para resolver un
problema específico.
Gestor (Big boss) Es el vínculo entre el cliente y los programadores, ayuda a que el equipo
trabaje efectivamente creando las condiciones adecuadas. Su labor
esencial es la coordinación-
Fuente: autor
1.2.3. Artefactos
Historias de usuario:
Es la técnica usada para especificar los requisitos del software, tanto funcionales como no
funcionales. Consisten en tarjetas de papel donde el cliente describe brevemente las
características del sistema. Se da un tratamiento dinámico y flexible, en cualquier
momento se pueden romper, reemplazar o modificar por otras más específicas o
generales. Cada historia de usuario debe ser lo suficiente comprensible y delimitada para
que los programadores puedan implementarla en unas semanas. (Letelier & Penadés,
2006)
La información que debe contener una historia de usuario definida por (Beck, Extreme
Programming Explained: Embrace Change, 2000) presenta un ejemplo de ficha en la cual
pueden reconocerse los siguientes contenidos: fecha, tipo de actividad (nueva, corrección,
mejora), prueba funcional, número de historia, prioridad técnica y del cliente, referencia a
otra historia previa, riesgo, estimación técnica, descripción, notas y una lista de
seguimiento con la fecha, estado cosas por terminar y comentarios. A continuación se
presenta una tabla con la información que debe contener una historia de usuario:
Historia de Usuario
Fecha: Tipo: (Nueva, corrección, mejora)
Número: Usuario:
Nombre historia:
Prioridad: Iteración asignada:
Programador Responsable:
Descripción:
Observaciones:
Fuente: autor
En la figura aparecen las practicas básicas que se deben llevar a cabo en un proceso de
desarrollo de software con XP (Jeffries, 2014), las cuales se explican a continuación.
Planificación de la iteración, es una práctica que el equipo realiza cada dos semanas para
definir las tareas a realizar y las funcionalidades a implementar, teniendo en cuenta las
características deseadas por el cliente y sus prioridades. Al finalizar la iteración se obtiene
una versión visible para el cliente que puede probar.
Diseño Simple:
En todas las iteraciones de este ciclo tanto el cliente como el programador aprenden. No
se debe presionar al programador a realizar más trabajo que el estimado, XP sugiere 40
horas de trabajo, ya que se perderá calidad en el software o no se cumplirán los plazos.
De la misma forma el cliente tiene la obligación de manejar el ámbito de entrega del
producto, para asegurarse que el sistema tenga el mayor valor de negocio posible con
cada iteración.
A continuación se detalla brevemente cada una de estas fases. Aunque estas fases no
siguen un orden estricto secuencial, en el gráfico se presenta de esta forma para dar un
mejor entendimiento a esta metodología.
Fase I: Exploración:
En esta fase, los clientes plantean las historias de usuario que son de interés para la
primera entrega del producto. Al mismo tiempo el equipo de desarrollo se familiariza con
las herramientas, tecnologías y prácticas que se utilizarán en el proyecto. Se prueba la
tecnología y se exploran las posibilidades de la arquitectura del sistema construyendo un
prototipo. La fase de exploración toma de pocas semanas a pocos meses, dependiendo
del tamaño y familiaridad que tengan los programadores con la tecnología.
Esta fase incluye varias iteraciones sobre el sistema antes de ser entregado. El Plan de
Entrega está compuesto por iteraciones de no más de tres semanas. En la primera
iteración se puede intentar establecer una arquitectura del sistema que pueda ser utilizada
durante el resto del proyecto. Esto se logra escogiendo las historias que fuercen la
creación de esta arquitectura, sin embargo, esto no siempre es posible ya que es el
cliente quien decide qué historias se implementarán en cada iteración (para maximizar el
valor de negocio). Al final de la última iteración el sistema estará listo para entrar en
producción.
Los elementos que deben tomarse en cuenta durante la elaboración del Plan de la
Iteración son: historias de usuario no abordadas, velocidad del proyecto, pruebas de
aceptación no superadas en la iteración anterior y tareas no terminadas en la iteración
anterior. Todo el trabajo de la iteración es expresado en tareas de programación, cada
una de ellas es asignada a un programador como responsable, pero llevadas a cabo por
parejas de programadores. Wake en (Wake,2002) proporciona algunas guías útiles para
realizar la planificación de la entrega y de cada iteración.
Es posible que se rebaje el tiempo que toma cada iteración, de tres a una semana. Las
ideas que han sido propuestas y las sugerencias son documentadas para su posterior
implementación (por ejemplo, durante la fase de mantenimiento).
Fase V: Mantenimiento
Es cuando el cliente no tiene más historias para ser incluidas en el sistema. Esto requiere
que se satisfagan las necesidades del cliente en otros aspectos como rendimiento y
confiabilidad del sistema. Se genera la documentación final del sistema y no se realizan
más cambios en la arquitectura. La muerte del proyecto también ocurre cuando el sistema
no genera los beneficios esperados por el cliente o cuando no hay presupuesto para
mantenerlo.
1.3. SCRUM
1.3.1. Características:
Los roles principales en Scrum son el ScrumMaster, que mantiene los procesos y
trabaja de forma similar al director de proyecto, el ProductOwner, que representa a
los stakeholders (clientes externos o internos), y el Team que incluye a los
desarrolladores.
Se desarrolla por etapas denominadas Sprint, aquí se trata de un periodo entre 15
y 30 días, durante el cual se crea un incremento de software potencialmente
entregable (utilizable).
El conjunto de características que forma parte de cada sprint viene del Product
Backlog, que es un conjunto de requisitos de alto nivel priorizados que definen el
trabajo a realizar.
Los elementos del Product Backlog que forman parte del sprint se determinan
durante la reunión de Sprint Planning. Durante esta reunión, el Product Owner
identifica los elementos del Product Backlog que quiere ver implementados y los
hace del conocimiento del equipo.
El equipo determina la cantidad de ese trabajo que puede comprometerse a
completar durante el siguiente sprint.
Los clientes pueden cambiar de idea sobre lo que quieren y necesitan, y que los
desafíos impredecibles no pueden ser fácilmente enfrentados de una forma
predictiva y planificada.
Acepta que el problema no puede ser completamente entendido o definido, y se
concentra en maximizar la capacidad del equipo de entregar rápidamente y
responder a requisitos emergentes. (Schwaber & Beedle, 2001)
1.3.2. Roles
ROL DESCRIPCIÓN
Cliente (Product Owner) Puede ser interno o externo a la organización. Es el representante de
todas las personas interesadas en los resultados del proyecto, actúa
como interlocutor ante el equipo con autoridad para tomar decisiones.
Define los objetivos del producto o proyecto, dirige los resultados del
proyecto. Da prioridad a los requisitos, es el propietario de la
planificación del proyecto. Establece el calendario de entrega en
conjunto con el Scrum Master.
Al iniciar cada iteración evalúa las prioridades, re planifica el proyecto en
función de los requisitos que dan más valor al proyecto.
Debe estar disponible durante el curso de la iteración para responder a
las preguntas que puedan aparecer.
Revisa y evalúa los requisitos completados al finalizar una iteración.
Scrum Master (Facilitador) Es el encargado de liderar al equipo.
Se encarga que todo el equipo siga las reglas y el proceso de scrum.
Se asegura que la lista de requisitos esté priorizada antes de iniciar
cada iteración.
Facilita las reuniones del proceso de scrum de manera que sean
productivas y se consigan sus objetivos.
Se encarga de quitar todos los impedimentos que el equipo tenga para
poder conseguir el objetivo de cada iteración y poder finalizar el
proyecto con éxito.
Protege y aisla al equipo de interrupciones externas durante la ejecución
de la iteración, pudiendo mantener su productividad y el compromiso
que adquirió en la iteración.
Asegura que los requisitos se desarrollen con calidad.
Equipo Grupo de personas que de manera conjunta desarrollan el producto del
proyecto. El tamaño del equipo puede estar entre 5 y 9 personas. Por
encima de 9 la comunicación y colaboración entre todos los miembros
se hace más difícil y se forman subgrupos.
Comparten la responsabilidad del trabajo que realizan en cada iteración
y en el proyecto.
El equipo es autogestionado, selecciona los requerimientos que se
pueden completar en una iteración, realizando al cliente las preguntas
necesarias.
Identifican todas las tareas necesarias para completar cada requisito,
estima el esfuerzo necesario para terminar cada tarea y cada miembro
se asigna las tareas a desarrollar.
Trabaja de manera conjunta para conseguir los objetivos de la iteración.
El equipo es multidisciplinar, cada especialista lidera el trabajo en su
área y el resto colaboran si es necesario para poder completar un
requisito.
Al finalizar la iteración muestra al cliente los requisitos completados,
hace una retrospectiva para mejorar de forma continua su manera de
trabajar.
Debe depender lo mínimo de personas externas al equipo, de manera
que el compromiso que se adquiera en cada iteración se pueda cumplir.
Los miembros del equipos deben dedicarse al proyecto tiempo
completo, deben trabajar en la misma localización física, para mantener
un comunicación constante entre ellos con el fin de trabajar y resolver
problemas en conjunto evitando otros canales de comunicación que
causen pérdida de tiempo.
El equipo debe ser estable durante la duración del proyecto, sus
miembros deben cambiar lo mínimo posible.
Planificación de la iteración
Esta planificación se divide en dos partes con una duración no mayor a 4 horas. En la
primera parte el cliente presenta al equipo la lista de requisitos priorizada del producto o
proyecto, pone nombre a la meta de la iteración y propone los requisitos más prioritarios a
desarrollar en ella. El equipo examina la lista, pregunta al cliente las dudas que surgen y
selecciona los requisitos más prioritarios que se compromete a completar en la iteración,
de manera que sean entregados si el cliente los solicita.
Sprint (Iteración)
La iteración puede ser interrumpida en situaciones muy especiales por parte del cliente o
por el equipo de desarrollo. Por ejemplo cuando el contexto del problema ha cambiado
enormemente y no es posible esperar hasta el final de la iteración para aplicar los
cambios, o si el equipo encuentra que es imposible cumplir con el compromiso adquirido.
En este caso se da por terminada la iteración y se dará inicio a otra mediante una reunión
de planificación de la iteración.
¿Qué ha hecho desde la última reunión de sincronización? ¿Puede hacer todo lo que
tenía planeado? ¿Cuál fue el problema?
Artefactos
Características:
Roles
El proceso de desarrollo
Artefactos
CRYSTAL
Desarrolladas por Alistair Cockburn. Es un conjunto de metodologías caracterizadas por
estar centradas en las personas que componen el equipo y la reducción al máximo del
número de artefactos producidos. El desarrollo de software se considera un juego
cooperativo de invención y comunicación, limitado por los recursos a utilizar. El equipo de
desarrollo es un factor clave, por lo que se deben invertir esfuerzos en mejorar sus
habilidades y destrezas, así como tener políticas de trabajo en equipo definidas. Estas
políticas dependerán del tamaño del equipo, estableciéndose una clasificación por
colores, por ejemplo Crystal Clear (3 a 8 miembros) y Crystal Orange (25 a 50 miembros).
Los colores mancan la complejidad de la metodologia y del proyecto a abordar, cuando
más crítico es un sistema, más rigor requiere. En la figura se puede apreciar una forma
tabular elaborada por Cockburn usada para identificar el rango de complejidad al cual se
aplica una metodología. En el eje Y se muestra la evaluación de las pérdidas que puede
ocasionar la falla de un sistema: C: Pérdida de confort o comodidad, D: pérdida discreta
de dinero, D: pérdida considerable de dinero y E: pérdida de vidas. En el eje x aparecen el
número de personas involucradas en un proyecto.
Los grande proyectos requieren más coordinación y comunicación con lo que se les
asignan una metodología Crystal más compleja y completa. El código genético de Crystal
está conformado por:
Roles:
En crystal clear los roles más comúnmente usados se describen en la siguiente tabla.
ROL DESCRIPCIÓN
Patrocinador Produce la declaración de la misión del proyecto, los compromisos,
consigue los recursos y define la totalidad del proyecto.
Usuario Experto Junto con el experto en negocios produce la lista de actores-objetivos y
el archivo de casos de uso y requerimientos. Debe familiarizarse con el
uso del sistema, definir los modos de operación, información a manejar
y la navegación.
Diseñador – Programador senior Produce la descripción arquitectónica. Debe ser un profesional capaz de
manejar con fluidez, mezclar e inventar procedimientos. Tiene roles de
coordinador, arquitecto, mentor y programador experto.
Diseñador – Programador Produce junto con el diseñador principal, los borradores de pantallas, el
modelo del dominio, las notas y diagramas de diseño realiza el código
fuente, el código de migración, las pruebas y la distribución del sistema.
El desarrollo se realiza diseño y programo. Los programadores son
también diseñadores.
Experto en negocios Junto con el usuario experto produce la lista de actores – objetivos y el
archivo de casos de uso y requerimientos. Debe conocer las reglas y
políticas del negocio.
Coordinador Con la ayuda del equipo, produce el mapa de proyecto, el plan de
entrega, el estado del proyecto, la lista de riesgos, el plan y el estado de
la iteración y la agenda de visualización.
Verificador Produce el Reporte de Bugs. Puede ser un programador en tiempo
parcial, o un equipo de varias personas.
El proceso de desarrollo
Artefactos:
Entre las empresas que han requerido consultoría adaptativa se cuentan AS Bank de
Nueva Zelanda, CNET, GlaxoSmithKline, Landmark, Nextel, Nike, Phoenix International
Health, Thoughworks y Microsoft.
Características:
Es iterativo
Enfocado en el objetivo del sistema.
Basado en características.
Tolerante al cambio
Mantiene el control de los riesgos
Roles
ROL DESCRIPCIÓN
Desarrolladores Dirige y desarrolla el producto, realiza los cambios y pruebas de acuerdo
al cambio de los requerimientos y a la evolución del proyecto.
Cliente Confirma la viabilidad del proyecto. Está involucrado en todo el proceso
de desarrollo. Realiza las pruebas de aseguramiento de la calidad en la
fase de aprendizaje.
Administrador – Gerente Dirige el proceso y la creación del producto software, lo adapta a medida
que cambian los requerimientos.
El proceso de desarrollo de ASD es guiado por una adaptación continua, una filosofía
diferente y un diferente ciclo de vida, orientado a la aceptación de un cambio continuo
como la norma. En ASD, el ciclo de vida planear – diseñar - construir estático, es
reemplazado por un ciclo de vida Especular – Colaborar - Aprender dinámico. Se trata de
un ciclo de vida dedicado al aprendizaje continuo y orientado al cambio, reevaluando,
mirando hacia un futuro incierto, y la intensa colaboración entre los desarrolladores, la
gerencia y los clientes. (Highsmith, 2002)
Fuente: (Highsmith, 2002)
Especular: Da espacio para explorar, para hacer clara la conciencia de que no estamos
seguros, para apartarse de los planes sin miedo. Esto no quiere decir que la planificación
es obsoleta, sólo que la planificación es tenue. Esto significa que tenemos que seguir las
iteraciones de entrega cortas y alentamos iteración. Un equipo que "especula" no
abandona la planificación, reconoce la realidad de la incertidumbre. La especulación
reconoce la naturaleza incierta de problemas complejos y fomenta la exploración y la
experimentación. En esta fase se define la misión del proyecto sus objetivos y las
iteraciones a realizar. También se identifican los riesgos y se define la velocidad del
equipo de desarrollo para determinar el tiempo de cada iteración. Una iteración va entre 2
y 8 semanas dependiendo de las características del proyecto, en cada iteración se define
un objetivo y una misión. Los requerimientos de cada iteración se definen con el cliente.
Cada iteración produce un producto tangible por el cliente y entrega características
fundamentales del software, las cuales son probadas por el cliente.
Artefactos:
Esta metodología exige poca documentación. En algunas ocasiones se usan las historias
de usuario, o modelos de casos de uso para especificar los requerimientos. En la revisión
de la literatura realizada se encuentra muy poca información de los artefactos usados o
requeridos por ASD.
Con frecuencia se usa como medio de sacar dinero al cliente a través de la falta
de definición de un entregable.
Falta de estructura y documentación necesaria.
Sólo funciona con desarrolladores experimentados.
Incorpora diseño de software insuficiente.
Requiere encuentros a intervalos frecuentes con un enorme coste para los
clientes.
Requiere demasiado cambio cultural para adaptarlo.
Puede conducir a negociaciones contractuales más difíciles.
Puede ser muy ineficiente, si los requisitos de un área de código cambian durante
varias iteraciones, se puede necesitar hacer la misma programación varias veces.
Mientras que si se tiene que seguir un plan, un área de código individual se
supone que sólo se va a escribir una vez.
Imposible desarrollar estimaciones realistas del esfuerzo necesario para
proporcionar un presupuesto, porque al principio del proyecto nadie sabe el
alcance o los requisitos enteros.
Puede aumentar el riesgo de cambios del alcance, debido a la falta de
documentación de requisitos detallada.
El desarrollo ágil está orientado a características, los atributos de calidad no
funcionales son difícil de plasmar como historias de usuario.
Referencias:
Abrahamsson, Salo, Ronkainen, & Warsta. (2002). Agile Software Development Methods:
Review and Analysis. VTT Publications.
Abran, A., & Moore, J. W. (2004). Guide to the Software Engineering Body of Knowledge.
IEEE Computer Society.
Beck, K. (1999). Extreme Programming Explained. Embrace Change. Pearson Education.
Beck, K. (2000). Extreme Programming Explained: Embrace Change. Addison Wesley.
Beck, K., & Fowler, M. (2001). Planning Extreme Programming. Addison Wesley.
crystalmethodologies.org. (2013). Crystalmethodologies.org. Recuperado el 25 de 4 de
2014, de http://www.crystalmethodologies.org/
Cunningham, W., Medinilla, A., Giné, A., & Gómez, E. (2001). Manifesto for Agile
Software Development. Recuperado el 14 de agosto de 2010, de
http://agilemanifesto.org/
Henríquez, P., & Organista, J. (2009). Definición y estimación de tipos y niveles de uso
tecnológico: una aproximación a partir de estudiantes de recién ingreso a la
universidad. EDUTEC, Revista electrónica de tecnología educativa.
Hernandez Sampieri, R., Collado, C., & Baptista, P. (2006). Metodología de la
Investigación. Mc. Graw Hill.
Highsmith, J. (2002). Agile Software Development Ecosystems. Addison Wesley.
INTECO, Instituto Nacional de Tecnologías de la comunicación. (2009). Ingeniería del
software: Metodologías y ciclos de vida. España.
Jeffries, R. E. (2014). XProgramming.com An agile Software Development Resource.
Recuperado el 17 de 7 de 2014, de http://xprogramming.com/index.php
Letelier, P., & Penadés, M. C. (2006). Metodologías ágiles para el desarrollo de software:
eXtrema Programing (XP). Técnica Administrativa ISSN 1666-1680 Vol 5 No 26.
Maddison, R. (1983). Information System methodologies. Wiley Henden.
Proyectos agiles ORG. (2014). Proyectos agiles.org. Recuperado el 10 de 7 de 2014, de
http://www.proyectosagiles.org/
Reynoso, C., & Kicillof, N. (Abril de 2004). Métodos heterodoxos en desarrollo de
software. Recuperado el 31 de 7 de 2014, de
http://ima.udg.edu/Docencia/3105200728/SurveyMetAgil.pdf
Riehle, D. (2000). A comparison of the value systems of adaptative software development
an extreme programing: How methodologies may learn from each other.
Recuperado el 31 de 7 de 2014, de
http://mailserver.di.unipi.it/estate/Library/XP/Documents/Papers/R2000.pdf
Schwaber, K., & Beedle, M. (2001). Agile Software Development with Scrum.