Pruebas de Integración - Departamento de Lenguajes y Sistemas

Anuncio
19/05/2013
Departamento de Lenguajes y
Sistemas Informáticos
BLOQUE II: Integración de Sistemas Software
Pruebas de Integración
Tema 10
Arquitectura e Integración de Sistemas Software
Curso 2012/2013
Índice


Introducción a las pruebas del software
Pruebas de integración




Motivación
Tipos de errores
Estrategias de pruebas
Bibliografía
1
19/05/2013
Índice


Introducción a las pruebas del software
Pruebas de integración




Motivación
Tipos de errores
Estrategias de pruebas
Bibliografía
Introducción
2
19/05/2013
Introducción
¿Para qué probamos el software?
Para comprobar si
funciona
correctamente.
Para detectar
errores.
Principiante
Experto
Introducción
Definición
“Testing is the process of executing a program with the
intent of finding errors.”
G.J. Myers
3
19/05/2013
Introducción
 Las pruebas software no permiten garantizar que un programa no
contiene errores.
 Demasiadas combinaciones. No se puede probar todo.
 Ejemplo: Suma de 2 enteros (32 bits)  ¡264 casos de prueba!
“Program testing can be a very effective way to show
the presence of bugs, but it is hopelessly inadequate for
showing their absence.”
Dijkstra, 1972
Introducción
¿Cuál es el objetivo de las pruebas?
A. Detectar el mayor número posible de errores con la mínima
cantidad de tiempo y esfuerzo.
B. Aumentar nuestra confianza en que el programa cumple los
requisitos.
C. Demostrar que un programa funciona correctamente.
4
19/05/2013
Introducción
Proceso general de prueba
Oracle
Entrada
Sistema
Salida
¿Correcto?
Éxito/Fallo
Oracle: Mecanismo que nos permite saber si el resultado de
una prueba es correcto o no. Nos permite saber el resultado
esperado.
Introducción
Importancia de las pruebas
5
19/05/2013
Introducción
Importancia de las pruebas
Complejidad del software:
 Producto intangible.
 Desarrollo a medida.
JDK7
1.142.342 líneas de código.
92.671 métodos.
11.158 clases.
456 paquetes.
Introducción
Importancia de las pruebas
Las pruebas pueden consumir hasta el 50% del coste total
del sistema. En sistemas críticos este porcentaje es mayor.
6
19/05/2013
Introducción
Importancia de las pruebas
Cuanto más tarde
detectemos un error, más
caro resultará repararlo.
Introducción
Origen y coste de las pruebas
Software Engineering Institute; Carnegie Mellon University; Handbook CMU/SEI-96-HB-002
7
19/05/2013
Introducción
Tipos de pruebas
Funcionales: Buscar errores
relacionados con la
funcionalidad del sistema.
No funcionales:
 Rendimiento.
 Seguridad.
 Usabilidad.
 Fiabilidad, etc.
Introducción
Tipos de pruebas
8
19/05/2013
Introducción
Tipos de pruebas
 Pruebas unitarias. Diseñadas para probar una parte pequeña y específica
de funcionalidad. Ej: un método.
 Pruebas de integración. Diseñadas para probar la interacción entre los
distintos componentes de un sistema.
 Pruebas de sistema. Diseñadas para probar el sistema en su totalidad
como si de una caja negra se tratase.
 Pruebas de aceptación. Diseñadas para verificar que el sistema cumple
con los requisitos exigidos por el usuario.
Índice


Introducción a las pruebas del software
Pruebas de integración




Motivación
Tipos de errores
Estrategias de pruebas
Bibliografía
9
19/05/2013
Pruebas de integración
Motivación
Componente A
Unidad de medida: Km
Componente B
Unidad de medida: Millas
Mars Climate Orbiter, 1999
Pruebas de integración
Motivación
125 millones de dólares
10
19/05/2013
Pruebas de integración
Motivación
B
A
C
ERROR: ¿Dónde está el problema? ¿A, B o C?
Debemos asumir que los subsistemas han sido probados
previamente y funcionan correctamente.
Índice


Introducción a las pruebas del software
Pruebas de integración




Motivación
Tipos de errores
Estrategias de pruebas
Bibliografía
11
19/05/2013
Pruebas de integración
Tipos de errores
Errores de programación entre componentes
Errores de interoperabilidad
Pruebas de integración
Tipos de errores
Errores de programación entre componentes
Errores de interoperabilidad
12
19/05/2013
Pruebas de integración
Tipos de errores
Componente A
Componente B
int facturacion() {
...
return total;
}
int impuestos() {
...
return total;
}
facturacion()=0
impuestos()=0
int calculo() {
...
return 365/(facturacion() + impuestos());
}
Pruebas de integración
Tipos de errores
 Ejemplo
