SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
Tema	
  11.	
  Pruebas	
  
Programación	
  en	
  Lenguaje	
  Java	
  
Michael	
  González	
  Harbour	
  
Mario	
  Aldea	
  Rivas	
  
Departamento	
  de	
  Matemá.cas,	
  
Estadís.ca	
  y	
  Computación	
  
Este	
  tema	
  se	
  publica	
  bajo	
  Licencia:	
  
Crea.ve	
  Commons	
  BY-­‐NC-­‐SA	
  4.0	
  
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 1
UNIVERSIDAD
DE CANTABRIA
Programación en Java
1. Introducción a los lenguajes de programación
2. Datos y expresiones
3. Estructuras algorítmicas
4. Datos Compuestos
5. Entrada/salida
6. Clases, referencias y objetos
7. Modularidad y abstracción
8. Herencia y polimorfismo
9. Tratamiento de errores
10. Entrada/salida con ficheros
11. Pruebas
• Pruebas del software. Caja negra: particiones de equivalencia. Herramienta JUnit.
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 2
UNIVERSIDAD
DE CANTABRIA
11.1 Pruebas del software
Probar un módulo software (método, clase, paquete, etc.) consiste en:
• Ejecutar el módulo bajo diferentes situaciones
• Para comprobar que presenta el comportamiento esperado
- Se comporta como dice su especificación (sus comentarios de
documentación)
Fundamental disponer de un entorno automatizado de pruebas
• Ejecución automática de los casos de prueba
• Generación de informes
Lo tratado en este tema no pretende ser más que una breve
introducción al capítulo de “Pruebas de Sistemas Software” de la
asignatura “Ingeniería del Software II” (3er curso)
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 3
UNIVERSIDAD
DE CANTABRIA
Pruebas del software (cont.)
Las pruebas se realizan en cuatro etapas:
1. Pruebas unitarias (prueba independiente de cada clase)
- se prueban sus métodos para distintos casos de prueba
- se intenta cubrir todo el comportamiento de la clase
2. Prueba de integración o de subsistemas
- se prueban agrupaciones de clases relacionadas
3. Prueba de sistema
- se prueba el sistema como un todo
4. Prueba de validación
- prueba del sistema en el entorno real de trabajo
- con intervención del usuario final
Visto en este tema
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 4
UNIVERSIDAD
DE CANTABRIA
Pruebas del software (cont.)
Análisis de
requisitos
Diseño
Operación y
Mantenimiento
Codificación y
Depuración
Pruebas de
sistema y validación
Pruebas
unitarias y de integración
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 5
UNIVERSIDAD
DE CANTABRIA
Pruebas unitarias (de clases)
Caso de prueba: ejecución de un método bajo unas condiciones
particulares (valores de los parámetros + estado de la clase)
• El resultado permite determinar si, para este caso particular, la clase
se ha comportado acorde a su especificación
En general el número de posibles casos de prueba es muy alto (muchas
veces infinito)
Objetivo de la prueba de clases:
• Encontrar el mayor número de defectos posible
• Utilizando un número “pequeño” de casos de prueba
Nunca olvidar que:
• Las pruebas permiten probar la existencia de defectos, no la ausencia
de éstos
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 6
UNIVERSIDAD
DE CANTABRIA
Estrategias para la elección de casos de
prueba
Dos enfoques:
• Pruebas funcionales o de “caja negra”
- los casos de prueba se basan en la especificación del módulo
- no se requiere conocimiento de su estructura interna
- no es necesario disponer del código fuente
• Pruebas estructurales o de “caja blanca” o “caja de cristal”
- los casos de prueba se seleccionan en función del conocimiento que se
tiene de la estructura del método
- es necesario disponer del código fuente
Visto en este tema
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 7
UNIVERSIDAD
DE CANTABRIA
11.2 Caja negra: particiones de
equivalencia
En general es imposible probar un método para todas las combinaciones
posibles de entradas y de estados de la clase
En lugar de eso las entradas/estados se dividen en particiones de
equivalencia: conjunto de entradas/estados que, según la
especificación, se espera que tengan un comportamiento equivalente
Los casos de prueba se eligen en función de las particiones:
• Se elige un caso de prueba para cada combinación válida de
particiones
• Se elige un valor central por partición: caso típico
• Se eligen valores correspondientes a las fronteras con otras
particiones: casos atípicos
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 8
UNIVERSIDAD
DE CANTABRIA
Ej.: elección de casos de prueba
Prueba de una clase BuscaEnArray con un único método (busca):
public class BuscaEnArray {
/**
* Busca la primera ocurrencia de un elemento en un array
* @param ele elemento buscado
* @param a array en el que se busca
* @return la posición en la que se encuentra el elemento o -1
* en el caso de que el elemento no esté en el array
* @throws SecuenciaVacia si el array no tiene ningún elemento
*/
public static int busca(int ele, int[] a) throws SecuenciaVacia {
...
}
}
Particiones de equivalencia
• “el elemento está en el array” / “el elemento no está en el array”
• “array vacío” / “array con elementos”
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 9
UNIVERSIDAD
DE CANTABRIA
Ej.: elección de casos de prueba (cont.)
Criterios de prueba generales para secuencias:
• utilizar secuencias de distintos tamaños (en especial de tamaños 0 y
1)
• acceder a los elementos primero, central y último
Casos de prueba basados en las particiones y los criterios:
Particiones/criterios
Casos de prueba Resultado
esperadoID a ele
Array vacío 1 vacío 20 Excepción
Frontera entre vacío y no
vacío: encontrado y no
2 [17] 17 0
3 [17] 18 -1
Secuencia de más de un
elemento: encontrado
(primero, central y
último) y no encontrado
4 [17, 29, 21, 23] 17 0
5 [17, 18, 21, 23, 29, 41, 38] 23 3
6 [41, 18, 9, 31, 30, 16, 45] 45 6
7 [21, 23, 29, 33, 38] 25 -1
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 10
UNIVERSIDAD
DE CANTABRIA
11.3 Herramienta JUnit
JUnit es una herramienta de código abierto que permite ejecutar
conjuntos de pruebas de forma rápida y sistemática
• integrada en el entorno Eclipse
• para prueba de clases
• http://www.junit.org
Pensada para realizar pruebas repetidamente cada vez que se realiza un
pequeño cambio en el código
- “Code a little, test a little, code a little, test a little”.
Permite crear una Clase probadora para cada una de nuestras clases
• Formada por un conjunto de métodos de prueba
• Cada método de prueba implementa uno o más casos de prueba
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 11
UNIVERSIDAD
DE CANTABRIA
Métodos de prueba
Son ejecutados automáticamente por la herramienta JUnit
• no debemos asumir ningún orden de ejecución
Debemos escribir en ellos nuestros casos de prueba
Para cada método se diferencian tres comportamientos:
• correcto: si finaliza sin lanzar ninguna excepción
• fallo: si lanza la excepción AssertionFailedError
• error: si lanza cualquier otra excepción
Para detectar los fallos usaremos el método:
void assertTrue(String msj, Boolean cond)
• lanza AssertionFailedError con msj como mensaje asociado
cuando cond es false
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 12
UNIVERSIDAD
DE CANTABRIA
Ejemplo: clase probadora de
BuscaEnArray
Implementa los casos de prueba identificados en la tabla de la
transparencia página 9
Hemos elegido organizarla en tres métodos de prueba
• testArrayVacio: caso de prueba 1
• testArrayUnEle: casos de prueba 2 y 3
• testArrayMasDeUnEle: casos de prueba 4, 5, 6 y 7
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 13
UNIVERSIDAD
DE CANTABRIA
Ejemplo: clase probadora de BuscaEnArray (cont.)
/**
* Clase probadora de la clase BuscaEnArray
*/
public class BuscaEnArrayTest {
@Test
public void testArrayVacio() {
// Array vacío (1)
int[] a = {};
try {
int pos = BuscaEnArray.busca(20, a);
assertTrue("No excepción array vacío", false);
} catch (BuscaEnArray.SecuenciaVacia e) {
// El comportamiento correcto es que se lance la excepción
// Simplemente la cojo para que no salga fuera del método y
// JUnit lo interprete como un error
}
}
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 14
UNIVERSIDAD
DE CANTABRIA
Ejemplo: clase probadora de BuscaEnArray (cont.)
@Test
public void testArrayUnEle() {
int[] a = {17};
int pos;
// elemento encontrado (2)
pos = BuscaEnArray.busca(17, a);
assertTrue("Error posición:" + pos, pos == 0);
// elemento no encontrado (3)
pos = BuscaEnArray.busca(18, a);
assertTrue("Error posición:" + pos, pos == -1);
}
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 15
UNIVERSIDAD
DE CANTABRIA
Ejemplo: clase probadora de BuscaEnArray (cont.)
@Test
public void testArrayMasDeUnEle() {
int pos;
// encontrado primero (4)
int[] a1 = {17, 29, 21, 23};
pos = BuscaEnArray.busca(17, a1);
assertTrue("Error posición:" + pos, pos == 0);
// encontrado central (5)
int[] a2 = {17, 18, 21, 23, 29, 41, 38};
pos = BuscaEnArray.busca(23, a2);
assertTrue("Error posición:" + pos, pos == 3);
// encontrado último (6)
int[] a3 = {41, 18, 9, 31, 30, 16, 45};
pos = BuscaEnArray.busca(45, a3);
assertTrue("Error posición:" + pos, pos == 6);
// no encontrado (7)
int[] a4 = {21, 23, 29, 33, 38};
pos = BuscaEnArray.busca(25, a4);
assertTrue("Error posición:" + pos, pos == -1);
}
} // fin clase BuscaEnArrayTest
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 16
UNIVERSIDAD
DE CANTABRIA
Uso de JUnit desde el entorno Eclipse
Configuración del proyecto para usar JUnit:
1. Botón derecho del ratón sobre el proyecto y elegir: Build Path =>
Configure Build Path
2. En la ficha Libraries elegir Add Library, seleccionar JUnit y
pulsar Next, elegir la versión JUnit 4
Creación de una clase probadora en JUnit:
1. Pulsar con el botón derecho sobre la clase a probar y elegir New =>
Other => Java => JUnit => JUnit Test Case
2. Seleccionar los métodos a probar y pulsar Finish
3. Se crea la clase probadora con un conjunto de métodos de prueba
que tienen @Test antes del método
4. Podemos añadir más métodos de prueba (también deberán tener
@Test)
www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 17
UNIVERSIDAD
DE CANTABRIA
Resultados y Depuración
de métodos de prueba
Obtención de los resultados:
• Ejecutando la clase probadora (“run”)
Resumen de resultados con:
• “Failures” : fallo detectado con
assertTrue
• “Errors” : excepción inesperada
Es posible depurar un método individualmente:
1. situar al menos un punto de ruptura en el
método a depurar
2. pulsar con el botón derecho sobre el méto-
do de prueba y elegir debug
X
X

