Tarea 1. Ensayo

Métodos ágiles de programación 
Hasta hace no mucho, el proceso en el desarrollo de software estaba asociado a un enfasis en el control del proceso por el cual se llevaba a cabo una rigurosa definicion de roles, actividades y artefactos asi como el modelado y la documentacion detallada. Éste esquema para el desarrollo del software habia demostrado que era muy efectivo y necesario en proyectos de desarrollo de gran tamaño, sin embargo éste enfoque no termina siendo el mas adecuado para todos los proyectos, como aquellos donde el sistema esta cambiando frecuentemente y se exige reducir drasticamente los tiempos de desarrollo pero manteniendo una alta calidad.
Por estar orientadas especialmente a proyectos pequeños, las metodologias agiles constituyen una solucion a medida para ese entorno, en gran parte porque hacen que el desarrollo del software sea mas simple pero sin renunciar a las practicas para asegurar la calidad del producto final.
Las metodologias ágiles nacen en 2001 en una reunion en Utah, en la cual participaron un grupo de 17 expertos de la industria del software, su objetivo era hacer que el desarrollar software fuera mas rapido y capaz de responder a los cambios que pudieran surgir a lo largo del proyecto. Buscaban una alternativa a los procesos del desarrrollo de software tradicionales que se caracterizaban por ser rigidos. Tras dicha reunion se creo "The Agile Alliance" que era una organizacion dedicada a promover los conceptos relacionados con el desarrollo ágil de software y ayudar a las organizaciones y empresas para que adopten éstos conceptos. 
Segun el manifiesto: 
La gente es el principal factor del éxito de un softeare. Es mas importante un buen equipo que el entorno y muchas veces se comete el error de construir el entorno y que el equipo se adapte a éste pero ahora se sabe que es mejor crear el equipo y que éste configure el entorno a sus propias necesidades.
Es mas importante desarrollar software que funciona que conseguir una buena documentacion, la regla es no producir documentos que no sean necesarios para tomar una decision importante, los documentos deben ser cortos y centrarse en lo fundamental.
La colaboracion del cliente en el desarrollo es mas importantes que la simple negociacion de un contrato por eso se propone que haya una interaccion constante entre el cliente y el equipo de desarrollo. Ésta colaboracion entre ambos es la que asegurará el exito del proyecto.
Es importante tener la habilidad de responder a los cambios en el software que puedan surgir a lo largo del proyecto en requisitos, en la tecnologia o en el equipo, por lo tanto la panificacion debe ser flexible y abierta. 

El manifiesto se comprende de 12 caracteristicas principales que hacen diferencia en un proceso ágil de uno tradicional las cuales son:
  1. La prioridad es satisfacer al cliente mediante tempranas y continuas entregas de software que le aporte un valor. 
  2. Dar la bienvenida a los cambios. Se capturan los cambios para que el cliente tenga una ventaja competitiva. 
  3. Entregar frecuentemente software que funcione desde un par de semanas a un par de meses, con el menor intervalo de tiempo posible entre entregas. 
  4. La gente del negocio y los desarrolladores deben trabajar juntos a lo largo del proyecto. 
  5. Construir el proyecto en torno a individuos motivados. Darles el entorno y el apoyo que necesitan y confiar en ellos para conseguir finalizar el trabajo. 
  6. El diálogo cara a cara es el método más eficiente y efectivo para comunicar información dentro de un equipo de desarrollo. 
  7. El software que funciona es la medida principal de progreso. 
  8. Los procesos ágiles promueven un desarrollo sostenible. Los promotores, desarrolladores y usuarios deberían ser capaces de mantener una paz constante. 
  9. La atención continua a la calidad técnica y al buen diseño mejora la agilidad. 
  10. La simplicidad es esencial. 
  11. Las mejores arquitecturas, requisitos y diseños surgen de los equipos organizados por sí mismos. 
  12. En intervalos regulares, el equipo reflexiona respecto a cómo llegar a ser más efectivo, y según esto ajusta su comportamiento.
Diferencias entre las metodologias ágiles y las tradicionales
Las metodologias ágiles estan preparadas para cambio durante el proyecto mientras que en las metodologias tradicionales tienen resistencia al cambio en el software, en las metodologias ágiles el proceso es poco controlado, tampoco existe un contrato tradicional o suele ser muy flexible, otras caracteristicas importantes son que el cliente es parte del equipo de desarrollo, o que el equipo de desarrollo es muy pequeño cuando se trabaja (<10 integrantes), en las metodologias ágiles hay pocos roles en cuanto a equipo de desarrollo de software asi como hay menos énfasis en la arquitectura del software.

Programacion Extrema
La programacion extrema o XP es una metodologia ágil centrada en potenciar las relaciones interpersonales como clave para el éxito en desarrollo de software, promoviendo el trrabajo en equipo preocupandose por el aprendizaje de los desarrolladores y propiciando un buen clima de trabajo. Se basa en la retroalimentacion entre el cliente y el equipo de desarrollo (comunicacion fluida entre los participantes y simplicidad en las soluciones implementadas), la programacion extrema es mas adecuada para los proyectos con requisitos imprecisos donde hay un alto riesgo de cambio y a la vez, riesgo técnico.

Las caracteristicas de la programación extrema pueden ser organizadas en:

