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?
- Escribir el diagrama de flujo de datos del programa a probar.
- Definir los criterios de pruebas (anomalías que se intentan buscar).
- Identificar rutas dentro del diagrama de flujo que satisfagan los criterios.
- Para cada ruta seleccionada, buscar los posibles valores de entrada para las variables que están en los vértices de la ruta.
- 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?
-
La secuencia de definiciones y c-uses construyen los vértices del grafo.
-
Un p-use es asociado a una o varias aristas.
-
El nodo de entrada tiene una definición por cada parámetro y por cada variable no local usada en el programa.
-
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,479