Este documento presenta los fundamentos de la ingeniería de software. Introduce conceptos clave como los factores de calidad del software, los diferentes ciclos de vida de desarrollo como el clásico, con prototipado y evolutivo, y los principios de diseño como la abstracción, ocultamiento de información y modularidad. Además, describe los objetivos e instructores del curso de fundamentos de ingeniería de software.
1. Fundamentos de Ingeniería de Software
Marcello Visconti y Hernán Astudillo
Departamento de Informática
Universidad Técnica Federico Santa María
{visconti,hernan} at inf.utfsm.cl
Fundamentos de Ingeniería de SW 1
Presentación
z Instructores
Ø Marcello Visconti
q Oficina: F-216
Ø Hernán Astudillo
q Oficina: F-118
z Horario & materiales
Ø Clases: Ma-Mi 7-8 y 9-10; sala M.203
Ø Ayudantías y evaluaciones: Ju 7-8, M-201 y M-203
Ø www.inf.utfsm.cl/~visconti/ili236/
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 2
1
2. Introducción a la Ingeniería de Software
Contenido
z Conceptos básicos de Ingeniería de Software
z El Software: Factores de Calidad
Ø Factores Externos
Ø Factores Internos
z El ciclo de vida de Desarrollo de Software
Ø Ciclo de vida clásico
Ø Ciclo de vida con prototipado
Ø Ciclo de vida evolutivo
z Principios del diseño
Ø Abstracción
Ø Ocultamiento de Información
Ø Modularidad
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 3
Introducción a la Ingeniería de Software
Objetivos
z Presentar al alumno los conceptos básicos relacionados con la
Ingeniería de Software.
z Estudiar diversos ciclos de vida.
z Presentar los principios de ingeniería que se emplean en la etapa de
diseño.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 4
2
3. Introducción a la Ingeniería de Software
Conceptos básicos de Ingeniería de Software [1]
z El término “Ingeniería de Software” surge a final de los años 60 dentro
de una conferencia dedicada a “la crisis del software”.
z La Ingeniería de Software se define cómo la disciplina tecnológica
relacionada con la producción sistemática y el mantenimiento de
productos de software que son desarrollados y modificados en el
tiempo previsto y dentro de los costos estimados.
Ø El objetivo de la Ingeniería de Software es producir productos de software.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 5
Introducción a la Ingeniería de Software
Conceptos básicos de Ingeniería de Software [2]
z Los productos de software caen en dos categorías:
Ø Productos genéricos: Desarrollados para un mercado (p.ej. MS Office).
Ø Productos a medida: Encargados por un cliente (p.ej. SIGA).
z Productos de software: sistemas de software junto a la documentación
que describe cómo instalarlo y usarlo.
Ø Documentación de requerimientos.
Ø Documentación de diseño.
Ø Código fuente.
Ø Planes de pruebas del sistema.
Ø Principios de operación.
Ø Instrucciones de instalación.
Ø Procedimientos de mantenimiento.
Ø Manuales de usuario.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 6
3
4. Introducción a la Ingeniería de Software
Conceptos básicos de Ingeniería de Software [3]
Métodos
Ingeniería
de Software
Herramientas Procedimientos
z Ingeniería del Software:
Ø“Conjunto de métodos, herramientas y procedimientos para producir
software de gran calidad” [R. Pressman]
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 7
Introducción a la Ingeniería de Software
Conceptos básicos de Ingeniería de Software [4]
z Los métodos describen cómo construir técnicamente el software.
Comprende las actividades de:
Ø Planificación y estimación de proyectos.
Ø Análisis de requisitos.
Ø Diseño.
Ø Codificación.
Ø Prueba.
Ø Mantenimiento.
z Las herramientas dan soporte automático o semiautomático a los
métodos.
z Los procedimientos relacionan formalmente los métodos y las
herramientas.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 8
4
5. Introducción a la Ingeniería de Software
Factores de calidad de Software [1]
z La calidad del software es una noción que puede ser descrita mediante
una serie de factores, que pueden ser:
Ø Externos: observables por los usuarios del producto.
Ø Internos: observables por profesionales de la computación .
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 9
Introducción a la Ingeniería de Software
Factores de calidad de Software [2]
z Factores de calidad externos:
Ø Corrección: Capacidad de los productos software de ejecutar exactamente
sus tareas tal cómo están definidas en su especificación de
requerimientos.
Ø Robustez: Capacidad de un sistema software para funcionar en situaciones
anormales.
Ø Modificabilidad: Facilidad de un producto para adaptarse al cambio de
especificaciones.
Ø Reusabilidad: Facilidad para ser reutilizado en todo o en parte para nuevas
aplicaciones.
Ø Compatibilidad: Facilidad de los productos software para combinarse unos
con otros.
Ø Eficiencia: Buen uso de los recursos Software y Hardware disponibles.
Ø (cont.)
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 10
5
6. Introducción a la Ingeniería de Software
Factores de calidad de Software [3]
z Factores de calidad externos (cont.):
Ø Portabilidad: Facilidad para adaptarse a otros entornos software o
hardware.
Ø Verificabilidad: Facilidad para preparar procedimientos de aceptación, en
particular datos de prueba, para detectar fallos durante las fases de
validación y operación.
Ø Integridad: Capacidad de un sistema para proteger sus documentos
(programas, datos) contra accesos y modificaciones no autorizados.
Ø Facilidad de uso: Capacidad de aprender a manejar un sistema software,
operar con el, preparar datos de entrada, interpretar resultados, etc.
z Factores de calidad internos:
Ø Modularidad: Independencia funcional de los componentes del programa.
Ø Legibilidad: Facilidad de lectura e interpretación del código del programa
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 11
Introducción a la Ingeniería de Software
Ciclo de vida de Software
z Ciclo de vida: Sucesión de etapas por las que atraviesa un producto
software a lo largo de su desarrollo y existencia.
z Existen distintas formas o paradigmas de ciclo de vida:
Ø Clásico.
Ø Clásico con prototipado.
Ø Evolutivo o en espiral.
Ø Prototipado puro.
Ø Combinación de estilos, etc.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 12
6
7. Introducción a la Ingeniería de Software
Ciclo de vida de Software: Clásico [1]
z Propuesto por W. Royce a principios de los años 70.
z Aplicación secuencial de una serie de pasos.
z Cada paso genera entradas y documentación para la siguiente.
Análisis Diseño Codificación Integración
Ciclo de vida clásico ideal
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 13
Introducción a la Ingeniería de Software
Ciclo de vida de Software: Clásico [2]
z El ciclo de vida clásico real tiene la siguiente forma:
Análisis
Diseño
Codificación
Pruebas
Unitarias
Pruebas de
Integración
Pruebas de
aceptación
A todas las fases Mantenimiento
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 14
7
8. Introducción a la Ingeniería de Software
Ciclo de vida de Software: Clásico [3]
z Críticas al ciclo de vida clásico:
Ø Proyectos raramente siguen el flujo secuencial.
Ø Dificultad para establecer los requerimientos al principio del proceso.
Ø Errores detectados tardíamente.
Ø Mantenimiento por “parcheado” (Corregir según se presenten los
problemas).
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 15
Introducción a la Ingeniería de Software
Ciclo de vida de Software: Prototipado [1]
z Prototipear consiste en construir una versión inicial de un producto, en
la cual se describe la interacción hombre-máquina sin implementar
completamente la funcionalidad del sistema (prototipo sin
funcionalidad).
z Utilidad:
Ø Ayuda a los analistas a establecer las necesidades del cliente.
Ø Ayuda a los desarrolladores a mejorar los productos.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 16
8
9. Introducción a la Ingeniería de Software
Ciclo de vida de Software: Prototipado [2]
Especificación
Construcción Análisis
del Prototipo
Validación
Diseño
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 17
Introducción a la Ingeniería de Software
Ciclo de vida de Software: Prototipado [3]
z Clases de prototipos:
Ø Vertical: desarrolla completamente algunas de las facetas del producto.
Ø Horizontal: desarrolla parcialmente todas las facetas del producto.
Ø Evolutivo: La versión final es el producto ya construido.
Ø Desechable: Se usa sola para la captación de requerimientos y
funcionalidad.
z Observaciones sobre el prototipado:
Ø Facilita la captación de los requerimientos del cliente.
Ø Reduce el riesgo de “parcheado” del producto final.
Ø La construcción del prototipo supone una inversión adicional.
Ø El cliente ve funcionando una versión de lo que será su programa sin
asumir que dicha versión no es robusta ni completa.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 18
9
10. Introducción a la Ingeniería de Software
Ciclo de vida de Software: Evolutivo [1]
z Proceso evolutivo (espiral)
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 19
Introducción a la Ingeniería de Software
Ciclo de vida de Software: Evolutivo [2]
z Sistemas OO tienden a evolucionar en el tiempo.
z Modelo evolutivo de proceso acoplado es el mejor paradigma para la
Ingeniería del SW OO.
Ø Fomenta el ensamblaje (reuso) de componentes.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 20
10
11. Introducción a la Ingeniería de Software
Principios del diseño
z Los principios fundamentales sobre los que se sustenta la Ingeniería
de Software son:
Ø Abstracción
Ø Ocultamiento de Información
Ø Modularidad
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 21
Introducción a la Ingeniería de Software
Principios del diseño: Abstracción [1]
z Mecanismos de abstracción:
Ø Abstracción de procedimientos o funcional.
Ø Abstracción funcional con excepciones.
Ø Abstracción de datos.
Nombre = Procedimiento (v1: T1,..,vn: Tn) Retorna( v1’:T1’,..,vm’:Tm’);
requiere
efectos
modifica
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 22
11
12. Introducción a la Ingeniería de Software
Principios del diseño: Abstracción [2]
z Abstracción de procedimientos o funcional.
Ø Relacionada con los procedimientos o funciones de un lenguaje de
programación.
Ø Proporciona una función de un conjunto de entradas a un conjunto de
salidas, pudiendo eventualmente modificar algunas de las entradas.
z Las abstracciones funcionales se pueden especificar con la siguiente
plantilla:
Nombre = Procedimiento (v1: T1,..,vn: Tn) Retorna( v1’:T1’,..,vm’:Tm’);
requiere
efectos
modifica
Ø “Requiere” contiene las precondiciones de la abstracción.
Ø “Modifica” lista los parámetros de entradas que son modificados.
Ø “Efectos” describe cómo transforma las entradas en salidas.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 23
Introducción a la Ingeniería de Software
Principios del diseño: Abstracción [3]
z Ejemplos de abstracciones funcionales.
Concatenar = Procedimiento( a, b: String ) Retorna( c: String );
efectos: devuelve en c la concatenación de los strings a y b.
Buscar = Procedimiento( a: array[integer , x:integer) Retorna( i: integer );
requiere: a ordenado en orden ascendente.
efectos: Si x ocurre en a, retorna la posición que ocupa. En otro caso i es
igual al tamaño del vector mas uno.
Quitar_Duplicados = Procedimiento( a: array[integer ) Retorna( );
modifica: a
efectos: quita los elementos duplicados de a.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 24
12
13. Introducción a la Ingeniería de Software
Principios del diseño: Abstracción [4]
z Abstracciones funcionales con excepciones.
Ø Contienen más de un estado de terminación.
Ø Proporcionan un conjunto de funciones, de la forma:
Procedimiento: Dominio --> Rango.
Dominio = Do U D1 U.. Dn
Rango = Ro U R1 U.. Rn
Procedimiento: Do --> Normal(Ro)
Procedimiento: D1 --> Excepcional(R1).
.....
Procedimiento: Dn --> Excepcional(Rn)
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 25
Introducción a la Ingeniería de Software
Principios del diseño: Abstracción [5]
z Ejemplo de abstracciones funcionales con excepciones:
Nombre = Procedimiento(v1: T1,.., vn: Tn)
Retorna( v1’:T1’,..,vm’:Tm’)
Señala( NombreExcepcion1 ( v1”:T1”,...,vn”:Tk”),
...
NombreExcepcionn(...));
Buscar = Procedimiento(a:array[int ] , x: int) Retorna( i:int)
Señala( No_Ocurre, No_Ordenado, Ocurre(num:int )
efectos: Si a no esta ordenado en orden ascendente señala no_ordenado.
Señala No_Ocurre si x no ocurre. Si x ocurre una vez devuelve su posición.
Si ocurre varias señala Ocurre, siendo Num el número de veces.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 26
13
14. Introducción a la Ingeniería de Software
Principios del diseño: Abstracción [6]
z Abstracciones de datos.
Ø Relacionadas con el concepto de tipo abstracto de datos.
Ø Una abstracción de datos está formada por un conjunto de objetos y un
conjunto de operaciones (abstracciones funcionales) que manipulan esos
objetos.
Ø Se puede emplear la siguiente plantilla:
Nombre = Tipo de datos es Operacion1, Operacion2, ..., Operacionn
Descripción
Operaciones
Fin Nombre
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 27
Introducción a la Ingeniería de Software
Principios del diseño: Abstracción [7]
z Ejemplo de abstracción de datos:
Conjunto_Enteros = Tipo de datos es Crear, Insertar, Miembro_de, Elegir, Tamaño
Descripción: El tipo representa conjuntos no acotados de enteros
Operaciones
Crear = Procedimiento() Retorna( S: Conjunto_Enteros )
Efectos: Devuelve un conjunto vacío de enteros.
Insertar = Procedimiento( S: Conjunto_Enteros, x: Int)
Modifica: S
Efectos : Añade x a S.
...
Fin Nombre
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 28
14
15. Introducción a la Ingeniería de Software
Principios del diseño: Ocultamiento de información
z Principio de ocultamiento de información :
Ø“Los módulos de un sistema deben diseñarse de modo que la información
contenida en ellos sea inaccesible a todos aquellos módulos que no
necesiten tal información” (David Parnas, 1970)
INTERFAZ
DATOS INTERNOS
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 29
Introducción a la Ingeniería de Software
Principios del diseño: Modularidad [1]
z Modularidad:
Ø“Un método de diseño software se dice que es modular si ayuda a los
diseñadores a construir sistemas software formados por elementos
autónomos y organizados en arquitecturas sencillas”.
z Guías de modularidad:
ØPocas interfaces.
ØInterfaces estrechas.
ØInterfaces explícitas.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 30
15
16. Introducción a la Ingeniería de Software
Principios del diseño: Modularidad [2]
z Pocas interfaces:
Ø“En un sistema formado por N módulos, el número de conexiones entre
ellos debe acercarse más al número mínimo que al máximo”
Menos adecuado Más adecuado
Modulo1 Modulo 3 Modulo1 Modulo 3
Comunicación
Modulo 4 Modulo 4
Modulo 2 Modulo 2
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 31
Introducción a la Ingeniería de Software
Principios del diseño: Modularidad [3]
z Interfaces estrechas: Si dos módulos se comunican deben de
intercambiar el mínimo de información posible.
datos entrada
Módulo 1 Módulo 2
datos salida
datos
Módulo 1 Módulo 2
globales
z Interfaces explícitas: La comunicación entre dos módulos debe poder
deducirse a partir del texto de ambos.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 32
16
17. Introducción a la Ingeniería de Software
Principios del diseño
z “Aunque los computadores han tenido mucho éxito, la experiencia
diaria de uso de computadores es asociada muchas veces con
dificultad, pena y otras barreras para la mayoría de la gente... La falta
de usabilidad del software y un diseño pobre de los programas son
una vergüenza secreta de la industria.”
Ø (Mitchell Kapor, Software Design Manifesto, 1990)
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 33
Introducción a la Ingeniería de Software
Resumen
z Conceptos básicos de Ingeniería de Software
z El Software: Factores de Calidad
Ø Factores Externos
Ø Factores Internos
z El ciclo de vida de Desarrollo de Software
Ø El ciclo de vida clásico
Ø El ciclo de vida clásico con prototipado
Ø El ciclo de vida evolutivo
z Ingeniería de Software
Ø Principios de Ingeniería en la etapa de diseño
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 34
17
18. Introducción a la Ingeniería de Software
Quiz
z Explique el aporte y la relación entre métodos, herramientas y
procesos de Ingeniería de Software.
z ¿Porqué queremos productos de calidad?
z ¿Qué es un ciclo de vida?
z ¿Porqué se dice que el ciclo de vida evolutivo es mejor?
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 35
Introducción a la Ingeniería de Software
Quiz
z Explique las causas del
fenómeno definido en el
dibujo.
UTFSM
EXUMBRA I
N SOLEM
Fundamentos de Ingeniería de SW 36
18