SlideShare una empresa de Scribd logo
1 de 113
Curso Técnico
             Test-Driven Development:
             Conceptos y Herramientas
              Centro de Excelencia IT




Título Presentación
NOTA: Prohibida la reproducción (total parcial) o distribución de este documento sin la autorización de ALTRAN en Españaen España
 NOTA: Prohibida la reproducción (total o o parcial) o distribución de este documento sin la autorización de ALTRAN                 Versión: xxxx   ž    Fecha: dd/mm/aaaa ž  División de Negocio ž  División de negocio
                                                                                                                                                            Versión: xxxx ž  Fecha: dd/mm/aaaa                               1
Sumario

           1.  Introducción
           2.  Test-Driven Development (TDD)
           3.  Herramientas
                         a.          Pruebas Unitarias
                         b.          Pruebas de Integración
                         c.          Pruebas de Rendimiento
                         d.          Calidad de Código




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   2
Introducción




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   3
Introducción


  Un poco de Historia
   ■ Años 90: Boom de las Punto Com


   ■ Los factores de éxito de un negocio son:
               q    Capacidad de crecimiento de la empresa
               q    Speed-to-market


   ■ Requisitos cambian constantemente
               q    Necesidad de ciclos de producción más cortos


   ■ Métodos tradicionales de desarrollo no proporcionan buenos resultados




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   4
Introducción


  Modelo de Desarrollo Tradicional

                                                                     Requisitos




                                                                                                     Análisis y
                                                                                                      Diseño




                                                                                                                             Implementación




                                                                                                                                                     Pruebas




                                                                                                                                                                        Mantenimiento



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España          Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   5
Introducción


  Coste de corrección de defectos
   ■ Es importante corregir los defectos lo antes posible



                                                                                                                              Momento en que se detecta
Coste de reparación de
 defectos en Software                                                                      Requisitos                        Arquitectura                Codificación                     Pruebas      Post-release


                                               Requisitos                                           1×                           3×                         5–10×                            10×       10–100×
Momento en
   que se                                    Arquitectura                                              -                         1×                            10×                           15×       25–100×
 introduce

                                             Codificación                                              -                          -                             1×                           10×        10–25×


Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España       Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio                  6
Introducción


  Extreme Programming
   ■ Metodología ágil de desarrollo creada por Kent Beck


   ■ Introduce múltiples releases y ciclos de vida más cortos


   ■ Énfasis en
               q    Código: Es el producto final
               q    Pruebas: Permiten detectar a tiempo los defectos y solucionarlos
               q    Comunicación: Permite la colaboración entre usuarios y programadores
               q    Simplicidad: Centrarse en lo realmente necesario (YAGNI)
               q    Feedback: Mediante pruebas, del usuario, del equipo




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   7
Introducción


  Test-Driven Development


   ■ Basado en los conceptos de pruebas de Extreme Programming


   ■ Desarrollado (o “redescubierto”) por Kent Beck


   ■ Énfasis en pruebas como guías del desarrollo




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   8
Test-Driven Development




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   9
TDD - Introducción


  Definición


   ■ Test-Driven Development es un proceso de desarrollo software que implica la
     creación de tests para comprobar funcionalidades antes de su codificación


   ■ Se basa en la repetición de ciclos muy cortos de desarrollo


   ■ Las pruebas automáticas se crean antes del código que van a comprobar




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   10
TDD – Ciclo de Desarrollo


  Ciclo de Desarrollo


   ■ Creación de pruebas automáticas


   ■ Comprobación de resultados de pruebas: Fallo


   ■ Codificación


   ■ Comprobación de resultados de pruebas: Éxito


   ■ Refactorización y mejora del código



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   11
TDD – Ciclo de Desarrollo


  Ciclo de Desarrollo




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   12
TDD – Ciclo de Desarrollo


  Creación de Pruebas
   ■ Se crea el interfaz o esqueleto del objeto a probar


   ■ Codificación de pruebas contra el interfaz


   ■ Describen la funcionalidad del objeto


   ■ Indicarán cuándo está terminado el desarrollo del subsistema a codificar

                                                                                                                             Interfaz
                                                                                                                                                                     Sistema a
                                    Test                                                                                                                              Probar


Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España       Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   13
TDD – Ciclo de Desarrollo


  Comprobación de Pruebas: Fallo


   ■ Se ejecutan los test contra una implementación vacía del interfaz


   ■ Se comprueba que fallan


   ■ Es importante para comprobar que los test necesitan nuevo código




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   14
TDD – Ciclo de Desarrollo


  Codificación
   ■ Se escribe el mínimo código para que los test pasen


   ■ Se centra en codificar la funcionalidad probada
               q    No se añade funcionalidad innecesaria
               q    No se añade nada que no se vaya a probar


   ■ No es necesario que sea perfecto
               q    Se mejorará posteriormente




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   15
TDD – Ciclo de Desarrollo


  Comprobación de Pruebas: Éxito
   ■ Se comprueba que el código cumple los test escritos


   ■ Proporciona seguridad sobre el proceso de desarrollo
               q    El código cumple con la funcionalidad
               q    Podemos modificar el código y detectar si lo “rompemos”




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   16
TDD – Ciclo de Desarrollo


  Refactorización y Mejora de Código
   ■ Cambios en código sin cambiar funcionalidad


   ■ Mejoras en el código y diseño
               q    Legibilidad
               q    Complejidad
               q    Mantenibilidad
               q    Extensibilidad


   ■ Proceso iterativo
               q    Descubrimiento y aplicación de patrones




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   17
TDD – Ciclo de Desarrollo


  Refactorización y Mejora de Código (II)
   ■ Ejemplos de refactorizáción
               q    Generalizar tipo
               q    Extraer método
               q    Extraer clase
               q    Extraer interfaz
               q    Pull Up / Push down




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   18
TDD - Ventajas y Riesgos


  Ventajas
   ■ Facilita el cambio
               q    Detección de fallos en funcionalidad
               q    Fail fast


   ■ Facilita la integración
               q    Los componentes funcionan unitariamente


   ■ Mejora el diseño del sistema
               q    Separación de interfaces e implementación
               q    Menos interdependencias
               q    Promueve refactorización y mejora del código
               q    Desarrollo lean


Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   19
TDD - Ventajas y Riesgos


  Ventajas (II)
   ■ Creación de batería de tests
               q    Facilita los tests de regresión
               q    Amplía la cobertura de código de los test
               q    Permite la realización de integración contínua


   ■ Mejora la productividad
               q    Evita depender de depuración de código
               q    Detecta los errores lo antes posible
               q    Se escribe sólo lo que se puede probar




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   20
TDD - Ventajas y Riesgos


  Riesgos
   ■ Limitaciones de pruebas unitarias
               q    No se puede probar todo
               q    Pruebas no deterministas (hebras…)
               q    Las pruebas pueden tener errores


   ■ Necesidad de pruebas de integración


   ■ Necesidad de tests adecuados
               q    Evitar tests frágiles
               q    Evitar ignorar tests
               q    La misma persona crea el test y el código



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   21
Test Driven Development:
                                   Resumen



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   22
TDD - Resumen


   ■ Test-Driven Development


               q    Metodología de desarrollo
               q    Ciclos cortos
               q    Se comienza por las pruebas
               q    Se desarrolla hasta que se cumplen
               q    Proceso de mejora contínua




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   23
TDD - Resumen




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   24
Herramientas de Test




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   25
Herramientas de Test


  Herramientas y Frameworks utilizados en TDD
   Apoyan el desarrollo utilizando TDD en varios ámbitos:


   ■ Pruebas Unitarias


   ■ Pruebas de Integración


   ■ Pruebas de Rendimiento y Carga


   ■ Calidad de Código




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   26
Pruebas Unitarias




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   27
Pruebas Unitarias


  Conceptos
   ■ Pruebas de una unidad de código fuente
               q    Interfaz, clase o método
               q    Evitar dependencias de otros subsistemas


   ■ Tests independientes entre sí
               q    Tratar de aislar el comportamiento de cada componente


   ■ Pueden ser automatizadas o automatizadas
               q    No nos planteamos pruebas manuales




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   28
Pruebas Unitarias


  Ventajas


   ■ Ayudan a encontrar defectos lo antes posible
               q    Recordemos el coste de arreglo de defectos
   ■ Facilita el cambio
               q    Permite mejorar el código asegurándonos que funciona
   ■ Simplifica la integración
               q    Comprueba que las piezas individuales funcionan




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   29
Pruebas Unitarias


  Limitaciones


   ■ No pueden detectar todos los errores
               q    Errores de integración
               q    Problemas de concurrencia
   ■ Necesidad de disciplina
               q    Necesario actualizar los test y no ignorarlos
   ■ Implican esfuerzo adicional
               q    Incluirlos en planificación
               q    Priorizar los casos de test




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   30
Pruebas Unitarias - xUnit


  Frameworks xUnit
   ■ Frameworks para la ejecución automática de pruebas
               q    Creado por Kent Beck


   ■ Disponibles en múltiples lenguajes y plataformas
               q    Java, .NET, PHP, Ruby, Python, C, C++, Flex, COBOL, Groovy, Erlang, MATLAB…


   ■ Se basan en los mismos conceptos:
               q    Assertions
               q    Tests
               q    Test Cases
               q    Fixtures
               q    Test Suites

Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   31
Pruebas Unitarias - xUnit


  Assertions
   ■ Son comprobaciones de valores y resultados


   ■ Si no se cumplen, finalizan el test actual


   ■ Registran la discrepancia de valores y el lugar donde se produjo


                       Result result = someOperation();

                       assertNotNull(result);
                       assertEquals("someIntAttr should be 5", 5, result.someIntAttr);
                       assertTrue("someBoolAttr should be true", result.someBoolAttr);



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   32
Pruebas Unitarias - xUnit


  Assertions (II)
   ■ Definición de métodos de conveniencia
               q    assertTrue / assertFalse
               q    assertNull / assertNotNull
               q    assertArrayEquals


   ■ fail(): Hace que el test falle. Útil para comprobar excepciones

                       try {
                            shouldThrowException();
                            fail("Should have thrown an exception");
                       } catch (ExceptionToCatch expected) {
                            // Should throw this exception
                       }


Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   33
Pruebas Unitarias - xUnit


  Tests
   ■ Cada una de las pruebas a realizar


   ■ Son métodos que utilizan aserciones para comprobar los resultados


   ■ Marcados con @Test (Junit 4) o su nombre comienza por test (JUnit3)


                       @Test
                       public void testSomething() {

                                                     Result result = someOperation();
                                                     assertNotNull(result);
                       }


Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   34
Pruebas Unitarias - xUnit


  Test Cases
   ■ Agrupación de tests
   ■ Son clases que contienen tests a ejecutar
   ■ JUnit ejecuta todos los test de un TestCase de forma predeterminada
                       public class SomeTest extendsTestCase {

                                      @Test
                                      public void test1() {
                                          // …
                                      }

                                      @Test
                                      public void test2() {
                                          // …
                                      }
                       }
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   35
Pruebas Unitarias - xUnit


  Test Fixtures
   ■ Es el contexto en el que se ejecuta cada test en un TestCase
               q    Inicializa recursos comunes a los tests
   ■ Utiliza cuatro anotaciones:
               q    @Before
                          ■  Se       ejecuta antes de todos los test de un TestCase
                          ■  Prepara               el contexto para los test
               q    @After
                          ■  Se       ejecuta después de todos los test de un TestCase
                          ■  Libera            recursos y deja el contexto como estaba antes de la ejecución
               q    @BeforeClass, @AfterClass
                          ■  Igual         que @Before y @After, pero se ejecutan una sola vez por TestCase

   ■ Es importante mantener el contexto exactamente igual
               q    El resultado de los test no debe depender de ejecuciones anteriores de otros tests
               q    La ejecución de un test no debe afectar al resto
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   36
Pruebas Unitarias - xUnit

  Test Fixtures (II)
                       public class SomeTest extendsTestCase {

                                      @BeforeClass
                                      protected void beforeClass() throws Exception {}

                                      @AfterClass
                                      protected void afterClass() throws Exception {}

                                      @Before
                                      protected void before() throws Exception {}

                                      @After
                                      protected void after() throws Exception {}

                                      @Test
                                      public void test1() {}

                                      @Test
                                      public void test2() {}
                       }

Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   37
Pruebas Unitarias - xUnit


  Test Fixtures (III)
   ■ Orden de ejecución




