lunes, 23 de noviembre de 2015

CLASE 05/11/2015. INTELIGENCIA ARTIFICIAL




La inteligencia artificial es considerada una rama de la computación y relaciona un fenómeno natural con una analogía artificial a través de programas de computador. La inteligencia artificial puede ser tomada como ciencia si se enfoca hacia la elaboración de programas basados en comparaciones con la eficiencia del hombre, contribuyendo a un mayor entendimiento del conocimiento humano.
Si por otro lado es tomada como ingeniería, basada en una relación deseable de entrada-salida para sintetizar un programa de computador. "El resultado es un programa de alta eficiencia que funciona como una poderosa herramienta para quien la utiliza."
A través de la inteligencia artificial se han desarrollado los sistemas expertos que pueden imitar la capacidad mental del hombre y relacionan reglas de sintaxis del lenguaje hablado y escrito sobre la base de la experiencia, para luego hacer juicios acerca de un problema, cuya solución se logra con mejores juicios y más rápidamente que el ser humano. En la medicina tiene gran utilidad al acertar el 85 % de los casos de diagnóstico.
( "De la información a la informática", de Roger Loaiza)



Componentes: software de interfaz, base de datos, programa computacional.

1) El software de interfaz, mediante el cual el usuario expresa preguntas a éste, el sistema experto pide más información a partir del usuario y éste le expone al usuario la causa de razonamiento utilizado para alcanzar a una respuesta.
2) La base de datos, llamada la base de conocimiento que consiste de axiomas (hechos) y reglas para hacer inferencias a partir de esos hechos acerca del dominio del sistema.
3)El programa computacional, llamado el motor de inferencia, elabora el proceso de hacer inferencias, interpreta y evalúa los hechos en la base de conocimiento para proveer una respuesta.


Redes neuronales:

Dentro del área de la Inteligencia Artificial conexionista el elemento base es la neurona (elemento de cómputo) .Neurona: Entradas, salidas, estado, funciones para la combinación de las entradas y el estado y función para generar la salida Las neuronas se organizan en redes con diferentes capas. La red asocia unas entradas (datos del problema) a unas salidas (solución del problema). La red se debe entrenar (ejemplos resueltos) para que aprenda a resolver el problema (asociación).


Lenguajes de Programación

En principio, cualquier lenguaje de programación puede ser utilizado.  Tradicionalmente LISP y PROLOG han sido los lenguajes que se han utilizado para la programación de sistemas expertos.
Estos lenguajes brindan características especialmente diseñadas para operar problemas generalmente hallados en Inteligencia Artificial.
 Una de las principales características que comparten los lenguajes LISP y PROLOG, como derivación de su respectiva estructura, es que logran ser utilizados para escribir programas capaces de examinar a otros programas, incluyendo a ellos mismos.
Lisp: Su nombre viene de LISt Processor. LISP fue el primer lenguaje para procesamiento simbólico. fue desarrollado en 1958, en el Instituto de Tecnología de Massachusetts
Prolog: PROgramming in LOGic (PROLOG), es otro de los lenguajes de programación utilizados en IA. PROLOG fue desarrollado en Francia, en 1973 en la Universidad de Marseilles.
OPS5: Official Production System 5 (OPS5), es un lenguaje para ingeniería cognoscitiva que aguanta el procedimiento de representación del conocimiento en forma de reglas.
Sistemas de Desarrollo
Históricamente, los primeros Sistemas Basados en Conocimiento fueron desarrollados utilizando lenguajes de programación como el LISP y el PROLOG. A medida que el desarrollo de Sistemas Basados en Conocimiento iba aumentado en cantidad y complejidad, la comunidad científica emprendió a investigar formas de desarrollar los métodos en menor tiempo y con menor esfuerzo.
Esto dio lugar al surgimiento, en primer lugar a sistemas vacíos como el EMYCIN.                   

Aplicaciones.

Agentes Autónomos
Un agente autónomo es un sistema situado en un entorno y es parte de ese entorno que siente, actúa sobre él, a través del tiempo, persiguiendo sus propios objetivos de forma que afecte lo que siente en el futuro

Algunas aplicaciones.