Más contenido relacionado

La actualidad más candente

Test doubles
Test doublesTest doubles
Test doubles540deg
 
Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en javajent46
 
Java excepciones
Java excepcionesJava excepciones
Java excepcionesricardo_79
 
Java exceptions
Java exceptionsJava exceptions
Java exceptionssandropaul
 
Java exceptions
Java exceptionsJava exceptions
Java exceptionsDeli_amor
 
5. otros aspectos de la programación orientada a objetos
5. otros aspectos de la programación orientada a objetos5. otros aspectos de la programación orientada a objetos
5. otros aspectos de la programación orientada a objetosHectorMamani
 
Casos de prueba charly eleazar
Casos de prueba charly eleazarCasos de prueba charly eleazar
Casos de prueba charly eleazarEleazar Morales
 
EXCEPCIONES JAVA
EXCEPCIONES JAVAEXCEPCIONES JAVA
EXCEPCIONES JAVAmellcv
 

La actualidad más candente (17)

Symfony parte 16
Symfony parte 16Symfony parte 16
Symfony parte 16
 
Gestión de excepciones en java
Gestión de excepciones en javaGestión de excepciones en java
Gestión de excepciones en java
 
Test doubles
Test doublesTest doubles
Test doubles
 
Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en java
 
11 Excepciones
11   Excepciones11   Excepciones
11 Excepciones
 
