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