Introducción
       Testing Basado en Modelos
               Un Caso de Estudio
                    Conclusiones




Testing = Especificación + Programación
            Haciendo posible el testing


                   Maximiliano Cristiá

                   Flowgate Consulting
               mcristia@flowgate.net
                        CIFASIS
             Universidad Nacional de Rosario
          cristia@cifasis-conicet.gov.ar

    Primera Jornada de Calidad e Innovación
         en la Producción de Software


               Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                                   Aspectos económicos del testing
                     Testing Basado en Modelos
                                                   Los costos de testear
                             Un Caso de Estudio
                                                   Alcance de la charla
                                  Conclusiones


Audiencia
¿Para quiénes está destinada la charla?


   Para los que testean
         Porque quieren reducir los costos de testing.
         Porque quieren testear más por el mismo costo.
         Porque el trabajo manual y repetitivo los harta.

   Para los que no testean pero quieren testear
         Porque testear es muy caro.
         Porque testear es muy complejo.
         Porque testear es muy laborioso.
         Porque testear requiere profesionales que no tienen.

                             Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                             Aspectos económicos del testing
               Testing Basado en Modelos
                                             Los costos de testear
                       Un Caso de Estudio
                                             Alcance de la charla
                            Conclusiones


Madurez




 Esta charla es para equipos con cierto nivel de madurez
     Es necesario tener los requerimientos escritos.
     Es necesario separar los roles de testing y programación.

     Es conveniente tener documentación del código fuente.




                       Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                               Aspectos económicos del testing
                 Testing Basado en Modelos
                                               Los costos de testear
                         Un Caso de Estudio
                                               Alcance de la charla
                              Conclusiones


El testing es muy caro

  Según Fred Brooks (The Mythical Man-Month)
  El testing de software de base ronda el 50 % del costo total.

  Según el Software Engineering Institute
  El testing ronda entre el 30 % y el 40 % del costo total.

  Según IBM y Gartner
  Si reparar un error durante la ingeniería de requerimientos
  cuesta $1, repararlo durante el testing cuesta $60 y repararlo
  después de la entrega $100.


                         Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                              Aspectos económicos del testing
                Testing Basado en Modelos
                                              Los costos de testear
                        Un Caso de Estudio
                                              Alcance de la charla
                             Conclusiones


Calcular casos de prueba es lo más caro

  Retesting
      La fase más costosa del testing es el retesting.
      Con las metodologías clásicas esto puede implicar
      recalcular muchos casos de prueba.

  Calcular los casos de prueba
      Técnicamente, lo más costoso del testing es calcular todos
      y cada uno de los casos de prueba.
      En cierto sentido el retesting es costoso porque hay que
      recalcular casos de prueba.


                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                              Aspectos económicos del testing
                Testing Basado en Modelos
                                              Los costos de testear
                        Un Caso de Estudio
                                              Alcance de la charla
                             Conclusiones


¿Cómo reducir el costo de testing?



  Posibles soluciones
      No testear.
      Hacer programas correctos por construcción.
      Automatizar el testing.
          ¿Es posible?
          Sí, en gran medida es posible.




                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                              Aspectos económicos del testing
                Testing Basado en Modelos
                                              Los costos de testear
                        Un Caso de Estudio
                                              Alcance de la charla
                             Conclusiones


¿Cómo reducir el costo de testing?



  Posibles soluciones
      No testear.
      Hacer programas correctos por construcción.
      Automatizar el testing.
          ¿Es posible?
          Sí, en gran medida es posible.




                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                              Aspectos económicos del testing
                Testing Basado en Modelos
                                              Los costos de testear
                        Un Caso de Estudio
                                              Alcance de la charla
                             Conclusiones


¿Cómo reducir el costo de testing?



  Posibles soluciones
      No testear.
      Hacer programas correctos por construcción.
      Automatizar el testing.
          ¿Es posible?
          Sí, en gran medida es posible.




                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                              Aspectos económicos del testing
                Testing Basado en Modelos
                                              Los costos de testear
                        Un Caso de Estudio
                                              Alcance de la charla
                             Conclusiones


¿Cómo reducir el costo de testing?



  Posibles soluciones
      No testear.
      Hacer programas correctos por construcción.
      Automatizar el testing.
          ¿Es posible?
          Sí, en gran medida es posible.




                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                              Aspectos económicos del testing
                Testing Basado en Modelos
                                              Los costos de testear
                        Un Caso de Estudio
                                              Alcance de la charla
                             Conclusiones