Before                                                                                                                                                                                               After
                                 Before                                 Test1                                 After           Before                         Test2                           After
Class                                                                                                                                                                                                Class




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio             38
Pruebas Unitarias - xUnit


  Test Suites


   ■ Agrupación de test cases


                       TestSuite suite = new TestSuite();
                       suite.addTestSuite(SomeTest.class);


   ■ Se suelen realizar agrupaciones a nivel de paquete o subsistema
               q    Los paquetes superiores incluyen los suites de los inferiores
               q    Estructura en árbol




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   39
Pruebas Unitarias - xUnit


  Ejecución


   ■ Por línea de comandos
               q    java org.junit.runner.JUnitCore TestClass


   ■ Mediante ant
               q    <junit> <test name="my.test.TestCase"/> </junit>


   ■ Mediante maven
               q    mvn test


   ■ Desde el entorno de desarrollo
               q    Run As… JUnit Test

Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   40
Pruebas Unitarias - xUnit


  Recomendaciones de Diseño de Tests


   ■ Unitarios
   ■ Pequeños
   ■ Rápidos
   ■ Comprensibles
   ■ Independientes
   ■ Probar casos extremos
               q    Parámetros nulos
               q    Colecciones vacías
               q    Manejo de errores
   ■ Escribir test para comprobar bugs


Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   41
Pruebas Unitarias - xUnit


  Fakes: Stubs y Mocks


   ■ Los test unitarios deben probar unidades aisladas


   ■ Casi siempre hay interacción con otros recursos
               q    Módulos o clases internas o externas
               q    Bases de Datos
               q    Comunicaciones
               q    …


   ■ No debemos realizar tests que dependan de otras
         unidades que no controlemos


Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   42
Pruebas Unitarias - xUnit


  Fakes: Stubs y Mocks (II)


   ■ Solución: Utilizar objetos que simulen el funcionamiento de los objetos reales


   ■ Stub: Objeto que implementa un interfaz y simula un funcionamiento
               q    Devuelve valores preprogramados


   ■ Mock: Stub que además realiza comprobaciones sobre:
               q    Orden de las invocaciones
               q    Parámetros utilizados
               q    Condiciones




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   43
Pruebas Unitarias - xUnit


  Fakes: Stubs y Mocks (III)


   ■ Librerías que ayudan al desarrollo con fakes
               q    JMock, MockObjects, EasyMock…


   ■ Permiten crear un objeto que cumple un interfaz y programar sus respuestas


   ■ Tres fases de utilización:
               q    Programación de métodos a invocar y respuestas (Grabación)
               q    Uso del objeto creado (Reproducción)
               q    Verificación de que se han invocado los métodos esperados
                      (Verificación)



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   44
Pruebas Unitarias - xUnit


  Fakes: Stubs y Mocks (IV)
                       EasyMock mock = EasyMock.createMock(InterfaceToMock.class);

                       // Fase de grabación
                       EasyMock.expect(mock.operation1(param1, param2)).andReturn(value);
                       EasyMock.expect(mock.operation2(param3)).andThrow(exception);
                       EasyMock.replay(mock);

                       // Uso
                       mock.operation1(param1, param2); // devolverá valor programado
                       try {
                           mock.operation2(param3); // lanzará excepción programada
                           fail(“Debería haber lanzado excepción”);
                       } catch (Exception ex) {
                       }

                       // Verificación
                       EasyMock.verify(mock);


Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   45
Pruebas Unitarias - xUnit


  Fakes: Stubs y Mocks - Ventajas


   ■ Evita dependencias de otros sistemas
               q    Pruebas más simples


   ■ Comprueba comportamiento, no sólo devuelve resultados
               q    Orden de invocación
               q    Parámetros de entrada
               q    Número de llamadas


   ■ Permite comprobar condiciones difíciles de simular
               q    Excepciones
               q    Variedad de resultados posibles

Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   46
Pruebas Unitarias:
                                                              Resumen



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   47
Pruebas Unitarias - Resumen


  Pruebas Unitarias
   ■ Base de las pruebas de desarrollo
               q    Tests de más bajo nivel


   ■ Permite ahorrar tiempo y coste detectando los errores lo antes posible


   ■ Su automatización nos proporciona seguridad
               q    Al incorporar nueva funcionalidad
               q    Ante cambios en el código


   ■ Importante: Diseño de tests
               q    Relevantes
               q    Unitarios
               q    Independientes
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   48
Pruebas Unitarias - Resumen


  Frameworks xUnit
   ■ Herramientas para la ejecución automática de tests unitarios


   ■ Basados en una estructura simple
               q    Crear contexto
                          ■  Crear           los objetos a probar y su estado (@before, @beforeClass)
               q    Ejecutar pruebas
                          ■  Realizar               operaciones (métodos @test)
                          ■  Comprobar                     resultados (assertions)
               q    Eliminar contexto
                          ■  Eliminar              los efectos del test y su estado (@after, @afterClass)
                          ■  Importante                   mantener tests independientes entre sí




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   49
Pruebas de Integración




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   50
Pruebas de Integración


  Conceptos
   ■ Pruebas de varios módulos o de todo el sistema


   ■ Comprobar que los módulos / sistemas están correctamente configurados y
     ensamblados


   ■ Paso previo a pruebas de aceptación


   ■ Pueden ser manuales o automatizadas




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   51
Pruebas de Integración:
                                       Bases de Datos



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   52
Pruebas de Integración – Bases de Datos


  Tests con Bases de Datos
   ■ Necesario realizar pruebas de acceso a datos
               q    Es uno de los puntos de integración más importantes de una aplicación


   ■ Necesidad de definir un estado consistente y conocido para las pruebas
               q    Cada test espera una serie de datos en base de datos


   ■ Un test no debería afectar a los demás
               q    El fallo de un test puede conducir a un estado inconsistente
               q    Posibilidad de degradación de datos de prueba


                                                                                                                             Clase a
                                       Test                                                                                                                                          BBDD
                                                                                                                             Probar

Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España        Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   53
Pruebas de Integración – Bases de Datos


  Tests con Bases de Datos - DBUnit
   ■ DBUnit permite definir los datos presentes antes de cada test


   ■ Importación de datos desde fuentes externas
               q    XML
               q    Excel
               q    Queries a Bases de Datos
               q    …


   ■ Prepara la BD antes y después
               q    Múltiples tipos de creación de datos y limpieza posterior
               q    Permite comprobar datos manualmente tras el fallo de un test



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   54
Pruebas de Integración – Bases de Datos


      Tests con Bases de Datos – DBUnit (II)
public class SampleTest extends DBTestCase
{
   public SampleTest(String name)
   {
     super( name );
     System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS,
"org.hsqldb.jdbcDriver" );
     System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL,
"jdbc:hsqldb:sample" );
     System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "sa" );
     System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "" );
   }

        protected IDataSet getDataSet() throws Exception
        {
          return new FlatXmlDataSetBuilder().build(new FileInputStream("dataset.xml"));
        }
}
    Título Presentación
    NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   55