Un agente, tal como se ha definido anteriormente, puede ser usado de múltiples maneras en el medio empresarial actual, por ejemplo:
Newstracker. Este programa recupera datos específicos.
Cuando el usuario indica el tipo de información que le interesa, Newstracker comprende el mensaje y, después de revisar durante horas miles de artículos en periódicos, agencias de noticias o revistas conectadas a Internet, cada mañana "edita" un periódico personalizado.
Si la selección de noticias no satisface por completo al lector, Newstracker toma nota, rectifica y es capaz de aprender de sus errores.
Mind-it. Este servicio gratuito de Internet envía un mensaje por correo electrónico cada vez que una página web (u otro documento) ha sido renovado. Permite elegir una parte de la página web para saber si ha sido renovada. Comunica al usuario, de forma automática, cuándo un documento ha sido trasladado a otra dirección.
Eliza. En 1966, Joseph Weizenbaum, del Instituto de Tecnología de Massachusetts, creó un programa para estudiar el lenguaje de comunicación entre el hombre y el computador. Fue programado para aparentar a un psicoterapeuta y contestar preguntas. Este sistema es muy simple.
Express. Este programa permite realizar múltiples investigaciones simultáneas en diferentes buscadores, y localizar información en la Web de modo fácil y veloz a través de una interfaz sencilla.
BargainFinder, simbolizado en la red como una esfera amarilla con un casco de minero, se dedica a buscar CD baratos en Internet.
Robótica
Los robots son dispositivos compuestos de censores que reciben datos de entrada, una computadora que al tomar la información de entrada, ordena al robot que efectúe una determinada acción

CLASE 29/10/2015 METODOLOGIA DE DESARROLLO DE SOFTWARE



METODOLOGIAS DE DESARROLLO DE SOFTWARE
en ingeniería de software es un marco de trabajo usado para estructurar, planificar y controlar el proceso de desarrollo en sistemas de información.
Una metodología de desarrollo de software se refiere a un framework que es usado para estructurar, planear y controlar el proceso de desarrollo en sistemas de información.
A lo largo del tiempo, una gran cantidad de métodos han sido desarrollados diferenciándose por su fortaleza y debilidad.
El framework para metodología de desarrollo de software consiste en:
·         Una filosofía de desarrollo de programas de computación con el enfoque del proceso de desarrollo de software
·         Herramientas, modelos y métodos para asistir al proceso de desarrollo de software

Estos frameworks son a menudo vinculados a algún tipo de organización, que además desarrolla, apoya el uso y promueve la metodología. La metodología es a menudo documentada en algún tipo de documentación formal.


Es una metodología cuyo fin es entregar un producto de software. Se estructura todos los procesos y se mide la eficiencia de la organización.
Es un proceso de desarrollo de software el cual utiliza el lenguaje unificado de modelado UML, constituye la metodología estándar más utilizada para el análisis, implementación y documentación de sistemas orientados a objetos.
El RUP es un conjunto de metodologías adaptables al contexto y necesidades de cada organización.
Describe como aplicar enfoques para el desarrollo del software, llevando a cabo unos pasos para su realización.
Se centra en la producción y mantenimiento de modelos del sistema.


Principales características
·         Forma disciplinada de asignar tareas y responsabilidades (quién hace qué, cuándo y cómo)
·         Pretende implementar las mejores prácticas en Ingeniería de Software
·         Desarrollo iterativo
·         Administración de requisitos
·         Uso de arquitectura basada en componentes
·         Control de cambios
·         Modelado visual del software
·         Verificación de la calidad del software

El RUP es un producto de Rational (IBM). Se caracteriza por ser iterativo e incremental, estar centrado en la arquitectura y guiado por los casos de uso. Incluye artefactos (que son los productos tangibles del proceso como por ejemplo, el modelo de casos de uso, el código fuente, etc.) y roles (papel que desempeña una persona en un determinado momento, una persona puede desempeñar distintos roles a lo largo del proceso).

CICLO DE VIDA

Esfuerzo en actividades según fase del proyecto
El ciclo de vida RUP es una implementación del Desarrollo en espiral. Fue creado ensamblando los elementos en secuencias semi-ordenadas. El ciclo de vida organiza las tareas en fases e iteraciones.
RUP divide el proceso en cuatro fases, dentro de las cuales se realizan varias iteraciones en número variable según el proyecto y en las que se hace un mayor o menor hincapié en las distintas actividades.

Fases del ciclo de vida del RUP:
1. Fase de Inicio: Esta fase tiene como propósito definir y acordar el alcance del proyecto con los patrocinadores, identificar los riesgos asociados al proyecto, proponer una visión muy general de la arquitectura de software y producir el plan de las fases y el de iteraciones posteriores.

2. Fase de elaboración: En la fase de elaboración se seleccionan los casos de uso que permiten definir la arquitectura base del sistema y se desarrollaran en esta fase, se realiza la especificación de los casos de uso seleccionados y el primer análisis del dominio del problema, se diseña la solución preliminar.

