Técnicas o categorías de pruebas de software [cerrado]

16

¿Qué tipos de pruebas de software conoces? Escuché sobre desarrollo guiado por pruebas, pruebas unitarias, etc., pero no puedo entender su importancia y diferencia. Por ejemplo, ¿por qué estamos usando pruebas de regresión o pruebas de aceptación? ¿Qué ventaja aportan?

Deshumanizador
fuente
8
¿Qué parte de esto fue confusa o incompleta? en.wikipedia.org/wiki/Software_testing
S.Lott
2
Puede omitir las pruebas de regresión si no lo hace; no le importa si rompe la funcionalidad existente y puede omitir la prueba de aceptación si no le importa si las personas que realmente usan el software o lo pagan piensan que hace lo que esperan que haga. . Los programadores profesionales se preocupan por ambas cosas.
HLGEM
Estoy votando para volver a abrir esta pregunta, ya que es la única que pude encontrar dando una buena visión general sobre los diferentes tipos de categorías de exámenes. ¿Quizás alguien tiene una buena idea de cómo reformular la pregunta para que se ajuste mejor a este sitio?
Doc Brown

Respuestas:

38

Las categorías generales en mi opinión serían:

Prueba de caja negra . No puede ver el código y solo está probando a ciegas hasta cierto punto, ya que lo que está en la aplicación o el sistema está oculto para usted. Por lo tanto, en este caso, las personas no conocen todos los casos de error y tienen que adivinar con varias condiciones de contorno que pueden o no ser obvias para encontrar todos los casos.

Prueba de caja blanca . Puede ver el código y puede verificar qué rutas de código se están utilizando para que la cobertura del código pueda usarse como una métrica para garantizar que toda la lógica se esté utilizando en el sistema. La idea aquí es saber cómo se ve el código para ayudar a guiar las pruebas para que no sea tan misterioso como las pruebas de caja negra.

La prueba de caja gris es un híbrido de los dos anteriores.

Los casos límite tienden a ser algo que se puede ver en las pruebas de recuadro blanco, ya que hay varias condiciones para ver en el código en el que se escriben las pruebas, por ejemplo, si tuvo un programa que solicita un número y alguien ingresa X cómo se maneja esto debería verse en algún lugar del código.

Las clasificaciones generales de las pruebas serían:

Pruebas unitarias . Estas son generalmente las pruebas más pequeñas que prueban algo bastante específico, por ejemplo, ¿este método maneja este caso límite? Tenga en cuenta que la inyección de dependencia puede usarse aquí para casos que involucran objetos simulados para reducir cualquier dependencia para las pruebas.

Pruebas de integración . Estas son pruebas en las que se conectan un par de componentes y se ejecutan pruebas para garantizar que los componentes funcionen bien juntos. Tenga en cuenta que si bien las pruebas unitarias pueden funcionar de forma independiente, aquí es donde se realiza la prueba de qué tan bien se combinan las cosas, ya que puede haber una falta de comunicación entre las capas que hacen que estas pruebas sean útiles para atrapar varias trampas. El término Pruebas de extremo a extremo se utiliza para pruebas de integración en las que se prueba una cadena completa de componentes desde "un punto final de la aplicación a otro" (lo que sea que eso signifique).

Pruebas de regresión . Estas serían pruebas realizadas en el pasado que se vuelven a hacer para garantizar que lo que se solucionó se mantenga fijo y que los errores no se reintroduzcan en el código.

Pruebas de usabilidad . Estas serían pruebas realizadas para ver qué tan bien pueden los usuarios finales trabajar con el software para completar varias tareas. ¿Dónde se podría automatizar algo para hacer algo más rápido o ajustar la interfaz de usuario para que algo sea más fácil de usar?

Pruebas de aceptación del usuario . Estas serían pruebas realizadas por los usuarios finales para que puedan ver de primera mano cómo funciona algo y estar de acuerdo en que el software satisface las necesidades comerciales que lo solicitaron en primer lugar.

Las pruebas funcionales son todo tipo de pruebas basadas en la especificación funcional del software bajo prueba. Estas son siempre pruebas de caja negra.

Pruebas de rendimiento. Estas serían pruebas realizadas para garantizar que un sistema pueda manejar una cierta cantidad de carga sin ser demasiado lento. Por ejemplo, probar una nueva granja de servidores web podría manejar a 100 usuarios que acceden a un sitio al mismo tiempo sería un ejemplo de una prueba de rendimiento. Estos también pueden denominarse "pruebas de carga" o "pruebas de esfuerzo", ya que generalmente la idea aquí es llevar el sistema a su límite o verificar que el sistema puede manejar alguna proyección de otro departamento. La razón de estas pruebas es que, a menudo, existen numerosos ajustes de configuración para optimizar que pueden tomar más que un poco de trabajo para descubrir cuellos de botella y resolver problemas con esto. El cuello de botella aquí podría ser memoria, E / S, CPU o ancho de banda de red que hace que el sistema no responda tan bien como se esperaba.

Test Driven Development es una metodología y no se refiere a un tipo específico de prueba, sino que las pruebas se escriben antes del código para que las pruebas sean lo que impulsa el desarrollo en lugar del comportamiento , el dominio o la característica que son otros ejemplos en términos de proceso.

La integración continua es una práctica de ejecutar algunas pruebas, como pruebas de unidad, integración y regresión regularmente, de modo que si un cambio rompe una prueba, esto se detecte lo antes posible.

JB King
fuente
55
+1 ... y desafortunadamente, todavía hay pruebas manuales incluso después de todo eso.
Steven Evers
2
y Stres Test: todas las sesiones posibles que prueban la misma máscara al mismo tiempo y continuamente en el escenario de prueba, en algún lugar incluido como parte de UAT, por cierto +1
mKorbel
1
¿No le faltan pruebas de cobertura / cobertura de sucursal? Además, ¿se ejecuta bajo algún tipo de sistema de observación de memoria, como "Electric Fence" malloc o Valgrind?
Bruce Ediger
1
@Bruce Ediger: la cobertura es una estadística para las pruebas de caja blanca, no un método de prueba en sí mismo y las herramientas que describe son para pruebas de rendimiento.
Steven Evers
Tengo que diferir en las "herramientas ... son para pruebas de rendimiento". En algunos lenguajes (C o C ++), ejecutar una gran cantidad de pruebas unitarias en valgrind encontrará errores que ninguno de los otros tipos de pruebas enumerados anteriormente encontrará. Valgrind es ciertamente una herramienta de depuración, pero ejecutar pruebas en un programa valgrinded es muy necesario.
Bruce Ediger
4

Las pruebas de regresión se realizan para garantizar que los nuevos cambios en un sistema no rompan ninguna funcionalidad existente que no se suponía afectada por los cambios.

La prueba de aceptación generalmente es realizada por el cliente / cliente / usuarios comerciales, a menudo es de más alto nivel que otras formas de prueba y se realiza para que las personas que solicitaron los cambios estén contentos con ellos y le permitan promover los cambios en su sistema de producción.

FrustratedWithFormsDesigner
fuente
1
Y lo que es más importante para que acuerden que obtuvieron lo que querían obtener y que ahora pueden pagarle.
Mchl