La Ingeniería de software (IS) y Calidad del
Software
Material compilado por:
MSc. Joanna Chirinos
Doct. Computación en el Área de Ingeniería
del Software
1
Contenido
1. Evolución de la Ingeniería de Software
2. Problemática del desarrollo de software
3. Principios en la IS
4. Software de calidad
2
Ingeniería de Software
Estructuración del Conocimiento
(IEEE/ACM Stone-man Version 0.9 February 2001)…
SWEBOK 2004
Software Software Software Software Software Software Software Software Software SoftwareQuality
Requirements Design Construction Test Maintenance Configuration Engineering Engineering Engineering
Management Management Process Tools&Methods
SWEBOK V3 Review elimina una y añade nuevas KA
Modelos y
Ingeniería de Práctica
Fundamentos Fundamentos métodos en
Software Profesional
Computacionales Matemáticos Ingeniería de
Económicas en IS
Software
[Link]
3
Ingeniería de Software
Estructuración del Conocimiento
SWEBOK V4 Review
La versión más reciente de la Guía SWEBOK incluye nuevas áreas
temáticas, descripciones de temas actualizadas y la eliminación de
temas que ya no son relevantes. Agile y DevOps se han
incorporado especialmente en muchas áreas de conocimiento (KA)
porque estos modelos han sido ampliamente aceptados desde la
última publicación de la Guía SWEBOK. Tres nuevas áreas de
conocimiento (es decir, arquitectura de software, operaciones de
ingeniería de software y seguridad de software) guían el
conocimiento fundamental en ingeniería de software.
Centro ISYS. Esc. Computación. 4
UCV/2007
Ingeniería de Software
Estructuración del Conocimiento
SWEBOK V4 Review
Centro ISYS. Esc. Computación. 5
UCV/2007
Evolución – Década de los 50
CONTEXTO EVOLUCION
Hardware: mainframes, Desarrollo de software
cintas magnéticas. = desarrollo de
Costos altos programas
Lenguajes: Actividad individual
ensambladores,
Desarrollador = usuario
Fortran.
Aplicaciones con
Primeros
distribución reducida
compiladores
Resolver problemas
(segunda mitad)
científicos y de ingeniería
Interfaces: Bach.
6
Evolución – Década de los 60
CONTEXTO EVOLUCION
Hardware: Actividad de grupo
mainframes Desarrollador ‡ usuario
comerciales,
Desarrollo de
almacenamiento en
software para
discos magnéticos,
mercadeo
minicomputadores.
Costos altos Resolver problemas
complejos en diferentes
Sistemas
dominios, además de
operativos
científicos y de
multiprogramación
ingeniería
Lenguajes: Cobol, PL/I
Programación orientada
Interfaces: Bach.
a función.
7
Evolución – Década de los 70
CONTEXTO EVOLUCION
Hardware: Desarrollo de
mainframes, la tecnología
minicomputadores,
microcomputadores, Actividad de grupo
surgen los PC
Desarrollador ‡ usuario
Lenguajes: COBOL,
PL/I, Pascal, Prolog Desarrollo de
software para
Métodos: programación mercadeo
estructurada,refinamient
o paso a paso, Diversidad del
semánticas formales dominio de
aplicaciones
Computación
distribuida, Interfaces Programación orientada
basadas en Lenguajes a módulos
de Comando.
Modelo de la cascada .
8
¿Qué ocurre en la década 80?
Crisis del
software!!
9
Evolución: década de los 80
primera mitad – segunda mitad
Hardware: computadores Hardware: Aumento
personales, primeras
estaciones de trabajo,
considerable de la venta y
redes locales uso de computadores
Lenguajes: C, Ada personales, estaciones de
Paradigma de trabajo, redes locales y
programación: globales, Internet,
programación arquitecturas avanzadas
estructurada, modular, Lenguajes: C++, Standard ML
tipos de datos abstractos
Paradigma de
Herramientas
interactivas, interfaces programación: irrumpe la
gráficas (GUI) programación OO
Computación cliente-
servidor 10
Evolución de la IS (década 80)
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 .
11
Evolución – Década de los 90
CONTEXTO Crecimiento de Internet y
el Web
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
EVOLUCION
Los productos se
insertan en la
globalización
El ciberespacio
introduce nuevos tipos
de aplicaciones:
comercio electrónico,
educación a distancia,...
Ambientes colaborativos
(Groupware).
El Web como
infraestructura de las
aplicaciones
corporativas (Intranets)
12
Contexto : nuevo milenio
Hardware: dispositivos móviles,
computación ubicua
Redes de computadoras (inalámbricas..)
Paradigma de programación: modelos
basados en componentes
Crecimiento de Internet y la Web
Programación orientada a aspectos
Ingeniería orientada a modelos
Arquitecturas orientadas a modelos
13
Se resaltan características o sucesos relevantes
Evolución en la IS: cambios de
paradigmas
Metodología de desarrollo de software:
Innovación Madurez Convención
Crecimiento
interés
1950 1973 1980 1988
Tiempo
14
Fucional Moddular
Declarativo Objeto Framework Servicio
15
Contenido
1. Evolución de la Ingeniería de Software
2. Problemática del desarrollo de software
3. Principios en la IS
4. Software de calidad
16
Problemática del desarrollo de
software Desde la década 70
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
Dificultad y altos costos para el mantenimiento del
software existente
Carencia de buenas especificaciones de requerimientos
.....
17
Los requerimientos no son estables
El mercado cambia - constantemente.
La tecnología cambia
Las metas de los usuarios cambian
18
Factores que influyen en los cambios
en IS
Redes de
Tecnologías Computadores
Emergentes
Masificación y variedad de los
microcomputadores y accesorios Interfaces de usuario.
Costos Tiempo de desarrollo 19
La IS en la computación actual
• Psicología
• Otras d• iAsdcmipinliisntarasción
• Ingeniería • Ciencias de la
Comunicación • ......
de software
• Interacción
Humano
Computador • Bases de Datos
• Computación
en la nube • •siLsetnemguaasjecsol
daeborativos
• Computación • Redes y Programación
• aplicaciones Web
Comunicaciones • Sistemas operativos
Móvil • Sistemas distribuídos
• Bases de Datos
• ..........
• Inteligencia Artificial
Nombramos otros dominios,
Computación fuera
centrada del campo de la
en Red
Informática 20
Contenido
1. Definición de la Ingeniería de Software
2. Evolución de la Ingeniería de Software
3. Problemática del desarrollo de software
4. Principios en la IS
5. Software de calidad
21
Principios en la IS
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
22
Principios en la IS
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
23
Principios: Rigor y Formalidad
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 24
Rigor y formalidad
IS es una actividad creativa de diseño,
pero....
Debe ser practicada sistemáticamente
Rigor es un complemento a la
creatividad que incrementa la
confianza en nuestros desarrollos
Formalidad es rigor en alto grado
25
Ejemplos:
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
26
Principios: Abstracción
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)
27
Abstracción produce modelos
Cuando los requerimientos 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
28
Principios. Modularidad
Significa...
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
29
Principios: Modularidad
modularidad adecuada
Alta Cohesión del módulo
(el módulo es una unidad significativa)
Bajo Acoplamiento entre módulos
(mínimas interacciones entre ellos)
30
Una representación visual
(a)
(b)
Alto acoplamiento Bajo acoplamiento
31
Principios: Modularidad
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)
32
Descomposición Composición
- análisis - - síntesis -
Problema
Solución. 1 solución. solución. solución. 4
2 3
1 b. 3
Subprob. 2
Subprob. Subpro
S
Subprob. 4 ol
u
ci
ó
n
33
Principios:
Anticipación al cambio
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
34
Anticipación al cambio
Habilidad para soportar la evolución
del software requiere anticipar
posibles cambios
Es la base para el software evolutivo
35
Principios: Generalidad
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.
36
Generalidad
Mientras resolvemos un problema,
tratamos de descubrir si es una
instancia de un problema más general,
cuya solución puede ser reusada en
otros casos.
La generalidad debe balancearse
cuidadosamente entre performance y
costos.
Algunas veces es mas facil resolver un
problema general que un caso especial
37
Principios: Incrementalidad
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
requerimientos. 38
Incrementalidad
Ejemplos
Liberar subconjuntos de un sistema
muy tempranamente para encontar el
feedback del usuario, y luego agregar
incrementalmente nuevas
características
Tratar primero las funcionalidades y
luego el performance.
Liberar un primer prototipo e
incrementalmente ir transformando el
prototipo en el producto.
39
Contenido
1. Definición de la Ingeniería de Software
2. Evolución de la Ingeniería de Software
3. Problemática del desarrollo de software
4. Principios en la IS
5. Software de calidad
40
Calidad
Conjunto de características y propiedades de
un producto o servicio que tiene influencia
sobre la capacidad de satisfacer necesidades
definidas o implicadas (ISO 8402).
Descrita por un conjunto de factores:
Externos: detectables por usuarios de un
producto. (perspectiva desde el consumidor)
Internos: detectables por arquitectos de SW,
ingenieros de SW, personal técnico (perspectiva
desde el productor)
41
¿ Cómo obtener software de Calidad ?
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.
42
Factores de Calidad
Correctitud:
el producto hace exactamente lo que definen los
requerimientos y la especificación.
Robustez:
el producto funciona aún bajo condiciones
anormales, no ocurren eventos catastróficos y
finaliza limpiamente.
Extensibilidad:
facilidad con la cual el producto puede ser
adaptado a requerimientos cambiantes.
Reutilización:
explotar elementos comunes y evitar reinventar
soluciones existentes.
43
Factores de Calidad
Compatibilidad:
facilidad con la que un producto puede ser
combinado con otros.
Eficiencia:
buen uso de recursos
Portabilidad:
facilidad con la cual un producto puede ser
transferido a otros ambientes.
Verificabilidad:
facilidad con la que pueden prepararse
procedimientos de aceptación.
44
Factores de Calidad
Integridad:
protección contra accesos y modificaciones no
autorizadas.
Facilidad de uso:
de aprendizaje, operación, preparación de datos,
interpretación de resultados, recuperación de
errores.
45
Proceso – Producto - Efecto
Proceso Producto Efecto
Influye
Proceso de Calidad Calidad Calidad de
Calidad Interna Externa Uso
Depende
Proveedor Usuario
46
Características Internas
Propiedades internas
Aplicables a productos de trabajo no
ejecutables: código fuente, documentos de
análisis, especificaciones de diseño.
Tamaño
Complejidad de flujo de control
Acoplamiento intermodular
Cohesión modular
47
Características Externas
Propiedades externas
Propiedades observables: código ejecutable,
ejecución de pruebas, percepción normal de
operación, historia operativa.
• Comprensibilidad
• Complejidad
• Modificabilidad
• Verificabilidad
• Mantenibilidad
48
Norma ISO 9126
Provee un framework para la evaluación de
calidad de software.
ISO/IEC 9126 no presenta requerimientos de
software.
Define un modelo de calidad aplicable a todo
tipo de software.
Define seis características de producto y
sugiere sub características de calidad
49
Norma ISO 9126
50
Norma ISO 9126
Funcionalidad
Adecuacidad: presencia de un conjunto
de funciones para tareas específicas.
Exactitud: provisión de resultados o
efectos correctos o acordados.
Interoperabilidad: habilidad de
interactuar con sistemas
específicos
Adherencia a estándares, convenciones
o regulaciones.
Seguridad: habilidad de prevenir accesos
no autorizados
51
Norma ISO 9126
Confiabilidad
Madurez: relacionada con la frecuencia
de fallas de software.
Tolerancia a fallas: habilidad de
mantener un nivel determinado de
rendimiento en caso de fallas de
software o infracción de interfaz
especificada.
Recuperabilidad: capacidad de
reestablecer un nivel de rendimiento y
recuperar data afectada en caso de falla
y el tiempo / esfuerzo necesario.
52
Norma ISO 9126
Usabilidad
Comprensibilidad: esfuerzo necesario
para reconocer el concepto lógico y
su aplicabilidad.
Operatividad: esfuerzo de usuario en
operar y controlar la operación
Facilidad de Aprendizaje: esfuerzo de
usuario en aprender su aplicación
53
Norma ISO 9126
Eficiencia
Comportamiento en tiempo: relativo a
tiempos de respuesta y de proceso
así como tasas de rendimiento de su
función.
Comportamiento en recursos: cantidad
de recursos utilizados y duración de uso
en la realización de su función.
54
Norma ISO 9126
Mantenibilidad
Analizable: esfuerzo requerido para el
diagnóstico de deficiencias o causas de
fallas o identificación de partes a modificar.
Modificable: esfuerzo requerido en
modificar, corregir o cambiar de ambiente.
Facilidad de Prueba: esfuerzo requerido en
validar modificaciones al software
Estabilidad: riesgo de efectos no
esperados de modificaciones.
55
Norma ISO 9126
Portabilidad
Adaptabilidad: oportunidad de adaptación a
diferentes ambientes específicos aplicando
solo acciones o medios provistos para este
propósito en el software considerado.
Instalación: esfuerzo necesario para instalar
el software en un ambiente específico.
Reemplazo: oportunidad y esfuerzo de usarlo
en lugar de otro software en el ambiente de
éste.
Conformación o adherencia a estándares o
convenciones relacionadas con portabilidad.
56
Actividad
•Revisar Swebok: Práctica Profesional en IS
•Revisar el Código de ética y Practica
Profesional de la IS redactado por redactado
por la IEEE- CS/ACM
[Link]
57