Prueba del Camino Básico Tom McCabe (1976) A software Complexity Measure •Derivar una medida de complejidad •Usar esa medida como guía de un conjunto básico de caminos de ejecución •Los casos de prueba garantizan que se ejecuten al menos cada sentencia una vez Notación de Grafo de Flujo Secuencia If Until While Case Representación de un diagrama de flujo como Grafo de Flujo Nodo Arista 1 1 2,3 2 6 3 4,5 6 7 4 8 5 7 8 Región 9 9 10 10 11 11 Lógica Compuesta a . . . IF a OR b then procedimiento x else procedimiento y ENDIF . . . Lenguaje de Diseño de Programas LDP Nodo Predicado b y x x Complejidad Ciclomatica Medida cuantitativa de la complejidad lógica de un programa 1 Se usa para hallar el numero de caminos independientes de un grafo. 2,3 6 4,5 7 8 9 10 Camino independiente es aquel que introduce por lo menos un nuevo conjunto de sentencias de procesamiento o una nueva condicion 11 Camino 1: 1-11 Camino 2: 1-2-3-4-5-10-1-11 Camino 3: 1-2-3-6-8-9-10-1-11 Camino 4: 1-2-3-6-7-9-10-1-11 ¿Como sabemos cuantos caminos debemos buscar? 1 1. El numero de regiones del grafo coincide con la complejidad ciclomatica 2,3 2. La complejidad ciclomatica V(G), de un grafo de flujo G se define como V(G) = E - N + 2 E es el numero de aristas y N el numero de nodos 3. La complejidad ciclomatica V(G), de un grafo de flujo G se define como V(G) = P + 1 6 4,5 7 8 Donde P es el numero de nodos predicados del grafo. 9 1. Cuatro regiones 10 2. V(G) = 11 arista - 9 nodos + 2 = 4 3. V(G) = 3 nodos predicado +1 = 4 11 Derivación de casos de prueba PROCEDUR media; INTERFACE RETURNS media, total.entrada, total.valido; INTERFASE ACEPTS valor, mini, maximo; TYPE valor[1:100] IS SCALAR ARRAY; TYPE media, total.entrada, total.valido, minimo, maximo; suma IS SCALAR; TYPE i IS INTEGER i=1; total.entrada=total.valido=0; suma=0; DO WHILE valor[i]<> -999 AND total.entrada<100 increment total.entrada by 1; IF valor[i]>=minimo AND valor[i]<=maximo THEN increment total.valido by 1; suma = suma + valor[i] ELSE skip ENDIF increment i by 1 ENDDO IF total.valido>0 THEN media = suma / total.valido; ELSE media = -999; ENDIF END media Derivación de casos de prueba (Cont.) 1 2 2. Determinar la complejidad ciclomatica. V(G) = 6 Regiones V(G)= 17 aristas - 13 nodos + 2 = 6 V(G)= 5 nodos predicado +1 = 6 3 4 10 5 12 11 3. Determinar un conjunto básico de caminos linealmente independientes 6 13 7 8 1. Dibujar el grafo que representa el procedimiento media 9 Camino 1: 1-2-10-11-13 Camino 2: 1-2-10-12-13 Camino 3: 1-2-3-10-11-13 Camino 4: 1-2-3-4-5-8-9-2-...... Camino 5: 1-2-3-4-5-6-8-9-2-...... Camino 6: 1-2-3-4-5-6-7-8-9-2-...... Derivación de casos de prueba (Cont.) 4. Preparar los casos de prueba que forzaran la ejecución de cada camino del conjunto básico. PROCEDUR media; INTERFACE RETURNS media, total.entrada, total.valido; INTERFASE ACEPTS valor, mini, maximo; TYPE valor[1:100] IS SCALAR ARRAY; TYPE media, total.entrada, total.valido, minimo, maximo; suma IS SCALAR; TYPE i IS INTEGER i=1; total.entrada=total.valido=0; suma=0; DO WHILE valor[i]<> -999 AND total.entrada<100 increment total.entrada by 1; IF valor[i]>=minimo AND valor[i]<=maximo THEN increment total.valido by 1; suma = suma + valor[i] ELSE skip 1 4 5 8 13 3 6 7 ENDIF increment i by 1 ENDDO 9 2 IF total.valido>0 THEN media = suma / total.valido; ELSE media = -999; ENDIF END media 10 11 12 Derivación de casos de prueba (Cont.) 2 1 2 3 i=1; total.entrada=total.valido=0; suma=0; DO WHILE valor[i]<> -999 AND total.entrada<100 increment total.entrada by 1; IF valor[i]>=minimo AND valor[i]<=maximo THEN increment total.valido by 1; suma = suma + valor[i] ELSE skip ENDIF 3 10 increment i by 1 10 ENDDO 12 11 13 IF total.valido>0 THEN media = suma / total.valido; ELSE media = -999; ENDIF 13 END media Caso de prueba camino 1: valor(k)=entrada valida, con k<1, definida por valor(i)= -999, donde 2<= i <= 100 resultados esperados: media correcta sobre n valores y totales adecuados Caso de prueba camino 2: valor (1) = -999 resultados esperados: media= -999, otros totales con sus valores iniciales Caso de prueba camino 3: intento de proceder con 101 o mas valores los primeros 100 intentos deben ser validos resultados esperados: igual que en el caso de prueba 1 Derivación de casos de prueba (Cont.) 1 Caso de prueba camino 4: valor(i) = entrada valida con i < 100 valor(k)<mínimo para k < i resultados esperados: media correcta sobre los valores y totales adecuados 2 3 Caso de prueba camino 5: valor(i) = entrada valida con i < 100 valor(k)>máximo para k <= i resultados esperados: media correcta sobre los n valores y totales adecuados 4 10 5 12 11 6 13 7 Caso de prueba camino 6: valor(i) = entrada valida con i < 100 resultados esperados: media correcta sobre los valores y totales adecuados 8 Se tendrá la seguridad de que todos los caminos se han ejecutado al menos una vez. 9 Matrices de Grafos 1 Conectado al nodo a 1 e 3 2 1 3 4 5 a b Nodo f 5 d 4 c g 2 2 3 d 4 c 5 g b f e Matrices de Grafos (Cont.) Conectado al nodo 1 2 1 Nodo NodoPredicado 3 4 5 1 1 -1 = 0 2 -1 = 1 2 -1 = 1 2 -1 = 1 ------3 + 1=4 2 3 1 4 1 5 1 1 1 1 Complejidad ciclomatica