2. Definición
(1993) La aplicación mecanismos sistemáticos,
disciplinados, y cuantificables para el desarrollo,
operación y mantención de software; esto es la
aplicación de la ingeniería al software.
Establecimiento y uso de principios con caracteres de
ingeniería apropiados para obtener, eficientemente,
software confiable, que opere eficaz y eficientemente
en máquinas reales
La aplicación del arte del desarrollo software junto con
las ciencias matemáticas y computadores para diseñar,
construir, y mantener programas computacionales
eficientes y económicos que logran sus objetivos.
3. Estado del arte en Ing. De Software
¿Es una ciencia rigurosa con fuertes
fundamentos matemáticos?
¿Es una campo técnico bien desarrollado con
mucho de disciplina de ingeniería?
O está realmente en un estado primitivo...
A lo más una serie de “mejores prácticas”,
desarrolladores de software construyen software y si
éstos funcionan entonces nosotros estudiamos como
ellos lo hicieron.
Si éstos funcionan por un largo tiempo entonces
estudiamos sus procesos de software aún más
cuidadosamente.
4. Construcción de una casa para “fido”
Puede hacerlo una sola persona
Requiere:
Modelado mínimo
Proceso simple
Herramientas simples
5. Construcción de una casa
Construida eficientemente y en un tiempo
razonable por un equipo
Requiere:
Modelado
Proceso bien definido
Herramientas más sofisticadas
7. ¿Por qué la Orientación a Objetos?
Proximidad de los conceptos de modelado
respecto de las entidades del mundo real
Mejora la captura y validación de requisitos
Acerca el “espacio del problema” y el “espacio de la
solución”
Modelado integrado de propiedades estáticas y
dinámicas del ámbito del problema
Facilita construcción, mantenimiento y reutilización
Podríamos dar muchas razones pero hay
problemas..
8. “...Los conceptos básicos de la OO se conocen desde hace
dos décadas, pero su aceptación todavía no está tan
extendida como los beneficios que esta tecnología puede
sugerir”
Problemas en OO
9. … Problemas en OO
Un objeto contiene datos y operaciones que operan
sobre los datos, pero ...
Podemos distinguir dos tipos de objetos degenerados:
Un objeto sin datos (que sería lo mismo que una biblioteca de
funciones)
Un objeto sin “operaciones”, con sólo operaciones del tipo
crear, recuperar, actualizar y borrar (que se correspondería con
las estructuras de datos tradicionales)
Un sistema construido con objetos degenerados no es
un sistema verdaderamente orientado a objetos
10. Áreas cubiertas por la Ing. de
Solftware
La Ingeniería del Software estudia todos los aspectos
involucrados en el desarrollo de software, entre los
cuales se encuentran:
Etapas de un Proyecto de software
Paradigmas / enfoques para enfrentar el desarrollo del
proyecto de software (Cascada, Interativo
incremental)
Tiempo y Costos
Aspectos tecnológicos
Gestión de Proyectos
11. Etapas de un proyecto de Software
Etapas / Hitos escenciales rqueridos en un proyecto de
desarrollo de software:
Oportunidad de Negocio (Hito)
Levantamiento Incial de Requerimientos (Dominio del
problema)
• Entendimiento inicial de la problemática a resolver
• Reuniones con Cliente
• Especificación inicial de requerimientos
Confección de Propuesta
• Estimación de esfuerzos y planificación del proyecto. Uso
de técnicas (COCOMO) y estadisticas de proyectos
similares al que se dessarrollará, entrevistas a personas
con experiencia en proyectos similares al que se
desarrollará
• Definición del alcance del proyecto
• Costos
Análisis OO (Dominio del problema)
• Casos de Uso – análisis dinámico
• Modelos Conceptuales – análisis estático
• Diseño preliminar de interfaces (web, GUI, comandos,
12. Etapas de un proyecto de Software
(cont)
Arquitectura (Dominio de la Solución)
• Especificación de la tecnología a utilizar (J2EE, .NET)
• Especificación de Patrones de Diseño
Diseño (Dominio de la Solución)
• Diseño de Interfaces (web, gui, comandos, voz)
• Realización de diagramas de secuencia
• Realización de diagramas de clases
Construcción / Codificación
• Entendimiento real del diseño ( solución) a programar
• Programación eficiente y optima del código fuente
• Comentar en forma entendible y razonable el código
fuente
• Construcción de programa de “TEST”
• Prueba unitaria del desarrollador mediante un programa
de “TEST”
Pruebas Unitarias
• Realización de plan de pruebas
Pruebas Integradas
13. Etapas de un proyecto de Software
(cont)
Capacitación a Usuarios
• Confección de Manuales de Usuario
• Reuniones con usuario final
Puesta en Producción
• Confección de plan de puesta en producción
Marcha Blanca
Garantía
• Resolución de Incidencias
14. Planificar y Evaluar Proyectos ...
¿Podré cumplir con los plazos?
¿Estaré dentro de lo
presupuestado?
¿El “cliente” quedará satisfecho?
Las Metodologías pueden ser la ayuda que
necesitamos, si podemos usarlas correctamente !!
16. ¿Qué es una Metodología ...
Las metodologías imponen un
proceso disciplinado sobre el
desarrollo de software con el fin
de hacerlo más predecible y
eficiente.
17. Las ágiles más conocidas ...
XP (Programación Extrema)
La familia Cristal de Cockburn
Código Abierto
ASD (Desarrollo de Software Adaptable)
SCRUM
FFD (Desarrollo Manejado por Rasgos)
DSDM (Método de desarrollo de sistema dinámico)
RUP (Rational Unified Process)
Yo no conozco todas, pero vale la pena conocer al
menos una. Aquellas en rojo son la más populares.
19. Requisitos
Capturar, definir y
validar los casos de uso
Realizar los
casos de uso
Verificar que se
satisfacen los casos
de uso
Análisis & Diseño
Implementación
Pruebas
Casos de Uso
integran el
trabajo
Proceso dirigido por los Casos de Uso
20. Caso de Uso Realización de Análisis Realización de Diseño
Caso de Prueba
X
«trace» «trace»
«trace»
«trace»
Pruebas Funcionales
Pruebas
Unitarias
[The Unified Software Development Process. I. Jacobson, G. Booch and J. Rumbaugh. Addison-Wesley, 1999]
... Proceso dirigido por los Casos de Uso
21. El ciclo de vida iterativo se basa en la evolución
de prototipos ejecutables que se muestran a los
usuarios y clientes
En el ciclo de vida iterativo en cada iteración se
reproduce el ciclo de vida en cascada a menor
escala
Los objetivos de una iteración se establecen en
función de la evaluación de las iteraciones
precedentes
Proceso Iterativo e Incremental
22. ... Proceso Iterativo e Incremental
Cada iteración comprende:
Planificar la iteración (estudio de riesgos)
Análisis de los Casos de Uso y escenarios
Diseño de opciones arquitectónicas
Codificación y pruebas. La integración del nuevo
código con el hecho en iteraciones anteriores se
hace gradualmente durante la construcción
Evaluación de la entrega de ejecutable (evaluación
del prototipo en función de las pruebas y de los
criterios definidos)
Preparación de la entrega (documentación e
instalación del prototipo)
25. Fases del Ciclo de Vida
El ciclo de vida consiste en una serie de ciclos,
cada uno de los cuales produce una nueva versión
del producto
Cada ciclo está compuesto por fases y cada una de
estas fases está compuesta por un número de
iteraciones
Las fases son:
Inicio o Estudio de oportunidad
Elaboración
Construcción
Transición
26. ...Fases del Ciclo de Vida
Inicio o Estudio de oportunidad (inception)
Define el ámbito y objetivos del proyecto
Se define la funcionalidad y capacidades
del producto
Elaboración
Tanto la funcionalidad como el dominio del
problema se estudian en profundidad
Se define una arquitectura básica
Se planifica el proyecto considerando
recursos disponibles
27. ...Fases del Ciclo de Vida
Construcción
El producto se desarrolla a través de iteraciones
donde cada iteración involucra tareas de análisis,
diseño e implementación
Las fases de estudio y análisis sólo dieron una
arquitectura básica que es aquí refinada de manera
incremental conforme se construye (se permiten
cambios en la estructura)
Gran parte del trabajo es programación y pruebas
Se documenta tanto el sistema construido como el
manejo del mismo
Esta fase proporciona un producto construido junto
con la documentación
28. ...Fases del Ciclo de Vida
Transición
Se libera el producto y se entrega al usuario para un
uso real
Se incluyen tareas de marketing, empaquetado
atractivo, instalación, configuración, entrenamiento,
soporte, mantenimiento, etc.
Los manuales de usuario se completan y refinan con
la información anterior
Estas tareas se realizan también en iteraciones
29. Dos lecciones importantes
El tiempo es independiente del contexto.
Ahorrar una semana la comienzo de un
proyecto es tan bueno como ahorrarla al final.
Una semana es una semana.
Es mucho más fácil ahorrar tiempo al inicio del
proyecto (cuando los entregables son menos
claros).
Conclusión: Pronto hay que tener claro el
proyecto del ramo.