3. Fase de Desarrollo: El propósito de esta fase es completar la funcionalidad del sistema, para ello se deben clarificar los requerimientos pendientes, administrar los cambios de acuerdo a las evaluaciones realizados por los usuarios y se realizan las mejoras para el proyecto.

4. Fase de Cierre: El propósito de esta fase es asegurar que el software esté disponible para los usuarios finales, ajustar los errores y defectos encontrados en las pruebas de aceptación, capacitar a los usuarios y proveer el soporte técnico necesario. Se debe verificar que el producto cumpla con las especificaciones entregadas por las personas involucradas en el proyecto.


La metodología RUP tiene 6 principios clave:

1. Adaptación del proceso: El proceso debe adaptarse a las características de la organización para la que se está desarrollando el software.

2. Balancear prioridades: Debe encontrarse un balance que satisfaga a todos los inversores del proyecto.

3. Colaboración entre equipos: Debe haber una comunicación fluida para coordinar requerimientos, desarrollo, evaluaciones, planes, resultados, entre otros.
4. Demostrar valor iterativamente: Los proyectos se entregan, aunque sea de una forma interna, en etapas iteradas. En cada iteración se evaluará la calidad y estabilidad del producto y analizará la opinión y sugerencias de losinversores.

5. Elevar el nivel de abstracción: Motivar el uso de de conceptos reutilizables.

6. Enfocarse en la calidad: La calidad del producto debe verificarse en cada aspecto de la producción.

Disciplina de desarrollo de RUP

Determina las etapas a realizar durante el proyecto de creación del software.


·         Ingeniería o modelado del negocio: Analizar y entender las necesidades del negocio para el cual se está desarrollando el software.
·         Requisitos: Proveer una base para estimar los costos y tiempo de desarrollo del sistema.
·         Análisis y diseño: Trasladar los requisitos analizados anteriormente a un sistema automatizado y desarrollar una arquitectura para el sistema.
·         Implementación: Crear software que se ajuste a la arquitectura diseñada y que tenga el comportamiento deseado.
·         Pruebas: Asegurarse de que el comportamiento requerido es correcto y que todo lo solicitado está presente.
·         Despliegue: Producir distribuciones del producto y distribuirlo a los usuarios.

Disciplina de soporte RUP
Determina la documentación que es necesaria realizar durante el proyecto.

·         Configuración y administración del cambio: Guardar todas las versiones del proyecto.
·         Administración del proyecto: Administrar los horarios y recursos que se deben de emplear.
·         Ambiente: Administrar el ambiente de desarrollo del software.
·         Distribución: Hacer todo lo necesario para la salida del proyecto.

Elementos del RUP

·         Actividades: Procesos que se han de realizar en cada etapa/iteración.
·         Trabajadores: Personas involucradas en cada actividad del proyecto.
·         Artefactos: Herramientas empleadas para el desarrollo del proyecto. Puede ser un documento, un modelo, un elemento del modelo.
Artefactos
RUP en cada una de sus fases (pertenecientes a la estructura estática) realiza una serie de artefactos que sirven para comprender mejor tanto el análisis como el diseño del sistema (entre otros). Estos artefactos (entre otros) son los siguientes:

Inicio:
·         Documento Visión
·         Especificación de Requerimientos

Elaboración:
·         Diagramas de caso de uso

Construcción:
·         Documento Arquitectura que trabaja con las siguientes vistas:

VISTA LOGICA:
·         Diagrama de clases
·         Modelo E-R (Si el sistema así lo requiere)

VISTA DE IMPLEMENTACION:
·         Diagrama de Secuencia
·         Diagrama de estados
·         Diagrama de Colaboración

VISTA CONCEPTUAL
·         Modelo de dominio

VISTA FISICA
·         Mapa de comportamiento a nivel de hardware





METODOLOGIA SCRUM

METODOLOGÍA SCRUM

Scrum es una metodología ágil de desarrollo, aunque surgió como modelo para el desarrollo de productos tecnológicos, también se emplea en entornos que trabajan con requisitos inestables y que requieren rapidez y flexibilidad; situaciones frecuentes en el desarrollo de determinados sistemas de software.

Es una metodología de desarrollo muy simple, que requiere trabajo duro porque no se basa en el seguimiento de un plan, sino en la adaptación continua a las circunstancias de la evolución del proyecto.


