0% encontró este documento útil (0 votos)
38 vistas55 páginas

Pruebas de Software: Técnicas y Estrategias

Este documento trata sobre pruebas de software. Explica conceptos como verificación vs validación, tipos de pruebas como pruebas unitarias y de integración, y técnicas de prueba como caja blanca y caja negra. También describe el proceso de pruebas a lo largo del ciclo de vida del desarrollo de software.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
38 vistas55 páginas

Pruebas de Software: Técnicas y Estrategias

Este documento trata sobre pruebas de software. Explica conceptos como verificación vs validación, tipos de pruebas como pruebas unitarias y de integración, y técnicas de prueba como caja blanca y caja negra. También describe el proceso de pruebas a lo largo del ciclo de vida del desarrollo de software.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Ingeniería del Software

Tema 4. Pruebas
Universidad de Alcalá
Contenidos
 Parte I. Conceptos generales
 Definiciones y conceptos
 Limitaciones de las pruebas
 Técnicas de prueba
 El proceso de prueba
 Parte II. Pruebas unitarias con JUnit
 Parte III. Pruebas de integración con Mock Objects

2 Módulo 4. Pruebas
Parte I. Conceptos generales

3 Módulo 4. Pruebas
Verificación vs. Validación

 Validación
 Evaluación de un sistema o componente, durante o al final del
proceso de desarrollo, para comprobar si se satisfacen los
requisitos especificados
 ¿Estamos construyendo el sistema correcto?

 Verificación
 Evaluación de un sistema o componente para determinar si los
productos obtenidos satisfacen las condiciones impuestas
 Evaluación de la calidad de la implementación
 ¿Estamos construyendo correctamente el sistema?

4 Módulo 4. Pruebas
Prueba de Software
 Definición
Proceso para verificar que el software cumple criterios
específicos de calidad, corrección, completitud, exactitud, eficacia
y eficiencia, para asegurar su buen funcionamiento y la satisfacción
del cliente final.
Software: conjunto de elementos de un sistema informático:
programas, datos, documentación, procedimientos y reglas.

 No perder de vista que ...


 Se asume que todo software contiene defectos.
 Los defectos se manifestarán en fallos.
 Los fallos serán detectados o bien por las pruebas o bien por los
usuarios.
 ¡Hay que detectar los fallos antes que los usuarios!
5 Módulo 4. Pruebas
Prueba de Software
 Esencial establecer un plan de pruebas y su integración a lo
largo de todo el proceso de desarrollo.
 Se basa en los casos de prueba.
 Caso de prueba: conjunto de entradas, condiciones de
ejecución y resultados esperados desarrollados para verificar
el cumplimiento de un requisito dado.
 Ejemplo: calculadora simple operación sumar
Caso de prueba ‘1+1’:
1. Presionar el botón etiquetado como ‘1’.
2. Presionar el botón etiquetado como ‘+’.
3. Presionar el botón etiquetado como ‘1’.
4. Presionar el botón etiquetado como ‘=’.
5. Si resultado es ‘2’, caso de prueba correcto.

6 Módulo 4. Pruebas
Conceptos fundamentales
 Error: imperfección en el software, que se manifiesta
como un funcionamiento incorrecto.
 Fallo: efecto indeseado observado en las funciones o
prestaciones desempeñadas por un software.
 Probar: proceso por el que se muestra la
presencia de errores en el software.
 Depurar: proceso de localizar errores y
modificar el software para eliminarlos.
 Trazabilidad: toda funcionalidad se debe
relacionar con algún requisito. Permite
establecer un plan de pruebas
consistente.

7 Módulo 4. Pruebas
Limitaciones de las pruebas
 Es imposible en la práctica hacer una prueba exhaustiva.
 Por lo tanto, la clave está en saber seleccionar las pruebas que
más probabilidad tienen de encontrar errores.
 Limitaciones derivadas de la naturaleza de las pruebas.
 Ejemplo: compararEnteros
 Selección de los equipos de prueba.
 Idealmente, la prueba debería hacerla un equipo independiente.
 ¿Cuándo terminar de probar?
 No hay una respuesta definitiva a esta pregunta. Lo más que
puede hacerse es intentar desarrollar modelos estadísticos de
detección de fallos.

