Transcript CiclosVida3

Ingeniería de Software
Desarrollo basado en Reuso
• Basado en la reutilización sistemática, los sistemas se
integran con componentes existentes o con sistemas
comerciales
• Etapas del proceso
1.
2.
3.
4.
Análisis de componentes
Modificación de requisitos
Diseño del sistema con reutilización
Desarrollo e integración
• Este enfoque está cobrando cada vez más importancia
pero todavía hay una experiencia limitada con él.
Ingeniería de Software
Desarrollo basado en Reuso
Ingeniería de Software
Desarrollo basado en Reuso con Espiral
Ingeniería de Software
Transformaciones Formales
• Se basa en la transformación de una especificación
“matemática” a un programa ejecutable
• Se basan en la necesidad de razonar formalmente
sobre las aplicaciones desarrolladas, y ser capaces no
sólo de verificar que satisfacen las especificaciones
del usuario, sino de poder demostrar ciertas
propiedades sobre ellas
•
Las transformaciones pueden demostrarse y el programa final
es conforme con su especificación
Ingeniería de Software
Transformaciones Formales
Ingeniería de Software
Transformaciones Formales – Notación Z
• Z es una notación formal basada en la teoría de
conjuntos de Zermelo
•
•
•
Utiliza los conceptos básicos de esa teoría (conjuntos,
relaciones, funciones y variables) para describir sistemas y
aplicaciones
Z define los denominados esquemas, que permiten la
construcción estructurada y modular de especificaciones
software.
Los esquemas sirven para modelar los aspectos tanto estáticos
como dinámicos de un sistema
Ingeniería de Software
Transformaciones Formales – Notación Z
•
Aspectos estáticos
1. Los estados que puede alcanzar el sistema.
2. Los invariantes que se conservan en todas las transiciones
entre estados.
•
Aspectos dinámicos
1. Las posibles operaciones que se pueden realizar sobre él.
2. Las relaciones entre las entradas y salidas del sistema.
3. Los cambios de estado del sistema, cuándo y cómo se
producen.
Ingeniería de Software
Transformaciones Formales – Notación Z
•
Ejemplo: el siguiente esquema describe una estructura de
datos que es una secuencia de números naturales de longitud
menor que 10
•
La parte superior es la de declaraciones, en donde se expresa
el nombre de las variables y sus tipos
La parte inferior expresa, de forma declarativa, las relaciones
entre las variables que forman parte del esquema.
•
Ingeniería de Software
Transformaciones Formales
• Problemas
1. Se necesitan habilidades y el entrenamiento especializados
para aplicar la técnica
2. Es difícil especificar formalmente algunos aspectos del
sistema tales como la interfaz de usuario
• Aplicabilidad
1. Sistemas críticos donde la seguridad o la fiabilidad debe
garantizarse antes de que el sistema se ponga en
explotación
Ingeniería de Software
Metodologías Ágiles
•
En los 80 y principios de los 90, existía un acuerdo
generalizado en que la mejor forma de desarrollar buen
software era a través de:
1. Cuidadosa planificación del proyecto
2. Formalizar el aseguramiento de calidad
3. Métodos de análisis y diseño soportados por
herramientas CASE
4. Proceso de desarrollo controlado y riguroso
Ingeniería de Software
Metodologías Ágiles
•
Procedía de la experiencia de desarrollo de sistemas
software grandes, de larga vida
1. Muchas veces estos sistemas eran críticos
2. Grandes equipos de desarrollo, a veces
geográficamente dispersos, a veces trabajando
incluso para empresas distintas
3. En estos sistemas era necesario una sobrecarga en
planificación, diseño y documentación del sistema
Ingeniería de Software
Metodologías Ágiles
•
¿Qué ocurre cuando se aplican estos métodos heavyweight
a una aplicación de gestión de tamaño medio o pequeño?
1. La sobrecarga de trabajo (requisitos, diseño,
documentación) domina el proceso de desarrollo
2. Se dedica más tiempo a cómo el sistema será
desarrollado que a programación y prueba
3. Cada vez que cambia un requisito hay que hacer
mucho trabajo de rediseño y redocumentación
 Insatisfacción del cliente y del equipo de desarrollo