¿Cómo reducir el costo de testing?



  Posibles soluciones
      No testear.
      Hacer programas correctos por construcción.
      Automatizar el testing.
          ¿Es posible?
          Sí, en gran medida es posible.




                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                                     Aspectos económicos del testing
                  Testing Basado en Modelos
                                                     Los costos de testear
                          Un Caso de Estudio
                                                     Alcance de la charla
                               Conclusiones


Validación & Verificación (V&V)
  Validación
       ¿Implementamos el programa que quiere el usuario?
      Testing de aceptación → Tarde y caro (IBM & Gartner).

  Verificación
       ¿Implementamos el programa especificado?
      Testing de unidad, de integración y de sistema.
      Esta charla es sobre verificación y testing de unidad.

                                                             verificación


            requerimientos                   especificación                  programa


                                               validación


                             Maximiliano Cristiá     Testing = Especificación + Programación
Introducción
                                              Aspectos económicos del testing
                Testing Basado en Modelos
                                              Los costos de testear
                        Un Caso de Estudio
                                              Alcance de la charla
                             Conclusiones


Corrección de un programa



  Considerando sólo verificación:
  Definición
     Un programa es correcto si verifica su especificación.
      Por lo tanto, para poder testear es necesario tener una
      especificación.
      A la especificación también se la llama modelo.




                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                Testing Basado en Modelos
                        Un Caso de Estudio
                             Conclusiones


Model-Based Testing (MBT)


   El testing se realiza partiendo de                     Proceso de MBT
   un modelo del software.                                 requerimientos

   Al inicio, el modelo se utiliza para
   generar casos de prueba.                                    modelo                     ¿error?

   Al final, el modelo se utiliza como                               generar
                                                                                   comprobar

   oráculo.
                                                                 test                    resultados
   Teniendo el modelo, el proceso es
                                                              abstractos                 abstractos
   muy automático.
                                                                    refinar           abstraer
   En esta charla sólo veremos                                                ejecutar
   “generar”.                                                   tests                    resultados




                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                   Testing Basado en Modelos
                           Un Caso de Estudio
                                Conclusiones


¿Quiénes usan MBT?

  Empresas y sectores
      Microsoft – Sun – France Telecom – Cisco
      Control de tráfico aéreo.
      La industria automovilística europea.
      La industria de tarjetas inteligentes.

  El reporte IBM
      GOTCHA-TCBeans – FSM
      Testing de la implementación POSIX de fnctl.
      Testing de parte del garbage collector de JVM.
      IBM reporta un ahorro sustancial y mayor cubrimiento.

                           Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                Testing Basado en Modelos
                        Un Caso de Estudio
                             Conclusiones


MBT formal → Testing automático

  Modelos formales
     Para automatizar MBT se utilizan modelos formales.
      Un modelo formal es una descripción lógico-matemática
      (abreviada) de un programa: es una abstracción.
      Esta charla es sobre MBT formal.

  Notaciones formales
      Para escribir una especificación formal se utiliza una
      notación formal.
      Notaciones formales: Z, Statecharts, CSP, B, TLA+ . . .
      En esta charla se utilizarán especificaciones Z.

                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
            Testing Basado en Modelos
                    Un Caso de Estudio
                         Conclusiones


¿Es más barato el MBT formal?




                    Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                              El modelo
                Testing Basado en Modelos
                                              Detalle del paso “generar”
                        Un Caso de Estudio
                                              Testing asistido por Fastest
                             Conclusiones


Veamos un ejemplo concreto


  Los requerimientos
      Un banco tiene un cierto conjunto de cajas de ahorro en
      las cuales se puede depositar y extraer dinero.
      Cada caja de ahorro se identifica con un número de
      cuenta.
      Los montos a depositar y los saldos serán números
      enteros.
      Sólo se debe mantener el saldo de cada caja de ahorro.
      Sólo modelaremos la operación de depósito.



                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                                  El modelo
                    Testing Basado en Modelos
                                                  Detalle del paso “generar”
                            Un Caso de Estudio
                                                  Testing asistido por Fastest
                                 Conclusiones


La especificación Z
Los tipos básicos




          [NCTA]                Un tipo para los números de cuenta

          SALDO == N Un tipo para los saldos


   Comentarios
      No nos importa la estructura de un número de cuenta.
         Para simplificar consideramos que los saldos son números
         naturales.



                            Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                                   El modelo
                     Testing Basado en Modelos
                                                   Detalle del paso “generar”
                             Un Caso de Estudio
                                                   Testing asistido por Fastest
                                  Conclusiones


