Descargar

RUP: El proceso unificado de rational (página 2)

Enviado por Pablo Turmero


Partes: 1, 2
edu.red

Fase de concepción Objetivo: definir la razón de ser y el alcance del proyecto. Estudio de oportunidad. Visión = QUÉ + PARA QUÉ + CUÁNTO Actividades Especificación de los criterios de éxito del proyecto Definición de los requerimientos Estimación de los recursos necesarios Cronograma inicial de fases Artefactos Documento de definición del proyecto

edu.red

Fase de elaboración Objetivo: establecer un plan de proyecto y una arquitectura correcta del sistema Actividades Análisis del dominio del problema Definición de la arquitectura básica Análisis de riesgos Planificación del proyecto Artefactos Modelo del dominio Modelo de procesos Modelo funcional de alto nivel Arquitectura básica

edu.red

Fase de construcción Objetivo: desarrollar el sistema a lo largo de una serie de iteraciones Actividades Análisis Diseño Codificación Pruebas (individuales, de integración)

edu.red

XP: eXtreme Programming

edu.red

eXtreme Programming Es una metodología ágil Diseñada para entornos dinámicos Pensada para equipos pequeños (hasta 10 programadores) Orientada fuertemente hacia la codificación Énfasis en la comunicación informal, verbal

edu.red

Valores que fomenta XP Comunicación

Simplicidad

Retroalimentación

Coraje

edu.red

Roles Programador (Programmer) Responsable de decisiones técnicas Responsable de construir el sistema Sin distinción entre analistas, diseñadores o codificadores En XP, los programadores diseñan, programan y realizan las pruebas Jefe de Proyecto (Manager) Organiza y guía las reuniones Asegura condiciones adecuadas para el proyecto

Cliente (Customer) Es parte del equipo Determina qué construir y cuándo Establece las pruebas funcionales

edu.red

Roles Entrenador (Coach) Responsable del proceso Tiende a estar en un segundo plano a medida que el equipo madura Encargado de Pruebas (Tester) Ayuda al cliente con las pruebas funcionales Se asegura de que las pruebas funcionales se superan Rastreador (Tracker) Metric Man Observa sin molestar Conserva datos históricos

edu.red

Captura de requisitos Historias del Usuario (User-Stories) Establecen los requisitos del cliente Trozos de funcionalidad que aportan valor Se les asignan tareas de programación con un nº de horas de desarrollo Las establece el cliente Son la base para las pruebas funcionales

edu.red

Planificación Planificación por entregas (releases) Se priorizan aquellas user-stories que el cliente selecciona porque son más importantes para el negocio Entregas: Son lo más pequeñas posibles Se dividen en iteraciones (iteración = 2 o 3 semanas) Están compuestas por historias A cada programador se le asigna una tarea de la user-story

edu.red

Programación La programación de tareas se realiza por parejas

La pareja diseña, prueba, implementa e integra el código de la tarea

Código dirigido por las pruebas

Código modular, intentando refactorizar siempre que se pueda

edu.red

Modelo de un proyecto

edu.red

Prácticas

El juego de la planificación Entregas pequeñas Metáfora Diseño simple Pruebas Refactoring

Programación en parejas Propiedad colectiva Integración contínua Semana de 40 horas Cliente in situ Estándares de programación

edu.red

El juego de la planificación Decisiones de negocio (cliente): Alcance ? ¿Cuándo debe estar listo el producto para que sea valioso en producción? Prioridad ? Prioriza la incorporación de las user-stories Composición de entregas ? ¿Qué se necesita para que el negocio sea mejor antes de tener el sw? Fechas de entrega ? Fechas cuando el software funcionando causaría una gran diferencia

edu.red

El juego de la planificación Decisiones técnicas (programadores y otros): Estimaciones ? ¿Cuánto tiempo tardará en implementarse una user-story? Consecuencias ? Tener en cuenta las consecuencias técnicas de determinadas decisiones de negocio Proceso ? Organización del proceso y el equipo Planificación detallada ? Dentro de una entrega, qué user-stories se realizan primero. Intentar trasladar los segmentos de desarrollo más arriesgados al principio, intentando respetar las prioridades del negocio

edu.red

