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

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: Prohibidala 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 Unpoco 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 Modelode 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 Costede 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 ExtremeProgramming ■ 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-DrivenDevelopment ■ 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 – Ciclode 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 – Ciclode 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 – Ciclode 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 – Ciclode 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 – Ciclode 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 – Ciclode 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 – Ciclode 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 – Ciclode 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 - Ventajasy 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 - Ventajasy 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 - Ventajasy 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ítuloPresentació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ítuloPresentació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ítuloPresentació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 InterfacesWeb: 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 InterfacesWeb – 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ítuloPresentació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ítuloPresentació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: Prohibidala 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-DrivenDevelopment ■ 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 Herramientasdisponibles ■ 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ónde 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ónde 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ónde 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ónde 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 Reflexionesfinales ■ 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: Prohibidala 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ítuloPresentació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: Prohibidala 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