Primera Jornada de Calidad e Innovación en la Producción de software. Organizada por el Centro de Calidad e Innovación del Polo Tecnológico de Rosario y la Municipalidad de Rosario 12 Junio 2009
Disertante:
Maximiliano Cristiá, Jefe de cátedra de Ingeniería de Software de la UNR, Investigador de CIFASIS, Co-fundador de Flowgate Security Consulting
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
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