Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porMaría Mercedes Henríquez Maldonado Modificado hace 6 años
1
Criterios cobertura de grafos: código fuente
Manuel Núñez Especificación, Validación y Testing Estas transparencias están basadas en las desarrolladas por Ammann & Offutt como acompañamiento de su libro Introduction to Software Testing (2nd Edition)
2
Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
Resumen Una aplicación habitual de los criterios de grafos es generar código. Grafo: Habitualmente, el grafo de control de flujo (GCF). Cobertura de nodos: Ejecutar cada instrucción. Cobertura de aristas: Ejecutar cada rama. Bucles: Estructuras que producen bucles (bucles while y similares). Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
3
Grafos de control de flujo
Un GCF modela todas las ejecuciones de un método mediante la descripción de las estructuras de control. Nodos: Instrucciones o secuencias de instrucciones (bloques básicos). Aristas: Transfieren el control. Bloque básico: Secuencia de instrucciones tal que si se ejecuta la primera entonces se ejecutan todas las demás (no hay ramificación). Algunas veces se anotan los CFGs con información adicional: Predicados en las ramas. Definición de variables. Uso de variables. A continuación veremos como se traduce de instrucciones a grafos. Estos dos últimos no los veremos en clase. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
4
Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
GCF: la instrucción if if (x < y) { y = 0; x = x + 1; } else x = y; 4 1 2 3 x >= y x < y x = y y = 0 x = x + 1 if (x < y) { y = 0; x = x + 1; } 3 1 2 x >= y x < y y = 0 x = x + 1 Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
5
GCF: la instrucción if-return
3 1 2 x >= y x < y return print (x) No hay arista entre los nodos 2 y 3. Los nodos return deben ser distintos. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
6
Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
GCF: Bucles Para modelar bucles necesitamos añadir nodos extra. Son nodos que no representan ni instrucciones ni bloques básicos. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
7
GCF: Bucles while y for 1 x = 0 x = 0 implícitamente inicializa bucle
while (x < y) { y = f (x, y); x = x + 1; } 1 2 nodo extra for (x = 0; x < y; x++) { y = f (x, y); } x >= y x < y 2 3 5 x >= y x < y y = f (x, y) 4 4 3 y =f(x,y) x = x + 1 x++ implícitamente incrementa bucle Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
8
GCF: Bucles do, break, continue
1 x = 0 x = 0; do { y = f (x, y); x = x + 1; } while (x < y); println (y) x = 0; while (x < y) { y = f (x, y); if (y == 0) break; } else if (y < 0) y = y*2; continue; } x = x + 1; print (y); 2 3 y =f(x,y) y == 0 4 break 1 x = 0 5 y < 0 2 y = f (x, y) x = x+1 6 y = y*2 continue x >= y x < y 7 3 x = x + 1 8 print (y) Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
9
Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
GCF: Case/switch read ( c) ; switch ( c ) { case ‘N’: z = 25; case ‘Y’: x = 50; break; default: x = 0; } print (x); 5 1 read ( c ); c == ‘N’ x = 0; break; 2 4 3 c == ‘Y’ default x = 50; z = 25; print (x); Un case sin un break continúa con el siguiente case Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
10
GCF: Excepciones (try-catch)
1 s = br.readLine() IOException try { s = br.readLine(); if (s.length() > 96) throw new Exception (“too long”); if (s.length() == 0) (“too short”); } (catch IOException e) { e.printStackTrace(); } (catch Exception e) { e.getMessage(); } return (s); 2 3 length <= 96 e.printStackTrace() length > 96 4 5 throw length != 0 length == 0 7 throw 6 e.getMessage() 8 return (s) Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
11
Ejemplo GCF: Estadística
1 2 public static void computeStats (int [ ] numbers) { int length = numbers.length; double med, var, sd, mean, sum, varsum; sum = 0; for (int i = 0; i < length; i++) sum += numbers [ i ]; } med = numbers [ length / 2]; mean = sum / (double) length; varsum = 0; varsum = varsum + ((numbers [ I ] - mean) * (numbers [ I ] - mean)); var = varsum / ( length ); sd = Math.sqrt ( var ); System.out.println ("length: " + length); System.out.println ("mean: " + mean); System.out.println ("median: " + med); System.out.println ("variance: " + var); System.out.println ("standard deviation: " + sd); i = 0 3 i >= length i < length 4 5 i++ We suggest stopping here and having the students draw the graph themselves. Then show the graph on the next slide to compare their answers. 6 i = 0 7 8 i >= length i < length i++ Especificación, Validación y Testing (M. G. Merayo y M. Núñez) 11
12
Requisitos de test y caminos de test: EC
Edge Coverage Requisitos de test y caminos de test: EC 1 2 Requisitos de test A. [ 1, 2 ] B. [ 2, 3 ] C. [ 3, 4 ] D. [ 3, 5 ] E. [ 4, 3 ] F. [ 5, 6 ] G. [ 6, 7 ] H. [ 6, 8 ] I. [ 7, 6 ] Caminos de test [ 1, 2, 3, 4, 3, 5, 6, 7, 6, 8 ] 3 4 5 The animation shows empty boxes. Students can fill these in, then show the answers. Edge coverage is very easy, of course … 6 7 8 Especificación, Validación y Testing (M. G. Merayo y M. Núñez) 12
13
Requisitos de test y caminos de test: EPC
Pair Edge Coverage Requisitos de test y caminos de test: EPC 1 2 Requisitos de test A. [ 1, 2, 3 ] B. [ 2, 3, 4 ] C. [ 2, 3, 5 ] D. [ 3, 4, 3 ] E. [ 3, 5, 6 ] F. [ 4, 3, 5 ] G. [ 5, 6, 7 ] H. [ 5, 6, 8 ] I. [ 6, 7, 6 ] J. [ 7, 6, 8 ] K. [ 4, 3, 4 ] L. [ 7, 6, 7 ] Caminos de test i. [ 1, 2, 3, 4, 3, 5, 6, 7, 6, 8 ] ii. [ 1, 2, 3, 5, 6, 8 ] iii. [ 1, 2, 3, 4, 3, 4, 3, 5, 6, 7, 6, 7, 6, 8] 3 4 CT RTs atravesados sidetrips 5 i A, B, D, E, F, G, I, J C, H ii A, C, E, H The animation shows empty boxes. Students can fill these in, then show the answers. Edge coverage is very easy, of course … 6 iii A, B, D, E, F, G, I, J, K, L C, H 7 8 CT iii hace que CT i sea redundante. Especificación, Validación y Testing (M. G. Merayo y M. Núñez) 13
14
Requisitos de test y caminos de test: PPC
Prime Path Coverage Requisitos de test y caminos de test: PPC 1 2 Requisitos de test A. [ 3, 4, 3 ] B. [ 4, 3, 4 ] C. [ 7, 6, 7 ] D. [ 7, 6, 8 ] E. [ 6, 7, 6 ] F. [ 1, 2, 3, 4 ] G. [ 4, 3, 5, 6, 7 ] H. [ 4, 3, 5, 6, 8 ] I. [ 1, 2, 3, 5, 6, 7 ] J. [ 1, 2, 3, 5, 6, 8 ] Caminos de test i. [ 1, 2, 3, 4, 3, 5, 6, 7, 6, 8 ] ii. [ 1, 2, 3, 4, 3, 4, 3, 5, 6, 7, 6, 7, 6, 8 ] iii. [ 1, 2, 3, 4, 3, 5, 6, 8 ] iv. [ 1, 2, 3, 5, 6, 7, 6, 8 ] v. [ 1, 2, 3, 5, 6, 8 ] 3 4 5 CT RTs atravesados sidetrips The animation shows empty boxes. Students can fill these in, then show the answers. Edge coverage is very easy, of course … 6 i A, D, E, F, G H, I, J 7 8 ii A, B, C, D, E, F, G, H, I, J iii A, F, H J CT ii hace que CT i redundante. iv D, E, F, I J v J Especificación, Validación y Testing (M. G. Merayo y M. Núñez) 14
15
Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
Resumen La aplicación de los criterios de test a los grafos de control de flujo es relativamente sencilla. Aún así, hay que tomar algunas decisiones sutiles al traducir de estructuras de control a grafos. Algunas herramientas asignan un nodo a cada instrucción (en lugar de asignarlo a cada bloque básico). La cobertura no varía pero hay que modificar la documentación del proceso de testing. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
16
Criterios cobertura de grafos: elementos de diseño
Manuel Núñez Especificación, Validación y Testing Estas transparencias están basadas en las desarrolladas por Ammann & Offutt como acompañamiento de su libro Introduction to Software Testing (2nd Edition)
17
Orientación a objetos y diseños
El énfasis en la modularidad y la reutilización lleva a que la complejidad se desplace a las relaciones/conexiones entre las partes del sistema. Por ello, testear estas relaciones es más importante que antes. Los grafos se basan en las conexiones entres las componentes software. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
18
Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
Grafo de llamadas Es el tipo de grafo más común para testear el diseño estructural. Nodos: Unidades (en Java, métodos). Aristas: Llamadas a unidades. Ejemplo de grafo de llamadas A B C D F E Node coverage: Llamar a cada unidad al menos una vez (cobertura de métodos). Edge coverage: Ejecutar cada llamada al menos una vez (cobertura de llamadas). Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
19
Grafo de llamadas sobre clases
La cobertura de nodos y aristas sobre el grafo de llamadas de clases, habitualmente, no funciona bien. Por ejemplo, los métodos podrían no llamarse entre ellos. Clase stack public void push (Object o) public Object pop ( ) public boolean isEmpty (Object o) pop push isEmpty ? ? ? Necesitamos otros tipos de testing: NO uséis criterios basados en grafos. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
20
Herencia y polimorfismo
Trabajos todavía en fases muy preliminares. Las clases no son ejecutables (no podemos testear este grafo). Necesitamos objetos. A B C D a b d c objetos Ejemplo grafo jerarquía de herencias A B C D ¿Cuál es la cobertura en este grafo? Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
21
Cobertura en un grafo de herencias
¿Crear un objeto para cada clase? Esto es demasiado débil porque no hay ejecución. ¿Crear un objeto para cada clase y aplicar cobertura de llamadas? OO Call Coverage: RT contiene cada nodo alcanzable en el grafo de llamadas de un objeto que se ha instanciado para cada clase de la jerarquía. OO Object Call Coverage: RT contiene cada nodo alcanzable en el grafo de llamadas de todos los objetos que se han instanciado para cada clase de la jerarquía. Especificación, Validación y Testing (M. G. Merayo y M. Núñez)
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.