Metodologías Agiles en el Desarrollo de Software El proceso de desarrollo se enfatiza en el control de procesos mediante una rigurosa definición de roles, actividades y artefactos, incluyendo modelado y documentación detallada. Metodologías tradicionales → Restricciones de tiempo y flexibilidad Metodologías agiles → Orientada a proyectos pequeños Manifestó Ágil Documento que resume la filosofía ágil, se valora en: 1) Al individuo y las interacciones del equipo de desarrollo sobre el proceso y las herramientas: Es mejor crear el equipo y que éste configure su propio entorno de desarrollo en base a sus necesidades. 2) Desarrollar software que funciona más que conseguir una buena documentación: Los documentos deben ser cortos y centrarse en lo fundamental. 3) La colaboración con el cliente más que la negociación de un contrato: interacción constante entre el cliente y el equipo de desarrollo. 4) Responder a los cambios más que seguir estrictamente un plan: La habilidad de responder a los cambios, la planificación no debe ser estricta sino flexible y abierta. Los valores anteriores inspiran doce principios: 1) La prioridad es satisfacer al cliente mediante tempranas y continuas entregas de software 2) Dar la bienvenida a los cambios para que el cliente tenga una ventaja competitiva, entregar frecuentemente software 3) La gente y desarrolladores deben trabajar juntos a lo largo del proyecto 4) Construir el proyecto en torno a individuos motivados. 5) El software que funciona es la medida principal de progreso, Los promotores, desarrolladores y usuarios deberían ser capaces de mantener una paz constante. 6) La atención continua a la calidad técnica y al buen diseño mejora la agilidad 7) La simplicidad es esencial. 8) Las mejores arquitecturas, requisitos y diseños surgen de los equipos organizados por sí mismos. Diferencias entre Metodologías Agiles y Tradicionales Metodologías Agiles Basadas en heurísticas provenientes de prácticas de producción de código Especialmente preparados para cambios durante el proyecto Impuestas internamente (por el equipo) Proceso menos controlado, con pocos principios No existe contrato tradicional o al menos es bastante flexible El cliente es parte del equipo de desarrollo Grupos pequeños (<10 integrantes) y trabajando en el mismo sitio Pocos artefactos Pocos roles Menos énfasis en la arquitectura del software Metodologías Tradicionales Basadas en normas provenientes de estándares seguidos por el entorno de desarrollo Cierta resistencia a los cambios Impuestas externamente Proceso mucho más controlado, con numerosas políticas/normas Existe un contrato prefijado El cliente interactúa con el equipo de desarrollo mediante reuniones Grupos grandes y posiblemente distribuidos Más artefactos Más roles La arquitectura del software es esencial y se expresa mediante modelos Programación Extrema (Extreme Programming, XP) Es una metodología ágil centrada en potenciar las relaciones interpersonales como clave para el éxito en desarrollo de software, promoviendo el trabajo en equipo preocupándose por el aprendizaje de los desarrolladores y propiciando un buen clima de trabajo. Se basa en: a) Realimentación continua entre el cliente y el equipo de desarrollo b) Simplicidad en las soluciones implementadas c) Enfrentar los cambios Adecuada para: Proyectos con requisitos imprecisos y muy cambiantes y donde existe un alto riesgo técnico, startups o empresas que están en proceso de consodilacion Características esenciales de XP: a) Historias de Usuario: Técnica utilizada para especificar los requisitos del software, se trata de tarjetas de papel en las cuales el cliente describe brevemente las características que el sistema debe poseer, sean requisitos funcionales o no funcionales. Las historias de usuario son descompuestas en tareas de programación (task card) y asignadas a los programadores para ser implementadas durante una iteración. b) Roles XP: 1) Programador: escribe las pruebas unitarias y produce el código 2) Cliente: Escribe las historias de usuario y las pruebas funcionales para validar su implementación 3) Encargado de pruebas (Tester): Ayuda al cliente a escribir las pruebas funcionales 4) Encargado de seguimiento (Tracker): Verifica el grado de acierto entre las estimaciones realizadas y el tiempo real dedicado, para mejorar futuras estimaciones 5) Entrenador (Coach): Es responsable del proceso global. Debe proveer guías al equipo 6) Consultor: Es un miembro externo del equipo con un conocimiento específico 7) Gestor (Big boss): Es el vínculo entre clientes y programadores c) Proceso XP: Ciclo de desarrollo consiste en: 1) El cliente define el valor de negocio a implementar. 2) El programador estima el esfuerzo necesario para su implementación. 3) El cliente selecciona qué construir, de acuerdo con sus prioridades y las restricciones de tiempo. 4) El programador construye ese valor de negocio. 5) Vuelve al paso 1. El ciclo de vida ideal de XP consiste en seis fases: 1.- Exploración 2.-Planificación de la Entrega (Release) 3.- Iteraciones 4.-Producción 5.-Mantenimiento 6.-Muerte del Proyecto d) Practicas XP: la posibilidad de disminuir la mítica curva exponencial del costo del cambio a lo largo del proyecto se consigue gracias a las tecnologías disponibles para ayudar en el desarrollo de software 1) El juego de la planificación: comunicación frecuente el cliente y los programadores y los clientes deciden sobre el ámbito y tiempo de las entregas y de cada iteración. 2) Entregas pequeñas: Producir rápidamente versiones del sistema que sean operativas, aunque no cuenten con toda la funcionalidad del sistema. 3) Metáfora: El sistema es definido mediante una metáfora o un conjunto de metáforas compartidas por el cliente y el equipo de desarrollo. Una metáfora es una historia compartida que describe cómo debería funcionar el sistema 4) Diseño Simple: diseñar la solución más simple que pueda funcionar y ser implementada 5) Pruebas: producción de código está dirigida por las pruebas unitarias 6) Refactorización: actividad constante de reestructuración del código con el objetivo de remover duplicación de código, mejorar su legibilidad, simplificarlo y hacerlo más flexible 7) Programación en parejas: trabajo en parejas de programadores → ventajas implícitas (menor tasa de errores, mejor diseño, mayor satisfacción de los programadores, 8) Propiedad colectiva del código: Cualquier programador puede cambiar cualquier parte del código en cualquier momento. 9) Integración continua: Cada pieza de código es integrada en el sistema una vez que esté lista 10) 40 horas por semana: trabaja r un máximo de 40 horas por semana. 11) Cliente in-situ: La comunicación de los programadores es a través del código es indispensable que sigan ciertos estándares de programación para mantener el código legible. SCRUM Define un marco para la gestión de proyectos, los pilares de la metodología SCRUM son: 1) Transparencia: Todos los implicados tienen conocimiento de que ocurre en el proyecto y como ocurre, entendimiento del proyecto y una visión global 2) Inspeccion: Inspecciona el rpogreso para detectar posibles problemas para saber que el proyecto fluye y el equipo trabaja de forma organizada 3) Adaptación: Cuando hay algo que cambiar el equipo se ajusta para conseguir el objetivo del sprint. Iteraciones, denominadas sprints, con una duración de 30 días, cada sprint es un incremento ejecutable que se muestra al cliente. Roles: 1) Product Owner: Comunicación constante con el cliente, maximiza el valor de trabajo del equipo de desarrollo 2) Scrum Master: Responsable de que las técnicas Scrum sean aplicadas y eliminar impedimentos que tenga el equipo de desarrollo 3) Equipo de desarrollo: Encargados del desarrollo del sistema, realizan tareas priorizadas por el Product Owner Se basa en: a) La flexibilidad en la adopción de cambios y nuevos requisitos durante un proyecto complejo b) La colaboración e interacción con el cliente c) Desarrollo iterativo como forma de asegurar buenos resultados Adecuada para: Proyectos con un rápido cambio de requisitos, proyectos que exigen una flexibilidad y una rapidez esencial a la hora de ejecutar los resultados. Características: a) reuniones a lo largo proyecto, entre ellas destaca la reunión diaria de 15 minutos del equipo de desarrollo para coordinación e integración Crystal Methodologies Conjunto de metodologías para el desarrollo de software, centradas en las personas que componen el equipo y la reducción al máximo del número de artefactos producidos. Se basa en: 1) Se centra en las personas del equipo 2) Son menos extremas 3) Cuenta con criticidad de vida Adecuada para: Tipologías de proyectos y empresas grandes Características: a) El desarrollo de software se considera un juego cooperativo de invención y comunicación, limitado por los recursos a utilizar. b) Equipo de desarrollo es un factor clave, por lo que se deben invertir esfuerzos en mejorar sus habilidades y destrezas c) Tener políticas de trabajo en equipo definidas, las políticas dependerán del tamaño del equipo y se clasificarán por colores → Crystal Clear (3 a 8 miembros) y Crystal Orange (25 a 50 miembros) Dynamic Systems Development Method (DSDM) Define el marco para desarrollar un proceso de producción de software. Se basa en: 1) 2) 3) 4) 5) 6) 7) 8) Centra en la necesidad comercial Entrega a tiempo Colaborar Nunca comprometer calidad Construir incrementalmente Desarrollar iterativamente Comunicación continua y clara Demostrar control Adecuada para: Proyectos dentro del presupuesto con escalabilidad y para cualquier sector comercial Características: a) proceso iterativo e incremental b) equipo de desarrollo y el usuario trabajan juntos. c) Propone cinco fases: estudio viabilidad, estudio del negocio, modelado funcional, diseño y construcción, y finalmente implementación. Adaptive Software Development (ASD) Ciclo de vida: 1) Especulación: Inicia el proyecto y se planifican las características 2) Colaboración: Desarrollan las características 3) Aprendizaje: Se revisa la calidad y se entrega al cliente Se basa en: 1) Funcionamiento cíclico 2) En cada iteración se producirán cambios y errores Adecuada para: Que el cliente este pidiendo adecuaciones continuamente, el ciclo de vida de esta metodología es dirigible y fácil de implementar Características: a) b) c) d) e) Iterativo Orientado a los componentes de software más que a las tareas Tolerante a los cambios Guiado por riesgos La revisión de los componentes sirve para aprender de los errores y volver a iniciar el ciclo de desarrollo Feature – Driven Dvelopment (FDD) Se basa en: 1) Proceso iterativo, con iteraciones cortas 2) Con estas iteraciones producir software funcional donde el cliente y la empresa pueda ver y monitorear 3) Entregas tangibles Adecuada para: Proyectos y equipos grandes en cuestión de tamaño y duración, FDD puede ser más escalable que XP Características: a) Define un proceso iterativo que consta de 5 pasos b) Iteraciones cortas (hasta 2 semanas) c) Se centra en las fases de diseño e implementación del sistema Lean Development (LD) Los cambios se consideran riesgos, pero si se manejan adecuadamente se pueden convertir en oportunidades que mejoren la productividad del cliente. Se basa en: 1) 2) 3) 4) 5) 6) Visión global e integrada del proyecto Aprendizaje continuo Iteraciones cortas Pruebas continuas Retroalimentación de los usuarios Capacitar al equipo Adecuada para: Características: a) Mecanismo para implementar cambios Kanban Es una metodología que se apoya de un sistema visual para gestionar una tarea o un trabajo a medida en que se avanza en un proceso Se basa en: 1) 2) 3) 4) 5) Mejorar el flujo Reducir el tiempo Mejora los tiempos de entrega Aumentar el valor para el cliente Prevención para posibles fallas y retrasos Adecuada para: Sistemas de producción y muchos procesos Características a) Identificar posibles cuellos de botella y solucionarlos para que el trabajo pueda fluir óptimamente Pasos: 1) Visualizar el flujo de trabajo: Tablero con 3 columnas cada columna contiene tarjetas y cada tarjeta equivale a una tarea. Las columnas se dividen en: por hacer, en proceso y Listo 2) Limitar los trabajos en proceso (WIP): Son las tareas en que un equipo trabaja y limita la capacidad de flujo de trabajo 3) Administrar y mejorar el flujo de trabajo: Es mover las tareas de columna, las que están por hacer a la columna de proceso y después a la columna de listo, se debe tener en cuenta el límite de entrega de los trabajos las fases etc. 4) Hacer explicitas las reglas de proceso: Definir y visualizar las reglas de como se hace un trabajo para que los participantes puedan describir como se hace el trabajo del sistema 5) Implementar bucles de retroalimentación: Retroalimentación para entregar un proyecto de calidad en el menor tiempo posible DIFERENCIAS ENTRE METODOLGOIAS AGILES XP Divide el proyecto en fases y en cada una realiza un ciclo completo de análisis, diseño, desarrollo y pruebas SCRUM Divide el proyecto en bloques (sprints), que se planifica y revisan continuamente. KANBAN Utiliza técnicas visuales, permitiendo saber en que punto se encuentra cada tarea de forma rápida y sencilla LEAN Proceso metodológico dirigido por modelos para el desarrollo ágil de sistemas de información web Arquitectura dirigida por modelos 1) MDA: Es un marco de trabajo para el desarrollo de software que define una arquitectura orientada a modelos, estos proveen herramientas y mecanismo que asisten al desarrollador para los procesos de concepción, desarrollo, implementación y mantenimiento del software. Propone la realización de: a) CIM (Computer Independent Model): Es un modelo de alto nivel de abstracción que identifican el contexto del sistema, representa los modelos independientes de la computación, este tipo de modelo se conciben antes del levantamiento de requisitos para una aplicación particular. b) PIM (Platform Independent Models): Representa modelos que describen una solución de software que no contiene detalles de la plataforma concreta en que la solución va a ser implementada, este modelo surge como resultado de análisis y diseño c) PSM (Platform Specific Models): Modelos derivados de PIM, contiene los detalles de la plataforma o tecnología con que se implementara la solución Proceso metodológico MIDAS MIDAS se combina con la arquitectura MDA con una arquitectura de capas donde cada capa representa una vista del sistema En el eje X: Representa las diferentes vistas el SIW → Hipertexto, vista del contenido y la vista de la funcionalidad En el eje Y: Representa la parte independiente de computación → CIM, la parte independiente PIM, la parte dependiente PSM El proceso de MIDAS comienza siempre en la definición de los CIM y evolucionara a los PIM y hasta los PSM. Mutación de casos de prueba Junit Que son las pruebas de mutación: Dado un programa P que se va a probar, se genera un conjunto de copias de P, pero introduciendo en cada copia una pequeña alteración, normalmente sintáctica, mediante la aplicación de un “operador de mutación”. A estas copias levemente alteradas se las llama “mutantes” de P. Comienzan generando un conjunto de casos de prueba que son pasados al programa original, si la salida es incorrecta en algún caso de prueba se revisa el programa original hasta que las salidas sean correctas, si el programa original responde correctamente se ejecuta el conjunto de mutantes con todos los casos de prueba. Un mutante m se dice que “vive” cuando es igual que P para todos los casoa de prueba, si la salida es distinta es un mutante “muerto” Objetivos de la mutación: 1) Proporciona un criterio de adecuación de las pruebas (calidad) 2) Detecta fallos en el programa que se esté probando Para hacer un caso de prueba se hace un objeto de la Clase y se manda a llamar todos sus métodos con datos aleatorios. testOO Herramienta que genera una clase que contiene la lista de métodos y genera una secuencia de llamadas a los métodos, un conjunto mutante para cada método de prueba Estas técnicas y herramientas ayudan a generar de manera automática casos de prueba adecuados para probar programas JAVA. eXPERT Es un método aplicable a equipos pequeños de desarrolladores, este método es llamado EXPERT porque se construye principalmente de extreme programming(XP) y PSP(personal Software Process). Consiste en los siguientes procesos: 1) 2) 3) 4) Customer Requirements Management (CRM) Project Management (PM) Design (DS) Test (TS) Se basa en: 1) Practicas XP y PSP 2) Proporcionar a los desarrolladores un medio para medir su eficacia, utilizado para planificar y gestionar mejor los proyectos Adecuada para: Proyectos con un cambio seguido de requerimientos, con poco tiempo y una alta calidad de demanda. Características esenciales: 1) Mantener un enfoque compresivo 2) Mantener un enfoque fácil de aplicar 3) Promover los datos necesarios para realizar buenas estimaciones, planificación de proyectos 4) Mantener a la gente motivada para utilizar el enfoque La estructura de los roles de eXPERT son: 1) Customer: Escoge que se va a desarrollar que requerimiento se van a hacer primero 2) Project Leader: Supervisa y guía la aplicación del enfoque eXpert, lidera el equipo, asegura que el equipo entero realiza las iteraciones de acuerdo a lo planeado, mantiene actualizados a los stakeholders que no están directamente en el proyecto. 3) Developer: Analizar, diseñar, probar, codificar e integrar el sistema, estiman la dificultad de los requerimientos y el tiempo que se necesita para desarrollarlo. Proceso eXpert: 1) Administrar requerimientos del cliente: incluye todas las actividades relacionadas con la obtención, análisis y controlar los requisitos del cliente para un producto de software. Se basa en XP, prácticas relacionadas con el manejo de historias de usuarios 2) Administrar proyectos: abarca actividades relacionadas con planificación, seguimiento y control del desarrollo de software, se asegura de entregar un sistema de calidad, en tiempo y con el presupuesto correspondiente. 3) Diseño: Esta relacionado con el Código y el proceso de testeo. 4) Código: Producir el código para satisfacer los requerimientos del cliente, es permanentemente mantenido en buenas condiciones 5) Test: Validar que el producto de software producido cumple los requisitos y satisface los criterios de aceptación definidos por el cliente