Plática dada en grupos privados sobre algunos problemas inherentes al diseño, implementación y ejecución de pruebas de software, así como algunas técnicas para abordarlos.
su tiempo. • Requiere el uso de varios frameworks y técnicas. • Aumenta la cantidad de código que se tiene que escribir. • Hace que el ‘build’ sea más lento. • etc, etc,
probar una funcionalidad / cambio: • Tengo que levantar toda la aplicación / ambiente. • Tengo que seguir el flujo que me lleva a la llamada a mi función / método. • Depende de las configuraciones de mi máquina. Ahora imagina lo mismo para todas las funciones del sistema
Valores no esperados (e.g. nulos) • Combinaciones de los anteriores • Valores que ejerciten las distintas rutas. ¿Cuántos tipos de pruebas necesita esta función?
left) / 2)], i = left, j = right; while (i <= j) { while (items[i] < pivot) { i++; } while (items[j] > pivot) { j--; } if (i <= j) { swap(items, i, j); i++; j--; } } return i; } ¿Cuántas rutas de ejecución tiene este programa?
Mide el número de rutas de ejecución linealmente independientes dentro de un programa. • Formalmente M = E − N + 2P • Aproximador: 2^N - 1 donde N es el número de bifurcaciones en el código (bloques if, where, for, etc.)
left) / 2)], i = left, j = right; while (i <= j) { while (items[i] < pivot) { i++; } while (items[j] > pivot) { j--; } if (i <= j) { swap(items, i, j); i++; j--; } } return i; } ¿Cuántas rutas de ejecución tiene este programa? 2^4 = 16 Necesitas aproximadamente 16 distintos casos de prueba, solo para saber que pasaste por todas las rutas de ejecución posibles
ha ejecutado durante una prueba)…. no me dice nada del contexto en el cual se ejecutó (e.g. los parámetros de entrada de la función, el número de iteración si se encuentra dentro de un bloque, etc), y por lo tanto no me dice que no puede fallar o tener un comportamiento distinto en un contexto distinto. Cobertura
the sum of two numbers Scenario Outline: Add two numbers Given I have entered <input_1> into the calculator And I have entered <input_2> into the calculator When I press <button> Then the result should be <output> on the screen Examples: | input_1 | input_2 | button | output | | 20 | 30 | add | 50 | | 2 | 5 | add | 7 | | 0 | 40 | add | 40 |
general, no acabas. • ¿Cómo sabes que son suficientes? • ¡Son solo los que se te ocurren! • Generación automatizada. • Random. • ¿Cómo sabes que son suficientes? • Todas las posibles combinaciones de entradas/condiciones…
case generation technique that is based on the observation that most faults are caused by interactions of at most two factors. Pairwise-generated test suites cover all combinations of two therefore are much smaller than exhaustive ones yet still very effective in finding defects.” http://www.pairwise.org/ most ~ > 90 %
qué probar más y qué menos? • Estrategia: • Objetivo: Encontrar los defectos más importantes tan pronto como sea posible y con el menor costo. • Decisión de proyecto, dirigida por objetivos de negocio.