La especificación Z
El conjunto de estados




           Banco
           cajas : NCTA → SALDO


   Comentarios
      Del banco sólo nos importan las cajas de ahorro.
         A cada número de cuenta le corresponde un único saldo.
         No nos importan: la persistencia, la performance, el
         lenguaje de programación, las estructuras de datos, etc.



                             Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                                  El modelo
                    Testing Basado en Modelos
                                                  Detalle del paso “generar”
                            Un Caso de Estudio
                                                  Testing asistido por Fastest
                                 Conclusiones


La especificación Z
La operación de depósito



           DepositarOk
            ∆Banco                  Se cambia el estado
            num? : NCTA; monto? : Z Parámetros de entrada
            num? ∈ dom cajas                          ¿Existe la cuenta?
            monto? > 0                                No se puede depositar 0 o menos

            cajas = cajas ⊕ {num? → cajas(num?) + monto?}

   Comentarios
      cajas representa la “base de datos” luego del depósito.
        El operador ⊕ se parece a update de SQL.

                            Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                                   El modelo
                     Testing Basado en Modelos
                                                   Detalle del paso “generar”
                             Un Caso de Estudio
                                                   Testing asistido por Fastest
                                  Conclusiones


La especificación Z
La operación de depósito (cont.)



         DepositarE1 ==
            [ΞBanco; num? : NCTA | num? ∈ dom cajas]
                                        /
         DepositarE2 == [ΞBanco; monto? : Z | monto? ≤ 0]
         Depositar == DepositarOk ∨ DepositarE1 ∨ DepositarE2


   Comentarios
      DepositarE1 y DepositarE2 especifican posibles errores.
         La operación final se arma usando todos los esquemas.
         Depositar es la operación que vamos a testear.

                             Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                                                  El modelo
                              Testing Basado en Modelos
                                                                  Detalle del paso “generar”
                                      Un Caso de Estudio
                                                                  Testing asistido por Fastest
                                           Conclusiones


Usamos el modelo para generar casos de prueba



 Proceso de MBT                                 Detalle de “generar”
  modelo                     ¿error?                                                tests
                                                       VIS                                               árbol de pruebas
                      comprobar                                                   abstractos     podar
       generar
                                                             táctica
                                                                        táctica                táctica
    test                    resultados            partición VIS                     ...                    partición VIS

 abstractos                 abstractos


       refinar           abstraer                Siempre el costo
                 ejecutar
   tests                    resultados                  El mayor costo de testing es
                                                        calcular los casos de prueba.



                                       Maximiliano Cristiá        Testing = Especificación + Programación
Introducción
                                              El modelo
                Testing Basado en Modelos
                                              Detalle del paso “generar”
                        Un Caso de Estudio
                                              Testing asistido por Fastest
                             Conclusiones


Fastest: automatización de MBT

  El proyecto
      I+D conjunto entre Flowgate Consulting y CIFASIS.
      Parcialmente financiado por FONTAR.
      Prototipo disponible en www.flowgate.net.

  Características
      Procesamiento distribuido – Cliente-servidor.
      Extensible y configurable por el usuario – Tácticas.
      Multiplataforma – Java.
      Auto-documentación – Latex y PDF.
      Interfaz de texto muy simple – A mejorar.

                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                               El modelo
                 Testing Basado en Modelos
                                               Detalle del paso “generar”
                         Un Caso de Estudio
                                               Testing asistido por Fastest
                              Conclusiones


VIS y tácticas

  En teoría

      VIS == [cajas : NCTA → SALDO; num? : NCTA; monto? : Z]

      Dos tácticas de testing:
          DNF: considera cada uno de los esquemas por separado.
          Partición estándar sobre ⊕ considera valores
          representativos para cajas y {num? → cajas(num?) + monto?}.

  Con Fastest
  loadspec banco.tex
  selop Depositar
  addtactic Depositar SP oplus
            cajas oplus {num? map cajas(num?) + monto?}

                         Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                              El modelo
                Testing Basado en Modelos
                                              Detalle del paso “generar”
                        Un Caso de Estudio
                                              Testing asistido por Fastest
                             Conclusiones


El árbol de pruebas

  En teoría
      Cada nodo del árbol es un objetivo de prueba.
      Cada objetivo es un conjunto de condiciones que tiene que
      cumplir un caso de prueba.
      Los objetivos se tornan más específicos a medida que se
      desciende por el árbol.
      Los casos de prueba se extraen de las hojas del árbol.

  Con Fastest
  genalltt
  showtt -p Depositar


                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                                      El modelo
                  Testing Basado en Modelos
                                                      Detalle del paso “generar”
                          Un Caso de Estudio
                                                      Testing asistido por Fastest
                               Conclusiones