Scrum es una metodología ágil, y como tal, Es un modo de desarrollo de carácter adaptable más que predictivo.

Orientado a las personas más que a los procesos.

·         Emplea la estructura de desarrollo ágil: incremental basada en iteraciones y revisiones.

Se comienza con la visión general del producto, especificando y dando detalle a las funcionalidades o partes que tienen mayor prioridad de desarrollo y que pueden llevarse a cabo en un periodo de tiempo breve (normalmente de 30 días).

Cada uno de estos periodos de desarrollo es una iteración que finaliza con la producción de un incremento operativo del producto.

Estas iteraciones son la base del desarrollo ágil, y Scrum gestiona su evolución a través de reuniones breves diarias en las que todo el equipo revisa el trabajo realizado el día anterior y el previsto para el día siguiente.

Estructura central de Scrum
Características
·         Equipos autodirigidos
·         Utiliza reglas para crear un entorno ágil de administración de proyectos
·         No prescribe prácticas específicas de ingeniería
·         Los requerimientos se capturan como ítems de la lista Product Backlog.
·         El producto se construye en una serie de Sprints de un mes de duración.

Herramientas y Prácticas
Scrum no requiere ni provee prácticas de Ingeniería. En lugar de eso, especifica prácticas y herramientas de gerencia que se aplican en sus distintas fases para evitar el caos originado por la complejidad e imposibilidad de realizar predicciones.
Product Backlog List
Es una lista priorizada que define el trabajo que se va a realizar en el proyecto. Cuando un proyecto comienza es muy difícil tener claro todos los requerimientos sobre el producto. Sin embargo, suelen surgir los más importantes que casi siempre son más que suficientes para un Sprint.
El objetivo es asegurar que el producto definido al terminar la lista es el más correcto, útil y competitivo posible y para esto la lista debe acompañar los cambios en el entorno y el producto.
Existe un rol asociado con esta lista y es el de Product Owner. Si alguien quiere realizar cualquier modificación sobre la lista por ejemplo: agregar o incrementar la prioridad de sus elementos tiene que convencer al Product Owner.
Sprints
Un Sprint es el procedimiento de adaptación de las cambiantes variables del entorno (requerimientos, tiempo, recursos, conocimiento, tecnología). Son ciclos iterativos en los cuales se desarrolla o mejora una funcionalidad para producir nuevos incrementos. Durante un Sprint el producto es diseñado, codificado y probado. Y su arquitectura y diseño evolucionan durante el desarrollo.
El objetivo de un Sprint debe ser expresado en pocas palabras para que sea fácil de recordar y esté siempre presente en el equipo.
Burn down Chart
La burn down chart es una gráfica mostrada públicamente que mide la cantidad de requisitos en el Backlog del proyecto pendientes al comienzo de cada Sprint. Dibujando una línea que conecte los puntos de todos los Sprints completados, podremos ver el progreso del proyecto. Lo normal es que esta línea sea descendente (en casos en que todo va bien en el sentido de que los requisitos están bien definidos desde el principio y no varían nunca) hasta llegar al eje horizontal, momento en el cual el proyecto se ha terminado (no hay más requisitos pendientes de ser completados en el Backlog). Si durante el proceso se añaden nuevos requisitos la recta tendrá pendiente ascendente en determinados segmentos, y si se modifican algunos requisitos la pendiente variará o incluso valdrá cero en algunos tramos.
Sprint Backlog
Es el punto de entrada de cada Sprint. Es una lista que tiene los ítems de la Product Backlog List que van a ser implementados en el siguiente Sprint.
Los ítems son seleccionados por el Scrum Team, el Scrum Master y el Product Owner en la Sprint Planning Meeting a partir de la priorización de los ítems y los objetivos que se marcaron para ese Sprint. A partir de los objetivos a cumplir durante el Sprint el Scrum Team determina que tareas debe desempeñar para cumplir el objetivo. De esto surge el Sprint Backlog.
Stabilization Sprints
En estos Sprints el equipo se concentra en encontrar defectos, no en agregar funcionalidad. Suelen aplicarse cuando se prepara un producto para el release. Son útiles cuando se están realizando pruebas beta, se está introduciendo a un equipo en la metodología de Scrum o cuando la calidad de un producto no alcanza los límites esperados.
No fueron definidos por Scrum pero han sido recomendados por su utilidad al aplicar esta metodología.
Scrum of Scrums o MetaScrum
Los equipos de Scrum suelen tener entre 5 y 10 personas, sin embargo está metodología ha sido aplicada en proyectos que involucran más de 600 personas. Esto ha sido llevado a cabo dividiendo a los accionistas en equipos de pequeños de hasta 10 personas aproximadamente. Y definiendo jerárquicamente personas que pertenecen a dos equipos, es decir, además de su rol específico dentro de un equipo tienen el rol de enlace en un equipo superior.
Roles y responsabilidades
Scrum clasifica a todas las personas que intervienen o tienen interés en el desarrollo del proyecto en: propietario del producto, equipo, gestor de Scrum (también Scrum Manager o Scrum Master) y “otros interesados”.
Los tres primeros grupos (propietario, equipo y gestor) son los responsables del proyecto, los que según la comparación siguiente (y sin connotaciones peyorativas) serían los “cerdos”; mientras que el resto de interesados serían las gallinas.
Cerdos y gallinas.
Esta metáfora ilustra de forma muy gráfica la diferencia de implicación en el proyecto entre ambos grupos:
Una gallina y un cerdo paseaban por la carretera.
La gallina dijo al cerdo: “Quieres abrir un restaurante conmigo”.
El cerdo consideró la propuesta y respondió: “Sí, me gustaría. ¿Y cómo lo llamaríamos?”.
La gallina respondió: “Huevos con jamón”.
El cerdo se detuvo, hizo una pausa y contestó:
“Pensándolo mejor, creo que no voy a abrir un restaurante contigo. Yo estaría realmente comprometido, mientras que tú estarías sólo implicada”.
Roles Cerdo
Los Cerdos son los que están comprometidos con el proyecto y el proceso Scrum; ellos son los que "ponen el jamón en el plato".
Product Owner
El Product Owner representa la voz del cliente. Se asegura de que el equipo Scrum trabaja de forma adecuada desde la perspectiva del negocio. El Product Owner escribe historias de usuario, las prioriza, y las coloca en el Product Backlog.
ScrumMaster (o Facilitador)
El Scrum es facilitado por un ScrumMaster, cuyo trabajo primario es eliminar los obstáculos que impiden que el equipo alcance el objetivo del sprint. El ScrumMaster no es el líder del equipo (porque ellos se auto-organizan), sino que actúa como una protección entre el equipo y cualquier influencia que le distraiga. El ScrumMaster se asegura de que el proceso Scrum se utiliza como es debido. El ScrumMaster es el que hace que las reglas se cumplan.
Equipo
El equipo tiene la responsabilidad de entregar el producto. Un pequeño equipo de 5 a 9 personas con las habilidades transversales necesarias para realizar el trabajo (diseñador, desarrollador, etc).
Roles "Gallina"
Los roles gallina en realidad no son parte del proceso Scrum, pero deben tenerse en cuenta. Un aspecto importante de una aproximación ágil es la práctica de involucrar en el proceso a los usuarios, expertos del negocio y otros interesados (stakeholders). Es importante que esa gente participe y entregue retroalimentación con respecto a la salida del proceso a fin de revisar y planear cada sprint.
Usuarios
Es el destinatario final del producto. Como bien lo dice la paradoja, El árbol cae en el bosque cuando no hay nadie ¿Hace ruido? Aqui la definicion sería Si el software no es usado ¿fue alguna vez escrito?.
Stakeholders (Clientes, Proveedores).
Se refiere a la gente que hace posible el proyecto y para quienes el proyecto producirá el beneficio acordado que lo justifica. Sólo participan directamente durante las revisiones del sprint.
Managers
Es la gente que establece el ambiente para el desarrollo del producto.
Reuniones en Scrum
Daily Scrum
Cada día de un sprint, se realiza la reunión sobre el estado de un proyecto. Esto se llama "daily standup". El scrum tiene unas guías específicas:
·         La reunión comienza puntualmente a su hora. A menudo hay castigos -acordados por el equipo- para quién llega tarde (por ejemplo: dinero, flexiones, llevar colgando una gallina de plástico del cuello, etc)
·         Todos son bienvenidos, pero solo los "cerdos" pueden hablar.
·         La reunión tiene una duración fija de 15 minutos, de forma independiente del tamaño del equipo.
·         Todos los asistentes deben mantenerse de pie (esto ayuda a mantener la reunión corta)
·         La reunión debe ocurrir en la misma ubicación y a la misma hora todos los días.
Durante la reunión, cada miembro del equipo contesta a tres preguntas:[]
·         ¿Qué has hecho desde ayer?
·         ¿Qué es lo que estás planeando hacer hoy?
·         ¿Has tenido algún problema que te haya impedido alcanzar tu objetivo? (Es el papel del ScrumMaster recordar estos impedimentos).
·          
Scrum de Scrum
Cada día normalmente después del “Daily Scrum”
·         Estas reuniones permiten a los grupos de equipos discutir su trabajo, enfocándose especialmente en áreas de solapamiento e integración.
·         Asiste una persona asignada por cada equipo.
La agenda será la misma como del Daily Scrum, además de las siguientes cuatro preguntas:
·         ¿Qué ha hecho tu equipo desde nuestra última reunión?
·         ¿Qué hará tu equipo antes que nos volvamos a reunir?
·         ¿Hay algo que demora o estorba a tu equipo?
·         ¿Estás a punto de poner algo en el camino del otro equipo?
Reunión de Planificación del Sprint (Sprint Planning Meeting)
Al inicio del ciclo Sprint (cada 15 o 30 días), una “Reunión de Planificación del Sprint” se lleva a cabo.
·         Seleccionar que trabajo se hará
·         Preparar, con el equipo completo, el Sprint Backlog que detalla el tiempo que tomara hacer el trabajo.
·         Identificar y comunicar cuánto del trabajo es probable que se realice durante el actual Sprint
·         Ocho horas como limite
Al final del ciclo Sprint, dos reuniones se llevaran a cabo: la “Reunión de Revisión del Sprint” y la “Retrospectiva del Sprint”
Reunión de Revisión del Sprint (Sprint Review Meeting)
·         Revisar el trabajo que fue completado y no completado
·         Presentar el trabajo completado a los interesados (alias “demo”)
·         El trabajo incompleto no puede ser demostrado
·         Cuatro horas como límite
Retrospectiva del Sprint (Sprint Retrospective)
Después de cada sprint, se lleva a cabo una retrospectiva del sprint, en la cual todos los miembros del equipo dejan sus impresiones sobre el sprint recién superado. El propósito de la retrospectiva es realizar una mejora continua del proceso. Esta reunión tiene un tiempo fijo de cuatro horas.
Visión general del modelo SCRUM