8 Módulo 4. Pruebas
Técnicas de prueba tradicionales
 Objetivo: sistematizar el proceso de prueba.
 Pruebas de caja blanca
 Basadas en el flujo de control.
 Se usan cuando se conoce la estructura interna y el
funcionamiento del código a probar.
 Cobertura: porcentaje de código que ha sido probado (los
“caminos” probados de entre todos los posibles).

 Pruebas de caja negra


 Basadas en el flujo de datos: comportamiento de E/S.
 Se usan cuando se quiere probar lo que hace el software
pero no cómo lo hace.
 Clases de equivalencia: conjunto finito de datos suficiente
para cubrir razonablemente los casos posibles.
9 Módulo 4. Pruebas
Ejemplo compararEnteros
int compararEnteros(int i,int j){
/* Retorna 0 si i es igual a j, -1 si i es
menor que j y +1 si j es mayor que i */
if (i%35 == 0) return -1;
if (i==j) return 0;
if (i<j) return -1;
else return 1;
}

Las pruebas de caja blanca permiten detectar el error,


pero las de caja negra no siempre: solamente cuando i
es 0 (independientemente de j) o un múltiplo entero de
35 y j es menor que i.

10 Módulo 4. Pruebas
Diferencias entre técnicas

Caja blanca Caja negra


Es necesario conocer el código No importa cómo esté escrito el código
No permiten validar requisitos Adecuadas para validar requisitos
No sirven para determinar la robustez Permiten comprobar la robustez ante
imprevistos
Diseño y ejecución complejo Más fáciles de llevar a cabo
Sin redundancia Riesgo de dejar código sin probar
Eficientes con pruebas automatizadas Complejo mantenimiento de pruebas
automatizadas
La prueba exhaustiva consiste en probar La prueba exhaustiva consiste en probar
todos los posibles caminos de ejecución todas las posibles combinaciones de
entradas

11 Módulo 4. Pruebas
Tipos de Pruebas (según el SWEBOK)

12 Módulo 4. Pruebas
Proceso de fase de pruebas

 Para asegurar el correcto funcionamiento de un


sistema de SW completo y garantizar la
satisfacción del cliente se debe implementar una
estrategia de pruebas que incluya:

 Pruebas unitarias: individual


 Pruebas de integración: en conjunto
 Pruebas del sistema: compatibilidad con requisitos
 Funcionalidad: cumple requisitos
 Rendimiento
 Aceptación: con el cliente
 Instalación: en la plataforma HW/SW de operación

13 Módulo 4. Pruebas
Proceso de fase de pruebas

Requisitos
Especificaciones Otros requisitos Requisitos del Entorno final
Pruebas funcionales
de diseño software cliente de producción
Unitarias del sistema

Pruebas
Unitarias Sistema
en uso
Pruebas Pruebas
Pruebas Pruebas de Pruebas de
de de eficiencia,
Funcionales aceptación instalación
integración carga, etc.
Pruebas Módulos
Unitarias integrados
Sistema Sistema
Sistema Verificado
Funcional aceptado

Pruebas
Unitarias Pruebas del sistema

14 Módulo 4. Pruebas
Pruebas unitarias
 Proceso de prueba donde se estudia de manera
aislada un módulo de software.
 Por ejemplo un clase de Java

 Se centran en las pruebas de los programas /


módulos generados por los desarrolladores .
 Generalmente, son los propios desarrolladores los que
prueban su código.
 Puede hacerse mediante técnicas de caja blanca y caja
negra
 Con caja blanca: medición de la cobertura, ramas, etc.

15 Módulo 4. Pruebas
Pruebas unitarias: beneficios y limitaciones

 Beneficios
 Permite arreglar los errores detectados sin cambiar la
funcionalidad del componente probado
 Contribuye al proceso de integración de componentes del
Sistema de SW al permitir asegurar el funcionamiento
correcto de los componentes de manera individual

 Limitaciones
 No permite identificar errores de integración ni errores de
desempeño del Sistema de SW
 No son prácticas para probar todos los casos posibles para
los módulos que se prueban
16 Módulo 4. Pruebas
Pruebas de integración
 Proceso que permite verificar si un módulo funciona
adecuadamente al trabajar conjuntamente con otros.
 Es necesario probar si existen defectos en las
interfaces entre módulos.

17 Módulo 4. Pruebas
Estrategias de integración
 Estrategias:
 Ascendente (Bottom-up)