Las historias de Usuario. 
Es la tecnica utilizada para especificar los requisitos del software y se trata de tarjetas de papel en las cuales el cliente describe brevemente las caracteristicas que el sistema debe poseer, sean requisitos funcionales o no funcionales. Las historias de usuario son descompuestas en tareas de programacion y son asignadas a los programadores para ser implementadas durante una iteracion.

Roles XP.
Los roles de acuerdo a la propuesta original son:
Programador: escribe las pruebas unitarias y produce el código del sistema.
Cliente: Escribe las historias de usuario y las pruebas funcionales para validar su implementacion.
Tester: Ayuda al cliente a escribir las pruebas funcionales. Ejecuta las pruebas regularmente.
Encargado de seguimiento o Tracker: Realiza el seguimiento del progreso de cada iteracion.
Entrenador: Es responsable del proceso global.
Consultor: Miembro externo del equiplo con un conocimeinto especifico necesario para el proyecto.
Gestor. Es el vinculo entre clientes y los desarrolladores, su labor esencial es el de coordinacion.

Proceso XP
El ciclo de desarrollo consite en los siguientes pasos: 
1. El cliente defina el valor de negocio a implementar.
2. El desarrollador estima el esfuerzo necesario para su implementacion.
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.

Tanto el cliente como el desarrollador aprenden, no se debe presionar al desarrollador a realizar más trabajo que el estimado, ya que perdera calidad el software o no se cumpliran los plazos. De la misma forma el cliente tiene la oblifacion de manejar el ámbito de entrega del producto para asegurarse que el sistema tenga el mayor valor de negocio posible con cada iteración. 

Prácticas XP
Gracias a las tecnologias disponibles para ayudar en el desarrollo de software y la aplicacion de las siguientes practicas, se disminuye el costo del cambio a lo largo del proyecto:
-El juego de la planificacion. Hay una comunicacion frecuente entre el cliente y los desarrolladores.
-Entregas pequeñas. Producir rapidamente versiones del sistema que sean operativas aunque no cuenten con la funcionalidad completa.
-Metáfora. El sistema es definido mediante una metáfora, una metafora es una historia compartida que describe como deberia funcionar el sistema.
-Diseño Simple. Se debe diseñar la solucion mas simple que pueda funcinar.
-Pruebas. La produccion del codigo está dirigida por las pruebas unitarias.
-Refactorizacion. Se remueve la duplicacion del codigo y mejor a su legibilidad.
-Programacion en parejas. Esto conlleva ventajas implicitas.
-Propiedad colectiva del codigo. Cualquier desarrollador puede cambiar cualquier parte del codigo.
-Integracion continua. Cada pieza de codigo es integrada en el sistema cuando esté lista.
-Se trabajan 40 horas por semana.
-Cliente in-situ. El cliente debe estar presente y disponible todo el tiempo para el equipo.

Otras metodologias ágiles
SCRUM
Está especialmente indicada para proyectos con un rápido cambio de requisitos. Sus principales características se pueden resumir en dos. El desarrollo de software se realiza mediante iteraciones, denominadas sprints, con una duración de 30 días. La segunda característica importante son las 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
Centradas en las personas que componen el equipo y la reducción al máximo del número de artefactos producidos. 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 

DYNAMIC SYSTEMS DEVELOPMENT METHOD (DSDM)
Es un proceso iterativo e incremental y el equipo de desarrollo y el usuario trabajan juntos. Propone cinco fases: estudio viabilidad, estudio del negocio, modelado funcional, diseño y construcción, y finalmente implementación. Las tres últimas son iterativas, además de existir realimentación a todas las fases.

ADAPTIVE SOFTWARE DEVELOPMENT (ASD)
Iterativo, orientado a los componentes software más que a las tareas y tolerante a los cambios. El ciclo de vida que propone tiene tres fases esenciales: especulación, colaboración y aprendizaje. En la primera de ellas se inicia el proyecto y se planifican las características del software; en la segunda desarrollan las características y finalmente en la tercera se revisa su calidad, y se entrega al cliente. 

FEATURE-DRIVEN DEVELOPMENT (FDD)
Consta de 5 pasos. Las iteraciones son cortas (hasta 2 semanas). Se centra en las fases de diseño e implementación del sistema partiendo de una lista de características que debe reunir el software.

LEAN DEVELOPMENT (LD)
Los cambios se consideran riesgos, pero si se manejan adecuadamente se pueden convertir en oportunidades que mejoren la productividad del cliente. Su principal característica es introducir un mecanismo para implementar dichos cambios.

No existe una metodología universal para hacer frente con éxito a cualquier proyecto de desarrollo de software. Toda metodología debe ser adaptada al contexto del proyecto (recursos técnicos y humanos, tiempo de desarrollo, tipo de sistema, etc. Históricamente, las metodologías tradicionales han intentado abordar la mayor cantidad de situaciones de contexto del proyecto, exigiendo un esfuerzo considerable para ser adaptadas, sobre todo en proyectos pequeños y con requisitos muy cambiantes. Las metodologías ágiles ofrecen una solución casi a medida para una gran cantidad de proyectos que tienen estas características. Una de las cualidades más destacables en una metodología ágil es su sencillez, tanto en su aprendizaje como en su aplicación, reduciéndose así los costos de implantación en un equipo de desarrollo. Esto ha llevado hacia un interés creciente en las metodologías ágiles 





Comentarios

Entradas populares de este blog

Ejemplos Artefactos XP

Proceso de Scrum

Tarea 4. Sistemas Distribuidos