Download Aseguramiento de la calidad y pruebas de software

Document related concepts

Complejidad ciclomática wikipedia , lookup

Número de Betti wikipedia , lookup

Complejidad esencial wikipedia , lookup

Caja blanca (sistemas) wikipedia , lookup

Centralidad wikipedia , lookup

Transcript
Aseguramiento de la calidad y
pruebas de software
5- Pruebas del software
Caja Blanca/Prueba del camino básico
Blanca A. Vargas Govea
[email protected]
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