Cada entrega es lo más corta posible: Contenga requisitos más valiosos del sistema (básicos) Reducen el riesgo ? mayor retroalimentación desde el cliente, y más frecuente Minimizar el nº de user-stories que componen una entrega ? No realizar user-stories a medias

Entregas pequeñas

edu.red

Se diseña "la cosa más simple que pueda funcionar" Uso de tarjetas CRC Diseño de software correcto, es aquel que: Supera todas las pruebas No tiene lógica duplicada Pone de manifiesto las intenciones importantes de los programadores Tiene el mínimo número de clases y métodos

Diseño simple

edu.red

Las pruebas unitarias se escriben ANTES que el código Pruebas automatizadas Permiten el desarrollo de proyectos de forma rápida y segura Pruebas unitarias ? programadores Pruebas funcionales ? cliente Resultado ? Un programa cada vez más seguro Pruebas

edu.red

NUnit Framework para pruebas unitarias Escritura de pruebas Ejecución de pruebas Hacer un Assert de los resultados Mostrar los fallos o éxitos Mantener un código que pase los tests http://nunit.org/

edu.red

Ejemplo de un test en NUnit

edu.red

Fallo en ejecución de los tests

edu.red

Éxito en ejecución de los tests

edu.red

Refactorización = Mejora del código

Intentar eliminar complejidad

Código duplicado ? Refactorización

Se plantea su aplicación después de implementar cada user-story

Refactoring

edu.red

C# Refactoring Herramientas integradas con Visual Studio Simplifican la refactorización del código Métricas para el análisis del código http://www.xtreme-simplicity.net/

edu.red

Integración con Visual Studio

edu.red

Métricas de análisis del código

edu.red

Refactoring con C# Refactory

edu.red

Toda el código se escribe en parejas Se produce código de mayor calidad

Extiende el conocimiento

"Se realiza el trabajo de 1 persona en casi la mitad del tiempo y mejor" (cuestionable)

Programación en parejas

edu.red

Cualquiera puede modificar el código en cualquier momento ? Se evitan cuellos de botella en la codificación

Todos asume las responsabilidades sobre el conjunto del sistema

Todos conocen algo sobre todas las partes y conocen muy bien aquéllas en las que trabajan Propiedad colectiva

edu.red

El código se integra y se prueba después de pocas horas

Existe una ordenador dedicado para la integración

Cada pareja integra su código en dicho ordenador

Integración contínua

edu.red

Cliente real = Aquel que usará el sistema cuando esté en producción

El cliente real debe estar con el equipo de trabajo: Responder preguntas Resolver disputas Establecer prioridades Discutir mejoras Cliente in situ

edu.red

Son fundamentales cuando los programadores cambian de pareja o hacen refactoring del código de otros

Se consigue un código con el mismo estilo, homogéneo, legible Estándares de programación

edu.red

Patrones de diseño software

edu.red

Definición "Cada patrón describe un problema que ocurre una y otra vez en nuestro ambiente, y luego describe el núcleo de la solución a ese problema, de tal manera que puedes usar esa solución un millón de veces más, sin hacer jamás la misma cosa dos veces" (Christopher Alexander) "Son soluciones reutilizables a problemas recurrentes que encontramos durante el desarrollo de software"

edu.red

Ventajas que ofrece el uso de patrones "Diseñar código orientado a objetos es costoso, y diseñar código orientado objetos reutilizable aún lo es más" "Los patrones permiten a los programadores reconocer un problema e inmediatamente determinar la solución sin tener que pararse a analizar el problema primero" Permiten trabajar a un nivel de abstracción mayor Aumentan la productividad, la reutilización del código y su consistencia

edu.red

Ventajas que ofrece el uso de patrones Capturan la experiencia en diseño. Los patrones se crean a partir de ejemplos prácticos de diseño Utilizar patrones de diseño es reutilizar la experiencia adquirida diseñando Estudiar los patrones existentes es una manera de aprender cómo los "expertos" diseñan sistemas Los patrones definen un conjunto de términos que forman un vocabulario con el que poder hablar de diseño de software

edu.red