Java excepciones
Java excepcionesJava excepciones
Java excepciones
 
5.manejo de excepciones
5.manejo de excepciones5.manejo de excepciones
5.manejo de excepciones
 
Java exceptions
Java exceptionsJava exceptions
Java exceptions
 
Java exceptions
Java exceptionsJava exceptions
Java exceptions
 
Cap10 ficheros
Cap10 ficherosCap10 ficheros
Cap10 ficheros
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
5. otros aspectos de la programación orientada a objetos
5. otros aspectos de la programación orientada a objetos5. otros aspectos de la programación orientada a objetos
5. otros aspectos de la programación orientada a objetos
 
Cap9 excepciones
Cap9 excepcionesCap9 excepciones
Cap9 excepciones
 
11-Unidad 3: Encapsulamiento y modularidad
11-Unidad 3: Encapsulamiento y modularidad11-Unidad 3: Encapsulamiento y modularidad
11-Unidad 3: Encapsulamiento y modularidad
 
excepciones en java
excepciones en javaexcepciones en java
excepciones en java
 
Casos de prueba charly eleazar
Casos de prueba charly eleazarCasos de prueba charly eleazar
Casos de prueba charly eleazar
 
EXCEPCIONES JAVA
EXCEPCIONES JAVAEXCEPCIONES JAVA
EXCEPCIONES JAVA
 

