Aseguramiento de la calidad y pruebas de software 5- Pruebas del software Caja Blanca/Prueba del camino básico Blanca A. Vargas Govea vargasgovea@itesm.mx Marzo 15, 2013 Contenido ● Pruebas de caja blanca ● Prueba del camino básico (Basis Path Testing) ● Reporte de pruebas del camino básico 2 Prueba del camino básico ● ● Técnica de caja blanca propuesta por Thomas McCabe en 1976, Medio para asegurarse de que todos los caminos independientes de un módulo de código sean probados. ● Un camino independiente es el que introduce al menos un nuevo conjunto de instrucciones o una nueva condición. 3 Modelos de flujo de control ● La aplicación de análisis de cobertura se asocia a modelos de flujo de control y datos. ● Los elementos lógicos más comunes son: – instrucciones – decisiones/ramas – condiciones – combinaciones de decisiones y condiciones – paths (secuencias de nodos en un flujo) 4 Elementos Condición Until Secuencia Iteración Case While 5 Pasos para la prueba del camino básico 1. Obtener el grafo de flujo a partir del diseño o del código. 2.Obtener la complejidad ciclomática del grafo de flujo. 3.Definir el conjunto básico de caminos independientes. 4.Determinar los casos de prueba que permitan la ejecución de los caminos anteriores. 5.Ejecutar cada paso de prueba y comprobar que los resultados son los esperados. 6 1. Obtener el grafo de flujo a partir del diseño o del código. 7 Ejemplo 1 ● ● ● Si el jugador se establece en una propiedad que tiene dueño, el jugador tiene que pagar renta. Si el jugador no tiene dinero suficiente para pagar la renta, queda fuera del juego. Si la propiedad no tiene dueño y el jugador tiene dinero suficiente para comprar la propiedad, tiene la opción de comprarla si así lo desea. 8 Ejemplo 1 1 2 7 3 8 4 5 9 6 10 9 2. Obtener la complejidad ciclomática del grafo de flujo. 10 Complejidad ciclomática V(G) ● ● Es una medida que determina el número máximo de caminos independientes de un módulo de un programa. El valor de complejidad se calcula a partir del grafo de flujo y se da por la fórmula V(G) = E-N+2P donde Un componente conectado es un sub-grafo en el que todos los nodos están conectados. E = número de arcos Un grafo que tiene todos los nodos conectados N = número de nodos tiene 1 componente conectado (él mismo). P = número de componentes conectados 11 Ejemplo 1 ● ● 1 Aplicando la fórmula E = 14 arcos N = 10 nodos P=1 V(G) = E-N+2P V(G) = 14-10+2=6 Existen 6 caminos independientes en el código. 2 7 3 8 4 5 9 6 10 12 3. Definir el conjunto básico de caminos independientes. 13 Ejemplo 1 1 1. 1-2-3-4-5-10 2.1-2-3-4-6-10 2 3.1-2-3-10 7 3 4.1-2-7-10 8 4 5.1-2-7-8-10 6.1-2-7-8-9-10 5 9 6 10 14 Número ciclomático y casos de prueba ● El número ciclomático proporciona una aproximación del número de casos requeridos para cubrir ramas. ● Si se preparan casos de prueba que originen la ejecución de todos los caminos se puede estar razonablemente seguros de que se cubren instrucciones y decisiones. 15 Complejidad ciclomática y riesgo Valor 1 - 10 11 - 20 21 - 50 > 50 Riesgo Programa simple, sin mucho riesgo Moderada complejidad, riesgo moderado Programa complejo, alto riesgo Programa no-analizable (untestable), muy alto riesgo 16 Ejemplo 2 ● ● El programa recibe como entrada una lista de números. Obtiene la suma de los números de la lista que sean mayores a cero. #!/usr/bin/python import sys, getopt 1: def ejemplo1(lista): 2: suma = 0 3: for numero in lista: # recorre la lista 4: numero = int(numero) 5: if numero > 0: 6: suma = suma + numero 7: return suma def main(argv): cadena = argv.pop() lista = cadena.split(",") resultado = ejemplo1(lista) print 'Suma = ', resultado if __name__ == "__main__": main(sys.argv[1:]) 17 Ejemplo 2 #!/usr/bin/python import sys, getopt 1 1: def ejemplo1(lista): 1 2: suma = 0 3: for numero in lista: # recorre la lista 2 3 4: if int(numero) > 0: 5: suma = suma + int(numero) 4 6: return suma 5 6 def main(argv): cadena = argv.pop() lista = cadena.split(",") resultado = ejemplo1(lista) print 'Suma = ', resultado if __name__ == "__main__": main(sys.argv[1:]) 2 3 false false siguiente elemento 4 5 6 18 Ejemplo 2 1 ● 2 3 false false 4 5 ● V(G) = E – N + 2P E = 7 arcos N = 6 nodos P=1 V(G) = 7 – 6 + 2 = 3 Programa simple, sin mucho riesgo 6 19 Ejemplo 2: conjunto de caminos 1 2 3 1. 1-2-6 2.1-2-3-4-5-2-6 3.1-2-3-5-2-6 false false 4 5 6 20 Ejemplo 2: casos de prueba Casos de prueba Nombre del módulo: ejemplo1 Proyecto: tc3044 Autor: blancavg Tester: blancavg Fecha: Marzo 12, 2013 Fecha-Test: Marzo 12, 2013 Cálculo de la complejidad ciclomática #arcos - #nodos + 2(1) 7–6+2=3 Path (caminos básicos) 1. 1-2-6 2. 1-2-3-4-5-2-6 3. 1-2-3-5-2-6 Casos de Prueba Resultados esperados Resultados actuales 1. Recorre el número de elementos de la lista. Se prueba con 2 y 3. Recorre toda la lista de forma correcta. √ 2. Entrada = 1,2,3 (no hay ceros ni negativos, no entrará a la condición). Devuelve la suma de los números de √ forma correcta. Salida = 6. 3. Entrada = -1,0,2,3 (entra a la condición). Devuelve la suma de los números de forma correcta. Salida = 5. √ 21 Herramientas automáticas ● Pymetrics (Python) ● McCabe Complexity Metric for file ejemplo1.py ---------------------------------------------2 __main__ 3 ejemplo1 1 main ● Comerciales – LDRA – Parasoft Open Source – Eclipse – CCM http://www.blunck.info/ccm.html – Sourcemonitor (freeware) http://www.campwoodsw.com/s ourcemonitor.html 22 ● ● ● http://www.softwaretestingstuff.com/2008/06/table-of-contents.html http://www.codeproject.com/Articles/11719/Cyclomatic-CodeComplexity-Analysis-for-Microsoft http://dotnetproject.blogspot.mx/2007/07/cyclomatic-complexitymeasurement-tool.html Java ● http://www.kclee.de/clemens/java/javancss/ ● (Java, JavaScript, XML, XSL, JSP) http://pmd.sourceforge.net/ 23 Actividad y tarea 24 Actividad 15 - individual El sitio de taxis “Voy Veloz” atiende a clientes ocasionales y a clientes regulares. Las tarifas se calculan como sigue: 1. Tarifa mínima: $20.0. La tarifa cubre la distancia de hasta 1 km y tiempo de espera hasta de 3 minutos. 2. Por cada 0.25 kms adicionales: $2.5. 3. Por cada 2 minutos adicionales de espera: $2.0. 4. Si lleva 2 o más maletas: $1.0 adicional por cada una. 5. La tarifa nocturna, entre las 21 y 6 horas origina $3.00 adicionales. 6. A los clientes regulares no se les cobra la tarifa nocturna y en el servicio normal se les hace un 10% de descuento. Obtener el grafo de flujo, la complejidad ciclomática, definir el conjunto básico de caminos independientes y determinar los casos de prueba que 25 permitan la ejecución de los caminos anteriores. Tarea 15 – Individual Para el programa de tarea (bubble sort): 1. Obtener el grafo de flujo. 2.Obtener la complejidad ciclomática. 3.Definir el conjunto básico de caminos. 4.Determinar los casos de prueba. 5.Seleccionar una herramienta para obtener el valor de la complejidad ciclomática y compara tu resultado manual con el de la herramienta. Enviar en formato pdf el Martes 19 de Marzo 26