Ingeniería de Software
Metodologías Ágiles
•
A finales de los 90, aparecen “métodos ágiles” (lightweight)
como extreme programming (Beck2000)
1. Como reacción a los procesos muy burocratizados
2. Atención al software más que al diseño y la
documentación
3. Enfoque basado en el desarrollo y la entrega de
incrementos de funcionalidad muy limitada.
4. Iterativos e incrementales
5. Mejora constante del código, implicación del usuario en
el equipo de desarrollo y la programación “sin
complejos”.
Ingeniería de Software
Metodologías Ágiles
Ingeniería de Software
Metodologías Ágiles
Las Metodologías Ágiles (MAs) valoran:

Al individuo y las interacciones en el equipo de
desarrollo más que a las actividades y las herramientas

Desarrollar software que funciona más que conseguir
una buena documentación  Minimalismo respecto
del modelado y la documentación del sistema

La colaboración con el cliente más que la
negociación de un contrato

Responder a los cambios más que seguir estrictamente
una planificación
Ingeniería de Software
Metodologías Ágiles
•
¿Cuándo son útiles? (Sommerville2004)
1. Útiles para aplicaciones de gestión y productos software
de tamaño pequeño o medio con requisitos que cambian
rápidamente durante el proceso de desarrollo
2. No son útiles en desarrollo de software de gran escala
con equipos de desarrollo en lugares distintos y con
interacciones complejas con otros sistemas software y
hardware.
3. Tampoco son útiles en sistemas críticos en los que es
necesario un análisis detallado de los requisitos del
sistema para comprender las implicaciones de seguridad
(security safety)
Ingeniería de Software
Metodologías Ágiles
Metodología Ágil
Pocos Artefactos. El modelado es
prescindible, modelos desechables.
Pocos Roles, más genéricos y
flexibles
Metodología Tradicional
Más Artefactos. El modelado es
esencial, mantenimiento de
modelos
Más Roles, más específicos
No existe un contrato tradicional,
debe ser bastante flexible
Existe un contrato prefijado
Cliente es parte del equipo de
desarrollo (además in-situ)
El cliente interactúa con el equipo
de desarrollo mediante reuniones
Ingeniería de Software
Metodología Ágil
Orientada a proyectos pequeños.
Corta duración (o entregas
frecuentes), equipos pequeños (<
10 integrantes) y trabajando en el
mismo sitio
La arquitectura se va definiendo y
mejorando a lo largo del proyecto
Metodología Tradicional
Aplicables a proyectos de cualquier
tamaño, pero suelen ser
especialmente efectivas/usadas en
proyectos grandes y con equipos
posiblemente dispersos
Se promueve que la arquitectura se
defina tempranamente en el
proyecto
Énfasis en los aspectos humanos: el Énfasis en la definición del proceso:
individuo y el trabajo en equipo
roles, actividades y artefactos
Se esperan cambios durante el
Se espera que no ocurran cambios
proyecto
de gran impacto durante el
proyecto
Ingeniería de Software
Metodologías Ágiles
Crystal Methodologies, Alistarir Cockburn, www.crystalmethodologies.org
SCRUM, Ken Schwaber & Jeff Sutherland, www.controlchaos.com
DSDM (Dynamic Systems Development Method), www.dsdm.org
Lean Programming, Mary Poppendieck, www.poppendieck.com
FDD (Feature-Driven Development), Peter Coad & Jeff De Luca,
www.nebulon.com/fdd, www.coad.com/peter/#fdd
Extreme Programming, Kent Beck www.extremeprogramming.org,
www.xprogramming.com
Adaptative Software Development, Jim Highsmith www.adaptivesd.com