Similar a Cap11 prueba

Ingenieria de sw Junit
Ingenieria de sw JunitIngenieria de sw Junit
Ingenieria de sw Junitpattyand89
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013dayaorte
 
16-Unidad 4: Introducción a las Arquitecturas Web 4.3 NCAPAS 4.4 PRUEBAS UNIT...
16-Unidad 4: Introducción a las Arquitecturas Web 4.3 NCAPAS 4.4 PRUEBAS UNIT...16-Unidad 4: Introducción a las Arquitecturas Web 4.3 NCAPAS 4.4 PRUEBAS UNIT...
16-Unidad 4: Introducción a las Arquitecturas Web 4.3 NCAPAS 4.4 PRUEBAS UNIT...Luis Fernando Aguas Bucheli
 
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetosUnidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetosAmado Arcaya
 
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para guardar información
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para   guardar informaciónJAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para   guardar información
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para guardar informaciónUniversidad Santo Tomás
 
Software testing 1
Software testing 1Software testing 1
Software testing 1josodo
 
16 UNIDAD: 4. INTRODUCCION A LAS ARQUITECTURASWEB 4.3 N-capas 4.4 Pruebas Un...
16 UNIDAD: 4. INTRODUCCION A LAS ARQUITECTURASWEB  4.3 N-capas 4.4 Pruebas Un...16 UNIDAD: 4. INTRODUCCION A LAS ARQUITECTURASWEB  4.3 N-capas 4.4 Pruebas Un...
16 UNIDAD: 4. INTRODUCCION A LAS ARQUITECTURASWEB 4.3 N-capas 4.4 Pruebas Un...Luis Fernando Aguas Bucheli
 
Diu asignacion3 2012_i
Diu asignacion3 2012_iDiu asignacion3 2012_i
Diu asignacion3 2012_iJulio Pari
 
12B Guía de Fundamentos de Informática
12B Guía de Fundamentos de Informática 12B Guía de Fundamentos de Informática
12B Guía de Fundamentos de Informática Raül V. Lerma-Blasco
 
Symfony Pruebas Unitarias
Symfony Pruebas UnitariasSymfony Pruebas Unitarias
Symfony Pruebas UnitariasRodrigo Miranda
 
Cómo diagnosticar problemas de rendimiento en entornos LAMP
Cómo diagnosticar problemas de rendimiento en entornos LAMPCómo diagnosticar problemas de rendimiento en entornos LAMP
Cómo diagnosticar problemas de rendimiento en entornos LAMPJavier Carranza
 
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubGlobalLogic Latinoamérica
 
