Análisis de Flujo de Datos

Catalina Morera -  A84366

Marta Solano - A96021

Luis Zárate - A96950

Agenda

  • Descripción del tema

  • Motivación

  • Desarrollo

  • Ejemplos

  • Referencias   

Flujo de Datos

  • Representación abstracta de una secuencia de posibles cambios de estado de los datos.

Estados Posibles: 

Creación, Uso y Destrucción.

Flujo de Datos

Permite:

 

  • Observar como los datos son accedidos y modificados por el código.  

  • Identificar referencias indefinidas y variables nunca usadas.

¿Qué son las pruebas de flujo de datos?

  • Familia de estrategias basada en seleccionar caminos a través del flujo de control del programa para explorar secuencias de eventos relacionados con el estado de los objetos de datos.

 

Pruebas de caja blanca

Motivación

  • Carácter dinámico de los datos no garantiza su disponibilidad y correctitud en todo momento.

  • Pruebas ayudan a minimizar la posibilidad de encontrar errores atribuidos a los datos y la gran cantidad de caminos que tiene un programa.

Motivación

  • Ayudan con la limpieza y optimización de código.

 

  • Estas pruebas no garantizan la inexistencia de errores, debido a la gran cantidad de caminos que puede tener un programa de tamaño considerable.

 

¿Para qué sirven las pruebas de control de flujo?

  • Elegir la suficiente cantidad de rutas para asegurar que:​

    • Todas las variables son inicializadas antes de usarse.

    • Todas las variables van a ser usadas al menos una vez.

    • Se abarquen las rutas a través de las cuales las variables son definidas y usadas.

Modelo de Flujo de Datos

  • Captura asociaciones de puntos en un programa donde una variable es producida (definición) con el punto donde la variable puede ser accedida (uso).
  • Asociales de definiciones y usos capturan el flujo de información a través del programa.
  • Basado en el gráfico de control de flujo.

Estado de las variables de datos

  • Está declarada o inicializada.
  • Está asignada a un nuevo valor.
  • Es recibida como parámetro.

Definida

Estado de las variables de datos

  • Su valor es extraído (definición).
  • Aparece sobre una asignación (c-use).
  • Aparece sobre un predicado - sentencia condicional - (p-use).

Usada (Referenciada)

Estado de las variables de datos

  • Es liberada (implícita o explícitamente).
  • Es destruida al final de un ámbito (scope).
  • Está indefinida.

Destruida

Anomalías en el flujo de datos

  • Patrones de uso de datos que pueden llevar a un error.

  • Normalmente son analizados en pares.

  • Patrón: Secuencia de estados para una variable.

Anomalías en el Flujo de Datos

Notación

U - Indefinida

D - Definida pero no referenciada

R - Definida y referenciada

d - definida

u - usada

k - destruida

~ - no existe la variable (r)

Anomalías en el flujo de datos

Ejemplos

dk

Variable definida y después destruida

~u

Variable no existe y después se utiliza 

Posibles combinaciones

Anomalías en el flujo de datos

  • Variable definida y vuelta a definir
  • Variable indefinida pero referenciada
  • Variable definida pero nunca referenciada

Combinaciones más comunes que provocan anomalías

Grafo de caminos de una variable y posibles anomalías

¿Cómo hacer una prueba de control de flujo?

  1. Escribir el diagrama de flujo de datos del programa a probar.
  2. Definir los criterios de pruebas (anomalías que se intentan buscar).
  3. Identificar rutas dentro del diagrama de flujo que satisfagan los criterios.
  4. Para cada ruta seleccionada, buscar los posibles valores de entrada para las variables que están en los vértices de la ruta.
  5. Aplicar las pruebas y verificar los estados de las variables. 

¿Cómo hacer una prueba de control de flujo?

¿Cómo construir el diagrama de flujo de datos?

  1. La secuencia de definiciones y c-uses construyen los vértices del grafo.

  2. Un p-use es asociado a una o varias aristas.

  3. El nodo de entrada tiene una definición por cada parámetro y por cada variable no local usada en el programa.

  4. El nodo de salida tiene una indefinición de cada variable local.

¿Cómo construir el diagrama de flujo de datos?

Tipos de ruta posibles

Ruta Simple

Todos los nodos son distintos, excepto el primero y el último.

Ruta libre de ciclos

Todos los nodos son distintos.

Tipos de posibles rutas

Ruta Completa

Inicia en el nodo de entrada y termina en el nodo de salida. 

Du-path

Se considera du-path si:

  • El nodo final tiene un c-use que usa la misma variable del nodo inicial.
  • La arista final tiene un p-use con la misma variable del nodo inicial.