CUANDO APLICAR EL MODELO SCRUM

• Cuando hay intervención del cliente.
• Cuando el alcance cambia regularmente durante el proyecto.
• Cuando se requieren entregas regulares.
• Cuando el producto requiere ser implementado de inmediato. 
• Entregas incrementales. 


VENTAJAS DEL MODELO SCRUM


* El cliente puede comenzar a utilizar el producto rápidamente.
*  El cliente puede decidir los nuevos objetivos a realizar.
*  Se agilIza el proceso, porque se divide el problema en pequeñas tareas.
*  Menos probabilidad de que se den sorpresas o desarrollos inesperados porque el cliente va viendo poco a poco lo que se está desarrollando.

DESVENTAJAS DEL MODELO SCRUM

* Existe la tendencia que si se deja una tarea sin terminar y que por las exigencias del Dueño del Producto se deban realizar otras nuevas. Estas tareas no terminadas puedan obstaculizar la planeación de nuevas sprints y se deba volver al problema original.
*  Alto nivel de stress de los miembros del equipo, el desgaste puede ser excesivo y estresante lo que puede disminuir el rendimiento.
*  La necesidad de contar con equipos multidisciplinarios puede ser un problema, porque cada integrante del equipo debe estar en capacidad de resolver cualquier tarea y no siempre se cuenta con este perfil en la empresa.
*  El equipo puede estar tentado de tomar el camino más corto para cumplir con un sprint, que no necesariamente puede ser el de mejor calidad en el desarrollo del producto.