Pruebas Automatizadas
Pruebas AutomatizadasPruebas Automatizadas
Pruebas AutomatizadasAngel Nuñez
 
Introducción a Unit Testing y TDD
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDDFernando Perez
 
Software testing 2
Software testing 2Software testing 2
Software testing 2josodo
 
Mpolo pruebas
Mpolo pruebasMpolo pruebas
Mpolo pruebasluisbasbe
 

Similar a Cap11 prueba (20)

Ingenieria de sw Junit
Ingenieria de sw JunitIngenieria de sw Junit
Ingenieria de sw Junit
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013
 
Cap3 algoritmos
Cap3 algoritmosCap3 algoritmos
Cap3 algoritmos
 
Testeo unitario
Testeo unitarioTesteo unitario
Testeo unitario
 
16-Unidad 4: Introducción a las Arquitecturas Web 4.3 NCAPAS 4.4 PRUEBAS UNIT...
16-Unidad 4: Introducción a las Arquitecturas Web 4.3 NCAPAS 4.4 PRUEBAS UNIT...16-Unidad 4: Introducción a las Arquitecturas Web 4.3 NCAPAS 4.4 PRUEBAS UNIT...
16-Unidad 4: Introducción a las Arquitecturas Web 4.3 NCAPAS 4.4 PRUEBAS UNIT...
 
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetosUnidad 7 conceptos Avanzados en la Programacion orientado a objetos
Unidad 7 conceptos Avanzados en la Programacion orientado a objetos
 
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para guardar información
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para   guardar informaciónJAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para   guardar información
JAVA: TRY-CATCH-FINALLY y Uso de ficheros de texto para guardar información
 
Software testing 1
Software testing 1Software testing 1
Software testing 1
 
16 UNIDAD: 4. INTRODUCCION A LAS ARQUITECTURASWEB 4.3 N-capas 4.4 Pruebas Un...
16 UNIDAD: 4. INTRODUCCION A LAS ARQUITECTURASWEB  4.3 N-capas 4.4 Pruebas Un...16 UNIDAD: 4. INTRODUCCION A LAS ARQUITECTURASWEB  4.3 N-capas 4.4 Pruebas Un...
16 UNIDAD: 4. INTRODUCCION A LAS ARQUITECTURASWEB 4.3 N-capas 4.4 Pruebas Un...
 
Diu asignacion3 2012_i
Diu asignacion3 2012_iDiu asignacion3 2012_i
Diu asignacion3 2012_i
 
Calidad del software cap2
Calidad del software   cap2Calidad del software   cap2
Calidad del software cap2
 
12B Guía de Fundamentos de Informática
12B Guía de Fundamentos de Informática 12B Guía de Fundamentos de Informática
12B Guía de Fundamentos de Informática
 
Symfony Pruebas Unitarias
Symfony Pruebas UnitariasSymfony Pruebas Unitarias
Symfony Pruebas Unitarias
 
Cómo diagnosticar problemas de rendimiento en entornos LAMP
Cómo diagnosticar problemas de rendimiento en entornos LAMPCómo diagnosticar problemas de rendimiento en entornos LAMP
Cómo diagnosticar problemas de rendimiento en entornos LAMP
 
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic Club
 
Pruebas Automatizadas
Pruebas AutomatizadasPruebas Automatizadas
Pruebas Automatizadas
 
Introducción a Unit Testing y TDD
Introducción a Unit Testing y TDDIntroducción a Unit Testing y TDD
Introducción a Unit Testing y TDD
 
Software Testing (2)
Software Testing (2)Software Testing (2)
Software Testing (2)
 
Software testing 2
Software testing 2Software testing 2
Software testing 2
 
Mpolo pruebas
Mpolo pruebasMpolo pruebas
Mpolo pruebas
 

Más de IsaacGmezOtero

Más de IsaacGmezOtero (7)

Cap8 herencia
Cap8 herenciaCap8 herencia
Cap8 herencia
 
Cap7 modularidad
Cap7 modularidadCap7 modularidad
Cap7 modularidad
 
