Criterios cobertura de grafos: código fuente

Slides:



Advertisements
Presentaciones similares
Ayudantía Pre-Actividad 5 Multimedios. Ayudantía Pre-Actividad 5 (1) creación de varias clases, y composición (2) manejo de threads (3) manejo de excepciones.
Advertisements

EL LENGUAJE DE PROGRAMACIÓN C
Programación Interactiva Fundamentos de Programación
Instrucciones y excepciones
Manejo de errores y excepciones
Seminario de Actualización - Excel Avanzado y Macros
MANEJO DE EXCEPCIONES EN C++
UNIVERSIDAD LATINA (UNILA)
Algoritmos y Estructuras de Datos
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Método en Java.
Manejo de excepciones en Java
Tema 4: Sentencias de control
If anidados y Switch Prof. Lillian Bras.
Colecciones.
Programación orientada a objetos
Técnicas de Calidad en el Software
1 LENGUAJES LOGICOS IMPLEMENTACION CALCULO DE PREDICADOS PROLOG.
Ejemplo Supongamos que queremos realizar un sistema que trabaje con figuras geométricas planas. El sistema debe poder mostrar información de una figura.
El lenguaje de programación Java
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Análisis de Algoritmos
Capítulo 1 “Elementos de Programación”
Conversión cadena a número
Computación II Repaso de java Karina Figueroa Mora.
USO DE EXCEPCIONES EN JAVA LSC. Natalia Rodríguez Castellón.
Módulo 8: Manejo de Errores y Excepciones
Programación Orientada a Objetos Unidad 4 Excepciones Universidad de Chile Departamento de Ciencias de la Computación.
Unidad III Manejo de Excepciones en Java y C++
Direct Object Pronouns. Instrucciones / Read each sentence. On a piece of paper, rewrite each sentence using a direct object pronoun. Then, advance to.
Programación avanzada en Java Miguel Ángel Corella 26 de Septiembre de 2005.
Estructuras de control Resolución de problemas y algoritmos.
Símbolos de Programación Estructurada
Clase Teórica No. 3 Introducción a Java
Ing. Esp. Ricardo Cujar. Permite la ejecución de una sentencia, dada una determinada condición. If(condición){ sentencia(s) a ejecutar en caso de que.
TIPOS DE DATOS Estructuras de control y repetición PARCIAL III.
LICETH CAJAS 3RO ASI 26/10/2010. Es un lenguaje de programación diseñado para crear una amplia gama de aplicaciones que se ejecutan en.NET Framework,
2012-BM5A. Unos tips antes de empezar: C# es Case Sensitive (sensible a mayúsculas) Pepe ≠ pepe ≠ pEpE Las asignaciones se hacen con “=” y las comparaciones.
Análisis de los algoritmos Unidad 7. Análisis La resolución práctica de un problema – algoritmo o método de resolución – y por otra un programa o codificación.
ESTRUCTURAS DE DATOS Y ALGORITMOS Samuel Peñaló
Control, adquisición y monitoreo con Arduino y Visual Basic .net
Taller de Java Universidad de los Andes
Manejo de Excepciones Agustín J. González ELO329 ELO329.
Estructuras de Control en Visual Basic.net
Operadores Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.
BREVE INTRODUCCION A LA PROGRAMACION
Anexo Chame-San Carlos
Ingeniero en Computación José Alfredo Cobián Campos
Evolución de paradigmas y lenguajes de Programación
Exception Object Throwable Error Exception Runtime Exception.
Estructuras de Control en Visual Basic.net
Diseño y Programación Orientada a Objetos
Instrucciones y excepciones
Fundamentos de Programación. Estructuras de Control
ESTRUCTURAS DE CONTROL EN VISUAL BASIC.NET Prof.: Rafael Mourglia.
Testing basado en sintaxis: Introducción
Automatización del testing
Criterios cobertura de grafos: casos de uso
Criterios cobertura de grafos: introducción
Criterios cobertura de grafos: especificaciones
Manuel Núñez Especificación, Validación y Testing
Testing basado en sintaxis: Gramáticas a partir de programas
Javascript.
SENTENCIAS CONTROL DE FLUJO EN C I.E. Mario Jiménez.
Informática Ingeniería en Electrónica y Automática Industrial
Manejo de Excepciones Agustín J. González ELO329 ELO329.
Programación Orientada a Objetos
Casos de prueba con JUnit
Estructuras de control Java
Programación Orientada a Objetos
Transcripción de la presentación:

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)

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)

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)

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)

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)

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)

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)

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)

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)

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)

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 - 1.0 ); 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

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

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

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

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)

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)

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)

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)

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)

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)

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)