La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

5. Ingeniería de Pruebas LS4128: Ingeniería del Software II DII – Universidad Nebrija Justo N. Hidalgo Sanz.

Presentaciones similares


Presentación del tema: "5. Ingeniería de Pruebas LS4128: Ingeniería del Software II DII – Universidad Nebrija Justo N. Hidalgo Sanz."— Transcripción de la presentación:

1 5. Ingeniería de Pruebas LS4128: Ingeniería del Software II DII – Universidad Nebrija Justo N. Hidalgo Sanz

2 Ingeniería de Pruebas - Justo Hidalgo2 Contenidos Introducción Introducción Pruebas Unitarias Pruebas Unitarias –Junit Utilizaremos los ejemplos que aparecen en el Framework de Junit.

3 Ingeniería de Pruebas - Justo Hidalgo3 Introducción Las pruebas son vitales en cualquier proyecto SW. Las pruebas son vitales en cualquier proyecto SW. Deben ser repetibles e incrementables. Deben ser repetibles e incrementables. Introducimos un framework de pruebas unitarias. Introducimos un framework de pruebas unitarias. Útil también para otro tipo de pruebas: sistemas, integración. Útil también para otro tipo de pruebas: sistemas, integración.

4 Ingeniería de Pruebas - Justo Hidalgo4 Pruebas Unitarias Durante el flujo de implementación de cualquier iteración de cualquier fase: 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

5 Ingeniería de Pruebas - Justo Hidalgo5 Utilización del main() public class Clase { public void f(String _s) { //… } public void g(int _i) {//…} public void h(Collection _c) {//…} public static void main(String args[]) { Clase miClase = new Clase(); miClase.f(string);miClase.g(25);miClase.h(v);}

6 Ingeniería de Pruebas - Justo Hidalgo6 Framework de Pruebas Conjunto de paquetes y clases que permita automatizar las pruebas unitarias. Conjunto de paquetes y clases que permita automatizar las pruebas unitarias. Framework sencillo y ligero de utilizar. Framework sencillo y ligero de utilizar. JUnit es una opción muy utilizada para Java. JUnit es una opción muy utilizada para Java. –Sencillo: realmente, el desarrollador podría implementarlo por su cuenta.

7 Ingeniería de Pruebas - Justo Hidalgo7 JUnit (I) Creado por Kent Beck. Creado por Kent Beck. –Gamma y Fowler también están involucrados. 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 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

8 Ingeniería de Pruebas - Justo Hidalgo8 Junit (y II) Utiliza como base el patrón Command. Utiliza como base el patrón Command. También el Template Method. También el Template Method. Y el Composite. Y el Composite.

9 Ingeniería de Pruebas - Justo Hidalgo9 Funcionamiento básico (I) Creación de una subclase de junit.framework.TestCase Creación de una subclase de junit.framework.TestCase Sobrecargar el método runTest() Sobrecargar el método runTest() Para comprobar el valor de un elemento: assertTrue(boolean) Para comprobar el valor de un elemento: assertTrue(boolean) –O assertEquals(xxx), assertNotNull(xxx), assertNotSame(xxx), … –Métodos de junit.framework.Assert

10 Ingeniería de Pruebas - Justo Hidalgo10 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));}

11 Ingeniería de Pruebas - Justo Hidalgo11 Fixtures (I) Utilizado con pruebas parecidas entre sí, sobre el mismo o similar conjunto de objetos. Utilizado con pruebas parecidas entre sí, sobre el mismo o similar conjunto de objetos. Test fixture: conjunto conocido 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. La idea es implementar primero el código del test fixture, que luego será utilizado por diferentes pruebas.

12 Ingeniería de Pruebas - Justo Hidalgo12 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.

13 Ingeniería de Pruebas - Justo Hidalgo13 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"); }}

14 Ingeniería de Pruebas - Justo Hidalgo14 Casos de Prueba (I) Realización de una prueba concreta sobre una o varias clases. 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.

15 Ingeniería de Pruebas - Justo Hidalgo15 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");

16 Ingeniería de Pruebas - Justo Hidalgo16 Casos de Prueba (III): ejemplo

17 Ingeniería de Pruebas - Justo Hidalgo17 Casos de Prueba (y IV): ejemplo

18 Ingeniería de Pruebas - Justo Hidalgo18 Suites (I) Es interesante poder realizar varios casos de prueba juntos. Es interesante poder realizar varios casos de prueba juntos. Se utiliza la clase junit.framework.TestSuite. Se utiliza la clase junit.framework.TestSuite.

19 Ingeniería de Pruebas - Justo Hidalgo19 Suites (II). Respuesta Un caso de prueba devuelve un TestResult: Un caso de prueba devuelve un TestResult: TestResult result= (new MoneyTest("testMoneyMoneyBag")).run(); Una suite, de la misma manera: 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: Otra opción: TestSuite suite= new TestSuite(MoneyTest.class); TestResult result= suite.run();

20 Ingeniería de Pruebas - Justo Hidalgo20 Suites (y III). En general… … las suites pueden contener cualquier objeto que implemente la interfaz junit.framework.Test … 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();

21 Ingeniería de Pruebas - Justo Hidalgo21 TestRunner (I) JUnit provee herramientas gráficas para visualizar suites de prueba. 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); }

22 Ingeniería de Pruebas - Justo Hidalgo22 TestRunner (II): ejecución Classpath: junit.jar y directorio de ejemplos Classpath: junit.jar y directorio de ejemplos Arranque de aplicación: Arranque de aplicación: –Versión AWT: java junit.awtui.TestRunner junit.awtui.TestRunner –Versión Swing: java junit.swingui.TestRunner junit.swingui.TestRunner –Versión Batch: java junit.textui.TestRunner junit.textui.TestRunner junit.textui.TestRunner.run(suite); junit.textui.TestRunner.run(suite);

23 Ingeniería de Pruebas - Justo Hidalgo23 TestRunner (y III): ejecución

24 Ingeniería de Pruebas - Justo Hidalgo24 Resumen

25 Ingeniería de Pruebas - Justo Hidalgo25 Conclusiones Alta densidad de patrones Alta densidad de patrones –Típico en frameworks maduros –Más difícil de cambiar Fácil de usar Fácil de usar –Pero muy completo. Enseña a hacer las cosas bien Enseña a hacer las cosas bien

26 Ingeniería de Pruebas - Justo Hidalgo26 Referencias JUnit Cookbook. Beck, K., Gamma, E. JUnit Cookbook. Beck, K., Gamma, E. JUnit. A Cooks tour. JUnit. A Cooks tour. JUnit Test Infected: Programmers Love Writing Tests. JUnit Test Infected: Programmers Love Writing Tests. Design Patterns. Gamma et al. Addison- Wesley. Design Patterns. Gamma et al. Addison- Wesley.


Descargar ppt "5. Ingeniería de Pruebas LS4128: Ingeniería del Software II DII – Universidad Nebrija Justo N. Hidalgo Sanz."

Presentaciones similares


Anuncios Google