Cap5 entrada-salida
Cap5 entrada-salidaCap5 entrada-salida
Cap5 entrada-salida
 
Cap4 datos-compuestos
Cap4 datos-compuestosCap4 datos-compuestos
Cap4 datos-compuestos
 
Cap2 datos
Cap2 datosCap2 datos
Cap2 datos
 
Cap1 intro
Cap1 introCap1 intro
Cap1 intro
 
Cap6 clases
Cap6 clasesCap6 clases
Cap6 clases
 

Último

12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdfedwinmelgarschlink2
 
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señorkkte210207
 
Las redes sociales en el mercado digital
Las redes sociales en el mercado digitalLas redes sociales en el mercado digital
Las redes sociales en el mercado digitalNayaniJulietaRamosRa
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdflauradbernals
 
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfNUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfisrael garcia
 
memoria de la empresa Pil Andina para d
memoria de la empresa Pil Andina para  dmemoria de la empresa Pil Andina para  d
memoria de la empresa Pil Andina para dRodrigoAveranga2
 

Último (6)

12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf
 
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
 
Las redes sociales en el mercado digital
Las redes sociales en el mercado digitalLas redes sociales en el mercado digital
Las redes sociales en el mercado digital
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdf
 
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdfNUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
NUVO PROGRAMAS DE ESCUELAS NUEVO-ACUERDO-CTE.pdf
 
memoria de la empresa Pil Andina para d
memoria de la empresa Pil Andina para  dmemoria de la empresa Pil Andina para  d
memoria de la empresa Pil Andina para d
 