Tipos de posibles rutas

Definition-Clear

Si dentro de la ruta la variable en cuestión no se redefine.

Cobertura de las pruebas de flujo de datos

Cobertura de las pruebas de flujo de datos

  • All-defs: Por cada variable se debe cubrir al menos una ruta def-clear desde cada definición de v  hasta al menos un uso de v.

  • All-uses:  Por cada variable v se debe cubrir al menos una ruta def-clear desde cada definición de v hasta cada uso de v.

  • All-du-paths: Por cada variable v se deben abarcar todas las rutas def-clear desde cada definición hasta cada uso de v.

Ejemplo

Ocurrencia de Variables

Ejemplo de definición de variable

i = x;

Ejemplo de uso de variable (computation use)

x = 2*y;

Ejemplo de uso de variable (predicate use)

if (y > 100) { ... }

Ejemplo Completo

public static double ReturnAverage(int value[],
int AS, int MIN, int MAX){
   int i, ti, tv, sum;
   double av;
   i = 0; ti = 0; tv = 0; 
   sum = 0;
   while (ti < AS && 
          value[i] != -999) {
      ti++;
      if (value[i] >= MIN && 
          value[i] <= MAX){
         tv++;
         sum = sum + value[i];
      }
      i++;
   }
   if (tv > 0)
      av = (double)sum/tv;
   else
      av = (double) -999;
   return (av);
} 

Función para calcular el promedio de un vector de números, cuyo tamaño es AS  y con valores entre MIN y MAX

Programa Ejemplo

Ejemplo

Paso 1: Identificación del tipo de uso de las variables

Ejemplo

Paso 2: Creación de un nodo para cada definición (C-use)

Ejemplo

Paso 3: Escritura de las relaciones para los P-use

Ejemplo

Paso 4: Posibles rutas

  • Ruta simple:  (3 – 4 – 6 – 3)
  • Ruta libre de ciclos: (2 – 3 – 4 – 5)
  • Rutas completas: (1 – 2  – 3  – 7  – 9  –  10), (1 – 2  – 3  – 7  – 8  –  10) 
  • Du-Paths:  (2 – 3 – 7 – 9), (2 – 3 – 4 – 5),  (2 – 3 – 4 – 6 – 3 – 4 – 6 – 3 – 4 – 5)
  • Definition-Clear: (2 – 3 – 4 – 6 – 3 – 4 – 6 – 3 – 4 – 5)

Ejemplo

Paso 5: Búsqueda de anomalías

Dentro de los criterios posibles se usará el criterio All-du-paths para la variable tv, por lo que las rutas elegidas para hacer las pruebas son:  

  • (2 – 3 – 7 – 9) 
  • (2 – 3 – 4 – 5) 
  • (2 – 3 – 4 – 6 – 3 – 4 – 6 – 3 – 4 – 5)

No se encontraron anomalías.

Referencias

[1] Naik, K., & Tripathy, P. (2008). Software Testing and Quality Assurance: Theory and Practice. [Presentación]. University of Waterloo. Consultado el día 15 de septiembre de 2014, desde https://ece.uwaterloo.ca/~snaik/MYBOOK1/Ch5-DataFlowTesting.ppt

 

[2] Arunkumar Khannur, Software Testing - Techniques and Applications, Published by Pearson Publications, 2011 (ISBN:978-81-317-5836-6; Pages:341 + xxii)


[3] Alexandra Martínez Porras.  Pruebas de Flujo de Datos. [Diapositivas curso de Maestría, Escuela de Ciencias de la computación e Informática, UCR].

¿PREGUNTAS?

¿PREGUNTAS?

ACTIVIDAD GRUPAL

1. Cree la tabla de usos y definiciones


input(A, B)
if(B > 0)
   A = A + 7
if(A > 10)
   B = A + B
output(A, B)

Solución

2. Dibuje el gráfico de control de flujo


input(A, B)
if(B > 0)
   A = A + 7
if(A > 10)
   B = A + B
output(A, B)

Solución

3. Haga las anotaciones de use y def en el gráfico.


input(A, B)
if(B > 0)
   A = A + 7
if(A > 10)
   B = A + B
output(A, B)

Solución

4. ¿Existen anomalías?


input(A, B)
if(B > 0)
   A = A + 7
if(A > 10)
   B = A + B
output(A, B)

Solución

NO hay anomalías en el código analizado

Pruebas de Flujo de Datos

By Marta Solano

Pruebas de Flujo de Datos

Curso CI-2452 Validación y Verificación de Software, ECCI - UCR

  • 6,462