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ántos tipos de pruebas necesita esta función?
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.)
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.
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 |
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 %
probar más y qué menos? Estrategia: Objetivo: Encontrar los defectos más importantes tan pronto como sea posible y con el menor costo. No hay riesgo => No hay pruebas. Decisión de negocio
String Entonces una propiedad puede definirse como: reverse (reverse xs) == xs Y podemos permitir que herramientas como QuickCheck generen “aleatoriamente" ejemplos de xs y verifiquen que estos ejemplos cumplan con la propiedad