bdchEntregas pequeñas: colocan un sistema sencillo en producción rápidamente que se actualiza de forma rápida y constante permitiendo que el verdadero valor de negocio del producto sea evaluado en un ambiente real. Estas entregas no pueden pasar las 2 o 3 semanas como máximo. 


Entendimiento

1. Diseño simple: se basa en la filosofía de que el mayor valor de negocio es entregado por el programa más sencillo que cumpla los requerimientos. Simple Design se enfoca en proporcionar un sistema que cubra las necesidades inmediatas del cliente, ni más ni menos. Este proceso permite eliminar redundancias y rejuvenecer los diseños obsoletos de forma sencilla.

2. Metáfora: desarrollada por los programadores al inicio del proyecto, define una historia de cómo funciona el sistema completo. XP estimula historias, que son breves descripciones de un trabajo de un sistema en lugar de los tradicionales diagramas y modelos UML (Unified Modeling Language). La metáfora expresa la visión evolutiva del proyecto que define el alcance y propósito del sistema. Las tarjetas CRC (Clase, Responsabilidad y Colaboración) también ayudarán al equipo a definir actividades durante el diseño del sistema. Cada tarjeta representa una clase en la programación orientada a objetos y define sus responsabilidades (lo que ha de hacer) y las colaboraciones con las otras clases (cómo se comunica con ellas). 