Pruebas de Integración – Bases de Datos


  Tests con Bases de Datos – Spring Test (II)
   ■ Spring permite englobar los test en una transacción
               q    Invisible para el resto de tests
               q    No altera los datos existentes


   ■ Muy rápido


   ■ Necesario que los datos estén ya presentes o incluirlos en la ejecución del test


   ■ Sólo se pueden comprobar los resultados desde la ejecución del test


   ■ Requiere un bean que implemente PlatformTransactionManager
           en el contexto
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   56
Pruebas de Integración – Bases de Datos


  Tests con Bases de Datos – Spring Test (II)

   ■  public class DBTest extends AbstractTransactionalSpringContextTests {
   ■       protected String[] getConfigLocations() { return new String[] { "/es/altran/app/hibernate/
         applicationContext-hibernate.xml" }; }


   ■            public void test1 () {
                                obj.someMethod();
                }




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   57
Pruebas de Integración:
                                   Simulación de Entorno
                                         Servidor



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   58
Pruebas de Integración – Simulación Servidor


  Simulación de Servidor


   ■ Simulación del entorno proporcionado por un Servidor de Aplicaciones
               q    Forma parte del entorno proporcionado por el test


   ■ Permite aplicar las técnicas vistas anteriormente para tests unitarios

                                                                                                     Entorno de Test

                                                                                                                                Simulación
                                                                                                                              Entorno Servidor
                                                                                                                                      Sistema a
                                                               Test
                                                                                                                                       Probar


Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   59
Pruebas de Integración – Simulación Servidor


  Simulación de Servidor (II)


   ■ Ventajas
               q    Más rápido
               q    No implica despliegue


   ■ Desventajas
               q    Posibles dependencias de la implementación de servidor
               q    No comprueba la correcta configuración del servidor
               q    No es una prueba real del entorno final




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   60
Pruebas de Integración – Simulación Servidor


  Tests Unitarios de Servlets
   ■ Necesario simular:
               q    Contexto
               q    Configuración
               q    Sesión
               q    Peticiones


   ■ Spring Test proporciona clases que simulan el entorno y peticiones:
               q    MockServletContext
               q    MockServletConfig
               q    MockHttpSession
               q    MockHttpServletRequest
               q    MockHttpServletResponse


Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   61
Pruebas de Integración – Simulación Servidor


  Tests unitarios de EJBs
   ■ Dos alternativas:


   ■ No usar inyección de dependencias
               q    Utilizar inyección de dependencias diferente de @EJB, @Resource,
                     @PersistenceContext


   ■ Utilizar un EJB Container auto-contenido
               q    No forma parte de un servidor de aplicaciones
               q    Ejemplo: OpenEJB. Contiene JEE excepto servlets, JSP y JSF.




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   62
Pruebas de Integración – Simulación Servidor


  Tests de EJBs (II)
   ■ Usando OpenEJB

   ■  public class HelloBeanTest {
   ■  private Hello hello;


   ■  @Before public void bootContainer() throws Exception {
   ■                   Properties props = new Properties();
   ■                   props.put(Context.INITIAL_CONTEXT_FACTORY,
   ■  "org.apache.openejb.client.LocalInitialContextFactory");
   ■                   Context context = new InitialContext(props); hello = (Hello)
   ■                     context.lookup("HelloBeanLocal");
   ■            }
   ■  }

Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   63
Pruebas de Integración:
                                   Despliegue en Servidor



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   64
Pruebas de Integración – Despliegue en Servidor


  Despliegue en Servidor


   ■ Despliega el código a probar en un Servidor de Aplicaciones


   ■ Necesario utilizar otras técnicas para probar el código que está en otra JVM



                                                  Entorno de Test                                                              Entorno Servidor

                                                                                                                                       Sistema a
                                                                Test
                                                                                                                                        Probar




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   65
Pruebas de Integración – Despliegue en Servidor


  Despliegue en Servidor (II)


   ■ Ventajas
               q    Prueba la configuración del servidor
               q    Prueba más completa posible
               q    Posibilidad de desplegar en distintos entornos (Desarrollo, Integración,
                     Preproducción, Producción)


   ■ Desventajas
               q    Más lento: Necesario desplegar el código a probar. Importante automatización
               q    Necesidad de coordinación y política de despliegues en entornos compartidos




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   66
Pruebas de Integración – Despliegue en Servidor


  Creación de Cliente
   ■ Creación de un cliente para el código desplegado
   ■ Ejecución del cliente en JVM distinta del servidor
   ■ Permite probar el propio cliente
               q    Puede ser parte del entregable


   ■ Aplicable a:
               q    Servlets
               q    Servicios Web (SOAP y REST)
               q    EJBs
                                                                                                                                                                                                   Entorno
                                                                                                      Entorno de Test
                                                                                                                                                                                                   Servidor

                                                                                         Test                                                                                                      Sistema a
                                                                                                                                  Cliente
                                                                                                                                                                                                    Probar
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio               67
Pruebas de Integración – Despliegue en Servidor


  SoapUI
   ■ Herramienta externa para probar Servicios Web
               q    Funcionalidad
               q    Estrés / Carga


   ■ Definición de pasos de test y test suites
               q    Invocación a servicio (SOAP, REST, petición HTTP, AMF, JDBC)
               q    Scripting en Groovy
               q    Asserts específicos: Tipo de respuesta (SOAPResponse, SOAPFault), XPath, WS-
                     Security, contenido…


   ■ Ejecutables mediante la herramienta o desde JUnit



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   68
Pruebas de Integración – Despliegue en Servidor


  JUnit en Servidor: JUnitEE
   ■ El despliegue en servidor incluye el código de tests
               q    Solución invasiva


   ■ Despliegue de servlet que controla la ejecución de tests
               q    Mediante interfaz gráfico
               q    Mediante tarea Ant


   ■ El servlet se invoca desde el cliente que lanza la prueba

                     Entorno de Test                                                                                                  Entorno Servidor

                               Cliente                                                                   Servlet                                                                                   Sistema a
                                                                                                                                                     Tests
                                                                                                                                                      Tests
                               JUnitEE                                                                  JUnitEE                                        Tests                                        Probar
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio               69
Pruebas de Integración:
                                         Resumen



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   70
Pruebas de Integración – Resumen


  Pruebas de Integración
   ■ Permiten probar varios componentes interconectados


   ■ Integración con recursos externos (BBDD)
               q    Preparación del entorno


   ■ Integración simulando un entorno
               q    Rápidas
               q    No son completas


   ■ Integración con un entorno
               q    Las más completas
               q    Implican disponibilidad de un entorno para desplegar
               q    Intentar ser lo menos invasivo posible
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   71
Pruebas de Integración:
                                       Interfaces Web



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   72
Pruebas de Integración – Interfaces Web


  Pruebas de Interfaces Web
   ■ Las pruebas de interfaces web son las más complejas de automatizar
               q    Múltiples navegadores
               q    Identificación de elementos a comprobar y sobre los que realizar acciones
               q    Javascript
               q    AJAX


   ■ Dos tipos de pruebas posibles
               q    Sin utilizar navegador web
               q    Utilizando navegador web




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   73
Pruebas de Integración – Interfaces Web


  Pruebas Sin Navegador


   ■ Interpretan el HTML devuelto por peticiones HTTP


   ■ Interaccionan con la aplicación web realizando peticiones HTTP y
     comprobando la respuesta



                                                                                                                                                                  Entorno
                                                  Entorno de Test
                                                                                                                                                                  Servidor

                                                                  Test                                                                                          Aplicación
                                                                                                                             HTTP                                 Web



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España          Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   74
Pruebas de Integración – Interfaces Web


  Pruebas Sin Navegador


   ■ Ventajas
               q    Muy rápidas
               q    No dependen de un navegador: Ejecutables desde cualquier cliente


   ■ Desventajas
               q    Muy bajo nivel: Tiempo de desarrollo y mantenimiento
               q    No comprueban compatibilidad de navegadores
               q    Difícil probar Javascript y AJAX




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   75
Pruebas de Integración – Interfaces Web


  Pruebas Sin Navegador - HtmlUnit
   ■ Simula un navegador web
               q    Intenta simular distintas versiones de navegadores


   ■ Métodos para encontrar elementos HTML


   ■ Simulación de Javascript
               q    Uso de motor Rhino
               q    Diferencias con motores de navegadores reales




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   76
Pruebas de Integración – Interfaces Web


  Pruebas Sin Navegador – HtmlUnit (II)
   ■  // Navega a página
   ■  WebClient webClient = new WebClient();
   ■  HtmlPage page = webClient.getPage("http://some_url");


   ■  // Obtención de elementos
   ■  HtmlDivision div = page.getHtmlElementById("some_div_id");
   ■  HtmlAnchor anchor = page.getAnchorByName("anchor_name");


   ■  // Formulario
   ■  HtmlForm form = page1.getFormByName("myform");
   ■  HtmlSubmitInput button = form.getInputByName("submitbutton");
   ■  HtmlTextInput textField = form.getInputByName("userid");
   ■  textField.setValueAttribute("root");
   ■  HtmlPage page2 = button.click();
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   77
Pruebas de Integración – Interfaces Web


  Pruebas Con Navegador
   ■ Utiliza un navegador web real
               q    Prueba más completa
               q    Permite comprobar la compatibilidad con el navegador utilizado


   ■ No todas las herramientas soportan todos los navegadores
               q    Importante si hay que comprobar compatibilidad

                                                                                                                                                                              Entorno
                                                           Entorno de Test
                                                                                                                                                                              Servidor

                                               Test                                                                                                                          Aplicación
                                                                                                    Navegador                         HTTP                                     Web




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   78
Pruebas de Integración – Interfaces Web


  Pruebas Con Navegador – Selenium IDE


   ■ Entorno de grabación y reproducción de tests


   ■ Ejecución como plugin de Firefox


   ■ Ayuda a la creación de asserts en los test


   ■ Grabación de tests en varios formatos




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   79
Pruebas de Integración – Interfaces Web




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   80
Pruebas de Integración – Interfaces Web


  Pruebas Con Navegador – Selenium WebDriver
   ■ Permite enviar comandos a un Browser Driver
               q    Bindings para Java, .NET, Python, Ruby, PHP…


   ■ El Browser Driver lanza el navegador y ejecuta los comandos enviados
               q    Utiliza el soporte para automatización propio de cada navegador


   ■ Soporte para múltiples navegadores
               q    Internet Explorer
               q    Firefox
               q    Chrome
               q    Opera
               q    Android (emulador y dispositivo)
               q    iOS (emulador y dispositivo)
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   81
Pruebas de Integración – Interfaces Web


  Pruebas Con Navegador – Selenium WebDriver




                                                                                                                                                                                             Entorno
                                                                       Entorno de Test
                                                                                                                                                                                             Servidor
                                                                                Firefox                                      Navegador
                                                                               WebDriver                                      Firefox                          HTTP
                                                                                                                                                                                           Aplicación
                         Test
                                                                                  IE                                         Navegador                                                       Web
                                                                               WebDriver                                        IE                             HTTP




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio        82
Pruebas de Integración – Interfaces Web


  Pruebas Con Navegador – Selenium WebDriver

   ■  WebDriver driver = new FirefoxDriver();


   ■  driver.get("http://www.google.com");


   ■  WebElement element = driver.findElement(By.name("q"));
   ■  element.sendKeys("Cheese!");
   ■  element.submit();


   ■  System.out.println("Page title is: " + driver.getTitle());


   ■  driver.quit();



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   83
Pruebas de Integración – Interfaces Web


  Pruebas Con Navegador – Selenium Grid
   ■ Centraliza la ejecución de tests en varias máquinas
   ■ Hub
               q    Tiene registrados los nodos a utilizar para las pruebas
               q    Registra los distintos navegadores de cada uno de los nodos
               q    Permite a los tests utilizar los navegadores de cada nodo
               q    Centraliza los distintos navegadores y versiones instalados
               q    Permite ejecutar tests en paralelo
   ■ Nodo
               q    Proporciona instancias de navegadores
               q    Tipo y versión de navegadores específicas




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   84
Pruebas de Integración – Interfaces Web


  Pruebas Con Navegador – Selenium Grid



                                                                                                                              Entorno Test 1                                                  Entorno Servidor

                                                                                                                          IE                          Navegador
                                                                                                                       WebDriver                         IE

  Entorno de                                      Entorno Selenium
 Test - Cliente                                         Hub
                                                                                                                                                                                                    Aplicación
        Test                                        Selenium Hub                                                                                                                                      Web
                                                                                                                              Entorno Test 2

                                                                                                                        Firefox                       Navegador
                                                                                                                       WebDriver                       Firefox




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España    Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio
Pruebas de Interfaces Web:
                           Resumen



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   86
Pruebas de Interfaces Web – Resumen


  Pruebas de Interfaces Web

   ■ Más complejas de definir y ejecutar


   ■ Pruebas sin navegador
               q    Menos completas
               q    De bajo nivel


   ■ Pruebas con navegador
               q    Más completas
               q    Determinar si es necesario comprobar compatibilidad




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   87
Pruebas de Rendimiento




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   88
Pruebas de Rendimiento


  Conceptos
   ■ Pruebas de requisitos no funcionales


   ■ Pruebas dedicadas a comprobar el comportamiento del sistema ante el acceso
     desde múltiples clientes


   ■ Varios tipos:
               q    Prueba de carga: Comprobar cómo se comporta el sistema con una carga
                     determinada.
               q    Prueba de estrés: Comprobar cuáles son los límites del sistema
               q    Prueba de resistencia: Comprobar si el sistema puede soportar
                     la carga esperada de forma continua.
               q    Pruebas “de pico”: Comprobar cómo se comporta el sistema ante
                      una variación repentina en la carga
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   89
Pruebas de Rendimiento


  JUnitPerf
   ■ Extensión de JUnit
   ■ Define decoradores para pruebas de carga y tiempo
               q    TimedTest: El test falla si pasa de un límite de tiempo

   ■  long maxElapsedTime = 1000;
   ■  Test testCase = new ExampleTestCase("testOneSecondResponse");
   ■  Test timedTest = new TimedTest(testCase, maxElapsedTime);

               q    LoadTest: El mismo test se realiza de forma concurrente, pudiendo especificar
                     pausas y repeteiciones

  ■  int users = 10; int iterations = 20; Timer timer = new ConstantTimer(1000);
  ■  Test testCase = new ExampleTestCase("testOneSecondResponse");
  ■  Test repeatedTest = new RepeatedTest(testCase, iterations);
  ■  Test loadTest = new LoadTest(repeatedTest, users, timer);
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   90
Pruebas de Rendimiento - JMeter


  JMeter
   ■ Aplicación de escritorio para pruebas de carga
   ■ Permite probar varios tipos de recursos
               q    Web (HTTP)
               q    SOAP
               q    JDBC
               q    Web Services
               q    JMS


   ■ Permite simular condiciones complejas de carga
   ■ Representación gráfica de las pruebas
   ■ Posibilidad de realizar tests distribuidos
   ■ Extensible mediante plugins

Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   91
Pruebas de Rendimiento - JMeter


  Jmeter (II)
   ■ Varios tipos de elementos:
               q    ThreadGroup: Controlan las hebras que ejecutarán los test
                          ■  Nº      de hilos
                          ■  Iteraciones

                          ■  Periodo               de subida
               q    Samplers: Toman medidas
                          ■  SOAP,              HTTP, JDBC, Mail, JMS, LDAP, FTP…
               q    Controllers: Modifican el flujo de los test
                          ■  Bucles,              aleatorio…
               q    Aserciones: Realizan comprobaciones sobre los resultados
               q    Listeners: Reciben e interpretan los resultados de las medidas
                          ■  Gráficos,                resúmenes, …




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   92
Pruebas de Rendimiento - JMeter


  Jmeter (III)


                            ThreadGroup                                                         Thread                          Controller

                                                                                               Thread
                                                                                                                                  Sampler                                                  Sistema a
                                                                                                                                                                                            Probar
                                                                                   Listener                                      Assertion


                                                                                                                                  Sampler


                                                                                                                                Controller



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio       93
Calidad de Tests




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   94
Calidad de Tests


  Cobertura de Código
   ■ Mide cuánto se ha probado del código fuente


   ■ Criterios básicos:
               q    Cobertura de Líneas: Número de líneas probadas por los tests
               q    Cobertura de Condicionales (Branch): Todas las condiciones (if… else) han sido
                     probadas


   ■ Permite cuantificar la cantidad de código probada
               q    Puede ser engañoso
               q    No se comprueban los valores posibles de las variables


   ■ Es una medida indicativa para centrar los esfuerzos
         de desarrollo de test
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   95
Calidad de Tests


  Cobertura de Código - Cobertura
   ■ Instrumenta el código a nivel de bytecode


   ■ Vuelca los resultados de las clases instrumentadas y genera informes


   ■ Permite introducir umbrales mínimos de cobertura


   ■ Se integra con Ant y Maven




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   96
Integración Contínua




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   97
Integración Contínua


  Conceptos
   ■ Aplicación de procesos de calidad constantemente durante el desarrollo


   ■ Actualización frecuente desde / hacia el repositorio para evitar rehacer trabajo
               q    Comprobar los test antes de subir código
               q    Construcción automática del código del repositorio


   ■ Ventajas
               q    Evita que QA sea un paso posterior a desarrollo
               q    Evita errores de merge en el repositorio
               q    Facilita la integración de nueva funcionalidad
   ■ Inconvenientes
               q    Necesidad de disciplina en el desarrollo

Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   98
Integración Contínua


  Jenkins
   ■ Herramienta de integración contínua ejecutable en entorno Servlet
   ■ Ejecuta builds de proyectos desde el repositorio
               q    Disparados por nuevas subidas, periódicamente o por otros builds
               q    Puede incluir la ejecución de los test y análisis de cobertura
               q    Integración con herramientas de bug tracking
               q    Muestra evolución y tendencias
   ■ Se integra con múltiples tipos de repositorios y herramientas de construcción
               q    Repositorios: SVN, CVS, Git, Mercurial, Perforce, ClearCase
               q    Herramientas: Maven, Ant, scripts

                                                                                                                         Entorno QA                                        Repositorio
                                                                                                                                                                           de Código
                                                                                                                             Jenkins

Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España       Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   99
Integración Contínua


  Jenkins - Ventajas
   ■ Ejecuta clean builds (código existente en el repositorio)


   ■ Comprobación constante del repositorio, incluyendo sus ramas


   ■ Permite evaluar las tendencias en la evolución del desarrollo
               q    Número de tests y resultados
               q    Calidad de código (PMD, CheckStyle)
               q    Cobertura de tests


   ■ Notificación de resultados


   ■ Extensible mediante plugins
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   100
Conclusiones




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   101
Conclusiones


  Test-Driven Development


   ■ Automatización de tests fundamental


   ■ Los tests son los protagonistas
               q    Qué (funcionalidad) antes del cómo (implementación)
               q    Condicionan el diseño
               q    Validan el código creado


   ■ Principios aplicables a metodologías ágiles y no ágiles




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   102
Conclusiones


  Herramientas disponibles
   ■ Pruebas Unitarias
               q    Frameworks xUnit / Otros
               q    Mocks
   ■ Integración con recursos externos
               q    Bases de datos, LDAP, Mail, Sistemas Legados…
               q    Importante disponer de un contexto esperado y restablecerlo.
   ■ Integración
               q    En el sistema final o simulándolo
   ■ Calidad de Código
               q    Cobertura de tests, convenciones de código…
   ■ Integración Continua
               q    Construcción y pruebas automatizadas

Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   103
Conclusiones


  ¿Qué debemos probar?


   ■ Funcionalidades críticas para el negocio
               q    Priorizar casos de prueba
               q    Cobertura de código de los test
               q    Pruebas de Integración


   ■ Funcionalidades más utilizadas


   ■ Crear pruebas para los bugs conocidos
               q    Pruebas de regresión




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   104
Conclusiones


  ¿Qué debemos tener en cuenta?


   ■ Diseñar para facilitar tests
               q    Interfaces
               q    Inyección de dependencias
               q    Aislar puntos de integración


   ■ Posibles configuraciones
               q    Desarrollo
               q    Integración
               q    Preproducción
               q    Producción



Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   105
Conclusiones


  Priorización de casos de prueba – Pruebas Unitarias


   ■ Funcionalidad de la unidad
               q    Todos los casos posibles


   ■ Integración con otras unidades
               q    Posibles respuestas
               q    Tratamiento de excepciones


   ■ Casos extremos


   ■ Código "de relleno"


Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   106
Conclusiones


  Priorización de casos de prueba – Pruebas de Integración


   ■ Funcionalidad a alto nivel
               q    Operaciones más comunes
               q    Abarcar funcionalidad completa


   ■ Respuesta ante fallos
               q    Excepciones
               q    Falta de respuesta
               q    Resultados inesperados


   ■ Casos extremos


Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   107
Conclusiones


  Priorización de casos de prueba – Pruebas de Rendimiento


   ■ Validación de concurrencia
               q    Comprobar que el sistema funciona con múltiples usuarios


   ■ Depende de la criticidad y SLAs
               q    Pruebas de carga
               q    Estrés
               q    Resistencia




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   108
Conclusiones


  Priorización de casos de prueba – Calidad y Cobertura


   ■ Desde el principio
               q    Visibilidad de evolución


   ■ Son herramientas e indicadores, no verdades absolutas
               q    Sentido crítico en la interpretación de las pruebas


   ■ Cuestión de disciplina
               q    Actuar en función de los resultados




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   109
Conclusiones


  Reflexiones finales
   ■ Si no está probado…
               q    No sabes si funciona
               q    Miedo al cambio
               q    El coste de desarrollar se incrementa
               q    No hay predecibilidad
   ■ Convertir en metodología
               q    Inculcar la cultura de test
               q    Implicar a management
               q    Contar con los costes
   ■ La calidad se paga
               q    Buena: Coste de desarrollo
               q    Mala: Coste de mantenimiento, deuda tecnológica,
                     satisfacción del cliente
Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   110
Preguntas




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   111
Gracias a todos




Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   112
www.altran.es


Título Presentación
NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España   Versión: xxxx   ž    Fecha: dd/mm/aaaa   ž    División de Negocio   113

Más contenido relacionado

La actualidad más candente

TDD 101 - Introducción al Desarrollo Dirigido por Pruebas
TDD 101 - Introducción al Desarrollo Dirigido por PruebasTDD 101 - Introducción al Desarrollo Dirigido por Pruebas
TDD 101 - Introducción al Desarrollo Dirigido por PruebasOrlando Bustos Mateluna
 
Workshop - Pruebas Unitarias (con Java)
Workshop - Pruebas Unitarias (con Java)Workshop - Pruebas Unitarias (con Java)
Workshop - Pruebas Unitarias (con Java)microgestion
 
TDD y Python
TDD y PythonTDD y Python
TDD y PythonJavier_J
 
Introducción a las Pruebas Software
Introducción a las Pruebas SoftwareIntroducción a las Pruebas Software
Introducción a las Pruebas SoftwareMicael Gallego
 
Presentacion de xp scrum UDO MONAGAS AYDSI- I- 2014
Presentacion de xp scrum UDO MONAGAS AYDSI- I- 2014Presentacion de xp scrum UDO MONAGAS AYDSI- I- 2014
Presentacion de xp scrum UDO MONAGAS AYDSI- I- 2014marihencely
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)Senior Dev
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurancewill2294
 
Extreme programming (1)
Extreme programming (1)Extreme programming (1)
Extreme programming (1)Enrique Polo
 
Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4Paulo Clavijo
 
Introducción a TDD
Introducción a TDDIntroducción a TDD
Introducción a TDDFran Grau
 
Como ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesComo ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesMicael Gallego
 
Introducción a la Programación Extrema (XP)
Introducción a la Programación Extrema (XP)Introducción a la Programación Extrema (XP)
Introducción a la Programación Extrema (XP)Israel Antezana Rojas
 

La actualidad más candente (20)

TDD 101 - Introducción al Desarrollo Dirigido por Pruebas
TDD 101 - Introducción al Desarrollo Dirigido por PruebasTDD 101 - Introducción al Desarrollo Dirigido por Pruebas
TDD 101 - Introducción al Desarrollo Dirigido por Pruebas
 
Presentación: xUnit y Junit
Presentación: xUnit y JunitPresentación: xUnit y Junit
Presentación: xUnit y Junit
 
Workshop - Pruebas Unitarias (con Java)
Workshop - Pruebas Unitarias (con Java)Workshop - Pruebas Unitarias (con Java)
Workshop - Pruebas Unitarias (con Java)
 
Seminario SOLID-TDD
Seminario SOLID-TDDSeminario SOLID-TDD
Seminario SOLID-TDD
 
TDD y Python
TDD y PythonTDD y Python
TDD y Python
 
TDD talk
TDD talkTDD talk
TDD talk
 
Introducción a las Pruebas Software
Introducción a las Pruebas SoftwareIntroducción a las Pruebas Software
Introducción a las Pruebas Software
 
Presentacion de xp scrum UDO MONAGAS AYDSI- I- 2014
Presentacion de xp scrum UDO MONAGAS AYDSI- I- 2014Presentacion de xp scrum UDO MONAGAS AYDSI- I- 2014
Presentacion de xp scrum UDO MONAGAS AYDSI- I- 2014
 
Modulo 1
Modulo 1Modulo 1
Modulo 1
 
Manual01
Manual01Manual01
Manual01
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
 
Software Quality Assurance
Software Quality AssuranceSoftware Quality Assurance
Software Quality Assurance
 
Extreme programming (1)
Extreme programming (1)Extreme programming (1)
Extreme programming (1)
 
Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4Tests Unitarios con JUnit 4
Tests Unitarios con JUnit 4
 
Introducción a TDD
Introducción a TDDIntroducción a TDD
Introducción a TDD
 
Como ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicacionesComo ser mas productivo en el desarrollo de aplicaciones
Como ser mas productivo en el desarrollo de aplicaciones
 
Unidad ii. tdd
Unidad ii. tddUnidad ii. tdd
Unidad ii. tdd
 
Examen final3 istqb_-sr
Examen final3 istqb_-srExamen final3 istqb_-sr
Examen final3 istqb_-sr
 
Introducción a la Programación Extrema (XP)
Introducción a la Programación Extrema (XP)Introducción a la Programación Extrema (XP)
Introducción a la Programación Extrema (XP)
 
BDD y tests automatizados
BDD y tests automatizadosBDD y tests automatizados
BDD y tests automatizados
 

Similar a Test Driven Development

Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema Lis Pater
 
Metodologías Ágiles en la Práctica
Metodologías Ágiles en la PrácticaMetodologías Ágiles en la Práctica
Metodologías Ágiles en la PrácticaManuel Rubio
 
Abstracta - Performance Mobile - Monkop y Blazemeter
Abstracta - Performance Mobile - Monkop y BlazemeterAbstracta - Performance Mobile - Monkop y Blazemeter
Abstracta - Performance Mobile - Monkop y BlazemeterMatias Reina
 
Abstracta - Performance Mobile - Monkop y Blazemeter
Abstracta - Performance Mobile - Monkop y BlazemeterAbstracta - Performance Mobile - Monkop y Blazemeter
Abstracta - Performance Mobile - Monkop y BlazemeterMatias Reina
 
s05 - paradigma de construcción de soluciones basado en desarrollo de código
s05 - paradigma de construcción de soluciones basado en desarrollo de códigos05 - paradigma de construcción de soluciones basado en desarrollo de código
s05 - paradigma de construcción de soluciones basado en desarrollo de códigoMario Solarte
 
15 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 200915 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 2009Pepe
 
Presentacion modelos de proceso Grupo 3
Presentacion modelos de proceso Grupo 3Presentacion modelos de proceso Grupo 3
Presentacion modelos de proceso Grupo 3Bruno
 
09 Atos
09 Atos09 Atos
09 AtosPepe
 
ALM09 - Scrum, Visual Studio y Buenas Prácticas
ALM09 - Scrum, Visual Studio y Buenas PrácticasALM09 - Scrum, Visual Studio y Buenas Prácticas
ALM09 - Scrum, Visual Studio y Buenas PrácticasRodrigo Corral
 
Insight Brou 2009 11 Encuentro Usr Rational Gur07
Insight Brou 2009 11   Encuentro Usr Rational Gur07Insight Brou 2009 11   Encuentro Usr Rational Gur07
Insight Brou 2009 11 Encuentro Usr Rational Gur07Irene Pazos Viana
 
Ingeniería del software 3
Ingeniería del software 3Ingeniería del software 3
Ingeniería del software 3enayluis
 
Xtreme Programming
Xtreme ProgrammingXtreme Programming
Xtreme ProgrammingNoretSarted
 
14 Tissat Solo Pruebas 2009
14 Tissat Solo Pruebas 200914 Tissat Solo Pruebas 2009
14 Tissat Solo Pruebas 2009Pepe
 
Modelo xp para desarrollo de proyecto
Modelo xp para desarrollo de proyectoModelo xp para desarrollo de proyecto
Modelo xp para desarrollo de proyectoJohita Guerrero
 
Metodologia xp
Metodologia xpMetodologia xp
Metodologia xp0202278446
 
Caminando hacia la agilidad con Visual Studio 2010
Caminando hacia la agilidad con Visual Studio 2010Caminando hacia la agilidad con Visual Studio 2010
Caminando hacia la agilidad con Visual Studio 2010Rodrigo Corral
 

Similar a Test Driven Development (20)

Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema Metodologias agiles Programacion Xtrema
Metodologias agiles Programacion Xtrema
 
Metodologías Ágiles en la Práctica
Metodologías Ágiles en la PrácticaMetodologías Ágiles en la Práctica
Metodologías Ágiles en la Práctica
 
Diapositivas xp
Diapositivas xpDiapositivas xp
Diapositivas xp
 
Clase 03 XP
Clase 03 XPClase 03 XP
Clase 03 XP
 
Abstracta - Performance Mobile - Monkop y Blazemeter
Abstracta - Performance Mobile - Monkop y BlazemeterAbstracta - Performance Mobile - Monkop y Blazemeter
Abstracta - Performance Mobile - Monkop y Blazemeter
 
Abstracta - Performance Mobile - Monkop y Blazemeter
Abstracta - Performance Mobile - Monkop y BlazemeterAbstracta - Performance Mobile - Monkop y Blazemeter
Abstracta - Performance Mobile - Monkop y Blazemeter
 
s05 - paradigma de construcción de soluciones basado en desarrollo de código
s05 - paradigma de construcción de soluciones basado en desarrollo de códigos05 - paradigma de construcción de soluciones basado en desarrollo de código
s05 - paradigma de construcción de soluciones basado en desarrollo de código
 
15 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 200915 Upm Solo Pruebas 2009
15 Upm Solo Pruebas 2009
 
Presentacion modelos de proceso Grupo 3
Presentacion modelos de proceso Grupo 3Presentacion modelos de proceso Grupo 3
Presentacion modelos de proceso Grupo 3
 
Pruebas - Fundamentos
Pruebas - FundamentosPruebas - Fundamentos
Pruebas - Fundamentos
 
Pruebas fundamentos
Pruebas fundamentosPruebas fundamentos
Pruebas fundamentos
 
09 Atos
09 Atos09 Atos
09 Atos
 
ALM09 - Scrum, Visual Studio y Buenas Prácticas
ALM09 - Scrum, Visual Studio y Buenas PrácticasALM09 - Scrum, Visual Studio y Buenas Prácticas
ALM09 - Scrum, Visual Studio y Buenas Prácticas
 
Insight Brou 2009 11 Encuentro Usr Rational Gur07
Insight Brou 2009 11   Encuentro Usr Rational Gur07Insight Brou 2009 11   Encuentro Usr Rational Gur07
Insight Brou 2009 11 Encuentro Usr Rational Gur07
 
Ingeniería del software 3
Ingeniería del software 3Ingeniería del software 3
Ingeniería del software 3
 
Xtreme Programming
Xtreme ProgrammingXtreme Programming
Xtreme Programming
 
14 Tissat Solo Pruebas 2009
14 Tissat Solo Pruebas 200914 Tissat Solo Pruebas 2009
14 Tissat Solo Pruebas 2009
 
Modelo xp para desarrollo de proyecto
Modelo xp para desarrollo de proyectoModelo xp para desarrollo de proyecto
Modelo xp para desarrollo de proyecto
 
Metodologia xp
Metodologia xpMetodologia xp
Metodologia xp
 
Caminando hacia la agilidad con Visual Studio 2010
Caminando hacia la agilidad con Visual Studio 2010Caminando hacia la agilidad con Visual Studio 2010
Caminando hacia la agilidad con Visual Studio 2010
 

Último

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 

Último (10)

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 

Test Driven Development

  • 1. Curso Técnico Test-Driven Development: Conceptos y Herramientas Centro de Excelencia IT Título Presentación NOTA: Prohibida la reproducción (total parcial) o distribución de este documento sin la autorización de ALTRAN en Españaen España NOTA: Prohibida la reproducción (total o o parcial) o distribución de este documento sin la autorización de ALTRAN Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio ž  División de negocio Versión: xxxx ž  Fecha: dd/mm/aaaa 1
  • 2. Sumario 1.  Introducción 2.  Test-Driven Development (TDD) 3.  Herramientas a.  Pruebas Unitarias b.  Pruebas de Integración c.  Pruebas de Rendimiento d.  Calidad de Código Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 2
  • 3. Introducción Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 3
  • 4. Introducción Un poco de Historia ■ Años 90: Boom de las Punto Com ■ Los factores de éxito de un negocio son: q  Capacidad de crecimiento de la empresa q  Speed-to-market ■ Requisitos cambian constantemente q  Necesidad de ciclos de producción más cortos ■ Métodos tradicionales de desarrollo no proporcionan buenos resultados Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 4
  • 5. Introducción Modelo de Desarrollo Tradicional Requisitos Análisis y Diseño Implementación Pruebas Mantenimiento Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 5
  • 6. Introducción Coste de corrección de defectos ■ Es importante corregir los defectos lo antes posible Momento en que se detecta Coste de reparación de defectos en Software Requisitos Arquitectura Codificación Pruebas Post-release Requisitos 1× 3× 5–10× 10× 10–100× Momento en que se Arquitectura - 1× 10× 15× 25–100× introduce Codificación - - 1× 10× 10–25× Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 6
  • 7. Introducción Extreme Programming ■ Metodología ágil de desarrollo creada por Kent Beck ■ Introduce múltiples releases y ciclos de vida más cortos ■ Énfasis en q  Código: Es el producto final q  Pruebas: Permiten detectar a tiempo los defectos y solucionarlos q  Comunicación: Permite la colaboración entre usuarios y programadores q  Simplicidad: Centrarse en lo realmente necesario (YAGNI) q  Feedback: Mediante pruebas, del usuario, del equipo Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 7
  • 8. Introducción Test-Driven Development ■ Basado en los conceptos de pruebas de Extreme Programming ■ Desarrollado (o “redescubierto”) por Kent Beck ■ Énfasis en pruebas como guías del desarrollo Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 8
  • 9. Test-Driven Development Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 9
  • 10. TDD - Introducción Definición ■ Test-Driven Development es un proceso de desarrollo software que implica la creación de tests para comprobar funcionalidades antes de su codificación ■ Se basa en la repetición de ciclos muy cortos de desarrollo ■ Las pruebas automáticas se crean antes del código que van a comprobar Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 10
  • 11. TDD – Ciclo de Desarrollo Ciclo de Desarrollo ■ Creación de pruebas automáticas ■ Comprobación de resultados de pruebas: Fallo ■ Codificación ■ Comprobación de resultados de pruebas: Éxito ■ Refactorización y mejora del código Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 11
  • 12. TDD – Ciclo de Desarrollo Ciclo de Desarrollo Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 12
  • 13. TDD – Ciclo de Desarrollo Creación de Pruebas ■ Se crea el interfaz o esqueleto del objeto a probar ■ Codificación de pruebas contra el interfaz ■ Describen la funcionalidad del objeto ■ Indicarán cuándo está terminado el desarrollo del subsistema a codificar Interfaz Sistema a Test Probar Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 13
  • 14. TDD – Ciclo de Desarrollo Comprobación de Pruebas: Fallo ■ Se ejecutan los test contra una implementación vacía del interfaz ■ Se comprueba que fallan ■ Es importante para comprobar que los test necesitan nuevo código Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 14
  • 15. TDD – Ciclo de Desarrollo Codificación ■ Se escribe el mínimo código para que los test pasen ■ Se centra en codificar la funcionalidad probada q  No se añade funcionalidad innecesaria q  No se añade nada que no se vaya a probar ■ No es necesario que sea perfecto q  Se mejorará posteriormente Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 15
  • 16. TDD – Ciclo de Desarrollo Comprobación de Pruebas: Éxito ■ Se comprueba que el código cumple los test escritos ■ Proporciona seguridad sobre el proceso de desarrollo q  El código cumple con la funcionalidad q  Podemos modificar el código y detectar si lo “rompemos” Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 16
  • 17. TDD – Ciclo de Desarrollo Refactorización y Mejora de Código ■ Cambios en código sin cambiar funcionalidad ■ Mejoras en el código y diseño q  Legibilidad q  Complejidad q  Mantenibilidad q  Extensibilidad ■ Proceso iterativo q  Descubrimiento y aplicación de patrones Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 17
  • 18. TDD – Ciclo de Desarrollo Refactorización y Mejora de Código (II) ■ Ejemplos de refactorizáción q  Generalizar tipo q  Extraer método q  Extraer clase q  Extraer interfaz q  Pull Up / Push down Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 18
  • 19. TDD - Ventajas y Riesgos Ventajas ■ Facilita el cambio q  Detección de fallos en funcionalidad q  Fail fast ■ Facilita la integración q  Los componentes funcionan unitariamente ■ Mejora el diseño del sistema q  Separación de interfaces e implementación q  Menos interdependencias q  Promueve refactorización y mejora del código q  Desarrollo lean Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 19
  • 20. TDD - Ventajas y Riesgos Ventajas (II) ■ Creación de batería de tests q  Facilita los tests de regresión q  Amplía la cobertura de código de los test q  Permite la realización de integración contínua ■ Mejora la productividad q  Evita depender de depuración de código q  Detecta los errores lo antes posible q  Se escribe sólo lo que se puede probar Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 20
  • 21. TDD - Ventajas y Riesgos Riesgos ■ Limitaciones de pruebas unitarias q  No se puede probar todo q  Pruebas no deterministas (hebras…) q  Las pruebas pueden tener errores ■ Necesidad de pruebas de integración ■ Necesidad de tests adecuados q  Evitar tests frágiles q  Evitar ignorar tests q  La misma persona crea el test y el código Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 21
  • 22. Test Driven Development: Resumen Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 22
  • 23. TDD - Resumen ■ Test-Driven Development q  Metodología de desarrollo q  Ciclos cortos q  Se comienza por las pruebas q  Se desarrolla hasta que se cumplen q  Proceso de mejora contínua Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 23
  • 24. TDD - Resumen Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 24
  • 25. Herramientas de Test Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 25
  • 26. Herramientas de Test Herramientas y Frameworks utilizados en TDD Apoyan el desarrollo utilizando TDD en varios ámbitos: ■ Pruebas Unitarias ■ Pruebas de Integración ■ Pruebas de Rendimiento y Carga ■ Calidad de Código Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 26
  • 27. Pruebas Unitarias Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 27
  • 28. Pruebas Unitarias Conceptos ■ Pruebas de una unidad de código fuente q  Interfaz, clase o método q  Evitar dependencias de otros subsistemas ■ Tests independientes entre sí q  Tratar de aislar el comportamiento de cada componente ■ Pueden ser automatizadas o automatizadas q  No nos planteamos pruebas manuales Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 28
  • 29. Pruebas Unitarias Ventajas ■ Ayudan a encontrar defectos lo antes posible q  Recordemos el coste de arreglo de defectos ■ Facilita el cambio q  Permite mejorar el código asegurándonos que funciona ■ Simplifica la integración q  Comprueba que las piezas individuales funcionan Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 29
  • 30. Pruebas Unitarias Limitaciones ■ No pueden detectar todos los errores q  Errores de integración q  Problemas de concurrencia ■ Necesidad de disciplina q  Necesario actualizar los test y no ignorarlos ■ Implican esfuerzo adicional q  Incluirlos en planificación q  Priorizar los casos de test Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 30
  • 31. Pruebas Unitarias - xUnit Frameworks xUnit ■ Frameworks para la ejecución automática de pruebas q  Creado por Kent Beck ■ Disponibles en múltiples lenguajes y plataformas q  Java, .NET, PHP, Ruby, Python, C, C++, Flex, COBOL, Groovy, Erlang, MATLAB… ■ Se basan en los mismos conceptos: q  Assertions q  Tests q  Test Cases q  Fixtures q  Test Suites Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 31
  • 32. Pruebas Unitarias - xUnit Assertions ■ Son comprobaciones de valores y resultados ■ Si no se cumplen, finalizan el test actual ■ Registran la discrepancia de valores y el lugar donde se produjo Result result = someOperation(); assertNotNull(result); assertEquals("someIntAttr should be 5", 5, result.someIntAttr); assertTrue("someBoolAttr should be true", result.someBoolAttr); Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 32
  • 33. Pruebas Unitarias - xUnit Assertions (II) ■ Definición de métodos de conveniencia q  assertTrue / assertFalse q  assertNull / assertNotNull q  assertArrayEquals ■ fail(): Hace que el test falle. Útil para comprobar excepciones try { shouldThrowException(); fail("Should have thrown an exception"); } catch (ExceptionToCatch expected) { // Should throw this exception } Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 33
  • 34. Pruebas Unitarias - xUnit Tests ■ Cada una de las pruebas a realizar ■ Son métodos que utilizan aserciones para comprobar los resultados ■ Marcados con @Test (Junit 4) o su nombre comienza por test (JUnit3) @Test public void testSomething() { Result result = someOperation(); assertNotNull(result); } Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 34
  • 35. Pruebas Unitarias - xUnit Test Cases ■ Agrupación de tests ■ Son clases que contienen tests a ejecutar ■ JUnit ejecuta todos los test de un TestCase de forma predeterminada public class SomeTest extendsTestCase { @Test public void test1() { // … } @Test public void test2() { // … } } Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 35
  • 36. Pruebas Unitarias - xUnit Test Fixtures ■ Es el contexto en el que se ejecuta cada test en un TestCase q  Inicializa recursos comunes a los tests ■ Utiliza cuatro anotaciones: q  @Before ■  Se ejecuta antes de todos los test de un TestCase ■  Prepara el contexto para los test q  @After ■  Se ejecuta después de todos los test de un TestCase ■  Libera recursos y deja el contexto como estaba antes de la ejecución q  @BeforeClass, @AfterClass ■  Igual que @Before y @After, pero se ejecutan una sola vez por TestCase ■ Es importante mantener el contexto exactamente igual q  El resultado de los test no debe depender de ejecuciones anteriores de otros tests q  La ejecución de un test no debe afectar al resto Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 36
  • 37. Pruebas Unitarias - xUnit Test Fixtures (II) public class SomeTest extendsTestCase { @BeforeClass protected void beforeClass() throws Exception {} @AfterClass protected void afterClass() throws Exception {} @Before protected void before() throws Exception {} @After protected void after() throws Exception {} @Test public void test1() {} @Test public void test2() {} } Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 37
  • 38. Pruebas Unitarias - xUnit Test Fixtures (III) ■ Orden de ejecución Before After Before Test1 After Before Test2 After Class Class Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 38
  • 39. Pruebas Unitarias - xUnit Test Suites ■ Agrupación de test cases TestSuite suite = new TestSuite(); suite.addTestSuite(SomeTest.class); ■ Se suelen realizar agrupaciones a nivel de paquete o subsistema q  Los paquetes superiores incluyen los suites de los inferiores q  Estructura en árbol Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 39
  • 40. Pruebas Unitarias - xUnit Ejecución ■ Por línea de comandos q  java org.junit.runner.JUnitCore TestClass ■ Mediante ant q  <junit> <test name="my.test.TestCase"/> </junit> ■ Mediante maven q  mvn test ■ Desde el entorno de desarrollo q  Run As… JUnit Test Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 40
  • 41. Pruebas Unitarias - xUnit Recomendaciones de Diseño de Tests ■ Unitarios ■ Pequeños ■ Rápidos ■ Comprensibles ■ Independientes ■ Probar casos extremos q  Parámetros nulos q  Colecciones vacías q  Manejo de errores ■ Escribir test para comprobar bugs Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 41
  • 42. Pruebas Unitarias - xUnit Fakes: Stubs y Mocks ■ Los test unitarios deben probar unidades aisladas ■ Casi siempre hay interacción con otros recursos q  Módulos o clases internas o externas q  Bases de Datos q  Comunicaciones q  … ■ No debemos realizar tests que dependan de otras unidades que no controlemos Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 42
  • 43. Pruebas Unitarias - xUnit Fakes: Stubs y Mocks (II) ■ Solución: Utilizar objetos que simulen el funcionamiento de los objetos reales ■ Stub: Objeto que implementa un interfaz y simula un funcionamiento q  Devuelve valores preprogramados ■ Mock: Stub que además realiza comprobaciones sobre: q  Orden de las invocaciones q  Parámetros utilizados q  Condiciones Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 43
  • 44. Pruebas Unitarias - xUnit Fakes: Stubs y Mocks (III) ■ Librerías que ayudan al desarrollo con fakes q  JMock, MockObjects, EasyMock… ■ Permiten crear un objeto que cumple un interfaz y programar sus respuestas ■ Tres fases de utilización: q  Programación de métodos a invocar y respuestas (Grabación) q  Uso del objeto creado (Reproducción) q  Verificación de que se han invocado los métodos esperados (Verificación) Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 44
  • 45. Pruebas Unitarias - xUnit Fakes: Stubs y Mocks (IV) EasyMock mock = EasyMock.createMock(InterfaceToMock.class); // Fase de grabación EasyMock.expect(mock.operation1(param1, param2)).andReturn(value); EasyMock.expect(mock.operation2(param3)).andThrow(exception); EasyMock.replay(mock); // Uso mock.operation1(param1, param2); // devolverá valor programado try { mock.operation2(param3); // lanzará excepción programada fail(“Debería haber lanzado excepción”); } catch (Exception ex) { } // Verificación EasyMock.verify(mock); Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 45
  • 46. Pruebas Unitarias - xUnit Fakes: Stubs y Mocks - Ventajas ■ Evita dependencias de otros sistemas q  Pruebas más simples ■ Comprueba comportamiento, no sólo devuelve resultados q  Orden de invocación q  Parámetros de entrada q  Número de llamadas ■ Permite comprobar condiciones difíciles de simular q  Excepciones q  Variedad de resultados posibles Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 46
  • 47. Pruebas Unitarias: Resumen Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 47
  • 48. Pruebas Unitarias - Resumen Pruebas Unitarias ■ Base de las pruebas de desarrollo q  Tests de más bajo nivel ■ Permite ahorrar tiempo y coste detectando los errores lo antes posible ■ Su automatización nos proporciona seguridad q  Al incorporar nueva funcionalidad q  Ante cambios en el código ■ Importante: Diseño de tests q  Relevantes q  Unitarios q  Independientes Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 48
  • 49. Pruebas Unitarias - Resumen Frameworks xUnit ■ Herramientas para la ejecución automática de tests unitarios ■ Basados en una estructura simple q  Crear contexto ■  Crear los objetos a probar y su estado (@before, @beforeClass) q  Ejecutar pruebas ■  Realizar operaciones (métodos @test) ■  Comprobar resultados (assertions) q  Eliminar contexto ■  Eliminar los efectos del test y su estado (@after, @afterClass) ■  Importante mantener tests independientes entre sí Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 49
  • 50. Pruebas de Integración Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 50
  • 51. Pruebas de Integración Conceptos ■ Pruebas de varios módulos o de todo el sistema ■ Comprobar que los módulos / sistemas están correctamente configurados y ensamblados ■ Paso previo a pruebas de aceptación ■ Pueden ser manuales o automatizadas Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 51
  • 52. Pruebas de Integración: Bases de Datos Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 52
  • 53. Pruebas de Integración – Bases de Datos Tests con Bases de Datos ■ Necesario realizar pruebas de acceso a datos q  Es uno de los puntos de integración más importantes de una aplicación ■ Necesidad de definir un estado consistente y conocido para las pruebas q  Cada test espera una serie de datos en base de datos ■ Un test no debería afectar a los demás q  El fallo de un test puede conducir a un estado inconsistente q  Posibilidad de degradación de datos de prueba Clase a Test BBDD Probar Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 53
  • 54. Pruebas de Integración – Bases de Datos Tests con Bases de Datos - DBUnit ■ DBUnit permite definir los datos presentes antes de cada test ■ Importación de datos desde fuentes externas q  XML q  Excel q  Queries a Bases de Datos q  … ■ Prepara la BD antes y después q  Múltiples tipos de creación de datos y limpieza posterior q  Permite comprobar datos manualmente tras el fallo de un test Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 54
  • 55. Pruebas de Integración – Bases de Datos Tests con Bases de Datos – DBUnit (II) public class SampleTest extends DBTestCase { public SampleTest(String name) { super( name ); System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "org.hsqldb.jdbcDriver" ); System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:hsqldb:sample" ); System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "sa" ); System.setProperty( PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "" ); } protected IDataSet getDataSet() throws Exception { return new FlatXmlDataSetBuilder().build(new FileInputStream("dataset.xml")); } } Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 55
  • 56. Pruebas de Integración – Bases de Datos Tests con Bases de Datos – Spring Test (II) ■ Spring permite englobar los test en una transacción q  Invisible para el resto de tests q  No altera los datos existentes ■ Muy rápido ■ Necesario que los datos estén ya presentes o incluirlos en la ejecución del test ■ Sólo se pueden comprobar los resultados desde la ejecución del test ■ Requiere un bean que implemente PlatformTransactionManager en el contexto Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 56
  • 57. Pruebas de Integración – Bases de Datos Tests con Bases de Datos – Spring Test (II) ■  public class DBTest extends AbstractTransactionalSpringContextTests { ■  protected String[] getConfigLocations() { return new String[] { "/es/altran/app/hibernate/ applicationContext-hibernate.xml" }; } ■  public void test1 () { obj.someMethod(); } Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 57
  • 58. Pruebas de Integración: Simulación de Entorno Servidor Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 58
  • 59. Pruebas de Integración – Simulación Servidor Simulación de Servidor ■ Simulación del entorno proporcionado por un Servidor de Aplicaciones q  Forma parte del entorno proporcionado por el test ■ Permite aplicar las técnicas vistas anteriormente para tests unitarios Entorno de Test Simulación Entorno Servidor Sistema a Test Probar Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 59
  • 60. Pruebas de Integración – Simulación Servidor Simulación de Servidor (II) ■ Ventajas q  Más rápido q  No implica despliegue ■ Desventajas q  Posibles dependencias de la implementación de servidor q  No comprueba la correcta configuración del servidor q  No es una prueba real del entorno final Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 60
  • 61. Pruebas de Integración – Simulación Servidor Tests Unitarios de Servlets ■ Necesario simular: q  Contexto q  Configuración q  Sesión q  Peticiones ■ Spring Test proporciona clases que simulan el entorno y peticiones: q  MockServletContext q  MockServletConfig q  MockHttpSession q  MockHttpServletRequest q  MockHttpServletResponse Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 61
  • 62. Pruebas de Integración – Simulación Servidor Tests unitarios de EJBs ■ Dos alternativas: ■ No usar inyección de dependencias q  Utilizar inyección de dependencias diferente de @EJB, @Resource, @PersistenceContext ■ Utilizar un EJB Container auto-contenido q  No forma parte de un servidor de aplicaciones q  Ejemplo: OpenEJB. Contiene JEE excepto servlets, JSP y JSF. Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 62
  • 63. Pruebas de Integración – Simulación Servidor Tests de EJBs (II) ■ Usando OpenEJB ■  public class HelloBeanTest { ■  private Hello hello; ■  @Before public void bootContainer() throws Exception { ■  Properties props = new Properties(); ■  props.put(Context.INITIAL_CONTEXT_FACTORY, ■  "org.apache.openejb.client.LocalInitialContextFactory"); ■  Context context = new InitialContext(props); hello = (Hello) ■  context.lookup("HelloBeanLocal"); ■  } ■  } Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 63
  • 64. Pruebas de Integración: Despliegue en Servidor Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 64
  • 65. Pruebas de Integración – Despliegue en Servidor Despliegue en Servidor ■ Despliega el código a probar en un Servidor de Aplicaciones ■ Necesario utilizar otras técnicas para probar el código que está en otra JVM Entorno de Test Entorno Servidor Sistema a Test Probar Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 65
  • 66. Pruebas de Integración – Despliegue en Servidor Despliegue en Servidor (II) ■ Ventajas q  Prueba la configuración del servidor q  Prueba más completa posible q  Posibilidad de desplegar en distintos entornos (Desarrollo, Integración, Preproducción, Producción) ■ Desventajas q  Más lento: Necesario desplegar el código a probar. Importante automatización q  Necesidad de coordinación y política de despliegues en entornos compartidos Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 66
  • 67. Pruebas de Integración – Despliegue en Servidor Creación de Cliente ■ Creación de un cliente para el código desplegado ■ Ejecución del cliente en JVM distinta del servidor ■ Permite probar el propio cliente q  Puede ser parte del entregable ■ Aplicable a: q  Servlets q  Servicios Web (SOAP y REST) q  EJBs Entorno Entorno de Test Servidor Test Sistema a Cliente Probar Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 67
  • 68. Pruebas de Integración – Despliegue en Servidor SoapUI ■ Herramienta externa para probar Servicios Web q  Funcionalidad q  Estrés / Carga ■ Definición de pasos de test y test suites q  Invocación a servicio (SOAP, REST, petición HTTP, AMF, JDBC) q  Scripting en Groovy q  Asserts específicos: Tipo de respuesta (SOAPResponse, SOAPFault), XPath, WS- Security, contenido… ■ Ejecutables mediante la herramienta o desde JUnit Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 68
  • 69. Pruebas de Integración – Despliegue en Servidor JUnit en Servidor: JUnitEE ■ El despliegue en servidor incluye el código de tests q  Solución invasiva ■ Despliegue de servlet que controla la ejecución de tests q  Mediante interfaz gráfico q  Mediante tarea Ant ■ El servlet se invoca desde el cliente que lanza la prueba Entorno de Test Entorno Servidor Cliente Servlet Sistema a Tests Tests JUnitEE JUnitEE Tests Probar Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 69
  • 70. Pruebas de Integración: Resumen Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 70
  • 71. Pruebas de Integración – Resumen Pruebas de Integración ■ Permiten probar varios componentes interconectados ■ Integración con recursos externos (BBDD) q  Preparación del entorno ■ Integración simulando un entorno q  Rápidas q  No son completas ■ Integración con un entorno q  Las más completas q  Implican disponibilidad de un entorno para desplegar q  Intentar ser lo menos invasivo posible Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 71
  • 72. Pruebas de Integración: Interfaces Web Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 72
  • 73. Pruebas de Integración – Interfaces Web Pruebas de Interfaces Web ■ Las pruebas de interfaces web son las más complejas de automatizar q  Múltiples navegadores q  Identificación de elementos a comprobar y sobre los que realizar acciones q  Javascript q  AJAX ■ Dos tipos de pruebas posibles q  Sin utilizar navegador web q  Utilizando navegador web Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 73
  • 74. Pruebas de Integración – Interfaces Web Pruebas Sin Navegador ■ Interpretan el HTML devuelto por peticiones HTTP ■ Interaccionan con la aplicación web realizando peticiones HTTP y comprobando la respuesta Entorno Entorno de Test Servidor Test Aplicación HTTP Web Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 74
  • 75. Pruebas de Integración – Interfaces Web Pruebas Sin Navegador ■ Ventajas q  Muy rápidas q  No dependen de un navegador: Ejecutables desde cualquier cliente ■ Desventajas q  Muy bajo nivel: Tiempo de desarrollo y mantenimiento q  No comprueban compatibilidad de navegadores q  Difícil probar Javascript y AJAX Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 75
  • 76. Pruebas de Integración – Interfaces Web Pruebas Sin Navegador - HtmlUnit ■ Simula un navegador web q  Intenta simular distintas versiones de navegadores ■ Métodos para encontrar elementos HTML ■ Simulación de Javascript q  Uso de motor Rhino q  Diferencias con motores de navegadores reales Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 76
  • 77. Pruebas de Integración – Interfaces Web Pruebas Sin Navegador – HtmlUnit (II) ■  // Navega a página ■  WebClient webClient = new WebClient(); ■  HtmlPage page = webClient.getPage("http://some_url"); ■  // Obtención de elementos ■  HtmlDivision div = page.getHtmlElementById("some_div_id"); ■  HtmlAnchor anchor = page.getAnchorByName("anchor_name"); ■  // Formulario ■  HtmlForm form = page1.getFormByName("myform"); ■  HtmlSubmitInput button = form.getInputByName("submitbutton"); ■  HtmlTextInput textField = form.getInputByName("userid"); ■  textField.setValueAttribute("root"); ■  HtmlPage page2 = button.click(); Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 77
  • 78. Pruebas de Integración – Interfaces Web Pruebas Con Navegador ■ Utiliza un navegador web real q  Prueba más completa q  Permite comprobar la compatibilidad con el navegador utilizado ■ No todas las herramientas soportan todos los navegadores q  Importante si hay que comprobar compatibilidad Entorno Entorno de Test Servidor Test Aplicación Navegador HTTP Web Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 78
  • 79. Pruebas de Integración – Interfaces Web Pruebas Con Navegador – Selenium IDE ■ Entorno de grabación y reproducción de tests ■ Ejecución como plugin de Firefox ■ Ayuda a la creación de asserts en los test ■ Grabación de tests en varios formatos Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 79
  • 80. Pruebas de Integración – Interfaces Web Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 80
  • 81. Pruebas de Integración – Interfaces Web Pruebas Con Navegador – Selenium WebDriver ■ Permite enviar comandos a un Browser Driver q  Bindings para Java, .NET, Python, Ruby, PHP… ■ El Browser Driver lanza el navegador y ejecuta los comandos enviados q  Utiliza el soporte para automatización propio de cada navegador ■ Soporte para múltiples navegadores q  Internet Explorer q  Firefox q  Chrome q  Opera q  Android (emulador y dispositivo) q  iOS (emulador y dispositivo) Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 81
  • 82. Pruebas de Integración – Interfaces Web Pruebas Con Navegador – Selenium WebDriver Entorno Entorno de Test Servidor Firefox Navegador WebDriver Firefox HTTP Aplicación Test IE Navegador Web WebDriver IE HTTP Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 82
  • 83. Pruebas de Integración – Interfaces Web Pruebas Con Navegador – Selenium WebDriver ■  WebDriver driver = new FirefoxDriver(); ■  driver.get("http://www.google.com"); ■  WebElement element = driver.findElement(By.name("q")); ■  element.sendKeys("Cheese!"); ■  element.submit(); ■  System.out.println("Page title is: " + driver.getTitle()); ■  driver.quit(); Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 83
  • 84. Pruebas de Integración – Interfaces Web Pruebas Con Navegador – Selenium Grid ■ Centraliza la ejecución de tests en varias máquinas ■ Hub q  Tiene registrados los nodos a utilizar para las pruebas q  Registra los distintos navegadores de cada uno de los nodos q  Permite a los tests utilizar los navegadores de cada nodo q  Centraliza los distintos navegadores y versiones instalados q  Permite ejecutar tests en paralelo ■ Nodo q  Proporciona instancias de navegadores q  Tipo y versión de navegadores específicas Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 84
  • 85. Pruebas de Integración – Interfaces Web Pruebas Con Navegador – Selenium Grid Entorno Test 1 Entorno Servidor IE Navegador WebDriver IE Entorno de Entorno Selenium Test - Cliente Hub Aplicación Test Selenium Hub Web Entorno Test 2 Firefox Navegador WebDriver Firefox Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio
  • 86. Pruebas de Interfaces Web: Resumen Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 86
  • 87. Pruebas de Interfaces Web – Resumen Pruebas de Interfaces Web ■ Más complejas de definir y ejecutar ■ Pruebas sin navegador q  Menos completas q  De bajo nivel ■ Pruebas con navegador q  Más completas q  Determinar si es necesario comprobar compatibilidad Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 87
  • 88. Pruebas de Rendimiento Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 88
  • 89. Pruebas de Rendimiento Conceptos ■ Pruebas de requisitos no funcionales ■ Pruebas dedicadas a comprobar el comportamiento del sistema ante el acceso desde múltiples clientes ■ Varios tipos: q  Prueba de carga: Comprobar cómo se comporta el sistema con una carga determinada. q  Prueba de estrés: Comprobar cuáles son los límites del sistema q  Prueba de resistencia: Comprobar si el sistema puede soportar la carga esperada de forma continua. q  Pruebas “de pico”: Comprobar cómo se comporta el sistema ante una variación repentina en la carga Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 89
  • 90. Pruebas de Rendimiento JUnitPerf ■ Extensión de JUnit ■ Define decoradores para pruebas de carga y tiempo q  TimedTest: El test falla si pasa de un límite de tiempo ■  long maxElapsedTime = 1000; ■  Test testCase = new ExampleTestCase("testOneSecondResponse"); ■  Test timedTest = new TimedTest(testCase, maxElapsedTime); q  LoadTest: El mismo test se realiza de forma concurrente, pudiendo especificar pausas y repeteiciones ■  int users = 10; int iterations = 20; Timer timer = new ConstantTimer(1000); ■  Test testCase = new ExampleTestCase("testOneSecondResponse"); ■  Test repeatedTest = new RepeatedTest(testCase, iterations); ■  Test loadTest = new LoadTest(repeatedTest, users, timer); Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 90
  • 91. Pruebas de Rendimiento - JMeter JMeter ■ Aplicación de escritorio para pruebas de carga ■ Permite probar varios tipos de recursos q  Web (HTTP) q  SOAP q  JDBC q  Web Services q  JMS ■ Permite simular condiciones complejas de carga ■ Representación gráfica de las pruebas ■ Posibilidad de realizar tests distribuidos ■ Extensible mediante plugins Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 91
  • 92. Pruebas de Rendimiento - JMeter Jmeter (II) ■ Varios tipos de elementos: q  ThreadGroup: Controlan las hebras que ejecutarán los test ■  Nº de hilos ■  Iteraciones ■  Periodo de subida q  Samplers: Toman medidas ■  SOAP, HTTP, JDBC, Mail, JMS, LDAP, FTP… q  Controllers: Modifican el flujo de los test ■  Bucles, aleatorio… q  Aserciones: Realizan comprobaciones sobre los resultados q  Listeners: Reciben e interpretan los resultados de las medidas ■  Gráficos, resúmenes, … Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 92
  • 93. Pruebas de Rendimiento - JMeter Jmeter (III) ThreadGroup Thread Controller Thread Sampler Sistema a Probar Listener Assertion Sampler Controller Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 93
  • 94. Calidad de Tests Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 94
  • 95. Calidad de Tests Cobertura de Código ■ Mide cuánto se ha probado del código fuente ■ Criterios básicos: q  Cobertura de Líneas: Número de líneas probadas por los tests q  Cobertura de Condicionales (Branch): Todas las condiciones (if… else) han sido probadas ■ Permite cuantificar la cantidad de código probada q  Puede ser engañoso q  No se comprueban los valores posibles de las variables ■ Es una medida indicativa para centrar los esfuerzos de desarrollo de test Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 95
  • 96. Calidad de Tests Cobertura de Código - Cobertura ■ Instrumenta el código a nivel de bytecode ■ Vuelca los resultados de las clases instrumentadas y genera informes ■ Permite introducir umbrales mínimos de cobertura ■ Se integra con Ant y Maven Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 96
  • 97. Integración Contínua Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 97
  • 98. Integración Contínua Conceptos ■ Aplicación de procesos de calidad constantemente durante el desarrollo ■ Actualización frecuente desde / hacia el repositorio para evitar rehacer trabajo q  Comprobar los test antes de subir código q  Construcción automática del código del repositorio ■ Ventajas q  Evita que QA sea un paso posterior a desarrollo q  Evita errores de merge en el repositorio q  Facilita la integración de nueva funcionalidad ■ Inconvenientes q  Necesidad de disciplina en el desarrollo Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 98
  • 99. Integración Contínua Jenkins ■ Herramienta de integración contínua ejecutable en entorno Servlet ■ Ejecuta builds de proyectos desde el repositorio q  Disparados por nuevas subidas, periódicamente o por otros builds q  Puede incluir la ejecución de los test y análisis de cobertura q  Integración con herramientas de bug tracking q  Muestra evolución y tendencias ■ Se integra con múltiples tipos de repositorios y herramientas de construcción q  Repositorios: SVN, CVS, Git, Mercurial, Perforce, ClearCase q  Herramientas: Maven, Ant, scripts Entorno QA Repositorio de Código Jenkins Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 99
  • 100. Integración Contínua Jenkins - Ventajas ■ Ejecuta clean builds (código existente en el repositorio) ■ Comprobación constante del repositorio, incluyendo sus ramas ■ Permite evaluar las tendencias en la evolución del desarrollo q  Número de tests y resultados q  Calidad de código (PMD, CheckStyle) q  Cobertura de tests ■ Notificación de resultados ■ Extensible mediante plugins Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 100
  • 101. Conclusiones Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 101
  • 102. Conclusiones Test-Driven Development ■ Automatización de tests fundamental ■ Los tests son los protagonistas q  Qué (funcionalidad) antes del cómo (implementación) q  Condicionan el diseño q  Validan el código creado ■ Principios aplicables a metodologías ágiles y no ágiles Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 102
  • 103. Conclusiones Herramientas disponibles ■ Pruebas Unitarias q  Frameworks xUnit / Otros q  Mocks ■ Integración con recursos externos q  Bases de datos, LDAP, Mail, Sistemas Legados… q  Importante disponer de un contexto esperado y restablecerlo. ■ Integración q  En el sistema final o simulándolo ■ Calidad de Código q  Cobertura de tests, convenciones de código… ■ Integración Continua q  Construcción y pruebas automatizadas Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 103
  • 104. Conclusiones ¿Qué debemos probar? ■ Funcionalidades críticas para el negocio q  Priorizar casos de prueba q  Cobertura de código de los test q  Pruebas de Integración ■ Funcionalidades más utilizadas ■ Crear pruebas para los bugs conocidos q  Pruebas de regresión Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 104
  • 105. Conclusiones ¿Qué debemos tener en cuenta? ■ Diseñar para facilitar tests q  Interfaces q  Inyección de dependencias q  Aislar puntos de integración ■ Posibles configuraciones q  Desarrollo q  Integración q  Preproducción q  Producción Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 105
  • 106. Conclusiones Priorización de casos de prueba – Pruebas Unitarias ■ Funcionalidad de la unidad q  Todos los casos posibles ■ Integración con otras unidades q  Posibles respuestas q  Tratamiento de excepciones ■ Casos extremos ■ Código "de relleno" Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 106
  • 107. Conclusiones Priorización de casos de prueba – Pruebas de Integración ■ Funcionalidad a alto nivel q  Operaciones más comunes q  Abarcar funcionalidad completa ■ Respuesta ante fallos q  Excepciones q  Falta de respuesta q  Resultados inesperados ■ Casos extremos Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 107
  • 108. Conclusiones Priorización de casos de prueba – Pruebas de Rendimiento ■ Validación de concurrencia q  Comprobar que el sistema funciona con múltiples usuarios ■ Depende de la criticidad y SLAs q  Pruebas de carga q  Estrés q  Resistencia Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 108
  • 109. Conclusiones Priorización de casos de prueba – Calidad y Cobertura ■ Desde el principio q  Visibilidad de evolución ■ Son herramientas e indicadores, no verdades absolutas q  Sentido crítico en la interpretación de las pruebas ■ Cuestión de disciplina q  Actuar en función de los resultados Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 109
  • 110. Conclusiones Reflexiones finales ■ Si no está probado… q  No sabes si funciona q  Miedo al cambio q  El coste de desarrollar se incrementa q  No hay predecibilidad ■ Convertir en metodología q  Inculcar la cultura de test q  Implicar a management q  Contar con los costes ■ La calidad se paga q  Buena: Coste de desarrollo q  Mala: Coste de mantenimiento, deuda tecnológica, satisfacción del cliente Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 110
  • 111. Preguntas Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 111
  • 112. Gracias a todos Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 112
  • 113. www.altran.es Título Presentación NOTA: Prohibida la reproducción (total o parcial) o distribución de este documento sin la autorización de ALTRAN en España Versión: xxxx ž  Fecha: dd/mm/aaaa ž  División de Negocio 113