Cap11 prueba

  • 1. Tema  11.  Pruebas   Programación  en  Lenguaje  Java   Michael  González  Harbour   Mario  Aldea  Rivas   Departamento  de  Matemá.cas,   Estadís.ca  y  Computación   Este  tema  se  publica  bajo  Licencia:   Crea.ve  Commons  BY-­‐NC-­‐SA  4.0  
  • 2. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 1 UNIVERSIDAD DE CANTABRIA Programación en Java 1. Introducción a los lenguajes de programación 2. Datos y expresiones 3. Estructuras algorítmicas 4. Datos Compuestos 5. Entrada/salida 6. Clases, referencias y objetos 7. Modularidad y abstracción 8. Herencia y polimorfismo 9. Tratamiento de errores 10. Entrada/salida con ficheros 11. Pruebas • Pruebas del software. Caja negra: particiones de equivalencia. Herramienta JUnit.
  • 3. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 2 UNIVERSIDAD DE CANTABRIA 11.1 Pruebas del software Probar un módulo software (método, clase, paquete, etc.) consiste en: • Ejecutar el módulo bajo diferentes situaciones • Para comprobar que presenta el comportamiento esperado - Se comporta como dice su especificación (sus comentarios de documentación) Fundamental disponer de un entorno automatizado de pruebas • Ejecución automática de los casos de prueba • Generación de informes Lo tratado en este tema no pretende ser más que una breve introducción al capítulo de “Pruebas de Sistemas Software” de la asignatura “Ingeniería del Software II” (3er curso)
  • 4. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 3 UNIVERSIDAD DE CANTABRIA Pruebas del software (cont.) Las pruebas se realizan en cuatro etapas: 1. Pruebas unitarias (prueba independiente de cada clase) - se prueban sus métodos para distintos casos de prueba - se intenta cubrir todo el comportamiento de la clase 2. Prueba de integración o de subsistemas - se prueban agrupaciones de clases relacionadas 3. Prueba de sistema - se prueba el sistema como un todo 4. Prueba de validación - prueba del sistema en el entorno real de trabajo - con intervención del usuario final Visto en este tema
  • 5. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 4 UNIVERSIDAD DE CANTABRIA Pruebas del software (cont.) Análisis de requisitos Diseño Operación y Mantenimiento Codificación y Depuración Pruebas de sistema y validación Pruebas unitarias y de integración
  • 6. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 5 UNIVERSIDAD DE CANTABRIA Pruebas unitarias (de clases) Caso de prueba: ejecución de un método bajo unas condiciones particulares (valores de los parámetros + estado de la clase) • El resultado permite determinar si, para este caso particular, la clase se ha comportado acorde a su especificación En general el número de posibles casos de prueba es muy alto (muchas veces infinito) Objetivo de la prueba de clases: • Encontrar el mayor número de defectos posible • Utilizando un número “pequeño” de casos de prueba Nunca olvidar que: • Las pruebas permiten probar la existencia de defectos, no la ausencia de éstos
  • 7. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 6 UNIVERSIDAD DE CANTABRIA Estrategias para la elección de casos de prueba Dos enfoques: • Pruebas funcionales o de “caja negra” - los casos de prueba se basan en la especificación del módulo - no se requiere conocimiento de su estructura interna - no es necesario disponer del código fuente • Pruebas estructurales o de “caja blanca” o “caja de cristal” - los casos de prueba se seleccionan en función del conocimiento que se tiene de la estructura del método - es necesario disponer del código fuente Visto en este tema
  • 8. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 7 UNIVERSIDAD DE CANTABRIA 11.2 Caja negra: particiones de equivalencia En general es imposible probar un método para todas las combinaciones posibles de entradas y de estados de la clase En lugar de eso las entradas/estados se dividen en particiones de equivalencia: conjunto de entradas/estados que, según la especificación, se espera que tengan un comportamiento equivalente Los casos de prueba se eligen en función de las particiones: • Se elige un caso de prueba para cada combinación válida de particiones • Se elige un valor central por partición: caso típico • Se eligen valores correspondientes a las fronteras con otras particiones: casos atípicos
  • 9. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 8 UNIVERSIDAD DE CANTABRIA Ej.: elección de casos de prueba Prueba de una clase BuscaEnArray con un único método (busca): public class BuscaEnArray { /** * Busca la primera ocurrencia de un elemento en un array * @param ele elemento buscado * @param a array en el que se busca * @return la posición en la que se encuentra el elemento o -1 * en el caso de que el elemento no esté en el array * @throws SecuenciaVacia si el array no tiene ningún elemento */ public static int busca(int ele, int[] a) throws SecuenciaVacia { ... } } Particiones de equivalencia • “el elemento está en el array” / “el elemento no está en el array” • “array vacío” / “array con elementos”
  • 10. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 9 UNIVERSIDAD DE CANTABRIA Ej.: elección de casos de prueba (cont.) Criterios de prueba generales para secuencias: • utilizar secuencias de distintos tamaños (en especial de tamaños 0 y 1) • acceder a los elementos primero, central y último Casos de prueba basados en las particiones y los criterios: Particiones/criterios Casos de prueba Resultado esperadoID a ele Array vacío 1 vacío 20 Excepción Frontera entre vacío y no vacío: encontrado y no 2 [17] 17 0 3 [17] 18 -1 Secuencia de más de un elemento: encontrado (primero, central y último) y no encontrado 4 [17, 29, 21, 23] 17 0 5 [17, 18, 21, 23, 29, 41, 38] 23 3 6 [41, 18, 9, 31, 30, 16, 45] 45 6 7 [21, 23, 29, 33, 38] 25 -1
  • 11. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 10 UNIVERSIDAD DE CANTABRIA 11.3 Herramienta JUnit JUnit es una herramienta de código abierto que permite ejecutar conjuntos de pruebas de forma rápida y sistemática • integrada en el entorno Eclipse • para prueba de clases • http://www.junit.org Pensada para realizar pruebas repetidamente cada vez que se realiza un pequeño cambio en el código - “Code a little, test a little, code a little, test a little”. Permite crear una Clase probadora para cada una de nuestras clases • Formada por un conjunto de métodos de prueba • Cada método de prueba implementa uno o más casos de prueba
  • 12. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 11 UNIVERSIDAD DE CANTABRIA Métodos de prueba Son ejecutados automáticamente por la herramienta JUnit • no debemos asumir ningún orden de ejecución Debemos escribir en ellos nuestros casos de prueba Para cada método se diferencian tres comportamientos: • correcto: si finaliza sin lanzar ninguna excepción • fallo: si lanza la excepción AssertionFailedError • error: si lanza cualquier otra excepción Para detectar los fallos usaremos el método: void assertTrue(String msj, Boolean cond) • lanza AssertionFailedError con msj como mensaje asociado cuando cond es false
  • 13. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 12 UNIVERSIDAD DE CANTABRIA Ejemplo: clase probadora de BuscaEnArray Implementa los casos de prueba identificados en la tabla de la transparencia página 9 Hemos elegido organizarla en tres métodos de prueba • testArrayVacio: caso de prueba 1 • testArrayUnEle: casos de prueba 2 y 3 • testArrayMasDeUnEle: casos de prueba 4, 5, 6 y 7
  • 14. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 13 UNIVERSIDAD DE CANTABRIA Ejemplo: clase probadora de BuscaEnArray (cont.) /** * Clase probadora de la clase BuscaEnArray */ public class BuscaEnArrayTest { @Test public void testArrayVacio() { // Array vacío (1) int[] a = {}; try { int pos = BuscaEnArray.busca(20, a); assertTrue("No excepción array vacío", false); } catch (BuscaEnArray.SecuenciaVacia e) { // El comportamiento correcto es que se lance la excepción // Simplemente la cojo para que no salga fuera del método y // JUnit lo interprete como un error } }
  • 15. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 14 UNIVERSIDAD DE CANTABRIA Ejemplo: clase probadora de BuscaEnArray (cont.) @Test public void testArrayUnEle() { int[] a = {17}; int pos; // elemento encontrado (2) pos = BuscaEnArray.busca(17, a); assertTrue("Error posición:" + pos, pos == 0); // elemento no encontrado (3) pos = BuscaEnArray.busca(18, a); assertTrue("Error posición:" + pos, pos == -1); }
  • 16. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 15 UNIVERSIDAD DE CANTABRIA Ejemplo: clase probadora de BuscaEnArray (cont.) @Test public void testArrayMasDeUnEle() { int pos; // encontrado primero (4) int[] a1 = {17, 29, 21, 23}; pos = BuscaEnArray.busca(17, a1); assertTrue("Error posición:" + pos, pos == 0); // encontrado central (5) int[] a2 = {17, 18, 21, 23, 29, 41, 38}; pos = BuscaEnArray.busca(23, a2); assertTrue("Error posición:" + pos, pos == 3); // encontrado último (6) int[] a3 = {41, 18, 9, 31, 30, 16, 45}; pos = BuscaEnArray.busca(45, a3); assertTrue("Error posición:" + pos, pos == 6); // no encontrado (7) int[] a4 = {21, 23, 29, 33, 38}; pos = BuscaEnArray.busca(25, a4); assertTrue("Error posición:" + pos, pos == -1); } } // fin clase BuscaEnArrayTest
  • 17. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 16 UNIVERSIDAD DE CANTABRIA Uso de JUnit desde el entorno Eclipse Configuración del proyecto para usar JUnit: 1. Botón derecho del ratón sobre el proyecto y elegir: Build Path => Configure Build Path 2. En la ficha Libraries elegir Add Library, seleccionar JUnit y pulsar Next, elegir la versión JUnit 4 Creación de una clase probadora en JUnit: 1. Pulsar con el botón derecho sobre la clase a probar y elegir New => Other => Java => JUnit => JUnit Test Case 2. Seleccionar los métodos a probar y pulsar Finish 3. Se crea la clase probadora con un conjunto de métodos de prueba que tienen @Test antes del método 4. Podemos añadir más métodos de prueba (también deberán tener @Test)
  • 18. www.istr.unican.es © Michael González Harbour y Mario Aldea, 8/oct/15 17 UNIVERSIDAD DE CANTABRIA Resultados y Depuración de métodos de prueba Obtención de los resultados: • Ejecutando la clase probadora (“run”) Resumen de resultados con: • “Failures” : fallo detectado con assertTrue • “Errors” : excepción inesperada Es posible depurar un método individualmente: 1. situar al menos un punto de ruptura en el método a depurar 2. pulsar con el botón derecho sobre el méto- do de prueba y elegir debug X X