Testing
Testing
Testing
La Crisis del
Software
• Fenómeno mundial “decretado” hace muchos años
– Muchos dicen que es crónica
– Algunos casos traumáticos…
• Therac-25 (6 vidas)
• Arianne 5 (500 mill.)
• AT&T Switching System, etc, etc…
• Denver Airport (9 meses penalidad de 1.1 x día)
– Miles de fracasos en Information Systems
4
Algunos números sobre los defectos
• Confiabilidad • Usabilidad
• Corrección • Facilidad de
• Robustez Mantenimiento
• Seguridad (en • Reusabilidad
datos, • Verificabilidad +
en acceso, Safety) Claridad
• Funcionalidad • Interoperabilidad
6
Asegurar la calidad vs.
controlar la calidad
Una vez definidos los requerimientos de
calidad, tengo que tener en cuenta que:
– Las calidad no puede “inyectarse” al final.
– La calidad del producto depende de tareas
realizadas durante todo el proceso.
– Detectar errores en forma temprana ahorra
esfuerzos, tiempo, recursos.
7
Testear antes de
codificar
• “El acto de diseñar tests es uno de los mecanismos
conocidos más efectivos para prevenir errores…
El proceso mental que debe desarrollarse para crear
tests útiles puede descubrir y eliminar problemas en
todas las etapas del desarrollo”
B. Beizer
• “Test-Driven Development”: Kent Beck. XP
8
Definiciones
• Validación
– ¿Estamos haciendo el producto correcto?
– Basada en el uso de modelos
• Verificación
– ¿Estamos haciendo el producto correctamente?
– Necesariamente es en relación a un componente
anterior, que describe nuestro producto
9
Aspectos de los “errores” de software
• Falla (failure)
• Diferencia entre los resultados esperados y reales
10
Verificación
estática y dinámica
• Dinámica: trata con ejecutar y
observar el comportamiento de un
producto
• Run-Time Monitoring.
(pérdida de memoria,
performance)
• Run-Time Verification
13
Testing
14
Testing
15
Cómo se hace testing?
Input
Comportamiento Comportamiento
esperado del obtenido del
programa - programa
ORÁCULO
= ? ¹
ok Falla
16
Estamos asumiendo...
18
La visión moderna
60
20
• Testear es una 0
10
0
8
decisión
Unidad de Tiempo
económica
19
La paradoja del
pesticida (Beizer)
• El pesticida mata el 98% de los bichos,
dejando un residuo (los más fuertes)
• Al siguiente año, necesito un pesticida mejor
• Bicho en inglés es bug
• El buen uso del testing implica que los
errores que no se encuentran son los más
sutiles
• ¡Si todo anda bien, el tipo de errores
encontrados tiene que cambiar! 20
Cuándo Parar?
22
Niveles de test
23
Testing de Integración
24
El test de Integración
25
Programa auxiliares:
Stubs y drivers
• Driver simula las llamada
• Stub simula subprograma
• En total, exigen un esfuerzo
considerable de programación
26
Hints
27
Error de Interpretación
29
Error de Interfaz
31
Algunos hints para el testing de interfaces
32
Testing de Unidad
33
Test de unidades
34
Qué es y qué no es una unidad
• Una unidad es
– El trabajo de un único programador
– La cosa más pequeña que puede ser probada
– Pequeña... 50 a 300 líneas de código
• Una unidad no es
– La entidad más pequeña que provee una
determinada funcionalidad
– Lo primero que se puede probar sin programas
auxiliares
– 50,000 - 100,000 líneas de código
35
El Testing y el ciclo de
vida de un sistema
Preparar test Test de
Requerimientos
de sistema sistema
Programación
36
Proceso de testing
37
Actividades del proceso de testing
• Asociadas a requerimientos
– Planificación de test de sistema
• Derivación de casos de test funcionales
– Corrección de requerimientos a partir de lo
detectado al confeccionar el plan
38
Actividades del proceso de testing
39
Actividades del proceso de testing
• Asociadas a la implementación
– creación de ambiente de ejecución de tests
– generación de casos de test estructurales
– ejecución de test de unidad
– ejecución de test de integración
– documentación de resultados
– seguimiento de errores
– test de regresión
40
Testing Funcional
Test funcional -
Corrección funcional
Inputs Outputs
espec. f(i)
i
f
• p implementa correctamente a f
• Además, lo hace en forma razonable
– por ejemplo, si i ∈ dom(f) y f(i) = error, p da
un error razonable (por ejemplo, no se
cuelga!)
• Además, ∀ i ∉ dom(f), p avisa que i ∉
dom(f)
43
Cómo seleccionar datos de
test?...Intuiciones
• Agrupando los inputs
• Hipótesis: hay inputs “parecidos”
(tratamiento), entonces testear el
programa con uno de estos, equivaldría a
testearlo con cualquier otro de estos
– Esto no es verdad pero sirve y es la base de
la mayor parte de las técnicas!!!
44
Terminología (I)
D1 X1 Y1 Z1 R1
... ... ... ... ...
Dk Xk Yk Zn Rn
46
Terminología (II)
47
Criterios de Selección:
La base Teórica de las
Técnicas de Generación de
Casos
Criterios de selección de datos de test
• Un criterio es un subconjunto de
conjuntos finitos del dominio de Inputs
del programa P (puede estar expresado
en términos de un conjunto de
predicados también llamados casos)
• Se dice que un conjunto de datos T
satisface un criterio C sii T∈ C
49
Criterios “ideales”
50
Son estas nociones efectivas?
xy
“¿Que casos probarían?”
52
Criterios estructurales o
de “caja blanca o de cristal”
• Los casos de test se definen a partir x,y
de la estructura interna
function fastexp (x,y: int):int;
del programa
% pre: y >= 0
% post: devuelve x a la y
z :int :=1;
while y ¹ 0 do
if odd(y) then
z :=z*x; xy
y :=y-1
endif;
x := x*x; y :=y/2
endwhile
return(z) “¿Qué pasa si y es potencia de 2?”
“¿Qué pasa si y = 2n -1?”
53
Cómo evaluar en la práctica la calidad
de los casos o datos generados
54
Importante
55
Técnicas de Selección de
Casos:
“Partir y Combinar”
Qué se busca con las Técnicas?
57
Técnicas de partición de
Dominio
58
Método de Partición en Categorías -
Ejemplo
• FIND
Dado un nombre de archivo A y una
expresión E, FIND devuelve la lista L de
las palabras en A que comienzan con E,
sin repeticiones. E no puede ser vacía ni
contener blancos
59
Ejemplo
PASO 1
1. Elegir una funcionalidad que pueda
testearse en forma independiente
Ya lo tenemos!
60
Ejemplo
PASO 2
2. Determinar sus parámetros u otros
objetos del ambiente que pueden
afectar su funcionamiento
-Archivo (nombre)
-Expresión
61
PASO 3
3. Determinar las características
relevantes de cada objeto determinado
en el punto 2 (Archivo, Expresión) y de
la relación entre estos objetos en el
output (relación Archivo/Expresión)
“Category” en el artículo original de
Ostrand & Balcer 1988
62
Ejemplo - PASO 3
Características de E
• longitud de expresión
• blancos en la misma
63
Ejemplo - PASO 3
Características de A
• Tamaño de A
64
Ejemplo - PASO 3
Características de A/E
• número de ocurrencias de E en A
• número máximo de ocurrencias de E en
una línea de A
• longitud de A vs. longitud de E
• repeticiones de palabras que contienen a
E en A
• ubicación relativa de E en palabras de A
• ...
65
PASO 4
4. Determinar elecciones (“choices”) para
cada característica de cada objeto
66
Ejemplo en
Categorías de E
• longitud de expresión
– vacía
– no vacía
• contiene blancos
– sí
– no
67
Ejemplo en
Categorías de A
• existe
– sí
– no
• tamaño
– vacío
– no vacío
68
Ejemplo en
Categorías de A/E (I)
• número de ocurrencias de E en A
–0
– al menos 1
• número máximo de ocurrencias de E en
una línea de A
–0a1
– más de 1
69
Ejemplo en
Categorías de A/E (II)
70
PASO 5 - Clasificación : errores, únicos,
restricciones
E A
• longitud • existe
– vacía - ERROR – sí
– no vacía – no - ERROR
• blancos • tamaño
– sí - ERROR – vacío - ÚNICO
– no – no vacío
71
PASO 5 - Clasificación : errores, únicos,
restricciones
A/E • número máximo de
• número de ocurrencias de E en
ocurrencias de E en una línea de A
A –0o1
– 0 - ÚNICO – más de 1 (A no
– al menos 1 (A no vacío) ÚNICO
vacío)
• ETC.
72
PASO 6
Armado de casos
• Ver una posible solución en archivo Word
73
Resumen del Método
restricciones
Información para identificar categorías
77
Técnicas de partición de
Dominio
78
Especificaciones de Servicios o
Requerimientos
• Aparecen de manera + o – clara los
(parámetros implícitos y explícitos), su
casuística, la relación entre ellos
• Ejemplo:en los casos de uso: hay
escenarios distintos dependiendo de
valores de parámetros o de acciones
decididas por el actor. Son parámetros
candidatos con sus categorías y
elecciones
79
Análisis de condiciones de borde
80
1. Heurística
81
2. Heurística
• ¿Qué me falta?
• Probar el ingreso de valores de otro tipo
que la clase
– numéricos en vez de alfabéticos
– alfabéticos en vez de numéricos
– combinaciones de alfabéticos y numéricos
– fechas erróneas, etc.
• El entorno de desarrollo puede ahorrar
este trabajo
85
6. Tipos de Datos de input y output
86
8. Cardinalidad del modelo de datos
87
Ejemplo
89
Ejemplo
Inicio
Solicitud Ingresada
• Debo probar:
– Transiciones
Solcitud Preadjudicada Solicitud Rechazada válidas
– Transiciones
Solicitud Aceptada inválidas
90
Técnicas Combinatorias
91
Definición Arbórea
Dólares Común
92
Definición Arbórea
• Puede verse como category-partition especial donde el
mismo diseñador de casos decide explicítimanete cómo
combinar
• Por ejemplo, cuando hay idea de orden de ingreso de
parámetros se puede minimizar casos sin sentido
• Se arma un árbol donde cada nodo indica “category”
sobre un parámetro o combinación entre un parámetro
y uno anterior descripto en el árbol
• Los ejes que salen son las choices compatibles con las
condiciones acumuladas desde la raíz
• Los casos de tests especificados y ejecutados son los
caminos del árbol
93
Definición Arbórea: Consejos
95
Técnicas Combinatorias
96
Grafo de Causa-Efecto
• Causas
• Efectos
1. Carácter en la 1er
50. El índice de la sección
columna es D
es mostrado
2. Carácter en la 1er
51. Msg “comando inválido”
columna es L
52 Msg “número de indice
3. Carácter en la 2da
inválido”
columna es un dígito 51
1
o not
E 2 r 20
50
a
n
d
3 not 52
Casos de test
Causas 1 2 3 4
1 1 0 0
2 0 1 0
3 1 1 0
Efectos
50 1 1 0 0
51 0 0 1 0
52 0 0 0 1
101
Grafo de Causa-Efecto: Otro Ejemplo
m I b
m o
P r
E a m
i
n
m
E=B d
p
SE
E=I o a
r n
SE=B
d
SE=I
SE=I+B
102
Técnicas Combinatorias
103
2-Wise Testing y OATS
104
Arreglo Ortogonal: Ejemplo
• Factors: Columnas=Parámetros
• Levels: cantidad de valores posibles para cada
columna (e.g.,choices)
• Strength: Cantidad de columnas tales que las
Levels Strenght posibilidades aparecen la misma
cantidad de veces
• Tabulados como: Lruns(Levels Factors)
• Ej: L4(2 3): cuatro corridas para cubrir 3 factores
con dos elecciones posibles c/u
• L18(3 6 6 1 ): 18 corridas para 7 factores, 6 de 3
niveles y 1 de 6 niveles. Mejor que 216 tests! 108
Conclusiones sobre la Generación de
Casos
• Ninguna técnica es completa
• Las técnicas atacan distintos problemas
• Lo mejor es combinar varias de estas técnicas para
complementar las ventajas de cada una
• Depende del programa a testear
• Sin especificaciones de req. todo es mucho más difícil
• Tener en cuenta la conjetura de defectos
• Ser sistemático y documentar las suposiciones sobre
el comportamiento o el modelo de fallas
109
Cobertura: evaluación
de la calidad de los
Casos de test (I)
• La especificación de tests cubre la
especificación o los requerimientos del sistema?
– Tengo requerimientos de Test para cada funcionalidad
pedida (ej. Caso de uso)?
Secuencia
115
Representación del flujo de control
repeat until
do while
case, o selección
múltiple
begin
1: read(x,y) 2
2: while x ¹ y do
3: if x > y 3
4: then x := x-y
4
5: end-if
6: end-while 5
7: return x
8: end 6
7 8
117
Caminos del flowgraph
118
De caminos a casos de test
119
Caminos no factibles
120
Criterios de
Testing Estructural
• Un criterio de testing estructural
permite identificar entidades que deben
cubrirse con los datos de test para
satisfacer el criterio
121
Cubrimiento de sentencias o
instrucciones
122
Flowgraph - Ejemplo 2
begin
1: read(a,b,x) 2
7: end if 6
8:end
7
123
Ejemplo sentencias
124
Testing estructural - proceso
125
Observaciones
• Pero…
126
Problemas
127
Técnicas estructurales como criterio
de adecuación
No usar información
estructural
Ejecutar tests
NO SI
Fallas? Reparar
NO Cubrimiento SI
estructural?
Terminación
del testing
128
Cubrimiento de decisiones
o Branch
• Problema: el “else” del “then” no está testeado
129
Ejemplo cubrimiento de decisiones
131
Cubrimiento de condiciones
132
Condiciones
134
Cubrimiento de caminos
• Es factible?
• Garantiza algo?
135
Criterios estructurales basados en
flujo de control
Control flow testing
• sentencias
• branch
• decisiones
• caminos
136
Data Flow Testing
Motivación
• Programas = control + data
137
Definiciones y Usos
1 da
begin
1: read(a,b,x) ua 2
ua
2: if (a>-1) and (b=0)then ua 3
3: x := x/a
4: end if 4
140
Def-use flowgraph para b Ejemplo
1 db
begin
1: read(a,b,x) ub 2
ub
2: if (a>-1) and (b=0)then
3
3: x := x/a
4: end if 4
7: end if 6
8:end
7
141
Def-use flowgraph para x Ejemplo
1 dx
begin
1: read(a,b,x) 2
142
DUA (definition-use association)
143
Ejemplo – DUAS ejemplo 2
144
Criterios estructurales basados en
flujo de datos
Data flow testing
• all defs
• all c-use
• all p-use
• all uses
• all c-use some p-uses
• all p-uses some c-uses
• all du-paths
145
Cubrimiento All-uses
146
Ejemplo All-Uses
148
Subsumption en Criterios estructurales
Statement
• Qué relación existe
a la hora de 149
Ejecución del testing
Ejecución del testing
selección de datos
• dónde testear: ambiente de test
• terminación del testing
• documentación
• reporte y seguimiento de errores
• test de regresión
151
Ejecución del testing
• selección de datos
dónde testear: ambiente de test
• terminación del testing
• documentación
• reporte y seguimiento de errores
• test de regresión
152
Movimiento de componentes
integración,
programación testing del sistema
testing de unidades testing de aceptación
153
Ejecución del testing
• selección de datos
• dónde testear: ambiente de test
• terminación del testing
• documentación
• reporte y seguimiento de errores
• test de regresión
154
Terminación del testing
• selección de datos
• dónde testear: ambiente de test
• terminación del testing
documentación
reporte y seguimiento de errores
• test de regresión
156
Documentos de
Casos de test
• ambiente de test
• selección de datos
– referencia a casos de test que prueban
• ejecución y resultado obtenido
– reporte de errores
• re-ejecución luego de las modificaciones
pertinentes
158
Gerenciamiento de errores
159
Gerenciamiento de errores
160
Ejecución del testing
• selección de datos
• dónde testear: ambiente de test
• terminación del testing
• documentación
• reporte y seguimiento de errores
test de regresión
161
Test de Regresión
162
¿Cuándo hacer test de regresión?
163
Selección de casos de regresión
164
Bibliografía