Title: Ingeniera de Software
1IngenierÃa de Software
- Resumen del libroIngenierÃa de Software de Roger
Pressman, 6ta ed. - Prof. Gorka Llona
- UBV PFGIGS
- Abril 2006
2CapÃtulo 1Software e IngenierÃa de Software
3SoftwareQué es el Software?
- Es el conjunto de
- Las instrucciones (programas) que proporcionan
las caracterÃsticas y funciones - Las estructuras de datos que le permiten
manipular información - Los documentos que describen la operación y uso
4CaracterÃsticas del Software
- El software se desarrolla, no se manufactura
- Los costos del software se concentran en la
ingenierÃa - El software no se desgasta, pero sà se deteriora
- La mayorÃa del software se construye a la medida
- La reutilización de componentes recién ha empezado
fallas
cambio
curva real
curva idealizada
tiempo
5Tipos de Software
- Por función
- Software de sistemas
- Software de aplicación
- Software cientÃfico y de ingenierÃa
- Software empotrado (embeeded)
- Software de lÃnea de productos
- Software de inteligencia artificial
- Juegos
- Por origen
- Software nuevo
- Software heredado
- Software de integración
- Por arquitectura
- MonolÃtico
- Cliente/servidor
- Aplicaciones basadas en web
- Etc...
6Mitos del Software
- Mitos del administrador
- Nuestros estándares y procedimientos para la
construcción de software nos proporcionarán todo
el conocimiento necesario - Si el cronograma va atrasado es posible contratar
más programadores para terminar a tiempo - Si decido subcontratar el proyecto de software a
un tercero, puedo relajarme y dejar que lo
construya - Mitos del cliente
- Un enunciado general de objetivos es suficiente
para comenzar a escribir programas, los detalles
se pueden afinar después - Los requerimientos del proyecto cambian de manera
continua, pero el cambio puede ajustarse con
facilidad porque el software es flexible
- Mitos del desarrollador
- Una vez que el programa ha sido escrito y puesto
a funcionar, el trabajo está terminado - Mientras el programa no se esté ejecutando, no
existe forma de evaluar su calidad - El único producto del trabajo que puede
entregarse para tener un proyecto exitoso es el
programa en funcionamiento - La ingenierÃa de software acarreará una
documentación voluminosa e innecesaria que hará
más lento el proyecto
7CapÃtulo 2El Proceso del Software Visión General
8Qué es un Proceso?
- Un proceso define quién está haciendo qué, cuando
y cómo lograr cierta meta
9El Proceso del Softwarey la IngenÃerÃa del
Software
- El Proceso del Software es un marco de trabajo
para las tareas que se requieren en la
construcción de software de alta calidad - El Proceso del Software define el enfoque que se
adopta mientras el software está en desarrollo - El Proceso del Software es parte de la IngenierÃa
del Software. La IngenierÃa del Software también
abarca métodos técnicos y herramientas
automatizadas - La IngenierÃa del Software es el uso de
principios sólidos de la IngenierÃa para obtener
económicamente un software confiable y que
funcione de manera eficiente en máquinas reales
10Estratos de laIngenierÃa del Software
Herramientas
Métodos
Proceso
Un enfoque de calidad
11Marco de trabajopara el Proceso de Software
- Marco de trabajo
- Actividad 1
- Acción 1.1
- Tareas del trabajo
- Productos del trabajo
- Puntos de aseguramiento de la calidad
- Fundamentos del proyectos
- Acción 1.2
- ...
- Actividad 2
- ...
- ...
- Actividades paraguas
12Marco de Trabajo Genérico del Proceso
- Cinco actividades principales
- Comunicación
- Planeación
- Modelado
- Construcción
- Despliegue
- Actividades paraguas
- Seguimiento y control del proyecto
- Gestión del riesgo
- Aseguramiento de la calidad
- Revisiones técnicas formales
- Gestión de la configuración del software
- Gestión de la reutilización
- Preparación y producción del producto de trabajo
13Patrones del Proceso
- El proceso del software es una colección de
patrones que definen un conjunto de actividades,
acciones y tareas que requiere el desarrollo de
un software - Plantilla de un patrón Ambler
- Nombre
- Tipo (de tarea / de escenario / de fase)
- Contexto inicial
- Problema
- Solución
- Contexto resultante
- Patrones relacionados
- Usos conocidos / ejemplos
14Evaluación y Mejoramiento del Proceso
Proceso delsoftware
Identificamodificaciones a
Identificacapacidadesy riesgo de
Evaluación del proceso delsoftware
Conduce a
Conduce a
Determinaciónde la capacidad
Mejoramiento delprocesode software
Motiva a
15Evaluación y Mejoramiento del Proceso
Hacer
Planear
- Marco de trabajo
- Actividad 1
- Acción 1.1
- Tareas del trabajo
- Productos del trabajo
- Puntos de aseguramiento de la calidad
- Fundamentos del proyectos
- Acción 1.2
- ...
- Actividad 2
- ...
- ...
- Actividades paraguas
Actuar
Revisar
ISO 90012000
16Procesos de software personalesy en equipo (PSP
/ PSE)
- El mejor proceso de software es el que está más
cerca de la gente que realizará el trabajo - PSP/PSE vs procesos prescriptivos
- PSP
- Planeación
- Diseño de alto nivel
- Revisión del diseño de alto nivel
- Desarrollo
- Análisis de resultados
- PSE
- Lanzamiento
- Diseño de alto nivel
- Implementación
- Integración y pruebas
- Análisis de resultados
17CapÃtulo 3Modelos Prescriptivos del Proceso
18Modelos Prescriptivos
- Llenan el marco de trabajo con conjuntos de
tareas explÃcitas para las acciones de la
IngenierÃa del Software - Son poco flexibles
- El equipo de trabajo debe adaptarse al proceso
19Modelo en Cascada
Comunicación
Planeación
Modelado
Construcción
- Inicio del proyecto
- Recopilación de requisitos
Despliegue
- Estimación
- Cronograma
- Seguimiento
- Entrega
- Soporte
- Retroalimentación
Se considera el modelo clásico del desarrollo
de software
20Modelo incremental
Avance
Incremento n
Incremento 2
Incremento 1
Tiempo
21Modelo DRADesarrollo Rápido de Aplicaciones
Comunicación
Planeación
Despliegue
60-90 dÃas
22Modelo Evolutivo deConstrucción de Prototipos
Plan rápido
Comunicación
Diseño rápido
Entrega yretroalimentación
Construcciónde Prototipo
Desarrollo
23Modelo Evolutivoen Espiral
Planeación estimación cronograma análisis
de riesgos
Comunicación
Modelado análisis diseño
inicio
Despliegue entrega retroalimentación
Construcción código prueba
24Dificultades de los Modelos Evolutivos
- La planeación es un problema debido al número
incierto de ciclos de iteración requeridos para
completar el software - Los procesos evolutivos no establecen la
velocidad máxima de la evolución calibrar el
ritmo es un problema - El fin del proyecto puede estar determinado por
alta calidad, pero se debe priorizar la
flexibilidad, extensibilidad y entrega a tiempo
25Desarrollo Basado en Componentes
- Se hace una investigación de los componentes
disponibles - Se consideran los aspectos de integración de
componentes - Se diseña una arquitectura de software para
acoplar los componentes - Los componentes se integran en la arquitectura
- Se realizan pruebas detalladas
- 70 de reducción del tiempo del ciclo de
desarrollo - 84 de reducción del costo del proyecto
26Modelo de DesarrolloOrientado a Aspectos
- Aspectos
- No funcionales propiedades de alto nivel de los
sistemas - Funcionales aspectos de reglas del negocio
- Aspectos no funcionales o sistémicos
- Interfaces de usuario
- Trabajo en colaboración
- Distribución (flujo y transporte de eventos)
- Persistencia (almacenamiento, recuperación e
indexación de datos)
- Seguridad (autenticación, codificación y derechos
de acceso) - Procesamiento de transacciones (atomicidad,
control de concurrencia) - Integridad (de datos, de transacciones)
- Manejo de memoria
- Etc.
27Proceso Unificado (PU)
- Es un proceso de software guiado por los casos de
uso, centrado en la arquitectura, iterativo e
incremental - Reune los mejores rasgos de los modelos
prescriptivos de software, pero incorpora
prácticas de los modelos ágiles - Rumbaugh, Booch y Jacobson establecieron el UML
(Unified Modeling Language) a principios de los
90, y se convirtió en un estándar de la
industria en 1997 para desarrollo orientado a
objetos - UML no incorpora la definición del proceso de
software - En los años siguientes los autores desarrollaron
el PU, basado en UML
28PU Fases
Elaboración
Planeación
Inicio
Comunicación
Modelado
Construcción
Construcción
Despliegue
Incrementodel software
Producción
Transición
29PU Fases (2)
- Inicio
- Documento de la visión
- Modelo inicial de caso de uso
- Glosario inicial del proyecto
- Caso inicial de negocio
- Evaluación inicial del riesgo
- Plan de proyecto, fases e iteraciones
- Modelo del negocio (opcional)
- Uno o más prototipos
- Elaboración
- Modelo de casos de uso
- Requisitos suplementarios
- Modelo de análisis
- Arquitectura del software
- Prototipo arquitectónico ejecutable
- Modelo de diseño preliminar
- Lista revisada de riesgos
- Plan de proyecto - iteraciones - flujos de
trabajo - fundamentos - productos técnicos
- manual preliminar de usuario
- Construcción
- Modelo de diseño
- Componentes del software
- Incremento integrado del software
- Plan y procedimiento de pruebas
- Casos de prueba
- Documentación - del soporte - manuales de
usuario - manuales de instalación -
descripción del incremento actual
- Transición
- Incremento integrado de software
- Reportes de las pruebas beta
- Retroalimentación general del usuario
30CapÃtulo 4Desarrollo Agil
31Manifiesto para elDesarrollo Agil de Software
- Hemos descubierto mejores formas de desarrollar
software al construirlo por nuestra cuenta y
ayudar a otros a hacerlo. Por medio de este
trabajo hemos llegado a valorar - A los individuos y las interacciones sobre los
procesos y herramientas - Al software en funcionamiento sobre la
documentación extensa - A la colaboración del cliente sobre la
negociación del contrato - A la respuesta al cambio sobre el seguimiento de
un plan - Beck y otros, 2001
32Principios del Desarrollo Agil
- Nuestra mayor prioridad es satisfacer al cliente
mediante la entrega temprana y continua de
software valioso - Bienvenidos los requisitos cambiantes, incluso en
fases tardÃas del desarrollo. La estructura de
los procesos ágiles cambia para la ventaja
competitiva del cliente - Entregar con frecuencia software en
funcionamiento, desde un par de semanas hasta un
par de meses, con una preferencia sobre la escala
de tiempo más corta
- La gente de negocios y los desarrolladores deben
trabajar juntos a diario a lo largo del proyecto - Construir proyectos alrededor de individuos
motivados. Darles el ambiente y el soporte que
necesitan, y confiar en ellos para obtener el
trabajo realizado - El método más eficiente y efectivo de transmitir
información hecia y dentro de un equipo de
desarrollo es la conversación cara a cara -
33Principios del Desarrollo Agil (2)
- El software en funcionamiento es la medida
primaria de progreso - Los procesos ágiles promueven el desarrollo
sustentable. Los patrocinadores de
desarrolladores y usuarios deben ser capaces de
mantener un paso constante de manera indefinida - La atención continua a la excelencia técnica y al
buen diseño mejora la agilidad
- La simplicidad el arte de maximizar la cantidad
de trabajo no realizado- es esencial - Las mejores arquitecturas, los mejores requisitos
y los mejores diseños emergen de equipos
autoorganizados - A intervalos regulares el equipo refleja la forma
en que se puede volver más efectivo entonces su
comportamiento se ajusta y adecúa en concordancia
34Qué es un Proceso Agil?
- Se refiere a tres suposiciones clave
- Resulta difÃcil predecir cuáles requisitos del
software persistirán y cuáles cambiarán. De igual
forma, es difÃcil presagiar cómo cambiarán las
prioridades del cliente mientras se ejecuta un
proceso - Para muchos tipos de software, el diseño y la
construcción están intercalados. Esto es, ambas
actividades se deben realizar de manera conjunta,
de modo que los modelos de diseño sean probados
conforme se crean. Resulta difÃcil predecir
cuánto diseño se necesita antes de que la
construcción se utilice para probar el diseño - El análisis, el diseño y la construcción no son
predecibles (desde el punto de vista de la
planeación), lo que serÃa deseable
35Factores Humanosen los Procesos Agiles
- Competencia
- Enfoque común
- Colaboración
- Habilidad para la toma de decisiones
- Capacidad de resolución de problemas confusos
- Confianza y respeto mutuo
- Organización propia
36Programación Extrema (PE)
- Historias del usuario
- Valores
- Criterios de las pruebas de iteración
- Plan de iteración
- Diseño simple
- Cartas CRC
- Soluciones pico
- Prototipos
Diseño
Planeación
Refabricación
Codificación
Prueba
Lanzamiento
- Programación en pareja
- Integración continua
- Incremento de software
- Velocidad calculada del proyecto
- Pruebas de unidad
- Pruebas de aceptación
37Desarrollo Conducidopor CaracterÃsticas (DCC)
Desarrollar unmodelogeneral
Elaborar unalista decaracterÃsticas
Plan porcaracterÃstica
Diseño porcaracterÃstica
ConstrucciónporcaracterÃstica
Plan de desarrollo Propietarios
declase Propietarios delconjunto
decaracterÃsticas
Paquete dediseño(secuencia)
Funcióncliente-valorcompletada
Lista de caracte-rÃsticas agrupadasen conjuntos
yáreas de desarrollo
- CaracterÃsticas
- Agregar el producto a un carrito de supermercado
- Desplegar las especificaciones técnicas de un
producto - Almacenar la información de navegación para un
cliente
38CapÃtulo 7IngenierÃa de Requisitos
39Etapas
- Inicio del proceso
- Obtención de requisitos
- Elaboración de requisitos
- Negociación de requisitos
- Validación de requisitos
- Gestión de requisitos
40Inicio
- Identificación de los stakeholders
- Reconocimiento de los múltiples puntos de vista
- Trabajo en el área de la colaboración
- Formulación de las primeras preguntas
- Generales
- Quiénes están detrás de la solicitud de este
trabajo? - Quién usará la solución?
- Cuál será el beneficio económico de una solución
exitosa? - Existe otra fuente para la solución requerida?
- Comprensión del problema y las percepciones
- Cómo podrÃa caracterizarse un buen resultado
generado por una solución exitosa? - Cuáles problemas deberÃa atacar esta solución?
- En qué ambiente de negocios se usará esta
solución? - Comunicación
- Cuáles son las personas adecuada para contestar
las preguntas? - Son las preguntas relevantes, o demasiadas?
- Qué otras preguntas deberÃan hacerse?
41Obtención de requisitos
- Recopilación conjunta de requisitos
- Reuniones, usando técnicas de trabajo en grupo
- La meta es identificar el problema, proponer
elementos de solución, negociar diferentes
enfoques e identificar requisitos preliminares - Tipos de requisitos
- Requisitos normales
- Si estos requisitos están presentes, el cliente
estará satisfecho - Requisitos esperados
- ImplÃcitos, fundamentales, el cliente no los
percibe explÃcitamente - Requisitos estimulantes
- CaracterÃsticas que van más allá de las
expectativas del cliente - Escenarios de usuario
- Generales o particulares (casos de uso)
42Obtención de requisitos (2)
- Problemas
- De ámbito
- El lÃmite del sistema está mal definido o los
clientes especifican detalles innecesarios que
pueden confundir los objetivos generales del
sistema - De comprensión
- Los clientes no están seguros de qué es lo que se
necesita, no comprenden el dominio del problema,
tienen dificultades para comunicarse con el
equipo de desarrollo, omiten información que
consideran obvia, especifican requisitos
contradictorios, ambiguos o inestables - De volatilidad
- Los problemas cambian conforme transcurre el
tiempo
43Obtención de requisitos (3)
- Productos
- Enunciado de necesidad y factibilidad
- Enunciado que limita el ámbito del sistema o
producto - Lista de stakeholders que participaron en la
obtención de requisitos - Descripción del ambiente técnico del sistema
- Lista de requisitos (organizados por función) y
restricciones que aplican - Conjunto de escenarios de uso
- Prototipos desarrollados para definir mejor los
requisitos
44Elaboración de requisitosCasos de uso
- Identificar los actores
- Preguntas que deben responderse (para cada caso)
- Quiénes son los actores primarios?
- Cuáles son las metas del actor?
- Qué condiciones previas deben existir para
activar el caso? - Qué tareas o funciones principales realiza el
actor? - Qué excepciones y variaciones al procedimiento
existen? - Qué información del sistema podrá el autor
adquirir, producir o cambiar? - Qué información desea el actor que le provea el
sistema? - El actor quiere ser informado acerca de cambios
inesperados?
45Elaboración de requisitosCasos de uso (2)
- Estructura
- Nombre del caso de uso
- Actores (enfatizando el primario)
- Meta dentro del contexto
- Condiciones previas
- Activación del caso
- Escenario (procedimiento funcional)
- Excepciones
- Asuntos pendientes
- Diagrama de casos de uso (UML)
- Combina gráficamente los diferentes casos de uso
46Elaboración de requisitosModelado de análisis
- Elementos basados en escenarios
- Diagramas de actividades (UML)
- Elementos basados en clases
- Diagramas de clases (UML)
- Elementos basados en comportamiento
- Diagramas de estado (UML)
- Elementos basados en flujo
- Modelado de flujo
47Negociación de requisitos
- Identificación de los interesados clave en el
sistema o subsistema - Determinación de las condiciones ganadoras de
los interesados - Negociación de las condiciones ganadoras de los
interesados para integrarlas en un conjunto de
condiciones ganar-ganar para todos los
involucrados (incluyendo el equipo de software)
- El arte de la negociación
- No es una competencia
- Diseñar una estrategia
- Escuchar de manera activa
- Enfocarse en los intereses de la otra parte
- No dejar que se vuelva personal
- Ser creativo
- Estar listo para pactar
48Validación de requisitos
- Cada requisito es consistente con el objetivo
general del sistema? - Todos los requisitos han sido especificados con
el grado apropiado de abstracción? - El requisito es necesario o no genera valor?
- Cada requisito está limitado y no es ambiguo?
- Cada requisito tiene una fuente bien
determinada? - Algunos requisitos entran en conflicto con
otros? - Cada requisito es alcanzable en el ambiente
técnico que sustentará la solución? - Cada requisito se puede probar al haber sido
implementado? - El modelo de requisitos refleja de manera
apropiada la información, la función y el
comportamiento del sistema que será construido? - El modelo de requisitos se ha sometido a
partición funcional?
49Gestión de requisitos
- Tablas de rastreabilidad
- De las caracterÃsticas del sistema
- De la fuente
- De dependencias entre requisitos
- De los subsistemas
- De las interfaces (entradas y salidas)