3. Propiedad colectiva del código: un código con propiedad compartida. Nadie es el propietario de nada, todos son el propietario de todo. Este método difiere en mucho a los métodos tradicionales en los que un simple programador posee un conjunto de código. Los defensores de XP argumentan que mientras haya más gente trabajando en una pieza, menos errores aparecerán. 

4. Estándar de codificación: define la propiedad del código compartido así como las reglas para escribir y documentar el código y la comunicación entre diferentes piezas de código desarrolladas por diferentes equipos. Los programadores las han de seguir de tal manera que el código en el sistema se vea como si hubiera estado escrito por una sola persona. 

Bienestar del programador. 
1. La semana de 40 horas: la programación extrema sostiene que los programadores cansados escriben código de menor cualidad. Minimizar las horas extras y mantener los programadores frescos, generará código de mayor calidad. Como dice Beck, está bien trabajar tiempos extra cuando es necesario, pero no se ha de hacer durante dos semanas seguidas. 



PROCESO DE DESARROLLO 
La programación extrema parte del caso habitual de una compañía que desarrolla software normalmente a medida, en la que hay diferentes roles: un equipo de gestión (o diseño), uno de desarrollo y los clientes finales. La relación entre el equipo de diseño, los que desarrollan el software y clientes es totalmente diferente al que se ha producido en las metodologías tradicionales, que se basaba en una fase de captura de los requisitos previa al desarrollo, y de una fase de validación posterior al mismo. 

1. Interacción con el cliente.
En este tipo de programación el cliente pasa a ser parte implicada en el equipo de desarrollo. Su importancia es máxima en el momento de tratar con los usuarios y en efectuar las reuniones de planificación. Tiene un papel importante de interacción con el equipo de programadores, sobre todo después de cada cambio, y de cada posible problema localizado, mostrando las prioridades, expresando sus sensaciones... En este tipo de programación existirán pruebas de aceptación de la programación que ayudarán a que su labor sea lo más provechosa posible. 
Al fin y al cabo, el cliente se encuentra mucho más cerca del proceso de desarrollo. Se elimina la fase inicial de recopilación de requerimientos, y se permite que éstos se vayan cogiendo a lo largo del proyecto, de una manera ordenada. De esta forma se posibilita que el cliente pueda ir cambiando de opinión sobre la marcha, pero a cambio han de estar siempre disponibles para solucionar las dudas del equipo de desarrollo. 
En XP aparece un nuevo concepto llamado “Historia de usuario”. Se trata de una lista de características que el cliente necesita que existan en el producto final. Estas constan de dos fases: 
o En la primera fase, el cliente describe con sus propias palabras las características y, es el responsable del equipo, el encargado de informarlo de las dificultades técnicas de cada una de ellas y de su coste. A consecuencia de este diálogo, el cliente deja por escrito un conjunto de historias y las ordena en función de la prioridad que tienen pera él. De esta manera ya es posible definir unas fechas aproximadas para ellos. 
o En la segunda fase, el cliente cogerá las primeras historias a implementar y las dividirá en trabajos a realizar. El cliente también participa, pero hay más peso por parte del equipo de desarrolladores, esto dará como resultado una planificación más exacta. Este método se repetirá para cada historia. 

A diferencia de otras técnicas, como puede ser UML, en el caso de XP, se exige que sea el cliente el encargado de escribir los documentos con las especificaciones de lo que realmente quiere, como un documento de requisitos de usuario. 
En esta fase, el equipo técnico será el 'encargado de catalogar las historias del cliente y asignarles una duración. La norma es que cada historia de usuario tiene que poder ser realizable en un espacio entre una y tres semanas de programación. Las que requieran menos tiempo serán agrupadas, y las que necesiten más serán modificadas o divididas. 
Finalmente decir que las historias de los usuarios serán escritas en tarjetas, lo que facilitará que el cliente pueda especificar la importancia relativa entre las diferentes historias de usuario, así como el trabajo de los programadores que podrán catalogarlas correctamente. Este formato también es muy útil en el momento de las pruebas de aceptación. 

PLANIFICACIÓN DEL PROYECTO 


