visual unitarias unit test studio pruebas mvc ejemplo definicion unit-testing testing code-coverage mutation-testing

unit-testing - unitarias - unit test c# visual studio 2013



¿Las pruebas de mutación son útiles en la práctica? (6)

¿Tiene algún ejemplo de aplicaciones de prueba de mutación en la vida real? ¿Funciona mejor que las herramientas simples de cobertura de prueba? ¿O es inútil?

¿Cuáles son las ventajas / desventajas de las pruebas de mutación en el mundo real?


Hace un tiempo, examiné la prueba de la mutación como un método para verificar la eficacia de mis scripts de pruebas de regresión automáticas. Básicamente, a varios de estos scripts les faltaban puntos de control, por lo tanto, mientras ejercían la aplicación que se estaba probando correctamente, no estaban verificando los resultados con los datos de referencia. Descubrí que un método mucho más simple que cambiar el código era escribir otra aplicación para introducir modificaciones en una copia de la línea de base, y volver a ejecutar las pruebas contra la línea base modificada. En este escenario, cualquier prueba que pasó fue defectuosa o incompleta.

Esta no es una prueba de mutación genuina, sino un método que utiliza un paradigma similar para probar la eficacia de los scripts de prueba. Es lo suficientemente simple de implementar, y la OMI hace un buen trabajo.


He jugado con los más pequeños para una aplicación pequeña y artificial:

http://pitest.org/

Es una herramienta de Java que automatiza la generación de mutantes. Puede ejecutarlo en su suite de prueba y generará informes HTML para usted que indiquen cuántos mutantes se eliminaron. Pareció bastante efectivo y no requirió mucho esfuerzo para configurarlo. En realidad, hay algunas buenas herramientas en el mundo de Java para este tipo de cosas. Ver también:

http://www.eclemma.org/

Para cobertura

Creo que los conceptos detrás de las pruebas de mutación son sólidos. Es solo una cuestión de apoyo y conciencia de la herramienta. Estás peleando por una compensación entre la simplicidad de las métricas de cobertura de códigos tradicionales y la complejidad adicional de esta técnica: realmente solo se trata de herramientas. Si puede generar los mutantes, entonces ayudará a exponer las debilidades en sus casos de prueba. ¿Vale la pena el aumento marginal de esfuerzo sobre las pruebas que ya hace? Con los más feroces, encontré que aparecían casos de prueba que parecían no obvios.

La prueba de mutaciones es un ángulo de ataque que es bastante diferente de las metodologías de prueba unitarias / funcionales / de integración.

  1. Usted prueba su conjunto de pruebas, es una metaprueba de su programa de pruebas completo.
  2. Inspira casos de prueba adicionales que de otra manera no habrías considerado.

La utilidad de las pruebas unitarias ya no se discute. Son esenciales en la concepción de una aplicación de calidad. Pero, ¿cómo podemos evaluar su relevancia? Un indicador de cobertura de código de hasta 100% no significa que el código esté 100% probado. Esta es solo una vista del código ejecutado durante la ejecución de las pruebas unitarias. Las pruebas de mutación le permitirán tener más confianza en sus pruebas.

Este es un proceso de dos pasos:

  1. Generar mutantes
  2. Compruebe que las mutaciones se encuentran en las pruebas.

Escribí un article completo sobre este proceso, incluidos algunos casos concretos.


Recientemente comencé a practicar pruebas de mutaciones en C ++, y es mucho mejor que la cobertura del código. En el caso extremo, es posible tener el 100% de la cobertura del código y el 0% de los errores potenciales descubiertos (en mi caso, reveló aproximadamente el 80% de los errores falsos), por supuesto, depende de qué tan bien genere los errores. .

El principal problema es encontrar una forma eficiente de generar automáticamente un gran número de mutantes no equivalentes, y los conjuntos de pruebas deben ejecutarse rápidamente.

Su informe también debe incluir el cambio / diff que no fue detectado por las pruebas. Entonces puede corregir las pruebas.



Sabía que esta es una vieja pregunta, pero recientemente el tío Bob escribió una publicación en el blog muy interesante sobre las pruebas de mutación que pueden ayudar a comprender el uso útil de este tipo de pruebas:

Tío Bob mutando prueba blog post