Introducción a la Ingeniería de Software

Transcripción

Introducción a la Ingeniería de Software
Introducción a la
Ingeniería de Software
Curso IIC 2143 – Ingeniería de Software
Rodrigo Sandoval 2010
Contenidos
• ¿Qué es la Ingeniería de Software?
• Procesos de Desarrollo
• Enfrentando un problema y su solución
– Análisis
– Diseño
– Enfoque iterativo
En parte basado en material de Yadran Eterovic, DCC, PUC
¿Qué es la IS?
Disciplina orientada a la
producción de Software de
Buena Calidad.
Enfoque sistemático,
disciplinado, y cuantificable
al desarrollo, operación, y
mantenimiento de software.
Una disciplina cuyo objetivo es la
producción de software sin errores,
entregado a tiempo y dentro del
presupuesto, fácil de modificar, y que
satisface las necesidades del cliente.
El Software es
Inherentemente
Complejo
•El dominio del problema
es complejo.
•El proceso de desarrollo
es difícil de gestionar.
•El software permite
muchísima flexibilidad.
•La caracterización del
comportamiento de
sistemas discretos es difícil.
Construcción de Software
• Construir software de buena calidad de
manera repetible y predecible es aún más
difícil.
• Las empresas siguen demandando mayor
productividad, mejor calidad, y desarrollos y
puestas en operación más rápidos.
• El desarrollo de software se vuelve cada vez
más intensivo en mano de obra - las personas
son el recurso más caro.
Proyectos de Software
24%
32%
Proyectos exitosos
Proyectos problemáticos
Proyectos fallidos
44%
• Standish Group Chaos Report 2009
¿Qué hace que un
(standishgroup.com)
proyecto sea exitoso y
otro falle en mayor o
menor grado?
De muestra, un botón …
DE: Germany freezes development of its employment portal
eGovernment News – 02 March 2004 – Germany – eServices for citizens
On 25 February 2004, the German Federal Labour Office (Arbeitsamt) announced it was
freezing its job portal development plans due to skyrocketing costs. Although the original
costs were evaluated at EUR 65 million, new estimates indicate the portal would cost EUR
165 million up to 2008.
Due to be one of the office's flagship projects, the new employment portal - Arbeitsagentur.de suffered from a number of technical problems since it went online in December 2003.
However, its freeze was brought about by a financial scandal, with the new head of the
German Federal Labour Office Frank-Jürgen Weise denouncing an out-of-control budget and
the public prosecutor investigating corruption suspicions. In this context, Mr Weise decided to
fire the head of the Arbeitsagentur.de project.
. . . The website, which was developed by Accenture, has been criticized for being slow,
instable and failing to deliver requested information. On 27/02/2004, a press release by
Accenture denied any corruption in the bidding procedure and stated that the second stage of
the project was running according to schedule.
. . . The portal was supposed to be further developed in the coming years, with for instance an
enhanced matching system to be implemented in May and a Service Centre for job
intermediation and consultation to be launched in August 2004.
© European Communities 2004
Arbeitsagentur.de - Análisis
Problemas:
– Preparación
• ¿Estimaciones?
• ¿Levantamiento adecuado de los requerimientos y
condiciones/restricciones?
– Desarrollo
• ¿Control de Calidad?
– Errores (estabilidad)
– Desempeño ante carga real
– No entrega la información requerida
– Administración del Proyecto
• Dimensionamiento adecuado: plazos de entrega vs.
Funcionalidades.
• Visibilidad hacia los interesados.
… y otro Botón
• FBI's Virtual Case File (VCF)
– Application de software desarrollada por el Federal Bureau
of Investigation (FBI), entre el 2000 y el 2005..
– El proyecto no estaba ni cerca de ser terminado cuando
fue abandonado en Enero 2005, habiéndose transformado
en un completo fiasco para el FBI.
– Además de haber desperdiciado al menos US$100
millones, la falla trajo una amplia y dura crítica dura al
Bureau y su director, Robert S. Mueller III.
Fuente: Wikipedia
http://en.wikipedia.org/wiki/Virtual_Case_File
Virtual Case File (FBI) - Análisis
Fallas en prácticas de Ingeniería de Software detectadas en este proyecto:
•
•
•
•
•
Falta de planos sólidos desde el
comienzo llevaron a decisiones pobres
en arquitectura.
Cambios reiterados en la
especificación.
Cambior reiterados en el
management, lo que contribuyó a los
cambios en especificaciones.
Micromanagement de los
desarrolladores.
La inclusión de mucho personal del
FBI que tenía poco o ningún
entrenamiento formal en ciencia de la
computación, como managers e
incluso como ingenieros en el
proyecto.
•
•
•
•
Problemas de alcance a medida que los
requisitios eran contínuamente
agregados al sistema, incluso frente a
atrasos en las entregas.
Problemas en el código debido al
alcance y las especificaciones
cambiantes. En un punto se estima que
el software tenía sobre 700.000 líneas
de código.
Adición de más gente y recursos al
proyecto a medida que se iba atrasando,
lo cual lo hizo atrasarse aún más (Ley de
Brooks).
Planificación de una liberación muy
drástica al final, lo cual hizo muy difícil la
adopción del sistema hasta que se fuese
perfeccionando.
Razones para fallas (en general)
• La gestión de requisitos es
ad hoc.
• La comunicación es
ambigua e imprecisa.
• Las arquitecturas de
sistemas/software son
frágiles.
• La complejidad es
abrumadora.
• Hay inconsistencias
inadvertidas en
requisitos, diseños e
implementaciones.
• Las pruebas son
insuficientes.
• La evaluación del estado
del proyecto es subjetiva.
• Se omite enfrentar los
riesgos.
• Hay propagación
descontrolada de cambios.
• La automatización es
insuficiente.
¿Y entonces, cómo se resuelve?
• La industria ha visto como varias buenas prácticas
ingenieriles han llevado al éxito en los proyectos:
–
–
–
–
–
–
Modelamiento visual
Desarrollo incremental
Administración de requerimientos
Arquitecturas basadas en componentes
Verificación continua de la calidad
Control de cambios
 Gran parte de estas se aplican en un