libxml + zlib
“If you are using libxml version 2.7.6 or earlier, you will need to update libxml
to version 2.7.7 or later before installing zlib version 1.2.4 or later. libxml 2.7.6
and earlier made unnecessary assumptions about the undocumented
internal structure of zlib that were changed in zlib 1.2.4 and result in libxml
crashing. This was fixed in libxml 2.7.7” [http://www.zlib.net/]
13
19/05/2013
Pruebas de integración
Tipos de errores
• Bloqueo mutuo o abrazo mortal (deadlock)
Pruebas de integración
Tipos de errores
• Bloqueo activo (livelock)
14
19/05/2013
Pruebas de integración
Tipos de errores
Errores de programación entre componentes
Errores de interoperabilidad
Pruebas de integración
Tipos de errores
 Errores de interoperabilidad a nivel de sistema
15
19/05/2013
Pruebas de integración
Tipos de errores
• Errores de interoperabilidad a nivel de lenguaje de
programación
A veces los lenguajes de programación son
compatibles con excepciones que pueden
crear problemas. Ej. VB con VC y la
representación coma flotante.
Pruebas de integración
Tipos de errores
 Errores de interoperabilidad a nivel de especificación
Petition
System A
ACK
System B
Petition
System A
Petition
System B
16
19/05/2013
Índice


Introducción a las pruebas del software
Pruebas de integración




Motivación
Tipos de errores
Estrategias de pruebas
Bibliografía
Pruebas de integración
Estrategias
 Pruebas no incrementales (“Big bang approach”). Se integran todos
los componentes y entonces se prueba el sistema como un todo. No es
una técnica recomendada pues dificulta el aislamiento de errores.
17
19/05/2013
Pruebas de integración
Estrategias
 Pruebas incrementales. El programa es construido y probado en
pequeños incrementos. Facilita el aislamiento de errores y la
pruebas sistemáticas.
 Estrategias para pruebas incrementales:
 Integración descendente (“Top-down”)
 En profundidad (“Depth-first”)
 En anchura (“Breadth-first”)
 Integración ascendente (“Bottom-up”)
Pruebas de integración
Estrategias
 Integración descendente. La integración se realiza partiendo del
programa principal y moviéndonos hacia abajo por la jerarquía de control.
M1 (main)
M2
M5
M3
M6
M4
M7
M8
18
19/05/2013
Pruebas de integración
Estrategias
 Integración descendente - En profundidad. La integración se realiza por
ramas. Cada rama suele implementar una funcionalidad específica.
M1 (main)
M2
M5
M3
M6
M7
M8
M4
Ramas:
•
M1, M2, M5, M8
•
M1, M2, M6
•
M1, M3, M7
•
M1, M4
Pruebas de integración
Estrategias
 ¿Qué ocurre si algún módulo/componente aún no ha sido implementado
pero es necesario para probar la integración de otros componentes?
M1 (main)
M2
M5
M3
M6
M4
M7
M8
19
19/05/2013
Pruebas de integración
Estrategias
 Stubs: Componentes de “mentira” que imitan el comportamiento de
componentes aún no implementados (implementan su interfaz).
M1 (main)
M2
M5
M3
M6
M4
M7
En OO suele utilizarse el término Mock object para
referirse a este concepto (con sutiles diferencias).
M8
Pruebas de integración
Estrategias
 Integración descendente - En anchura. La integración se realiza por
niveles moviéndose en horizontal por la estructura de control.
M1 (main)
M2
M5
M3
M6
M4
M7
Niveles:
M8
•
M1, M2, M3, M4
•
M1, M2, M3, M4, M5, M6, M7
•
M1, M2, M3, M4, M5, M6, M7, M8
20
19/05/2013
Pruebas de integración
Estrategias
 Integración ascendente. La integración se realiza partiendo de módulos
atómicos situados en los nodos finales de la jerarquía de control. No suele
necesitar el uso de stubs.
M1 (main)
M2
M5
M3
M6
M4
M7
M8
Pruebas de integración
Estrategias
Integración descendente:
 Permite verificar los puntos de control o decisión al principio del proceso de
prueba.
 La integración en profundidad permite probar funcionalidades completas lo
cual aumenta la confianza.
 Puede requerir el uso de muchos stubs.
Integración ascendente:
 Se elimina la necesidad de usar stubs.
 Es necesario el uso de controladores de prueba (“drivers”) a fin de coordinar
la entrada y salida de casos de prueba.
21
19/05/2013
Pruebas de integración
Estrategias
Integración de sandwich (“Sandwich testing”)
Integración ascendente
+
Integración descendente
Índice


Introducción a las pruebas del software
Pruebas de integración




Motivación
Tipos de errores
Estrategias de pruebas
Bibliografía
22
19/05/2013
Bibliografía
Pressman R. Software Engineering: A Practitioner’s
Approach. McGraw-Hill. 2009 (7th edition)
G. Myers. The art of software testing. Wiley, 2004.
Gao, Jerry; Tsai, H.S.; Wu, Ye. Testing and Quality
Assurance for Component-Based Software. Artech
House Publishers
Disclaimer and Terms of Use
All material displayed on this presentation is for teaching and personal use only.
Many of the images that have been used in the presentation are Royalty Free
images taken from http://www.everystockphoto.com/. Other images have been
sourced directly from the Public domain, from where in most cases it is unclear
whether copyright has been explicitly claimed. Our intention is not to infringe
any artist’s copyright, whether written or visual. We do not claim ownership of
any image that has been freely obtained from the public domain. In the event
that we have freely obtained an image or quotation that has been placed in the
public domain and in doing so have inadvertently used a copyrighted image
without the copyright holder’s express permission we ask that the copyright
holder writes to us directly, upon which we will contact the copyright holder to
request full written permission to use the quote or images.
23
Descargar