Incrementales
 Descendente (Top-down)
 Big-bang
No incrementales
 Sándwich: Combinación de las 2 primeras
 Pueden ser necesario escribir módulos simulados:
 Conductores (driver): simulan la llamada al módulo
pasándole los parámetros necesarios para realizar la
prueba
 Resguardos (stubs): módulos simulados llamados por
el módulo bajo prueba

18 Módulo 4. Pruebas
Conductores y Resguardos

Conductor

Módulo bajo
prueba

Resguardo Resguardo

19 Módulo 4. Pruebas
Integración ascendente
 Ascendente (Bottom-up)
 Rama izquierda: escribir A
conductores para proporcionar
a E, F, G y H los datos que B C D

necesitan de B. Probar cada E F G H I J K L M


módulo con su conductor.
 Una vez E, F, G, H han sido BE’ BF’ BG’ BH’
probados, el subsistema B
puede ser probado, E F G H

escribiendo un conductor para


B. AB’

 Repetir el proceso en el resto


B
de ramas.
 Probar el sistema completo. E F G H

20 Módulo 4. Pruebas
Integración descendente
 Descendente (Top-down)
 Probar el módulo A primero
escribiendo módulos A

simulados, resguardos para B,


B C D
C, D.
 Una vez eliminados los E F G H I J K L M

problemas con A, probar el


módulo B, escribiendo A
resguardos para E, F, G, H.
B’ C’ D’
 Repetir el proceso en el resto
de ramas.
B
 Probar el sistema completo.
E’ F’ G’ H’

21 Módulo 4. Pruebas
Integración Big-Bang! y Sandwich
 Big-Bang
 Escribir y probar A, B, C, D, E, F, G, H, I, J, K, M
a la vez.
A

B C D

E F G H I J K L M

 Sándwich
 Combinación de ascendente y descendente. AB’

 Se prueba cada módulo con su conductor y su


resguardo. B

 Posteriormente se ensamblan todos los módulos E’


y se prueba el conjunto.

22 Módulo 4. Pruebas
Pruebas de sistema
 Pruebas para analizar que todo el sistema está listo para
el paso a producción.
 Pruebas de caja negra: comprobar si el sistema hace lo
que el cliente desea.
 No están relacionadas solamente con el software
(interconexiones con otras aplicaciones, dispositivos HW,
S.O., entre otras).
 Estos tipos de pruebas incluyen:
 Pruebas de funcionalidad y operativa
 Pruebas de rendimiento: desgaste, volumen, configuración.
 Pruebas de aceptación: piloto, alfa, beta.
 Pruebas de instalación y desinstalación.

23 Módulo 4. Pruebas
Revisión del ciclo de vida
Requisitos Pruebas de aceptación

Pruebas funcionales
Especificaciones
y de rendimiento

Diseño Pruebas de integración

Diseño detallado Pruebas de unidad

Implementación

24 Módulo 4. Pruebas
Parte II. Pruebas unitarias con
JUnit

Módulo 4. Pruebas
Pruebas unitarias con xUnit

 Para hacer pruebas unitarias se usan frameworks


en entornos de pruebas automatizados.

 Un framework es un conjunto de clases relacionadas


que proveen un conjunto de funcionalidades para
realizar una tarea específica.

 En el caso de la realización de pruebas unitarias


xUnit es el framework más usado para hacer
pruebas unitarias automatizadas.

26 Módulo 4. Pruebas
Los diferentes xUnit
 Para poder usar el Framework xUnit se necesita su
implementación en el lenguaje de programación usado
en las clases a probar.
 Las implementaciones de xUnit son:
 JUnit: xUnit para Java
 VBUnit: xUnit para Objetos Visual Basic y Objetos COM
(Component Object Model)
 CUnit: xUnit para lenguaje C
 CPPUnit: xUnit para lenguaje C++
 DUnit: xUnit para Borland Delphi 4 y posteriores
 PHPUnit: xUnit para PHP
 PyUnit: xUnit para Python

27 Módulo 4. Pruebas
Pruebas unitarias con JUnit
 ¿Qué es JUnit?
 JUnit es la implementación del Framework xUnit
para el lenguaje Java.
 Creado en 1997 por Erich Gamma y Kent Beck.
 Se usa para realizar pruebas unitarias de clases
escritas en Java en un entorno de pruebas.
 Es un Framework muy sencillo, con muy pocas
clases, que puede aprenderse a usar muy
rápidamente por lo que se ha hecho muy popular.
 Es open source y su código está disponible en:
http://www.junit.org/
 También está incluido en las últimas versiones de
Netbeans.
28 Módulo 4. Pruebas
Test cases y Test suites

 Un caso de prueba (TestCase) es un conjunto de


métodos que prueban los métodos de una clase
Java bajo estudio.

 Los casos de prueba se pueden estructurar en


colecciones de pruebas (TestSuite).

 Permiten realizar pruebas de regresión.

29 Módulo 4. Pruebas
Pasos generales a seguir
1. Cada prueba a realizar se programa como un método OO.
 Determinar la clase del sistema de SW que se va a
probar.
 Determinar los métodos de la clase que se van a
probar.
 Definir los métodos de prueba usando aserciones
(assert) para verificar que los métodos a probar
producen las salidas esperadas al introducir ciertos
valores de entrada.
2. Se reúnen todos los métodos en una colección (suite) de
pruebas.
3. Se ejecuta la colección de pruebas.
4. El framework JUnit invoca cada prueba de la colección de
pruebas.
5. El framework JUnit reporta los resultados.

30 Módulo 4. Pruebas
Creación de un caso de prueba sencillo
 Para ver como crear un caso de prueba sencillo
usando JUnit 4.x vamos a probar los métodos de
la clase Persona.

31 Módulo 4. Pruebas
Creación de un caso de prueba sencillo
 La clase TestCase del framework JUnit contiene los
métodos básicos para escribir un caso de prueba
particular.
 Para crear un caso de prueba particular hay que crear
una subclase de TestCase.
 El nombre de la clase de prueba particular a crear
debe contener con la palabra Test
 Para el ejemplo de la clase Persona tenemos:

import org.junit.Test;
import static org.junit.Assert.*;
public class PersonaTest {

32 Módulo 4. Pruebas
Creación de un caso de prueba sencillo
 Para escribir métodos de prueba se debe:

1. Definir las precondiciones de la prueba y la


funcionalidad a probar.
2. Especificar el resultado esperado de la prueba o
postcondición para chequear si se cumple. Esto se
hace usando los métodos asserts del framework
JUnit.
3. Implementar el código para que los métodos de
prueba verifiquen las aserciones definidas.
4. Ejecutar el método de prueba.

33 Módulo 4. Pruebas
Creación de un caso de prueba sencillo
 La signatura de los métodos de prueba en la
versión 4.12 de JUnit es:

public testSuCasoDePrueba ( ) { }

 El nombre del método de prueba debe comenzar


con la palabra test y a continuación el nombre del
método de prueba particular.
 La primera letra de cada palabra del nombre del
método debe ser mayúscula

34 Módulo 4. Pruebas
Creación de un caso de prueba sencillo
 Prueba del método ObtenerNombre de la clase Persona

public void testObtenerNombre() { Precondición

String expResult = “Vicentin";

Persona instancia =
new Persona ("Vicentin", "Lopez", "Lopez");

String result = instancia.obtenerNombre(); Código que


prueba la
funcionalidad
//Prueba si el método obtenerNombre de
//la clase Persona funciona correctamente

assertEquals(expResult, result);
Postcondición
}
35 Módulo 4. Pruebas
Creación de un caso de prueba sencillo
 Prueba del método ObtenerApellidos de la clase Persona

public void testObtenerApellidos () {

String expResult = “Lopez Lopez";

Persona instancia =
new Persona (“Vicentin", "Lopez", "Lopez");

String result = instancia.obtenerApellidos();

//Prueba si el método obtenerNombre de


//la clase Persona funciona correctamente

assertEquals(expResult, result);

}
36 Módulo 4. Pruebas
Creación de un caso de prueba sencillo
 Prueba del método ObtenerNombreyApellidos de la clase
Persona
public void testObtenerNombreyApellidos () {

String expResult = "Vicentin Lopez Lopez";

Persona instancia =
new Persona (“Vicentin", "Lopez", "Lopez");

String result = instancia.obtenerNombreyApellidos();

//Prueba si el método obtenerNombre de


//la clase Persona funciona correctamente

assertEquals(expResult, result);

}
37 Módulo 4. Pruebas
Creación de un caso de prueba sencillo
import org.junit.Test;
import static org.junit.Assert.*;

public class PersonaTest {


...
@Test
public void testObtenerNombreyApellidos() {
String expResult = “Vicentin Lopez Lopez";
Persona instancia = new Persona (“Vicentin", "Lopez", "Lopez");
String result = instancia.obtenerNombreyApellidos();
assertEquals(expResult, result);
}
@Test
public void testObtenerNombre() {
String expResult = " Vicentin ";
Persona instancia = new Persona (“Vicentin", "Lopez", "Lopez");
String result = instancia.obtenerNombre();
assertEquals(expResult, result);
}
@Test
public void testObtenerApellidos() {
String expResult = "Lopez Lopez";
Persona instancia = new Persona (" Vicentin ", "Lopez", "Lopez");
String result = instancia.obtenerApellidos();
assertEquals(expResult, result);
}
}

38 Módulo 4. Pruebas
Ejecución de casos de prueba
 Para ejecutar un caso de prueba se usa el método
run() de la clase TestCase().
 En Netbeans, un caso de prueba particular se
ejecuta seleccionando el test y haciendo clic en en
el menú Run | Testfile (Ctrl+F6).
 Cuando se ejecuta un caso de prueba JUnit
proporciona dos tipos de información:
 Información que indica si las pruebas son
válidas o erróneas.
 Si la prueba es errónea indica la causa del fallo.

39 Módulo 4. Pruebas
Ejemplo de resultados en Netbeans

40 Módulo 4. Pruebas
Eliminación del código duplicado
 En caso de prueba particular puede haber código
duplicado en cada método de prueba al tener que
crear objetos y estructuras de datos comunes.
 Ej. clase persona: en cada método de prueba se crea
un instancia de Persona.

 Esto podría hacerse una sola vez y definir esta


instancia como el contexto para ejecutar cada uno
de los métodos del caso de prueba PersonaTest.

 Para ello se usan los métodos setUp y tearDown


de TestCase.

41 Módulo 4. Pruebas
Eliminación del código duplicado
import org.junit.Test;
import static org.junit.Assert.*;

public class PersonaTest { Código duplicado


...
@Test
public void testObtenerNombreyApellidos() {
String expResult = “Vicentin Lopez Lopez";
Persona instancia = new Persona (“Vicentin", "Lopez", "Lopez");
String result = instancia.obtenerNombreyApellidos();
assertEquals(expResult, result);
}
@Test
public void testObtenerNombre() {
String expResult = " Vicentin ";
Persona instancia = new Persona (“Vicentin", "Lopez", "Lopez");
String result = instancia.obtenerNombre();
assertEquals(expResult, result);
}
@Test
public void testObtenerApellidos() {
String expResult = "Lopez Lopez";
Persona instancia = new Persona (" Vicentin ", "Lopez", "Lopez");
String result = instancia.obtenerApellidos();
assertEquals(expResult, result);
}
}

42 Módulo 4. Pruebas
Ejemplo completo con setUp() y tearDown()
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
public class PersonaTest {
private Persona instancia;

@Before
public void setUp() {
instancia = new Persona ("Vicentin", "Lopez", "Lopez");
}
@After
public void tearDown() {
instancia = null;
}

@Test
public void testObtenerNombreyApellidos() {
String expResult = "Vicentin Lopez Lopez";
String result = instancia.obtenerNombreyApellidos();
assertEquals(expResult, result);
}

@Test
public void testObtenerNombre() {
String expResult = "Vicentin";
String result = instancia.obtenerNombre();
assertEquals(expResult, result);
}

@Test
public void testObtenerApellidos() {
String expResult = "Lopez Lopez";
String result = instancia.obtenerApellidos();
assertEquals(expResult, result);
}
}
43 Módulo 4. Pruebas
Parte III. Pruebas de integración
con MockObjects
Introducción
 A veces es necesario hacer pruebas de una clase
aislando sus objetos colaboradores.
 Por ejemplo, en las pruebas de integración.

 Esta necesidad se presenta cuando la


instanciación de los objetos colaboradores es muy
costosa.

 Una de las técnicas para poder probar clases


relacionadas con otras consiste en utilizar objetos
simulados (Mock Objects).
 Simulan el comportamiento de los objetos
colaboradores para la realización de las pruebas.

45 Módulo 4. Pruebas
Objetos simulados (Mock Objects)
 Objetos que permiten realizar pruebas de manera
aislada de clases que tienen asociaciones con
otras clases, llamadas clases colaboradoras
 Permiten hacer la prueba de una clase aislándola de
las clases con las que interactúa
 Simulan a los objetos colaboradores de la clase que
esté probando, adoptando la interfaz pública de los
objetos colaboradores

46 Módulo 4. Pruebas
Ventajas
 Son de fácil instanciación, ya que su objetivo es
comportarse como los objetos que simulan.

 Son infalibles, ya que si se detecta un fallo


haciendo la prueba de la clase con la que colabora
se sabe que el fallo está en dicha clase.

 Varias herramientas disponibles: JMock, Nmock,


Easymock…

 Permiten reducir el tiempo de las pruebas al


sustituir las clases colaboradoras por un código
mucho más simple.

47 Módulo 4. Pruebas
Ejemplo de uso de Mock Objects
 Probamos una clase denominada CajeroAutomatico.
 Esta clase en el diseño final utiliza otra clase
denominada PasarelaPago con la que mantiene una
comunicación durante las transacciones de los
clientes con el cajero

48 Módulo 4. Pruebas
Ejemplo de uso: método a probar
 El método realizarRetirada() usa una instancia del tipo
PasarelaPago.
 “Para cada operación que el cajero solicite a la pasarela, la
precondición es que primero se consulte si la pasarela instancia de la
pasarela está bloqueada, en cuyo caso se debe abortar la operación.
 Antes de intentar operaciones de retirada de efectivo mediante la
pasarela, se tiene que comprobar que el usuario tiene saldo
suficiente.”

49 Módulo 4. Pruebas
Proceso para usar Mock Objects
1. Crear los Mock Objects necesarios
• Se debe crear un Mock Object por cada objeto colaborador que
utilice la clase a probar.
• Las clases de los Mock Objects deben ser subclases de las clases
de los objetos colaboradores para evitar errores de compilación.

50 Módulo 4. Pruebas
Proceso para usar Mock Objects
2. Definir el comportamiento esperado de los Mock
Objects, estableciendo las expectativas (grabación):
• Qué métodos van a ser llamados desde la clase a probar.
• Con qué parámetros y (opcional) sus valores de retorno.
• La secuencia en las que se van a invocar los métodos.
• El número de invocaciones a cada método.

51 Módulo 4. Pruebas
Proceso para usar Mock Objects
3. Iniciar el mock (reproducción).
4. Ejecutar el método que se vaya a probar realizando la
prueba correspondiente.

52 Módulo 4. Pruebas
Proceso para usar Mock Objects
5. Decir a cada Mock Object involucrado en la prueba que
verifique si se cumplieron las expectativas
• Comprobar al finalizar la prueba que los Mock Objects
cumplieron las expectativas.
• Esto se puede hacer de manera automática usando las
herramientas que automatizan la técnica de los Mock
Objects.

53 Módulo 4. Pruebas
Herramientas de Mock Objects
 Características de las herramientas de Mock
Objects:
 Eliminan las tareas repetitivas a los desarrollador
debe repetir cuando usa la técnica de Mock Objects.
 Permiten utilizar de manera estándar la técnica de
los Mock Objects.
 Generan código legible y entendible para los
desarrolladores.
 Ejemplo: EasyMock
 Primera herramienta de manejo de Mock Objects para Java
desarrollada en el año 2001.
 Es una herramienta de software libre disponible en
http://www.easymock.org/

54 Módulo 4. Pruebas
Referencias
 Sánchez, Sicilia y Rodríguez (2011). Ingeniería del
Software, un enfoque desde la guía SWEBOK. Cap. 7:
Pruebas. Madrid: Garceta ed.
 Sommerville, Ian (2011). Ingeniería del Software, 9ª ed.
Pearson. Cap. 8.
 SWEBOK (2004). Guide to the Software Engineering
Book of Knowledge, Chap.5: Software testing.
http://www.computer.org/portal/web/swebok/
 IEEE (1990). Standard glossary of software engineering
terminology: IEEE Std610.12-1990.
 Bolaños, Sierra y Alarcón. (2007) Pruebas de software y
JUnit. Madrid: Pearson.
55 Módulo 4. Pruebas

También podría gustarte