proceso de desarrollo de software.
Definiciones y tipos de
PROCESO DE DESARROLLO DE
SOFTWARE
Proceso de Desarrollo de Software
• Un proceso define, entre otras cosas:
– La organización de actividades del equipo.
– Los roles de los involucrados y sus respectivas
metas.
– Los artefactos que deben ser generados y cuándo.
– Los criterios para supervisar y medir los productos
y actividades del proyecto.
¿Qué pasa sin un
proceso de
desarrollo?
El equipo desarrolla de
manera ad hoc.
El éxito depende de los
esfuerzos heroicos de
unos pocos.
 No es el enfoque
de un ingeniero.
Proceso “Code and Fix”
Implementar
primera versión
Cambiar mientras
el cliente no
esté satisfecho
Mantenimiento
post entrega
Cascada
R
I
E
S
G
O
Análisis
Requisitos
Diseño
Codificación
Testing
Mantención
T I EMPO
Modelo V: Evolución de Cascada
– Puede notarse que su primera mitad es similar al Modelo en
Cascada, y la otra mitad tiene como finalidad hacer pruebas
e integración asociado
a cada una de las
etapas de la mitad
anterior.
– Ventaja:
involucra chequeos
de cada una de las
etapas del modelo
cascada.
Modelo de espiral
– Desarrollado para cubrir las mejores características tanto del ciclo de vida
clásico, como de la creación de prototipos, añadiendo al mismo tiempo un
nuevo elemento: el análisis de riesgo.
– Durante la primera vuelta alrededor de la espiral se definen los objetivos,
las alternativas y las restricciones, y se analizan e identifican los riesgos.
– Si el análisis de riesgo indica
que hay una incertidumbre en
los requisitos, se puede usar la
creación de prototipos en el
cuadrante de ingeniería para
dar asistencia tanto al
encargado de desarrollo como
al cliente.
– Con cada iteración alrededor de
la espiral (comenzando en el
centro y siguiendo hacia el
exterior), se construyen
sucesivas versiones del
software, cada vez más
completa y, al final, al propio
sistema operacional.
La realidad de Cascada
• C. Larman [“Agile and Iterative Development: A
Manager’s Guide”, Addison-Wesley 2003]
muestra que su uso ha sido una mala práctica:
– su tasa de éxito es baja (sólo un 10%);
– en promedio, el 45% de las propiedades identificadas
en la etapa de requisitos no son usadas;
– las estimaciones iniciales de costos y plazos varían
hasta en un 400% con respecto a los valores reales
finales;
– presenta menor productividad y mayores tasas de
errores que los procesos iterativos.
Supuestos y Limitaciones
• Los productos pueden ser desarrollados
completamente en una pasada.
• Los requisitos permanecerán congelados y
todos son igualmente importantes.
• Se puede hacer un diseño correcto, eficiente y
factible en papel antes de proseguir.
Enfrentando los supuestos
• El cambio es una constante en los proyectos de
software.
 Incorporar instancias para atender los cambios