El árbol de pruebas de Depositar

                                            VIS

          DNF 1                           DNF 2                                      DNF 3

    SP1     ...   SP8            SP9            ...     SP16            SP17 . . .           SP24

  Ejemplos de objetivos de prueba

      DNF 1 == [VIS | num? ∈ dom cajas ∧ monto? > 0]
      SP4   == [VIS | num? ∈ dom cajas ∧ monto? > 0
                    ∧ cajas = {}
                    ∧ dom cajas = dom{num? → cajas(num?) + monto?}]


                          Maximiliano Cristiá         Testing = Especificación + Programación
Introducción
                                              El modelo
                Testing Basado en Modelos
                                              Detalle del paso “generar”
                        Un Caso de Estudio
                                              Testing asistido por Fastest
                             Conclusiones


Podando el árbol de pruebas

  En teoría
      Muchos de los objetivos pueden ser inalcanzables.
      Son situaciones imposibles de testear.
      Es conveniente eliminar esos objetivos.
      SP6 == [VIS | num? ∈ dom cajas ∧ monto? > 0
               ∧ cajas = {}
               ∧ dom cajas ∩ dom{num? → cajas(num?) + monto?} = {}]


  Con Fastest – Automático en la próxima versión
  prunefrom SP_1, SP_2, SP_3, SP_6, SP_7, SP_8
  prunefrom SP_9, SP_11, SP_12, SP_13, SP_15, SP_16
  prunefrom SF_17, SP_19, SP_22, SP_23, SP_24


                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                                 El modelo
                   Testing Basado en Modelos
                                                 Detalle del paso “generar”
                           Un Caso de Estudio
                                                 Testing asistido por Fastest
                                Conclusiones


El árbol y los objetivos resultantes

                                    VIS                                         5 objetivos


     DNF 1                        DNF 2                              DNF 3


   SP4   SP5                                                    SP20 SP21


      SP4    == [. . . ]
      SP5    == [VIS | num? ∈ dom cajas ∧ monto? > 0
                     ∧ cajas = {}
                     ∧ dom{num? → cajas(num?) + monto?} ⊂ dom cajas]
      DNF 2 == [VIS | num? ∈ dom cajas]
                           /
      SP20 == [. . . ]        SP21 == [. . . ]


                           Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                              El modelo
                Testing Basado en Modelos
                                              Detalle del paso “generar”
                        Un Caso de Estudio
                                              Testing asistido por Fastest
                             Conclusiones


Generando casos de prueba


  En teoría
      Se deben buscar constantes que satisfagan cada uno de
      los objetivos de prueba.
      Esto no es automatizable en el 100 % de los casos.

  Con Fastest
      En promedio Fastest se acerca al 90 %, el resto es manual.
      En este ejemplo encuentra el 100 % de los casos.
      El comando es genalltca.



                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                                  El modelo
                    Testing Basado en Modelos
                                                  Detalle del paso “generar”
                            Un Caso de Estudio
                                                  Testing asistido por Fastest
                                 Conclusiones


Los casos de prueba en Z

                                                                                   5 casos
                                                                                 automáticos

 SP4T == [VIS | monto? = 1 ∧ num? = ncta0 ∧ cajas = {ncta0 → 1}]
 SP5T == [VIS | monto? = 1 ∧ num? = ncta0 ∧ cajas = {ncta0 → 1, ncta1 → 1}]
 DNF 2T == [VIS | monto? = 0 ∧ num? = ncta0 ∧ cajas = ∅]
 SP20T == [VIS | monto? = −1 ∧ num? = ncta0 ∧ cajas = {ncta0 → 1}]
 SP21T == [VIS |
                   monto? = −1
                   ∧ num? = ncta0
                   ∧ cajas = {ncta0 → 1, ncta1 → 1}]




                            Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                                             El modelo
               Testing Basado en Modelos
                                             Detalle del paso “generar”
                       Un Caso de Estudio
                                             Testing asistido por Fastest
                            Conclusiones


¿Qué estamos testeando?

  Los casos de prueba en castellano
      SP4T : depositar en una cuenta existente una cantidad
      positiva cuando es la única cuenta.
      SP5T : depositar en una cuenta existente una cantidad
      positiva cuando no es la única cuenta.
      DNF 2T : intentar un depósito cuando no hay cuentas.
      SP20T : depositar en una cuenta existente una cantidad
      negativa cuando es la única cuenta.
      SP21T : depositar en una cuenta existente una cantidad
      negativa cuando no es la única cuenta.


                       Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                Testing Basado en Modelos
                        Un Caso de Estudio
                             Conclusiones


