Teóricamente, ¿las pruebas de caja negra lograrán la misma cobertura que las pruebas de caja blanca? ¿Qué tan difícil podría ser?

Definiré “Black Box” como “nivel de usuario o UI” y “White Box” como “datos o nivel funcional”.

¿Puede acceder a todas las rutas de código necesarias para la misma cobertura con las pruebas de nivel de usuario que puede con las pruebas funcionales?
Es posible, para aplicaciones simples. A medida que crece la complejidad del producto o la aplicación, es menos probable que logre la misma cobertura.

Este es el por qué. Imagina que tienes una aplicación de correo como gmail. Mediante las pruebas de usuario final (mediante pruebas manuales o automatización a través de la interfaz de usuario), puede seguir los escenarios de usuario para la mayoría de los casos a los que puede acceder a través de la interfaz de usuario. Pero las rutas de código son más que eso. Hay llamadas de API que no podrá ejecutar. No podrá ejercer rutas de código que no se verán afectadas por el funcionamiento normal del sistema, pero sí cuando se tocan funciones individuales. Escribir la automatización que alcanza estas funciones internas expondrá los errores en el código donde las pruebas a nivel de usuario desconocerán por completo que algo está mal.

Las pruebas son una pirámide, y las pruebas a nivel de usuario deben estar en la parte superior, completando todos los esfuerzos de los niveles subyacentes. En un mundo perfecto, también sería el ciclo más corto y la menor cantidad de recursos gastados en él.

¡Oye! ¡Aquí hay un extracto de un blog que acabo de leer que puede ser útil!

blog encontrado aquí: Cómo optimizar la cobertura de prueba a largo plazo

“Hay muchas formas de considerar la cobertura de la prueba. Aquí voy a ver la cobertura de código, la cobertura orientada a datos y la gran cantidad de otras técnicas a disposición de un probador.

Cobertura de código

La cobertura de código es la métrica más popular para medir la cobertura. Hay diferentes niveles, no solo líneas de código cubiertas, sino también ramas, decisiones dentro de constructores lógicos, etc.

Cobertura orientada a datos

Con una cobertura orientada a datos, tiene parámetros de entrada y salida, cada uno de ellos con su propio dominio (el espectro de posibles valores que pueden tener) y si piensa en todas las posibilidades, verá que termina con un producto cartesiano (porque puede probar todas las combinaciones posibles). Por otro lado, puede probar menos e ir con la cobertura de “cada opción”, lo que significa que elige al menos cada valor posible al menos una vez. También hay todos los pares, que se dice empíricamente que tienen la mejor relación costo-beneficio, siendo la mejor combinación entre cada opción y todas las combinaciones.

Otros tipos de cobertura

Además de los mencionados anteriormente, hay varias formas más de cubrir el producto que está probando, como máquinas de estado, tablas de decisión, árboles de decisión, partición de equivalencia y valores límite, etc. Es muy interesante ver que cada técnica es compatible por una “teoría del error”. La teoría del error toma en cuenta los errores típicos que cometen los programadores, como por ejemplo, la partición de equivalencia y los valores límite consideran el error de, por ejemplo, usar un “<" en lugar de un "<=", entender mal la lógica de negocios, o por ejemplo , el árbol de decisión intenta ejecutar todas las "decisiones" y combinaciones de condiciones interesantes que tiene un programa, que no es más que tratar de maximizar la cobertura de la rama en el código.

Para mí, el último punto mencionado sobre el recuadro negro es muy interesante: un criterio de cobertura con una visión muy recuadro puede mejorar realmente las pruebas de recuadro blanco en términos de cobertura.

Lee mas

El cuadro negro y el cuadro blanco se refieren a estrategias para diseñar casos de prueba. La estrategia del recuadro negro es examinar la interfaz de un módulo. La estrategia del recuadro blanco es examinar el código dentro del módulo.

Es de esperar que cualquiera de las estrategias conduzca al mismo conjunto de casos de prueba. Es más fácil tomar un camino en lugar del otro por diferentes razones, dependiendo de la situación. Pero, idealmente, eso no tendría ningún impacto en las pruebas con las que termina.

En realidad, las pruebas de caja blanca darán como resultado pruebas más exhaustivas, pero esas pruebas podrían estar estrechamente relacionadas con la implementación del módulo. El conocimiento del código puede ser suficiente cuerda para ahorcarse . Sospecho que esa es una de las razones de la popularidad de las pruebas de caja negra. Otra razón es que los no programadores no pueden usar el enfoque de caja blanca.

La cobertura depende del probador. La comprensión común de la caja blanca es que se centra en el código. Sin embargo, hay muchos aspectos diferentes de la cobertura.

Vea una publicación de blog que había escrito (gracias Cem Kaner, JD, Ph.D.)
101 formas de pensar sobre su código / modelos de su código (CK) – aquí hay un extracto

  1. Cada línea de código
  2. Cada rama en líneas de varias ramas
  3. Cada ruta secundaria a través del programa; por ejemplo, cada secuencia de 10 líneas en un programa de 10,000 líneas
  4. Cada ruta a través del programa desde la entrada hasta la salida
  5. Cada valor posible en cada operador lógico
  6. Dispara cada afirmación
  7. Condiciones cuando un bucle se ejecuta más de una vez
  8. Cada módulo, objeto, componente, herramienta, subsistema: ¿qué pasa con los componentes de terceros?
  9. Para decisiones heurísticas, que utilizan reglas o datos en evolución, verifique las reglas periódicamente

