¿Qué es la prueba de bucle? Metodología, ejemplo
⚡ Resumen inteligente
Las pruebas de bucle validan las estructuras de bucle dentro de un programa, comprobando qué sucede cuando se omite un bucle, se entra en él una sola vez, se ejecuta en su límite y se extiende una iteración más allá del número máximo permitido.
¿Qué es la prueba de bucle?
Prueba de bucle es un tipo de prueba de software que se centra completamente en la validez de las estructuras de bucle en un programa. Es una parte de las pruebas de estructura de control, junto con prueba de ruta, pruebas de validación de datos y pruebas de condiciones.
La prueba de bucle es una pruebas de caja blanca Se trata de una técnica que aplica alguien que puede leer el código fuente y ver la condición del bucle, el contador y la ruta de salida. El evaluador no adivina el comportamiento a partir de la interfaz de usuario; el bucle en sí es el objeto que se está probando.
El diagrama que aparece a continuación muestra la ubicación de las pruebas de bucle dentro de la familia de pruebas de la estructura de control.
Tipos de bucle probados
Antes de elegir una estrategia, identifique cuál de las cuatro clases de bucles está considerando. Ejemplos de tipos de bucles probados son:
- Bucle simple — un único bucle con una entrada y una salida, como un simple por la, mientras or hacer mientras construir.
- Bucle anidado — un bucle colocado dentro de otro, de modo que el bucle interior se ejecuta hasta su finalización en cada pasada del bucle exterior.
- Bucle concatenado — dos o más bucles que se ejecutan uno tras otro en secuencia.
- Bucle no estructurado — una combinación no planificada de bucles anidados y concatenados, generalmente como resultado de saltos hacia dentro o hacia fuera del cuerpo de un bucle.
La clase determina el esfuerzo. Un bucle simple requiere unas pocas iteraciones; un bucle no estructurado generalmente requiere que se rediseñe el código antes de poder probarlo.
¿Por qué realizar pruebas de bucle?
Las pruebas de bucle se realizan por las siguientes razones
- Las pruebas pueden solucionar los problemas de repetición del bucle
- Las pruebas de bucle pueden revelar cuellos de botella en el rendimiento y la capacidad.
- Al probar los bucles, se pueden determinar las variables no inicializadas en el bucle.
- Ayuda a identificar problemas de inicialización de bucles.
También existe una razón comercial. Un bucle que se ejecuta una iteración de más corrompe el total; un bucle que nunca termina bloquea un proceso. Ambos defectos son fáciles de detectar mientras el código aún está en la máquina del desarrollador, pero costosos de encontrar en producción.
Cómo hacer pruebas de bucle: metodología completa
Al probar un bucle, este debe verificarse en tres niveles diferentes:
- Cuando se entra en el bucle
- Durante su ejecución, y
- Cuando se deja el bucle
La estrategia de prueba para todos estos bucles es la siguiente.
Bucle simple
Un bucle simple tiene una única entrada y una única salida, como se muestra a continuación.
Un bucle simple se prueba de la siguiente manera:
- Saltar todo el bucle
- Realizar una pasada por el bucle.
- Haz 2 pasada por el bucle.
- Hacer a pasa por el bucle donde a < b, ese es un recuento típico de iteraciones de rango medio
- Hacer b, b-1 y b+1 pasa por el bucle donde b es el número máximo de pasadas permitidas a través del bucle.
Los dos últimos casos son los que aportan mayor valor. Saltarping El bucle demuestra que la condición de salida se evalúa antes de que se ejecute el cuerpo, y el bEl caso +1 demuestra que el bucle se niega a trabajar más allá de su límite declarado en lugar de desbordar un array.
Bucle anidado
Un bucle anidado multiplica el número de posibles combinaciones de iteración, por lo que se prueba de adentro hacia afuera en lugar de todo a la vez.
Para crear un bucle anidado, debes seguir los siguientes pasos.
- Establece todos los demás bucles a su valor mínimo y comienza en el bucle más interno.
- Para el bucle más interno, realice una prueba de bucle simple y mantenga los bucles externos en su valor mínimo de parámetro de iteración.
- Realiza la prueba para el siguiente bucle y trabaja hacia afuera.
- Continúe hasta que se haya probado el bucle más externo.
Bucles concatenados
Los bucles concatenados se sitúan uno tras otro en la misma ruta de ejecución, como muestra el diagrama.
En los bucles concatenados, si dos bucles son independientes entre sí, se prueban utilizando el método de bucle simple; de lo contrario, se prueban como bucles anidados.
Sin embargo, si el contador de un bucle se utiliza como valor inicial para el otro, los dos bucles no se consideran independientes.
Bucles no estructurados
Los bucles no estructurados son el caso más difícil, porque el control entra y sale del cuerpo del bucle en puntos arbitrarios.
Para bucles no estructurados, el diseño debe reestructurarse para reflejar el uso de construcciones de programación estructurada. Una vez que el código se ha reducido a formas simples, anidadas o concatenadas, se aplica la estrategia de correspondencia descrita anteriormente.
Ejemplo de prueba de bucle con casos de prueba
Un ejemplo resuelto hace que el conteo de iteraciones sea concreto. Consideremos una rutina que multiplica un resultado acumulado por cada número entero del 1 al 100. n, un cálculo factorial. El contador del bucle comienza en 1, la condición de salida es mostrador > ny el bucle está declarado para aceptar un máximo de 12 iteraciones antes de que el resultado desborde el tipo entero declarado.
Si se trata como un bucle simple, el número de iteraciones recomendado anteriormente se traduce en lo siguiente: Casos de prueba.
| Caso de prueba | Valor de n | Pases ejecutados | Lo que demuestra |
| TC01 | 0 | 0 (bucle omitido) | La condición de salida se evalúa antes de que se ejecute el cuerpo, y el resultado se mantiene en su valor inicial de 1. |
| TC02 | 1 | 1 | Una sola pasada produce el resultado correcto y el contador se incrementa una vez. |
| TC03 | 2 | 2 | El acumulador transfiere un valor entre dos pasadas consecutivas. |
| TC04 | 5 | 5 | Un recuento típico de rango medio arroja el resultado esperado de 120, lo que confirma un comportamiento normal. |
| TC05 | 11 | 11 | Una pasada por debajo del máximo aún se completa normalmente (b-1). |
| TC06 | 12 | 12 | Se acepta el máximo declarado y el bucle finaliza (b). |
| TC07 | 13 | rechazada | Se rechaza un paso más allá del máximo en lugar de desbordarse silenciosamente (b+ 1). |
Observe que TC01 y TC07 son los dos casos que los desarrolladores suelen omitir, y son los dos que exponen defectos de inicialización omitida y desbordamiento. Un valor negativo de n pertenece al mismo conjunto si la especificación permite que se proporcione, lo que vincula las pruebas de bucle con prueba negativa.
Defectos comunes detectados mediante pruebas de bucle
Las pruebas de bucle siguen encontrando la misma pequeña familia de fallos, lo que hace que valga la pena ejecutar el recuento fijo de iteraciones cada vez.
- Límites desviados por uno — una condición escrita como < dónde <= era lo previsto, por lo que el bucle realiza una pasada menos o una pasada más.
- Contadores o acumuladores no inicializados — un total que incluye un valor sobrante de una llamada anterior.
- Bucles infinitos — una condición de salida que el cuerpo del bucle nunca puede satisfacer porque el contador se actualiza solo en algunas ramas.
- Supuestos de bucle omitido — código después del bucle que lee una variable que se esperaba que el cuerpo del bucle estableciera, lo cual falla cuando el bucle se ejecuta cero veces.
- Fallos de capacidad y rendimiento — un bucle que es correcto pero que vuelve a leer la base de datos en cada pasada, por lo que el coste aumenta con el número de iteraciones.
- Interferencia de bucle anidado — un bucle interno que reutiliza el contador del bucle externo y cambia silenciosamente el contador de iteraciones externo.
Debido a que cada falla se corresponde con un número de iteraciones específico, los defectos que aparecen aquí son fáciles de reproducir y rápidos de corregir en comparación con los defectos encontrados en iteraciones más altas. niveles de prueba.
Pruebas de bucle frente a otras técnicas de prueba de estructuras de control
Las pruebas de bucle pertenecen a la familia de estructuras de control y es fácil confundirlas con técnicas afines. La siguiente tabla las diferencia.
| Tecnologia | A qué apunta | Objetivo de cobertura típico |
| Prueba de bucle | Estructuras del bucle: entrada, número de iteraciones y salida. | Recuentos de iteraciones cero, uno, típico y límite para cada bucle. |
| Prueba de condición | Expresiones booleanas dentro de las decisiones | Cada condición evaluaba tanto lo verdadero como lo falso. |
| Pruebas de flujo de datos | Definición y uso de cada variable | Cada par definición-uso ejercitado al menos una vez |
| Pruebas de ruta base | Rutas independientes a través del grafo de flujo de control | Un número de caminos igual a la complejidad ciclomática |
En la práctica, estas técnicas son complementarias en lugar de competir entre sí. Complejidad ciclomática Te indica cuántas rutas independientes existen, la prueba de ruta base las cubre y la prueba de bucle luego agrega los recuentos de iteración que la cobertura de ruta por sí sola no forzaría. Todas ellas son pruebas dinámicas actividades, ya que el código debe ejecutarse para que se observen los resultados.
Limitación en las pruebas de bucle
Esta técnica tiene límites reales, y conocerlos evita la sobreinversión.
- Los errores de bucle aparecen principalmente en software de bajo nivel
- Los errores identificados durante las pruebas de bucle no son muy sutiles
- Muchos de los errores podrían ser detectados por el sistema operativo, ya que provocan violaciones de límites de memoria, errores de puntero detectables y fallos similares.
- Identificar la clase de cada bucle y probarla en consecuencia consume tiempo, lo cual es difícil de justificar en rutas de código que conllevan poco riesgo.