Componentes que constituyen un patrón Nombre Resumen o esencia de la solución Contexto al que se aplica Razones para utlizar o no el patrón Consideraciones de implementación Consecuencias e implicaciones de su uso Ejemplo de uso (Test Case) Patrones relacionados

edu.red

Proceso de aplicación de patrones Problema Contexto Solución Beneficios Patrones relacionados Consecuencias Fuerza

edu.red

Clasificación de los patrones Fundamentales De creación De partición Estructurales De comportamiento De concurrencia

edu.red

Fundamentales Son los patrones más básicos y fundamentales: Muchos del resto de patrones utiliza al menos uno de ellos Son tan básicos que muchas veces no se mencionan dándolos por supuestos

edu.red

Delegate Interface Abstract superclass Interface + abstract class Immutable Proxy Fundamentales

edu.red

Provee de una guía de cómo crear objetos cuando su creación precisa de la toma de decisiones: "Las decisiones normalmente involucran la determinación de forma dinámica de qué clase instanciar o a qué objeto delegar la responsabilidad" Estos patrones nos ayudan a estructurar y encapsular las decisiones De creación

edu.red

De creación Factory Builder Prototype Singleton Object pool

edu.red

De partición Siguen el paradigma de "divide y vencerás" "Nos proporcionan la guía de cómo particionar las clases e interfaces para llegar a un buen diseño"

edu.red

De partición Filter Composite Read-only interface

edu.red

Estructurales "Describen las formas más comunes en las que diferentes tipos de objetos pueden organizarse para trabajar conjuntamente"

edu.red

Estructurales Adapter Iterator Bridge Façade Flyweight Dynamic linkage Virtual proxy Decorator Cache management

edu.red

De comportamiento "Patrones utilizados para organizar, gestionar y combinar comportamiento"

edu.red

De comportamiento Chain of responsibility Command Little language Mediator Snapshot Observer State Null object Strategy Template method Visitor

edu.red

De concurrencia Patrones para la coordinación de operaciones concurrentes y que permiten solucionar dos problemas principalmente: Recursos compartidos Secuenciación de operaciones

edu.red

De concurrencia Single threaded execution Lock object Guarded suspension Balking Scheduler Read/Write lock Producer-consumer Two-phase termination Double buffering Asynchronous processing Future

edu.red

Arquitecturas dirigidas por modelos (MDA)

edu.red

Nueva orientación de las actividades del OMG La base de todo son los modelos (ni su implementación, ni la plataforma) Basado en el desarrollo de modelos independientes de la plataforma (PIM) Define un segundo nivel en el que diseñamos para una plataforma concreta pero de forma abstracta (PSM) Definición de transformaciones de PIM a PSM Aunque la plataforma cambie, siempre mantenemos el PIM Introducción

edu.red

PIM, PSM y transformaciones en MDA Reglas de transformación (Gp:) Modelo específico (PSM)

(Gp:) Modelo independiente de la plataforma (PIM)

(Gp:) Modelo específico (PSM)

edu.red

Ejemplos con MOF/XMI (Gp:) UML Model (PIM) (Gp:) < Auto> < Color> Red < /Color> < Door> 4 < /Door> < Engine> 2 < /Engine> < /Auto> (Gp:) XMI Document (PSM) (Gp:) XMI (Gp:) < !Element Auto (Color*, Door*, Engine*)> (Gp:) XMI DTD, Schema (PSM) (Gp:) X M I (Gp:) M O F (Gp:) interface Auto { };

(Gp:) IDL, Java. (PSM) (Gp:) Class Auto {public String color; public int Door; public int Engine; }

edu.red

Herramientas de apoyo al modelado

edu.red

Herramientas comerciales generales: Borland Together IBM Rational Suite Herramientas libres o con versiones básicas gratuitas: Argo UML Poseidon Umbrello Eclipse UML2 Eclipse Omondo Integración con los IDEs existentes Herramientas de apoyo al modelado

edu.red

Herramientas con soporte de ingeniería inversa Herramientas de generación en un solo sentido Herramientas de soporte MDA: Together AndroMDA Ayuda a la generación de código

edu.red

Formato XMI Importación y exportación a este formato por parte de las herramientas Base para las transformaciones en MDA Intercambio de metadatos

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente