Download Enlace a la presentación

Document related concepts
no text concepts found
Transcript
5. Ingeniería de Pruebas
LS4128: Ingeniería del Software II
DII – Universidad Nebrija
Justo N. Hidalgo Sanz
Contenidos
• Introducción
• Pruebas Unitarias
– Junit
Utilizaremos los ejemplos que aparecen en el Framework de Junit.
Ingeniería de Pruebas - Justo
Hidalgo
2
Introducción
• Las pruebas son vitales en cualquier
proyecto SW.
• Deben ser repetibles e incrementables.
• Introducimos un framework de pruebas
unitarias.
• Útil también para otro tipo de pruebas:
sistemas, integración.
Ingeniería de Pruebas - Justo
Hidalgo
3
Pruebas Unitarias
• Durante el flujo de implementación de
cualquier iteración de cualquier fase:
PRUEBAS UNITARIAS
1. Utilización del main()
2. Utilización de un Framework de Pruebas
Ingeniería de Pruebas - Justo
Hidalgo
4
Utilización del main()
public class Clase {
public
public
public
public
void f(String _s) { //… }
void g(int _i) {//…}
void h(Collection _c) {//…}
static void main(String args[]) {
Clase miClase = new Clase();
miClase.f(“string”);
miClase.g(25);
miClase.h(v);
}
Ingeniería de Pruebas - Justo
Hidalgo
5
Framework de Pruebas
• Conjunto de paquetes y clases que
permita automatizar las pruebas unitarias.
• Framework sencillo y ligero de utilizar.
• JUnit es una opción muy utilizada para
Java.
– Sencillo: realmente, el desarrollador podría
implementarlo por su cuenta.
Ingeniería de Pruebas - Justo
Hidalgo
6
JUnit (I)
• Creado por Kent Beck.
– Gamma y Fowler también están involucrados.
• www.junit.org
• Para control de pruebas y trazas, funciona
bien con log4Java (paquete de gestión de
trazas del proyecto Jakarta), o el sistema
de trazas estándar de J2SE1.4.x
Ingeniería de Pruebas - Justo
Hidalgo
7
Junit (y II)
• Utiliza como base el
patrón Command.
• También el Template
Method.
• Y el Composite.
Ingeniería de Pruebas - Justo
Hidalgo
8
Funcionamiento básico (I)
• Creación de una subclase de
junit.framework.TestCase
• Sobrecargar el método runTest()
• Para comprobar el valor de un elemento:
assertTrue(boolean)
– O assertEquals(xxx), assertNotNull(xxx),
assertNotSame(xxx), …
– Métodos de junit.framework.Assert
Ingeniería de Pruebas - Justo
Hidalgo
9
Funcionamiento básico (y II): ejemplo
public void testSimpleAdd() {
Money m12CHF= new Money(12, "CHF");
Money m14CHF= new Money(14, "CHF");
Money expected= new Money(26, "CHF");
Money result= m12CHF.add(m14CHF);
assertTrue(expected.equals(result));
}
Ingeniería de Pruebas - Justo
Hidalgo
10
Fixtures (I)
• Utilizado con pruebas parecidas entre sí,
sobre el mismo o similar conjunto de
objetos.
• Test fixture: conjunto conocido de objetos.
• La idea es implementar primero el código
del “test fixture”, que luego será utilizado
por diferentes pruebas.
Ingeniería de Pruebas - Justo
Hidalgo
11
Fixtures (II): funcionamiento
1. Crear una subclase de TestCase
2. Añadir una instancia para cada parte del
“fixture”.
3. Sobrecargar el método “setUp()” para
inicializar los atributos.
4. Sobrecargar “tearDown()” para liberar
los recursos almacenados en “setUp”.
Ingeniería de Pruebas - Justo
Hidalgo
12
Fixtures (y III): ejemplo
public class MoneyTest extends TestCase {
private Money f12CHF;
private Money f14CHF;
private Money f28USD;
protected void setUp() {
f12CHF= new Money(12, "CHF");
f14CHF= new Money(14, "CHF");
f28USD= new Money(28, "USD");
}
}
Ingeniería de Pruebas - Justo
Hidalgo
13
Casos de Prueba (I)
• Realización de una prueba concreta
sobre una o varias clases.
1. Escribir un método Fixture::testXXX()
2. Crear una instancia de la clase invocando
al constructor que permite describir el
testXXX a ejecutar.
3. Posteriormente, cada caso se organiza
en “suites”.
Ingeniería de Pruebas - Justo
Hidalgo
14
Casos de Prueba (II): ejemplo
1. Implementación del método:
public void testMoneyMoneyBag() {
// [12 CHF] + [14 CHF] + [28 USD] == {[26 CHF][28 USD]}
Money bag[]= { f26CHF, f28USD };
MoneyBag expected= new MoneyBag(bag);
assertEquals(expected, f12CHF.add(f28USD.add(f14CHF)));
}
2. Creación de la instancia de prueba:
new MoneyTest("testMoneyMoneyBag");
Ingeniería de Pruebas - Justo
Hidalgo
15
Casos de Prueba (III): ejemplo
Ingeniería de Pruebas - Justo
Hidalgo
16
Casos de Prueba (y IV): ejemplo
Ingeniería de Pruebas - Justo
Hidalgo
17
Suites (I)
• Es interesante poder realizar varios casos
de prueba juntos.
• Se utiliza la clase
junit.framework.TestSuite.
Ingeniería de Pruebas - Justo
Hidalgo
18
Suites (II). Respuesta
• Un caso de prueba devuelve un TestResult:
TestResult result= (new MoneyTest("testMoneyMoneyBag")).run();
• Una suite, de la misma manera:
TestSuite suite= new TestSuite();
suite.addTest(new MoneyTest("testMoneyEquals"));
suite.addTest(new MoneyTest("testSimpleAdd"));
TestResult result= suite.run();
• Otra opción:
TestSuite suite= new TestSuite(MoneyTest.class);
TestResult result= suite.run();
Ingeniería de Pruebas - Justo
Hidalgo
19
Suites (y III). En general…
• … las suites pueden contener cualquier
objeto que implemente la interfaz
junit.framework.Test
TestSuite suite= new TestSuite();
suite.addTest(Justo.suite());
suite.addTest(Juan.suite());
TestResult result= suite.run();
Ingeniería de Pruebas - Justo
Hidalgo
20
TestRunner (I)
• JUnit provee herramientas gráficas para
visualizar suites de prueba.
– Utilizar el método estático “suite()” de una forma:
public static Test suite() {
TestSuite suite= new TestSuite();
suite.addTest(new MoneyTest("testMoneyEquals"));
suite.addTest(new MoneyTest("testSimpleAdd"));
return suite;
}
– … u otra:
public static Test suite() {
return new TestSuite(MoneyTest.class);
}
Ingeniería de Pruebas - Justo
Hidalgo
21
TestRunner (II): ejecución
• Classpath: junit.jar y directorio de
ejemplos
• Arranque de aplicación:
– Versión AWT: java junit.awtui.TestRunner
– Versión Swing: java junit.swingui.TestRunner
– Versión Batch: java junit.textui.TestRunner
• junit.textui.TestRunner.run(suite);
Ingeniería de Pruebas - Justo
Hidalgo
22
TestRunner (y III): ejecución
Ingeniería de Pruebas - Justo
Hidalgo
23
Resumen
Ingeniería de Pruebas - Justo
Hidalgo
24
Conclusiones
• Alta densidad de patrones
– Típico en frameworks maduros
– Más difícil de cambiar
• Fácil de usar
– Pero muy completo.
• Enseña a hacer las cosas bien
Ingeniería de Pruebas - Justo
Hidalgo
25
Referencias
• JUnit Cookbook. Beck, K., Gamma, E.
www.junit.org
• JUnit. A Cook’s tour. www.junit.org
• JUnit Test Infected: Programmers Love
Writing Tests. www.junit.org
• Design Patterns. Gamma et al. AddisonWesley.
Ingeniería de Pruebas - Justo
Hidalgo
26