En este punto se tendrá que elaborar la planificación por etapas, donde se aplicarán diferentes iteraciones. Para hacerlo será necesaria la existencia de reglas que se han de seguir por las partes implicadas en el proyecto para que todas las partes tengan voz y se sientan realmente partícipes de la decisión tomada. 
Las entregas se tienen que hacer cuanto antes mejor, y con cada iteración, el cliente ha de recibir una nueva versión. Cuanto más tiempo se tarde en introducir una parte esencial, menos tiempo se tendrá para trabajar con ella después. Se aconseja muchas entregas y muy frecuentes. De esta manera un error en la parte inicial del sistema tiene más posibilidades de detectarse rápidamente. 
Una de las máximas a aplicar es, los cambios, no han de suponer más horas de programación para el programador, ya que el que no se termina en un día, se deja para el día siguiente. 
Se ha de tener asumido que en el proceso de planificación habrán errores, es más, serán comunes, y por esto esta metodología ya los tiene previstos, por lo tanto se establecerán mecanismos de revisión. Cada tres o cinco iteraciones es normal revisar las historias de los usuarios, y renegociar la planificación. 
Cada iteración necesita también ser planificada, es lo que se llama planificación iterativa, en la que se anotarán las historias de usuarios que se consideren esenciales y las que no han pasado las pruebas de aceptación. Estas planificaciones también se harán en tarjetas, en las que se escribirán los trabajos que durarán entre uno y tres días. 
Es por esto que el diseño se puede clasificar como continuo. Añade agilidad al proceso de desarrollo y evita que se mire demasiado hacia delante, desarrollando trabajos que aún no han estado programados. 
Este tipo de planificación en iteraciones y el diseño iterativo, hace que aparezca una práctica que no existía en la programación tradicional. Se trata de las discusiones diarias informales, para fomentar la comunicación, y para hacer que los desarrolladores tengan tiempo de hablar de los problemas a los que se enfrentan y de ver cómo van con sus trabajos. 

DISEÑO, DESARROLLO Y PRUEBAS 

El desarrollo es la parte más importante en el proceso de la programación extrema. Todos los trabajos tienen como objetivo que se programen lo más rápidamente posible, sin interrupciones y en dirección correcta. 
También es muy importante el diseño, y se establecen los mecanismos, para que éste sea revisado y mejorado de manera continuada a lo largo del proyecto, según se van añadiendo funcionalidades al mismo. 
La clave del proceso de desarrollar XP es la comunicación. La mayoría de los problemas en los proyectos son por falta de comunicación en el equipo. 
En XP, aparece un nuevo concepto llamado Metáfora. Su principal objetivo es mejorar la comunicación entre todos los integrantes del equipo, al crear una visión global y común de lo que se quiere desarrollar. La metáfora tiene que ser expresada en términos conocidos por los integrantes del equipo, por ejemplo comparando el sistema que se desarrollará con alguna cosa de la vida real. 
Antes de empezar a codificar se tienen que hacer pruebas unitarias, es decir: 
Cada vez que se quiere implementar una parte de código, en XP, se tiene que escribir una prueba sencilla, y después escribir el código para que la pase. Una vez pasada se amplía y se continúa. En XP hay una máxima que dice "Todo el código que puede fallar tiene que tener una prueba". 
Con estas normas se obtiene un código simple y funcional de manera bastante rápida. Por esto es importante pasar las pruebas al 100%. 
Respecto a la integración del soft, en XP se ha de hacer una integración continua, es decir, cada vez se tienen que ir integrando pequeños fragmentos de código, para evitar que al finalizar el proyecto se tenga que invertir grandes esfuerzos en la integración final. En todo buen proyecto de XP, tendría que existir una versión al día integrada, de manera que los cambios siempre se realicen en esta última versión. 
Otra peculiaridad de XP es que cada programador puede trabajar en cualquier parte del programa. 
De esta manera se evita que haya partes "propietarias de cada programador". Por esto es tan importante la integración diaria. 
Para terminar, otra peculiaridad que tiene la XP. La de fomentar la programación en parejas, es decir, hacer que los programadores no trabajen en solitario, sino que siempre estarán con otra persona. Una pareja de programadores ha de compartir el teclado, el monitor y el ratón. El principio fundamental de este hecho es realizar de manera continua y sin parar el desarrollo de código. Las parejas tienen que ir cambiando de manera periódica, para hacer que el conocimiento se difunda en el grupo. Está demostrado que de esta manera el trabajo es más eficaz y también se consigue más y mejor código.