… ..Más en el blogpost….

Qué difícil puede ser : ¡¡¡Será difícil !!!
Vea mis ejemplos de defectos en un carrito de compras (Gracias – Cem Kaner, JD, Ph.D.). La mayoría de las personas no encontrarán más del 10% de estos defectos, ya sea cobertura negra, blanca, azul o rosa.
fallas del carrito de compras (cualitativo): ¿Cómo puede fallar un carrito de compras de comercio electrónico (fallas cualitativas)?
Fallas del carrito de compras (componente): ¿Cómo puede fallar un carrito de compras de comercio electrónico (fallas de componentes)?

Por desgracia, la mayoría de la gente no es feliz …

Es trivialmente falso que logre la misma cobertura porque solo cubrirá un subconjunto con pruebas de caja negra, mientras que puede probar la cobertura con visibilidad en el código fuente.

No solo estoy siendo descarado, incluso suponiendo que exista cobertura de prueba unitaria, et al, exista y tenga acceso a ella. Si sabe qué componentes se asignan a qué código fuente, puede asegurarse de ejercer cada uno de ellos. Sin visibilidad en el código fuente, no puede demostrar la cobertura de todo el comportamiento * real *. No puede priorizar áreas que parecen simples en la superficie pero que contienen una complejidad arriesgada y desagradable.

Hay que argumentar que, si tiene poco tiempo (por ejemplo), esa prueba manual será “suficientemente buena”. Y así encontramos la compensación esencial de las pruebas. Es posible que no obtenga la misma cobertura, pero en caso de apuro, ¡podría ser lo suficientemente bueno!

Entonces, ¿qué pasa si la aplicación es enorme? ¿O no tienes respaldo? Es posible que no pueda probar incluso cerca de todas las funciones del usuario, mientras que puede asignar su tiempo de manera más eficiente si sabe qué piezas son más complejas; cómo usar un depurador; y qué componentes de software han cambiado más recientemente.

No me queda claro si su propuesta de prueba de caja negra versus caja blanca incluye la posibilidad de probar el cliente, el servidor front-end y el servidor back-end por separado o qué. Sugeriría que no.

En general, las pruebas de caja blanca amplían las posibilidades de prueba. Las pruebas de caja negra los reducen. Todavía puede ser útil, esa ignorancia. Aún así, a menos que haya alguna razón por la que deba seguir con las pruebas de caja negra, no hay razón para limitarse de esa manera.

Teóricamente, sí, pero en la práctica, probablemente no.

La caja negra es menos como una cirugía y más como abrir cerraduras. Te sientes con las herramientas para encontrar errores, y hay cosas genéricas que puedes probar.

Con el cuadro blanco, puede crear pruebas específicas para exponer los errores, porque puede ver el código.

Si bien puede obtener el mismo tipo de cobertura con Black Box, hay muchas posibilidades involucradas, por lo que diría que en la práctica, es casi imposible obtener la misma cobertura. Son diferentes herramientas en la caja de herramientas.

No, en absoluto. Las pruebas de recuadro negro solo se refieren a las entradas al sistema y a las salidas vistas.
Las pruebas de caja blanca probarían cada bloque de código para detectar inconsistencias con diferentes tipos de entrada.
Entonces la cobertura es diferente.

More Interesting

Me acabo de graduar de la universidad y comencé a trabajar como ingeniero de software en Google. ¿Qué debo hacer ahora para maximizar el éxito en mi carrera?

¿En qué se diferencia el trabajo de un científico de datos del de un ingeniero de software?

Cómo sobrevivir (profesionalmente) como ingeniero de software

¿Qué pasaría si las compañías de software como Microsoft o Apple lanzaran sus bases de código?

¿Cuál es la diferencia entre una aplicación, un software y un programa?

¿Qué habilidades buscaría una empresa de EDA al contratar candidatos para sus puestos de ingeniero de I + D?

¿El software está probando una necesidad o una carga?

¿La programación autodidacta cuenta como una experiencia en ingeniería de software?

¿Qué cosas puedo hacer como ingeniero de software autónomo, además del código, para asegurarme de ser un mejor programador constantemente?

¿Cómo se debe subcontratar el desarrollo de software a Europa oriental / central?

¿Es un MacBook esencial para cada desarrollador?

¿Vale la pena mudarse a Seattle por la informática en la nube? ¿Será mejor que otras áreas de software?

¿Qué debo hacer para mejorar mis habilidades de codificación? Soy un estudiante de ingeniería de software de último año. He realizado varios proyectos de software pequeños durante 3 años. Aprendí C ++ básico, C #, PHP, Java y Swift, pero mis habilidades de programación son bastante malas.

¿Necesita la aprobación de la FDA para desarrollar software para Emotiv EPOC?

Estoy tomando una clase de programación, y soy más hábil que la mayoría de mis compañeros de clase. Estoy empezando a aburrirme. ¿Cómo puedo optimizar mi experiencia de aprendizaje mientras ayudo a mis compañeros de clase a mejorar?