c03-Procesos de Ingeniería de Software y su relación con UML

Anuncio
IS, Procesos de Software y
UML en el Contexto de
ADOO
Análisis y Diseño OO, 20092009-1
Luis Carlos Díaz, Angela Carrillo,
Deicy Alvarado y M. Consuelo
Franky
Introducción a los procesos de
desarrollo de software
Ingeniería de Software
Personas
Tecnología
Producto
Proceso
El ciclo de vida del Software
Tiempo …
Ciclos desde su nacimiento hasta su muerte
Nacimiento
Muerte
Problemas en el desarrollo
El dominio de la aplicación no es conocido
Falta de comunicación con el usuario
Falta de comunicación del grupo de desarrollo
Carencia de una buena documentación
Falta de planeación
Sobrecostos
Demoras y cancelación de proyectos
Mala calidad del producto
No cumplimiento de las necesidades del “Negocio”
Ejemplo: Los Costos!
¿Cómo solucionar estos problemas y
suplir los retos del desarrollo de software?
… Tarea de la Ingeniería de Software!
Apuesta: Si el proceso es de calidad
Apuesta:
El producto resultante de ese proceso es de calidad!!!
Sobre el Proceso
Construcción
Desarrollo
Mantenimiento del Software
Sistema nuevo
o modificado
Proceso de Desarrollo
de Software
Requisitos nuevos
o modificados
Modelos del Ciclo de Vida
Diente de Sierra
Cascada
Espiral
Diente Tiburón
En “V”
Proceso General
Resumen de los principales procesos
de desarrollo de software:
ADMINISTRACIÓN DEL PROYECTO
Inicio, Supervisión, Control, Calidad
PRE- DESARROLLO
Exploración
Asignación del sistema
DESARROLLO
Requerimientos
Análisis
Diseño
Implementación
Pruebas
POS- DESARROLLO
Instalación
Operación & Soporte
Mantenimiento
Retiro
PROCESOS INTEGRALES
Verificación, Validación, Adm. de configuraciones, Documentación, Entrenamiento
Clasificación de procesos de
desarrollo de software
Varias alternativas de procesos
trabajando con UML
UML es un estándar de lenguaje de
modelaje pero no hay estándar de proceso
de desarrollo de software
Dos categorías de procesos:
Cascada (tradicional): divide un proyecto en
actividades secuenciales que constituyen el ciclo
de vida del software
análisis de requerimientos, diseño, codificación, pruebas
Iterativo (recomendado): divide un proyecto en
subconjuntos de funcionalidad llamadas
iteraciones
en cada iteración se aplican todas las etapas del ciclo de vida
del software a ese subconjunto de funcionalidad
Proceso en cascada
Problemas:
cuando hay que devolverse a una actividad anterior se
replantean todas las actividades afectando el cronograma
es muy riesgoso dejar las todas las pruebas para el final
del proyecto
A pesar de sus problemas, la mayoría de los
proyectos siguen el proceso de cascada
Proceso iterativo
No todo se puede dividir en iteraciones:
Características de las iteraciones:
para poder partir en iteraciones, antes deben tener claros todos
los requerimientos (debería ser un proyecto aparte)
el entrenamiento de los usuarios se deja para después de las
iteraciones
cada iteración debería entrar en operación para obtener
retroalimentación de los usuarios
todas las iteraciones debería ser de la misma duración (3 a 4
semanas): asegura entregas regulares
Modificación frecuente del código realizado
en interaciones pasadas, apoyándose en:
mediante pruebas automáticas se detectan defectos a corregir
refactory: mover o transformar el código
integración continua
Variedades del proceso iterativo:
incremental, espiral, evolucionario, jacuzzi, …
Proceso híbrido "entrega por escalones"
(staged delivery)
Aplica cascada para hacer inicialmente y secuencialmente:
análisis, diseño global
Aplica iteraciones para realizar : codificación y pruebas
Planeación predictiva o adaptativa
Planeación predictiva (usada en proceso en
cascada):
etapa inicial de análisis de requerimientos debería dar el
entendimiento de todo el proyecto que se quiere hacer => estimar
de formar más precisa las demás etapas
permitiría hacer contrato de precio fijo por un alcance fijo
realidad: los requerimientos no se pueden congelar y cambian
aún en las etapas finales.
Planeación adaptativa (usada en proceso
iterativo):
se admite que el cambio es inevitable a lo largo del proyecto
hay planeación permanente (por ejemplo replanteando los
requerimientos en cada iteración)
el contrato es generalmente de precio fijo / alcance variable
Ejemplos más conocidos de
procesos de desarrollo de
software iterativos
RUP: Rational Unified Process
Fases en RUP
Inception
Elaboration
Objetivos
(Vision)
Tiempo …
Construction
Arquitectura
Transition
Capacidad
Operacional
Inicial
Release
del Producto
Fases en RUP
Incepción o Inicio: visión aproximada del producto
final con base en las características del negocio
Elaboración: Visión refinada (inventario de casos
de uso), construcción en iteraciones del núcleo
central, resolución de riesgos altos
Construcción: implantación del sistema en
iteraciones (casos de uso), implementación de
requerimientos de menor riesgo
Transición: Despliegue del producto,
entrenamiento de usuarios
Fases e Iteraciones en RUP
Alcance y
Objetivos
Fases:
Incepción
Iteraciones:
Arquitectura
Elaboración
Iteración
1
Versión Beta
Versión Final
Construcción
Iteración
2
Iteración
3
Transición
Iteración
4
Modelado del Negocio
Entregas
internas
(Versiones)
Requerimientos
Disciplinas:
Análisis y Diseño
Implementación
Pruebas (Fiabilidad,
Funcionalidad, Rendimiento)
Las Iteraciones en RUP
En cada fase
Análisis de Requerimientos
Diseño
Implementación
Pruebas
Se busca un refinamiento sucesivo
del sistema
Longitud máxima: 2 a 6 semanas
Fijar iteraciones cortas y adaptables
Características Generales de RUP
Dirigido por Casos de Uso
Centrado en la Arquitectura
Iterativo e Incremental
Otros
Desarrollo basado en componentes
UML como lenguaje de Modelado
Proceso Integrado
Procesos Agiles
Son procesos fuertemente adaptativos
Son orientados a las personas:
el factor más importante de éxito en un proyecto es la
calidad de la gente que participa en él (las herramientas y
metodologías son secundarias)
Usan iteraciones cortas de un mes o menos
Construyen pocos diagramas y documentos
UML: lo usan más en modo bosquejo
“Agile Manifesto” (Febrero’2001)
VALORES:
Las personas y su interacción son más
importantes que los procesos y las
herramientas
Es mas importante el software
funcionando que la documentación
excesiva
Es mejor crear un ambiente de
colaboración y confianza
cliente↔
↔desarrollador que refinar el
contrato para prever todos los casos
Es preferible responder al cambio que
seguir un plan
Kent Beck
Mike Beedle
Arie van Bennekum
Alistair Cockburn
Ward Cunningham
Martin Fowler
James Grenning
Jim Highsmith
Andrew Hunt
Ron Jeffries
Jon Kern
Brian Marick
Robert C. Martin
Steve Mellor
Ken Schwaber
Jeff Sutherland
Dave Thomas
24
¿Qué es “Extreme Programming” ?
XP es un modelo de proceso ágil, que se concentra
en la producción disciplinada de código.
XP es una disciplina de desarrollo ágil de software
basada en simplicidad, comunicación,
realimentación y coraje, que organiza al grupo de
desarrollo en torno a 12 prácticas concretas, las
cuales permiten
saber cómo va el proyecto
afinar las prácticas a la situación particular.
25
Los 4 Valores de XP
Comunicación
Simplicidad
Realimentación
Coraje
26
Las 12 prácticas de XP
Entregas frecuentes y
pequeñas
Planear el desarrollo a
Propiedad corporativa del
código
“corto” plazo
Pruebas automáticas
permanentes
Diseños simples
Refactoring
Integración permanente
El cliente al lado
Estandarización del
40 horas de trabajo
código
Metáfora (lenguaje común)
Programación por pares
27
Contrato 2
Propuesta 2
Contrato 1
Propuesta 1
Experiencia CincoSOFT: Proceso visible con entregas
frecuentes => Entregables (RUP “light”) + ...
Construcción
por módulos
Elaboración
Doc. Arquitectura
e Integración
1
2
Refinar
Casos de Uso
Especificación
Formal (Z)
Refinar Modelo
de Datos
3
4
Programación
Inserción
...
Pruebas
Transición
Manuales:
Usuario
Administración
Ajustes
Inventario de
Casos de Uso
Documentación de
Casos de Uso
y de Base de Datos
Código documentado
y Manual Usuario
28
Experiencia CincoSOFT: RUP light
+ Extreme Programming +...
Construction
Inception
Elaboration
1
2
3
4
...
Transición
Programación “+ - por pares”
Diseñar las
pantallas de los
Casos Uso
Unit Testing
Aprobación
del
usuario
Documentar
Aspectos
Técnicos
Refinar las
tablas
involucradas en
el Caso de Uso
Integration Testing
Functional Testing
Stress Testing
Extreme Programming
29
1
2
3
Generación de
nuevos WebServices
Generación de
nuevos EJBs
Elaboration
Generación de un
nuevo módulo
Generación del
Sistema inicial:
Seguridad
Menus
Control
Librerias básicas
Inception
4
Experiencia
CincoSOFT: RUP light
+ Extreme
Programming
+ Framework
...
Transición
Programación “+- por pares”
Diseñar las
pantallas de los
Casos Uso
Unit Testing
Aprobación
del
usuario
Generación de código
de control, esqueleto y
y descriptores
del nuevo Caso de Uso
Refinar las
tablas
involucradas en
el Caso de Uso
Integration Testing
Functional Testing
Stress Testing
Extreme Programming
30
Ventajas de los procesos iterativos
(RUP, procesos ágiles)
Mitigación temprana de posibles riesgos
altos
Progreso visible en las primeras etapas
Temprana retroalimentación que se ajuste
a las necesidades reales
Gestión de la complejidad
Conocimiento adquirido en una iteración
puede aplicarse de iteración a iteración
Buenas prácticas
Abordar las cuestiones de alto riesgo y
valor en las primeras iteraciones
Usuarios involucrados continuamente
Verificar continuamente la calidad desde
el principio y con frecuencia
Aplicar casos de uso
Modelar el Software visualmente
Gestión cuidadosa de requisitos
Control de cambios
Diagramas UML utilizados en las
distintas etapas del ciclo de vida
de un proyecto de software
Etapa: Análisis de requerimientos
Objetivo: determinar qué quieren los
usuarios que haga el sistema
Diagramas UML útiles para la comunicación
con los usuarios:
Casos de usos:
usos: describe como los actores interactúan con
el sistema
Diagrama de clases de entidades de negocio (bosquejo):
establece vocabulario del dominio
Diagrama de actividades:
actividades: muestra el flujo de trabajo de la
organización (contexto de los casos de uso)
Diagrama de estados:
estados: para ilustrar entidades con un ciclo
de vida complejo con multiples estados y transiciones
Etapa: Diseño
Objetivo: determinar completamente todos
los elementos del sistema que deben
programarse
Diagramas UML útiles para la comunicación
con los programadores :
Diagrama de clases de los diferentes objetos del sistema
Diagrama de paquetes:
paquetes: muestra agrupamiento de clases
en módulos del sistema
Diagramas de secuencia de escenarios interesantes
(ilustrando acciones en el tiempo para algunos casos de
uso)
Diagrama de estados:
estados: para ilustrar clases de objetos de
vida complejo con multiples estados y transiciones
Diagramas de despliegue:
despliegue: para ilustrar los elementos
físicos en donde va a operar el software
Etapa: Documentación
Objetivo: dejar historia de cómo se construyó el
sistema
Deben ser diagramas globales de todo el sistema (la
documentación detallada se genera a partir del
código)
Diagramas UML útiles para la documentación global:
Diagrama de paquetes:
paquetes: muestra agrupamiento de clases en
módulos del sistema
Diagramas de despliegue:
despliegue: para ilustrar los elementos físicos
en donde va a operar el software
Diagrama de clases importantes
Opcionalmente:
diagramas de interacción entre clases importantes
diagrama de estados para clases complejas
diagramas de actividad
Descargar