La ingeniería de software es el área de la ciencia de la computación, que ofrece métodos y técnicas para el desarrollo de software, estudia el conjunto de actividades relacionadas con el ciclo de desarrollo del software, en particular se enfoca tanto a en calidad de su proceso como de su producto.
2. Contenido
1. Definición de la Ingeniería de Software
2. Áreas de conocimiento
3. Líneas de investigación en IS
4. Disciplinas relacionadas
5. Evolución de la Ingeniería de Software
6. Problemática del desarrollo de software
7. Principios en la IS
8. Software de calidad
9. Actividades en proceso de DS
3. Ingeniería del SW: área de la Ciencia de la
Computación, que ofrece Métodos y
Técnicas para DS, estudia el conjunto de
actividades relacionadas con el ciclo de
desarrollo de SW, en particular se enfoca en
SW de Calidad.
¿ Que es la IS ?
4. ¿ Que es la IS ?
La aplicación de un enfoque sistemático,
disciplinado y cuantificable del desarrollo,
la operación y el mantenimiento del
software; esto es, la aplicación de la
ingeniería al software.
IEEE Std 610-1990
5. Contenido
1. Definición de la Ingeniería de Software
2. Áreas de conocimiento
3. Líneas de investigación en IS
4. Disciplinas relacionadas
5. Evolución de la Ingeniería de Software
6. Problemática del desarrollo de software
7. Principios en la IS
8. Software de calidad
9. Actividades en proceso de DS
6. • Requisitos
• Diseño
• Construcción
• Pruebas
• Mantenimiento
• Gestión de la Configuración
• Gestión de la Ingeniería Soft.
• Procesos
• Herramientas y Métodos
• Calidad
Áreas de conocimiento
7. Contenido
1. Definición de la Ingeniería de Software
2. Áreas de conocimiento
3. Líneas de investigación en IS
4. Disciplinas relacionadas
5. Evolución de la Ingeniería de Software
6. Problemática del desarrollo de software
7. Principios en la IS
8. Software de calidad
9. Actividades en proceso de DS
8. • Metodología orientado a objeto de
desarrollo de software
• Modelos, Métodos, Técnicas y
Herramientas de desarrollo de software.
• Sistemas de reescritura.
• Interación Humano - Computador
• Patrones de diseño
• Programación orientada a aspectos
Líneas de investigación
9. • Componentes y reutilización de software
• Construcción de compiladores
• Métricas de IS
• Desarrollo de aplicaciones basadas en Internet
• Arquitectura de software
• Calidad de software
• Inteligencia artificial aplicada
• Ingeniería orientada a modelos
Otras
Ingeniería orientada a aspectos
Ingeniería orientada a componentes
Líneas de investigación
10. Contenido
1. Definición de la Ingeniería de Software
2. Áreas de conocimiento
3. Líneas de investigación en IS
4. Disciplinas relacionadas
5. Evolución de la Ingeniería de Software
6. Problemática del desarrollo de software
7. Principios en la IS
8. Software de calidad
9. Actividades en proceso de DS
11. • Ingeniería de Computadores
• Ciencia de la Computación
• Gestión
• Matemáticas
• Gestión de Proyectos
• Gestión de la Calidad
• Ergonomía del Software
• Ingeniería de Sistemas
• Sistemas de Información
Disciplinas relacionadas
12. Contenido
1. Definición de la Ingeniería de Software
2. Áreas de conocimiento
3. Líneas de investigación en IS
4. Disciplinas relacionadas
5. Evolución de la Ingeniería de Software
6. Problemática del desarrollo de software
7. Principios en la IS
8. Software de calidad
9. Actividades en proceso de DS
14. Desarrollo de software = desarrollo de
programas
Actividad individual
Desarrollador = usuario
Aplicaciones con distribución reducida
Resolver problemas científicos y de ingeniería
“...codificar y depurar...”
16. Actividad de grupo
Desarrollo de software para mercadeo
Resolver problemas complejos en diferentes
dominios, además de científicos y de
ingeniería
Programación orientada a función.
17. Hardware: mainframes, minicomputadores,
microcomputadores, surgen los PC
Lenguajes: COBOL, PL/I, Pascal, Prolog
Métodos: programación
estructurada,refinamiento paso a paso,
semánticas formales
Computación distribuida, Interfaces basadas
en Lenguajes de Comando.
18. Desarrollo de la tecnología
Actividad de grupo
Desarrollo de software para mercadeo
Diversidad del dominio de aplicaciones
Programación orientada a módulos
Modelo de cascada .
19. 19
Hardware:
computadores
personales, primeras
estaciones de trabajo,
redes locales
Lenguajes: C, Ada
Paradigma de
programación:
programación
estructurada, modular,
tipos de datos
abstractos
Herramientas
interactivas, interfaces
gráficas (GUI)
Hardware: Aumento
considerable de la venta y
uso de computadores
personales, estaciones de
trabajo, redes locales y
globales, Internet,
arquitecturas avanzadas
Lenguajes: C++, Standard ML
Paradigma de
programación: irrumpe la
programación OO
Computación cliente-
servidor
20. El usuario se incorpora al proceso de
desarrollo de software
Relevancia de las interfaces de usuario
Aumento exponencial del número y tipo de
usuarios
Demanda creciente de aplicaciones
Resolver problemas en todos los dominios
Inicio de las aplicaciones basadas en la
tecnología Internet .
21. Hardware: masificación del uso de los
computadores personales, arquitecturas
paralelas, multimedia
Redes de computadoras (LAN, WAN..)
Lenguajes: Orientados a objetos, paralelos,
visuales, de scripting (Java, VisualC++, HTML,..)
Paradigma de programación: OO, patrones y
framework
Crecimiento de Internet y el Web .
22. Los productos se insertan en la globalización
El ciberespacio introduce nuevos tipos de
aplicaciones: comercio electrónico, educación
a distancia,...
Ambientes colaborativos
El Web como infraestructura de las
aplicaciones corporativas (Intranets) .
23. Hardware: dispositivos moviles, computación
ubicua
Redes de computadoras (inalambricas..)
Paradigma de programación: modelos
basados en componentes
Crecimiento de Internet y la Web .
24. Programación orientada a aspectos
Ingenieria orientada a modelos
Arquitecturas orientadas a modelos
25. un poco de historia
◦ primeras décadas:
desarrollar el hardware
reducir costes de procesamiento y almacenamiento
◦ década de los ochenta:
desarrollo de la microelectrónica
mayor potencia de cálculo y reducción de costes
◦ objetivo actual: mejorar la calidad de las soluciones software.
Orientación
por lotes
Distribución
limitada
Software a
medida
Multiusuario
Tiempo real
Bases de datos
Software como
producto
Mayores gastos
de mantenimiento
Sistemas distribuidos
Inteligencia Artificial
Hardware de bajo
coste
Impacto en el
consumo
Redes area local
y global
Gran demanda
Potentes sistemas
de sobremesa
Tecnología de objetos
Sistemas expertos
Redes neuronales
Cliente/servidor
Tecnologías de
Internet.
1959 - 1965 1965 - 1975 1975 - 1989 1989 -
AUMENTAN los problemas del desarrollo de software:
Subexplotación del potencial del hardware
Incapacidad de atender a la demanda
Incapacidad de mantener el software existente
Resumen
26. Contenido
1. Definición de la Ingeniería de Software
2. Áreas de conocimiento
3. Líneas de investigación en IS
4. Disciplinas relacionadas
5. Evolución de la Ingeniería de Software
6. Problemática del desarrollo de software
7. Principios en la IS
8. Software de calidad
9. Actividades en proceso de DS
27. Crecimiento de la demanda de nuevos
productos
Incumplimiento en los tiempos de
entrega de los productos de software
Incumplimiento de los presupuestos
asignados a los proyectos
Falta de métodos para la producción de
software complejo
Desde la década 70
28. Dificultad y altos costos para el
mantenimiento del software existente
Carencia de buenas especificaciones
de requisitos
Los requisitos no son estables
El mercado cambia - constantemente.
La tecnología cambia
Las metas de los usuarios cambian
Desde la década 70
29. Costos
Tiempo de desarrollo
Redes de
ComputadoresTecnologías
Emergentes
Masificación y variedad de los
microcomputadores y accesorios Interfaces de usuario.
Software libre
30. Contenido
1. Definición de la Ingeniería de Software
2. Áreas de conocimiento
3. Líneas de investigación en IS
4. Disciplinas relacionadas
5. Evolución de la Ingeniería de Software
6. Problemática del desarrollo de software
7. Principios en la IS
8. Software de calidad
9. Actividades en proceso de DS
31. Los principios forman la base de métodos,
técnicas, metodologías y herramientas
Seis principios que pueden ser usados en
todas las fases del desarrollo de software
Modularidad es el principio clave que
soporta el diseño del software
33. 1. Rigor y formalidad
2. Abstracción
3. Modularidad
4. Anticipación al cambio
5. Generalidad
6. Incrementalidad.
Principios aplica al proceso y al producto
GHEZZI, C., JAZAYERI,
M., MANDRIOLI, D.
"Fundamentals of
Software Engineering".
Prentice-Hall
International Editions.
2da ed. Nov. 2002
34. Significa ...
seguir procesos sistemáticos y verificables
en el proceso de desarrollo de software
IMPLICACIONES:
• La formalidad es la base de
automatización de procesos
• Principio esencial para obtener
productos reusables
35. Producto
Analisis matemático de correctitud de
programas
Test sistemático y riguroso
Proceso
Rigurosa documentación ayuda a la gestión
del proyecto y asegura los tiempos de
respuesta
36. Significa...
Aplicar un proceso mental o intelectual que
permite identificar lo relevante e ignorar los
detalles
IMPLICACIONES:
• percepción del qué/ cómo (la separación de
intereses )
• percepción del todo/ partes (modularidad)
37. Cuando los requisitos son analizados se
produce un modelo de la aplicacion
propuesta
El modelo puede ser una descripción
formal o informal
Es posible razonar acerca del sistema
razonando acerca del modelo
38. En procesos
Cuando realizamos estimación de costos
solo tomamos en cuenta algunos factores
En producto
Los tipos de datos abstractos
39. Un sistema complejo puede ser
dividido en piezas más simples
llamadas módulos
Un sistema que está conformado por
módulos se dice que es modular
40. permite:
descomponer en partes un sistema complejo
(descomposición)
componer el sistema a partir de sus partes
(composición)
Comprender el sistema y las partes
(comprensión)
42. Significa:
La capacidad de prever cómo y dónde
pueden ocurrir los cambios
• La aplicación de este principio
es altamente apreciado en la
etapa de mantenimiento
• Es un principio relevante para el
desarrollo de componentes
reusables
43. Habilidad para soportar la evolución del
software requiere anticipar posibles
cambios
Es la base para el software evolutivo
44. Significa:
buscar la solución más amplia
(que englobe los casos específicos)
• Busca la solución más amplia
para problemas específicos
• La solución general puede
ser menos eficiente o más
costosa
• Principio importante para
desarrollar productos
reusables.
45. Significa:
Construcción del producto por
aproximaciones sucesivas y/o por
componentes (partes)
• Desarrollo de prototipos para los
componentes críticos
• Útil para desarrollo de
aplicaciones no precisas, donde
no están bien definidos los
requisitos.
46. Ejemplos
◦ Liberar subconjuntos de un sistema
muy tempranamente para encontar el
feedback del usuario, y luego agregar
incrementalmente nuevas
características
◦ Liberar un primer prototipo e
incrementalmente ir transformando el
prototipo en el producto.
47. Contenido
1. Definición de la Ingeniería de Software
2. Áreas de conocimiento
3. Líneas de investigación en IS
4. Disciplinas relacionadas
5. Evolución de la Ingeniería de Software
6. Problemática del desarrollo de software
7. Principios en la IS
8. Software de calidad
9. Actividades en proceso de DS
48. Mediante un proceso ....
Soportado por un método riguroso,
sistemático
basado en principios reconocidos
con actividades que se estructuren de
acuerdo a un modelo
facilitado por el uso de herramientas.
49.
50. El software es construido para cumplir
ciertas funcionalidades y satisfacer ciertas
cualidades
El proceso de construcción de software
debe también cumplir ciertas cualidades.
Cualidades de software son a menudo
referidas como requisitos no funcionales
(en realidad es un subconjunto de este tipo
de requisitos).
51. Internas vs. externas
◦ Externas visibles al usuario
◦ Internas concernientes a los desarrolladores
Producto vs. procesos
◦ Nuestro objetivo es desarrollar productos de
software
◦ El proceso se refiere a como lo hacemos
Cualidades internas afectan las cualidades
externas
La calidad del proceso afecta la calidad del
producto.
52. ¿Cuáles son las características que
deseamos al elaborar un software?
53. Centro ISYS. Esc. Computación. UCV/2005 53
Características de Calidad de
software (Normas ISO 9126) :
54. Características
(ISO 9126)
Subcaracterísticas
Funcionalidad Adecuacidad (Suitability),
exactitud/precisión ( Accurateness),
Interoperabilidad, (Conformidad Compliance )
Seguridad
Confiabilidad Madurez, Tolerancia a Falla, Recuperabilidad
Usabilidad comprensibilidad (Understandability ),
aprendizaje (Learnability ),
Operabilidad
Eficiencia Rendimiento en tiempo,
rendimiento de Recurso.
Mantenibilidad Analizabilidad, Modificabilidad, Estabilidad, Testability
(Prueba)
Portabilidad Adaptabilidad, Instalabilidad, Conformidad a estándares,
Reemplazabilidad/Substituibilidad
55. Correcto
Confiable
Robusto
Se comporta acorde a su especificación
Se comporta de acuerdo a lo esperado por
el usuario
Se comporta razonablemente aún en
cirscunstancias no contempladas
(tolerante a fallas).
56. • construcciones correctas
si ellas satisfacen las
especificaciones
• en un movimiento
sísmico unas colapsan
(no son robustas)
• otras construcciones sufren
pequeños daños tolerables o
previsibles
(son confiables).
57. Software es correcto si satisface las
especificaciones de requisitos funcionales
◦ (asumiendo que las especificaciones ...)
Si las especificaciones son formales la
correctitud puede ser probada
58. ◦ Informalmente, el usuario confía en el producto
◦ Si las especificaciones son correctas, todo
software correcto es confiable. Pero no a la
inversa (en la practica, pueden haber
especificaciones incorrectas....)
◦ ISO 9127: Confiabilidad: se refiere a la capacidad
de un SW de mantenerse operativo bajo las
condiciones establecidas por un período de
tiempo.
59. Productos (o componentes) son usados
(probablemente, con pequeños cambios)
para construir otros productos
Reuso de partes estandar miden la madurez
de una ingeniería
Tambien aplica a procesos.
60. Reusable
Componentes reusables:
– Librerías científicas
– Librerías para el desarrollo de
interfaces (MFC de Windows)
– Patrones
– Especificaciones
– Clases.
61. factor clave para
determinar la
madurez de
cualquier industria
“....la IS debe aún
evolucionar para
alcanzar su
madurez como una
disciplina de
ingeniería..”
“....en el futuro
las aplicaciones
serán construídas
ensamblando
componentes..”
62. El software puede correr en diferentes
plataformas de hardware o ambientes de
software
se refiere a la habilidad del sw de ser
transferido de un ambiente a otro.
Es una cualidad relevante cuando se
introducen nuevas plataformas
Es tambien relevante, cuando el software se
baja de ambientes de redes heterogéneos.
63. Interoperable
– Puede coexistir y cooperar con otros sistemas
de software
– Las herramientas de ambientes integrados son
interoperables
64. – Se mide mediante técnicas
clásicas:
complejidad de algoritmos
evaluación de la eficiencia
(monitoreo, simulación,..).
Software Eficiente:
Usa los recursos computacionales
económicamente (memoria, tiempo de .
. procesamiento, comunicación..)
65. Usabilidad es una cualidad del software que
tiene múltiples componentes y
tradicionalmente es asociado con:
Aprendizaje
Eficiencia
Memorización
Baja rata de errores
Satisfacción
¿ Qué es Usabilidad ?
•ISO 9127
Usabilidad: se
refiere al esfuerzo
requerido por un
conjunto de
usuarios para el uso
del sw
66. Usabilidad
Usable
– La usabilidad de un producto de software
está determinada por la satisfacción del
usuario al utilizar el producto
– Fundamentalmente relacionada con las
características de la interfaz de usuario
– Diversas cualidades inciden en la usabilidad
(eficiencia, confiablidad,...).
67. Mantenibilidad: facilidad de mantenimiento
Mantenimiento: cambios despues de la
liberación del producto
Los costos de mantenimiento exceden el
69% del costo total del software
68. Tipos de Mantenimiento
Correctivo
(remoción de errores)
Adaptativo
(cambios para adecuarlos a
modificaciones de su ambiente)
Perfectivo
(cambios para mejorar la calidad -satisfacer
nuevos requisitos, aumentar la eficiencia,
modificar funcionalidades, etc)
69. Facilidad de comprender el software
Es una cualidad muy importante, para
realizar modificaciones de programa.
Esta cualidad incide en la mantenibilidad
70. Al equipo de desarrollo
le interesa que el
software sea
comprensible, portable,
mantenible, verificable ...
Al usuario le
interesa que el
software sea fácil
de usar, confiable,
robusto...
71. Contenido
1. Definición de la Ingeniería de Software
2. Áreas de conocimiento
3. Líneas de investigación en IS
4. Disciplinas relacionadas
5. Evolución de la Ingeniería de Software
6. Problemática del desarrollo de software
7. Principios en la IS
8. Software de calidad
9. Actividades en proceso de DS
72. Actividades en el proceso de desarrollo
de software
Para desarrollar un producto de software se
realizan diversas actividades que se
estructuran y relacionan de acuerdo a un
modelo y se desarrollan siguiendo un
método.
Los modelos encadenan las diversas
actividades
73. se relacionan conformando :
se desarrollan aplicando :
El método se fundamenta en:
El método puede ser soportado por:
principio(s) - método(s) - herramienta(s) - modelo(s)
un modelo
un método
principios
herramientas
Actividades en el proceso de desarrollo
de software
74. Acerca de las actividades
Utiliza y produce “artefactos”
Se relacionan e interactúan de diferentes
maneras conformando distintos procesos de
desarrollo de software (modelos)
De acuerdo al modelo una actividad puede
jugar un rol preponderante o incluso
pudiera no existir.
75. Acerca de las actividades
La ingeniería de requisitos es el proceso que
lleva a la especificación del software
Los procesos de diseño e implementación
transforman la especificación en un
programa ejecutable
La validación involucra chequear que el
sistema cumple su especificación y las
expectativas del usuario
La evolución concierne con la modificación
del sistema después que está en uso
swebok
77. Relaciones entre las actividades
Actividades:
Encadenamiento Rol
Granularidad
Modelo de
desarrollo de
software
Análisis de
requisitos
Prototipaje
Especificación
Implementación
Método 1 Método n
Un ejemplo
78. Actividades – Modelos -Procesos
El modelo de desarrollo de software indica
como se relacionan las actividades
Los procesos de desarrollo de software
indican como se realizan las actividades
para producir y evolucionar un sistema del
software
79. Actividades – Modelos - Procesos
¿Cómo encadenar las actividades del proceso de
desarrollo de software?
Modelos (ciclo de vida)
Ej.: Modelo de la cascada, UP....
¿Cómo realizar las actividades del proceso de desarrollo
de software?
Métodos
Ej.: Orientado a objeto, …
¿Cuáles principios se aplican en el proceso de desarrollo
de software?
Ej.: Incrementable, iterativo,...
80. CONCEPTOS GENERALES
CICLO DE VIDA: Conjunto de etapas que se han de llevar a cabo
para crear, explotar y mantener un Sistema Informático.
METODOS: Son las normativas que marcan las directrices que se
han de seguir para llevar a cabo una tarea. Responde a la
pregunta QUÉ.
TECNICAS: Es un modo de representación para la solución de un
problema concreto. Responde a la pregunta CÓMO.
METODOLOGIA: Es un conjunto coherente de métodos y técnicas
que cubren más de una etapa del ciclo de vida.
HERRAMIENTAS: Proporcionan un soporte automático o semi-
automático para el proceso y para los métodos.