Documentos de Académico
Documentos de Profesional
Documentos de Cultura
UD1 3-Test
UD1 3-Test
Test:
Proceso cuyo objetivo es encontrar defectos
Destructivo: se busca demostrar que el programa no funciona
¿Para qué?
Aumentar la calidad
Reducir costos
Mejorar performance
¿Cuándo?
Cuanto antes
Test de unidad
Nivel de módulo: escribir código que sustituye el resto del sistema
(hw/sw)
Desarrollar tests reusables y repetibles
Guardar los resultados de los test ("audit trail")
Regression Testing
No es suficiente pasar el test una vez...
Repetir el test cada vez que se modifica el prog.
¿Qué testear?
Diseño del caso de test: seleccionar el conjunto de test apropiados
Clasificación
Test funcional (black-box)
Verifica se cumplan con los requerimientos funcionales
Puede ser desarrollado luego de los requerimientos
Test de cobertura (white-box)
Busca ejecutar (ejercitar) ciertas partes del código
Stress test:
Sobrecargar: entradas canales de comunicación, buffers de memoria, etc.
Boudary value test:
Entradas y salidas: dentro de cierto rango
Excepcion test:
Disparar modos de fallo o de excepción
Error guessing:
Basado en experiencia previa
Random test:
No muy productivo pero usado
Performance test:
Si el rendimiento es parte de los requerimientos
Statement coverage:
Ejecutar cada sentencia al menos una vez
Decision or branch coverage:
Ejecutar cada bifurcación al menos una vez (true y false)
Condition coverage:
Forzar cada condición (termino) para que tome todos los valores
lógico posibles
Hardware-independent Hardware-independent
code code
Hardware-dependent
code Plataforma de prueba
(Test scaffold code)
Hardware
Plataforma de prueba
Sustituye código HD
Misma interfaz que código HD
Grupos:
3 a 4 participantes
Tiempo:
5 minutos
Puesta en común
Código HI:
Entradas:
Respuestas a eventos/interrupciones: interfaz con sensores, periféricos,
dispositivos, etc.
Salidas:
Interacción con el exterior: manejo los actuadores
Plataforma de prueba:
Recibe comandos (que simulan eventos HW)
Interactivamente del teclado / archivo
Dispara acciones en el código HI (llamando funciones)
Simula el hardware (recibiendo llamadas del HI)
Responde con acciones
Escribiendo a pantalla / archivos de registro (log files)
Pregunta:
¿Es posible testear completamente?
Definición
Aserción
(Del lat. assertĭo, -ōnis).
1. f. Acción y efecto de afirmar o dar por cierto algo
2. f. Proposición en que se afirma o da por cierto algo
Técnica para detectar bugs
Desperdigar llamadas a “assert” en el código:
assert (pFrame != NULL);
assert (byMacAddrFrom <= ADDR_MAX);
Si la condición es:
Verdadera, no pasa nada
Falsa, se detiene el programa pero antes indica el error
Ejemplo:
Assertion failed: ptr != 0, file foo.c, line 27
Utilidad
Hacer explícitas ciertas asunciones
Corroborar parámetros en las funciones
Ayuda a documentar asunciones
Implementación como macro (#define)
Pueden ser “eliminadas” para el código del producto final
Detección de errores en el punto que se producen
Ya que se detiene en el punto del error y no más adelante
Linux magazine June 2003:
“Enthusiastic use of assert( ) can turn a three-day debug fest into a
three minute bug fix. Practice the lazy developer mantra: An
assertion failed is an hour saved.”