Ventajas y desventajas del MBT formal

  Ventajas
      Es la técnica de testing más económica.
      Es la técnica de testing más automática.
      Es la técnica de testing más disciplinada.
      Es la técnica de testing que más errores descubre.
      Es la técnica de testing menos orientada al código.
      Se puede comenzar el testing desde el inicio del proyecto.

  Desventajas
      Requiere profesionales que puedan modelar formalmente.
      Requiere una herramienta como Fastest.

                        Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
      Testing Basado en Modelos
              Un Caso de Estudio
                   Conclusiones




MBT formal hace posible el testing




              Maximiliano Cristiá   Testing = Especificación + Programación
Introducción
                Testing Basado en Modelos
                        Un Caso de Estudio
                             Conclusiones


Proyectos actuales de testing con Fastest


  Con INPE
      Instituto Nacional de Pesquisas Espaciais (Brasil).
      Testing de protocolo de comunicación entre computadoras
      de satélites.

  Con Critical Software y Universidad de Coimbra
      Instituciones portuguesas.
      Testing de software de abordo de satélites según estándar
      de la ESA.



                        Maximiliano Cristiá   Testing = Especificación + Programación

Testing = Especificación + Programación

  • 1.
    Introducción Testing Basado en Modelos Un Caso de Estudio Conclusiones Testing = Especificación + Programación Haciendo posible el testing Maximiliano Cristiá Flowgate Consulting mcristia@flowgate.net CIFASIS Universidad Nacional de Rosario cristia@cifasis-conicet.gov.ar Primera Jornada de Calidad e Innovación en la Producción de Software Maximiliano Cristiá Testing = Especificación + Programación
  • 2.
    Introducción Aspectos económicos del testing Testing Basado en Modelos Los costos de testear Un Caso de Estudio Alcance de la charla Conclusiones Audiencia ¿Para quiénes está destinada la charla? Para los que testean Porque quieren reducir los costos de testing. Porque quieren testear más por el mismo costo. Porque el trabajo manual y repetitivo los harta. Para los que no testean pero quieren testear Porque testear es muy caro. Porque testear es muy complejo. Porque testear es muy laborioso. Porque testear requiere profesionales que no tienen. Maximiliano Cristiá Testing = Especificación + Programación
  • 3.
    Introducción Aspectos económicos del testing Testing Basado en Modelos Los costos de testear Un Caso de Estudio Alcance de la charla Conclusiones Madurez Esta charla es para equipos con cierto nivel de madurez Es necesario tener los requerimientos escritos. Es necesario separar los roles de testing y programación. Es conveniente tener documentación del código fuente. Maximiliano Cristiá Testing = Especificación + Programación
  • 4.
    Introducción Aspectos económicos del testing Testing Basado en Modelos Los costos de testear Un Caso de Estudio Alcance de la charla Conclusiones El testing es muy caro Según Fred Brooks (The Mythical Man-Month) El testing de software de base ronda el 50 % del costo total. Según el Software Engineering Institute El testing ronda entre el 30 % y el 40 % del costo total. Según IBM y Gartner Si reparar un error durante la ingeniería de requerimientos cuesta $1, repararlo durante el testing cuesta $60 y repararlo después de la entrega $100. Maximiliano Cristiá Testing = Especificación + Programación
  • 5.
    Introducción Aspectos económicos del testing Testing Basado en Modelos Los costos de testear Un Caso de Estudio Alcance de la charla Conclusiones Calcular casos de prueba es lo más caro Retesting La fase más costosa del testing es el retesting. Con las metodologías clásicas esto puede implicar recalcular muchos casos de prueba. Calcular los casos de prueba Técnicamente, lo más costoso del testing es calcular todos y cada uno de los casos de prueba. En cierto sentido el retesting es costoso porque hay que recalcular casos de prueba. Maximiliano Cristiá Testing = Especificación + Programación
  • 6.
    Introducción Aspectos económicos del testing Testing Basado en Modelos Los costos de testear Un Caso de Estudio Alcance de la charla Conclusiones ¿Cómo reducir el costo de testing? Posibles soluciones No testear. Hacer programas correctos por construcción. Automatizar el testing. ¿Es posible? Sí, en gran medida es posible. Maximiliano Cristiá Testing = Especificación + Programación
  • 7.
    Introducción Aspectos económicos del testing Testing Basado en Modelos Los costos de testear Un Caso de Estudio Alcance de la charla Conclusiones ¿Cómo reducir el costo de testing? Posibles soluciones No testear. Hacer programas correctos por construcción. Automatizar el testing. ¿Es posible? Sí, en gran medida es posible. Maximiliano Cristiá Testing = Especificación + Programación
  • 8.
    Introducción Aspectos económicos del testing Testing Basado en Modelos Los costos de testear Un Caso de Estudio Alcance de la charla Conclusiones ¿Cómo reducir el costo de testing? Posibles soluciones No testear. Hacer programas correctos por construcción. Automatizar el testing. ¿Es posible? Sí, en gran medida es posible. Maximiliano Cristiá Testing = Especificación + Programación
  • 9.
    Introducción Aspectos económicos del testing Testing Basado en Modelos Los costos de testear Un Caso de Estudio Alcance de la charla Conclusiones ¿Cómo reducir el costo de testing? Posibles soluciones No testear. Hacer programas correctos por construcción. Automatizar el testing. ¿Es posible? Sí, en gran medida es posible. Maximiliano Cristiá Testing = Especificación + Programación
  • 10.
    Introducción Aspectos económicos del testing Testing Basado en Modelos Los costos de testear Un Caso de Estudio Alcance de la charla Conclusiones ¿Cómo reducir el costo de testing? Posibles soluciones No testear. Hacer programas correctos por construcción. Automatizar el testing. ¿Es posible? Sí, en gran medida es posible. Maximiliano Cristiá Testing = Especificación + Programación
  • 11.
    Introducción Aspectos económicos del testing Testing Basado en Modelos Los costos de testear Un Caso de Estudio Alcance de la charla Conclusiones Validación & Verificación (V&V) Validación ¿Implementamos el programa que quiere el usuario? Testing de aceptación → Tarde y caro (IBM & Gartner). Verificación ¿Implementamos el programa especificado? Testing de unidad, de integración y de sistema. Esta charla es sobre verificación y testing de unidad. verificación requerimientos especificación programa validación Maximiliano Cristiá Testing = Especificación + Programación
  • 12.
    Introducción Aspectos económicos del testing Testing Basado en Modelos Los costos de testear Un Caso de Estudio Alcance de la charla Conclusiones Corrección de un programa Considerando sólo verificación: Definición Un programa es correcto si verifica su especificación. Por lo tanto, para poder testear es necesario tener una especificación. A la especificación también se la llama modelo. Maximiliano Cristiá Testing = Especificación + Programación
  • 13.
    Introducción Testing Basado en Modelos Un Caso de Estudio Conclusiones Model-Based Testing (MBT) El testing se realiza partiendo de Proceso de MBT un modelo del software. requerimientos Al inicio, el modelo se utiliza para generar casos de prueba. modelo ¿error? Al final, el modelo se utiliza como generar comprobar oráculo. test resultados Teniendo el modelo, el proceso es abstractos abstractos muy automático. refinar abstraer En esta charla sólo veremos ejecutar “generar”. tests resultados Maximiliano Cristiá Testing = Especificación + Programación
  • 14.
    Introducción Testing Basado en Modelos Un Caso de Estudio Conclusiones ¿Quiénes usan MBT? Empresas y sectores Microsoft – Sun – France Telecom – Cisco Control de tráfico aéreo. La industria automovilística europea. La industria de tarjetas inteligentes. El reporte IBM GOTCHA-TCBeans – FSM Testing de la implementación POSIX de fnctl. Testing de parte del garbage collector de JVM. IBM reporta un ahorro sustancial y mayor cubrimiento. Maximiliano Cristiá Testing = Especificación + Programación
  • 15.
    Introducción Testing Basado en Modelos Un Caso de Estudio Conclusiones MBT formal → Testing automático Modelos formales Para automatizar MBT se utilizan modelos formales. Un modelo formal es una descripción lógico-matemática (abreviada) de un programa: es una abstracción. Esta charla es sobre MBT formal. Notaciones formales Para escribir una especificación formal se utiliza una notación formal. Notaciones formales: Z, Statecharts, CSP, B, TLA+ . . . En esta charla se utilizarán especificaciones Z. Maximiliano Cristiá Testing = Especificación + Programación
  • 16.
    Introducción Testing Basado en Modelos Un Caso de Estudio Conclusiones ¿Es más barato el MBT formal? Maximiliano Cristiá Testing = Especificación + Programación
  • 17.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones Veamos un ejemplo concreto Los requerimientos Un banco tiene un cierto conjunto de cajas de ahorro en las cuales se puede depositar y extraer dinero. Cada caja de ahorro se identifica con un número de cuenta. Los montos a depositar y los saldos serán números enteros. Sólo se debe mantener el saldo de cada caja de ahorro. Sólo modelaremos la operación de depósito. Maximiliano Cristiá Testing = Especificación + Programación
  • 18.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones La especificación Z Los tipos básicos [NCTA] Un tipo para los números de cuenta SALDO == N Un tipo para los saldos Comentarios No nos importa la estructura de un número de cuenta. Para simplificar consideramos que los saldos son números naturales. Maximiliano Cristiá Testing = Especificación + Programación
  • 19.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones La especificación Z El conjunto de estados Banco cajas : NCTA → SALDO Comentarios Del banco sólo nos importan las cajas de ahorro. A cada número de cuenta le corresponde un único saldo. No nos importan: la persistencia, la performance, el lenguaje de programación, las estructuras de datos, etc. Maximiliano Cristiá Testing = Especificación + Programación
  • 20.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones La especificación Z La operación de depósito DepositarOk ∆Banco Se cambia el estado num? : NCTA; monto? : Z Parámetros de entrada num? ∈ dom cajas ¿Existe la cuenta? monto? > 0 No se puede depositar 0 o menos cajas = cajas ⊕ {num? → cajas(num?) + monto?} Comentarios cajas representa la “base de datos” luego del depósito. El operador ⊕ se parece a update de SQL. Maximiliano Cristiá Testing = Especificación + Programación
  • 21.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones La especificación Z La operación de depósito (cont.) DepositarE1 == [ΞBanco; num? : NCTA | num? ∈ dom cajas] / DepositarE2 == [ΞBanco; monto? : Z | monto? ≤ 0] Depositar == DepositarOk ∨ DepositarE1 ∨ DepositarE2 Comentarios DepositarE1 y DepositarE2 especifican posibles errores. La operación final se arma usando todos los esquemas. Depositar es la operación que vamos a testear. Maximiliano Cristiá Testing = Especificación + Programación
  • 22.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones Usamos el modelo para generar casos de prueba Proceso de MBT Detalle de “generar” modelo ¿error? tests VIS árbol de pruebas comprobar abstractos podar generar táctica táctica táctica test resultados partición VIS ... partición VIS abstractos abstractos refinar abstraer Siempre el costo ejecutar tests resultados El mayor costo de testing es calcular los casos de prueba. Maximiliano Cristiá Testing = Especificación + Programación
  • 23.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones Fastest: automatización de MBT El proyecto I+D conjunto entre Flowgate Consulting y CIFASIS. Parcialmente financiado por FONTAR. Prototipo disponible en www.flowgate.net. Características Procesamiento distribuido – Cliente-servidor. Extensible y configurable por el usuario – Tácticas. Multiplataforma – Java. Auto-documentación – Latex y PDF. Interfaz de texto muy simple – A mejorar. Maximiliano Cristiá Testing = Especificación + Programación
  • 24.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones VIS y tácticas En teoría VIS == [cajas : NCTA → SALDO; num? : NCTA; monto? : Z] Dos tácticas de testing: DNF: considera cada uno de los esquemas por separado. Partición estándar sobre ⊕ considera valores representativos para cajas y {num? → cajas(num?) + monto?}. Con Fastest loadspec banco.tex selop Depositar addtactic Depositar SP oplus cajas oplus {num? map cajas(num?) + monto?} Maximiliano Cristiá Testing = Especificación + Programación
  • 25.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones El árbol de pruebas En teoría Cada nodo del árbol es un objetivo de prueba. Cada objetivo es un conjunto de condiciones que tiene que cumplir un caso de prueba. Los objetivos se tornan más específicos a medida que se desciende por el árbol. Los casos de prueba se extraen de las hojas del árbol. Con Fastest genalltt showtt -p Depositar Maximiliano Cristiá Testing = Especificación + Programación
  • 26.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones El árbol de pruebas de Depositar VIS DNF 1 DNF 2 DNF 3 SP1 ... SP8 SP9 ... SP16 SP17 . . . SP24 Ejemplos de objetivos de prueba DNF 1 == [VIS | num? ∈ dom cajas ∧ monto? > 0] SP4 == [VIS | num? ∈ dom cajas ∧ monto? > 0 ∧ cajas = {} ∧ dom cajas = dom{num? → cajas(num?) + monto?}] Maximiliano Cristiá Testing = Especificación + Programación
  • 27.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones Podando el árbol de pruebas En teoría Muchos de los objetivos pueden ser inalcanzables. Son situaciones imposibles de testear. Es conveniente eliminar esos objetivos. SP6 == [VIS | num? ∈ dom cajas ∧ monto? > 0 ∧ cajas = {} ∧ dom cajas ∩ dom{num? → cajas(num?) + monto?} = {}] Con Fastest – Automático en la próxima versión prunefrom SP_1, SP_2, SP_3, SP_6, SP_7, SP_8 prunefrom SP_9, SP_11, SP_12, SP_13, SP_15, SP_16 prunefrom SF_17, SP_19, SP_22, SP_23, SP_24 Maximiliano Cristiá Testing = Especificación + Programación
  • 28.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones El árbol y los objetivos resultantes VIS 5 objetivos DNF 1 DNF 2 DNF 3 SP4 SP5 SP20 SP21 SP4 == [. . . ] SP5 == [VIS | num? ∈ dom cajas ∧ monto? > 0 ∧ cajas = {} ∧ dom{num? → cajas(num?) + monto?} ⊂ dom cajas] DNF 2 == [VIS | num? ∈ dom cajas] / SP20 == [. . . ] SP21 == [. . . ] Maximiliano Cristiá Testing = Especificación + Programación
  • 29.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones Generando casos de prueba En teoría Se deben buscar constantes que satisfagan cada uno de los objetivos de prueba. Esto no es automatizable en el 100 % de los casos. Con Fastest En promedio Fastest se acerca al 90 %, el resto es manual. En este ejemplo encuentra el 100 % de los casos. El comando es genalltca. Maximiliano Cristiá Testing = Especificación + Programación
  • 30.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones Los casos de prueba en Z 5 casos automáticos SP4T == [VIS | monto? = 1 ∧ num? = ncta0 ∧ cajas = {ncta0 → 1}] SP5T == [VIS | monto? = 1 ∧ num? = ncta0 ∧ cajas = {ncta0 → 1, ncta1 → 1}] DNF 2T == [VIS | monto? = 0 ∧ num? = ncta0 ∧ cajas = ∅] SP20T == [VIS | monto? = −1 ∧ num? = ncta0 ∧ cajas = {ncta0 → 1}] SP21T == [VIS | monto? = −1 ∧ num? = ncta0 ∧ cajas = {ncta0 → 1, ncta1 → 1}] Maximiliano Cristiá Testing = Especificación + Programación
  • 31.
    Introducción El modelo Testing Basado en Modelos Detalle del paso “generar” Un Caso de Estudio Testing asistido por Fastest Conclusiones ¿Qué estamos testeando? Los casos de prueba en castellano SP4T : depositar en una cuenta existente una cantidad positiva cuando es la única cuenta. SP5T : depositar en una cuenta existente una cantidad positiva cuando no es la única cuenta. DNF 2T : intentar un depósito cuando no hay cuentas. SP20T : depositar en una cuenta existente una cantidad negativa cuando es la única cuenta. SP21T : depositar en una cuenta existente una cantidad negativa cuando no es la única cuenta. Maximiliano Cristiá Testing = Especificación + Programación
  • 32.
    Introducción Testing Basado en Modelos Un Caso de Estudio Conclusiones Ventajas y desventajas del MBT formal Ventajas Es la técnica de testing más económica. Es la técnica de testing más automática. Es la técnica de testing más disciplinada. Es la técnica de testing que más errores descubre. Es la técnica de testing menos orientada al código. Se puede comenzar el testing desde el inicio del proyecto. Desventajas Requiere profesionales que puedan modelar formalmente. Requiere una herramienta como Fastest. Maximiliano Cristiá Testing = Especificación + Programación
  • 33.
    Introducción Testing Basado en Modelos Un Caso de Estudio Conclusiones MBT formal hace posible el testing Maximiliano Cristiá Testing = Especificación + Programación
  • 34.
    Introducción Testing Basado en Modelos Un Caso de Estudio Conclusiones Proyectos actuales de testing con Fastest Con INPE Instituto Nacional de Pesquisas Espaciais (Brasil). Testing de protocolo de comunicación entre computadoras de satélites. Con Critical Software y Universidad de Coimbra Instituciones portuguesas. Testing de software de abordo de satélites según estándar de la ESA. Maximiliano Cristiá Testing = Especificación + Programación