• Los requisitos serán inestables en el tiempo.
 Manejar los requisitos ordenadamente,
diferenciar prioridades, entrar en detalles cuando
sea el momento.
Desarrollo Iterativo-Incremental
+
=
Procesos de Desarrollo
Proceso
Fortalezas
Prioridades
Situaciones
Serial
(Cascada)
Administra riesgo de costo.
Solidez diseño y arquitectura.
1) Funcionalidades
2) Poco defecto
3) Tiempo x release
Software embebido en hardware
o para controlar un dispositivo
crítico. Requisitos estables, alta
calidad.
Iterativo
Administra riesgo técnico.
1) Funcionalidades
2) Poco defecto
3) Tiempo x release
Productos o ideas nuevas que
requieren refinarse antes del
desarrollo.
Administra riesgo de calendario
Absorbe cambios en reqs.
1) Tiempo x release
2) Poco defecto
3) Funcionalidades
La mayoría de los proyectos,
como nuevas versiones de
productos, necesidad de
flexibilidad y compromisos de
tiempo.
Administra riesgo técnico y de
calendario
Requiere un equipo bien
afiatado.
1) Tiempo x release
2) Funcionalidades
3) Poco defecto
Productos nuevos. Requisitos
inestables. Necesidad de
experimentación y tiempo
limitado.
1) Tiempo x release
2) Funcionalidades
3) Poco defecto
Experimentos. Nada crítico.
(Espiral)
Incremental
(RUP)
IterativoIncremental
(Ágil)
Ad-hoc
(Code & Fix)
Enfrentando la Solución
ANÁLISIS Y DISEÑO EN UN
PROYECTO DE SOFTWARE
Enfrentando el proyecto
• Más allá del proceso de software
determinado, el equipo desarrolla diferentes
actividades durante el proyecto.
• Estas actividades buscan definir y entender el
problema, e imaginarse la solución.
• El modelamiento visual es una de las
herramientas más exitosas del último tiempo,
buscando utilizar elementos gráficos para
describir diferentes elementos.
Describir el problema
• Es el “cliente” quien tiene un problema que
requiere solución.
– Requisitos”  Necesidades
– No tiene conocimiento para definir una solución
en detalle.
– No siempre tiene claridad de cuál es realmente el
problema de fondo.
– No siempre es capaz de organizar estas
necesidades en una forma que facilite la
implementación de una solución.
Describir el problema
• La descripción del
problema debe usar un
lenguaje que facilite la
comunicación entre todos
los participantes.
• Por ejemplo, Casos de
Uso de UML o Historias
de Desarrollo Ágil.
Entender el Problema
• Es un analista quien muchas veces realiza esta
definición. Considerando lo siguiente:
– ¿Qué se supone que hace el producto?
– Describir los requisitos en términos técnicos
precisos  una especificación.
– Plan de gestión del proyecto de desarrollo.
Imaginarse la Solución
• Entre arquitecto y desarrolladores, tomando
el input del analista, diseñan una posible
solución.
– Diseño arquitectónico, o de alto nivel
 módulos.
– Diseño detallado,
utilizando un lenguaje
técnico como los
diagramas UML.
Enfrentando el proyecto
• El levantamiento de requisitos, el análisis
detallado, el diseño son actividades que se
realizan varias veces en un proyecto iterativo.
• Cada iteración involucra éstas y otras
actividades.
• La cantidad de tiempo de dedicación a cada
actividad puede ir cambiando en cada
iteración.
DESARROLLO
ITERATIVO-INCREMENTAL
1
2
3
4
5
6
7
8
9
10
80%
25%
10%
5%
iteración 1
33%
15%
8%
iteración 2
10%
25%
iteración 3
33
Proyecto iterativo
R
I
E
S
G
O
T I EMPO
Enfoques iterativos-incrementales
• Rational Unified Process (RUP)
• Desarrollo Ágil
– eXtreme Programming
– Scrum
– Otros …
El desarrollo iterativo: Práctica clave
en los procesos modernos
• El desarrollo es organizado en una serie de
mini-proyectos cortos y de duración fija —
iteraciones.
• Cada iteración incluye sus propias actividades
de análisis de requisitos, diseño,
implementación y testing.
• El resultado de cada iteración es un sistema
parcial ejecutable, validado e integrado —no
es un prototipo experimental o desechable.
36
Requisitos
Requisitos
Diseño
Implementación,
pruebas, integración, más diseño
Integración final,
prueba del
sistema
Una iteración, de duración
fija; p.ej., cuatro semanas
Diseño
Tiempo
Implementación,
pruebas, integración, más diseño
Integración final,
prueba del
sistema
El sistema crece
incrementalmente
37
La actitud clave:
Acoger el cambio y la adaptación
• Cambio y adaptación son motores inevitables
y hasta esenciales.
• No se trata de favorecer un proceso reactivo,
que obedece a la aparición descontrolada de
requisitos:
– p.ej., RUP balancea la necesidad de ponerse de
acuerdo y estabilizar un conjunto de requisitos,
con la realidad de requisitos cambiantes, a medida
que los interesados clarifican su visión o el
mercado cambia.
38
En cada iteración elegimos un
subconjunto pequeño de requisitos
• … y diseñamos, implementamos y verificamos
(rápidamente) un subsistema que responde a ese
subconjunto de requisitos:
– los requisitos y el diseño de las iteraciones iniciales
pueden no ser exactamente lo que finalmente
necesitamos;
– … pero el dar pasos pequeños rápidamente permite
retroalimentación igualmente rápida de los usuarios,
desarrolladores y a partir de las pruebas;
– en lugar de especular sobre los requisitos o el diseño,
se aprovecha la retroalimentación proveniente de
construir y probar de manera realista.
39
El desarrollo iterativo ofrece beneficios
en múltiples ámbitos
• Gestión de riesgos:
– podemos validar/invalidar los requisitos y
suposiciones de diseño implementando
incrementalmente partes del sistema, comenzando
por las más riesgosas.
• Economía:
– podemos revisar las prioridades frecuentemente y
tratar las inversiones como si fueran opciones —
negocios inciertos;
– las opciones se vuelven más valiosas si hay más
flexibilidad gracias a resultados tempranos y
verificaciones frecuentes.
40
• Foco:
– al agrupar el trabajo en iteraciones pequeñas, los integrantes
del equipo se enfocan mejor en ese trabajo.
• Motivación:
– es motivante para un equipo de software ver entregas
tempranas funcionando.
• Control:
– las iteraciones cortas ayudan a reducir el error de las
estimaciones y proporcionan retroalimentación rápida sobre los
planes.
• Involucramiento de los interesados:
– clientes, usuarios, etc., ven resultados antes y se involucran
más, dedicando más tiempo, perspicacia y recursos ($).
• Aprendizaje continuo:
– el equipo aprende en cada iteración acerca del producto final.
41
El desarrollo iterativo
presenta varios desafíos
• ¿Cómo hacemos converger el trabajo de las
iteraciones para convertirlo en un producto?
– ¿Cómo evitamos que cada iteración comience de
nuevo desde cero?
• ¿Cómo decidimos qué hacer en la próxima
iteración?
– ¿Cuáles requisitos y cuáles riesgos abordamos?
• ¿Cómo resolvemos los problemas
mencionados antes?
42
Las iteraciones deberían durar
entre dos y seis semanas
• Las ideas centrales en desarrollo iterativo:
– pasos pequeños, retroalimentación rápida,
adaptación.
• Las iteraciones no deben ser muy cortas:
– es difícil hacer suficiente trabajo como para tener
resultados significativos y permitir retroalimentación.
• Las iteraciones no deben ser muy largas:
– la complejidad se vuelve abrumadora, la retroalimentación se demora, aumentan los riesgos del proyecto.
43
… y su duración debería ser fija
• El sistema parcial debe estar integrado,
validado y estabilizado en la fecha
programada —no se permite mover la fecha.
• Si nos damos cuenta de que va a ser difícil
cumplir el plazo, reduzcamos el alcance de la
iteración:
– hay que quitar tareas o requisitos de la iteración, e
incluirlos en una iteración futura.
44
La planificación es guiada
por los riesgos y por el cliente
• Los objetivos de las primeras iteraciones son
de tres tipos:
– identificar y reducir los riesgos más importantes;
– construir la funcionalidad visible más importante
para el cliente;
– construir, validar y estabilizar la arquitectura
central.
• Carecer de una arquitectura sólida es un
riesgo importante.
45

Documentos relacionados