2008-10-28 21 views
36

¿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?¿Las pruebas de mutación son útiles en la práctica?

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

+1

No entiendo cómo esto se desvía del desarrollo impulsado por pruebas tradicionales. Simplemente no hay forma de cubrir todas las eventualidades matemáticas, y no creo que valga la pena. –

+0

Sí, esa es mi pregunta si vale la pena el esfuerzo en el mundo real. Sé que hay un poco de trabajo teórico al respecto. Pero, ¿funciona en realidad? – Mnementh

+2

¿No se trata de que las pruebas de mutación realmente prueben las pruebas? Quiero decir, si puedes alterar la lógica del código fuente y aún pasar las pruebas, entonces seguramente las pruebas no son del todo correctas. Perdóneme si me falta algo ... – Grundlefleck

Respuesta

9

Miré la prueba de mutación hace algún tiempo como un método para verificar la eficacia de mis scripts de prueba de regresión automática. 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.

Esto 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.

+0

¿Qué tan caro fue escribir una solicitud por separado para verificar sus pruebas? ¿Las pruebas de mutación no son compatibles con las herramientas más baratas? – dzieciou

+0

No es especialmente caro, lleva unos 2 días todo en herramientas de escritura, y no pude encontrar nada de la plataforma para hacer el trabajo. La idea era simplemente que para todas las pruebas que estaban pasando, el cambio de los datos de línea de base debería llevar a una falla. Donde no fue así, indicó un caso de prueba defectuoso. La codificación real para esto fue específica para la aplicación que se está probando, pero muy simple en lo que hizo. –

2

Recientemente realicé algunas investigaciones sobre las pruebas de mutación. Los resultados están aquí:

http://abeletsky.blogspot.com/2010/07/using-of-mutation-testing-in-real.html

En resumen: Las pruebas de mutación podría dar alguna información sobre la calidad del código fuente y pruebas, pero no es algo directo conducir a utilizar.

+0

¿Quiso decir "es" o "NO es" fácil de usar? – dzieciou

+0

NO es, corregido. tnx –

+2

El blog referido ya no existe. –

14

La utilidad de las pruebas unitarias ya no se analiza. 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 entero article sobre este proceso, incluyendo algunos casos concretos.

2

He jugado un poco con pitest para una aplicación pequeña, 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 la 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 será ayuda a exponer 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.

Las pruebas de mutación son un ángulo de ataque que es bastante diferente de las metodologías de prueba unidad/funcional/de integración.

  1. Usted prueba su conjunto de pruebas, es una meta-prueba de todo su programa de pruebas.
  2. Inspira casos de prueba adicionales que de otra manera no hubieras considerado.
2

Recientemente comencé a practicar la prueba de mutación 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 problema principal 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.

+0

@@ Adam: Hay varios defectos en su extracto: (1) Cobertura del código: sospecho que su "cobertura de código" al 100% es simplemente que el 100% de los casos de prueba son de color verde. Tanto en la teoría como en la práctica, no puede haber una cobertura del 100% de las pruebas en todos los casos de uso posibles del código. (2) Si define un "error" es una desviación de su programa de una especificación, entonces sus casos de prueba 100% verdes, si alteran los estados de su programa, realmente lo ayudaron a evitar algunos errores. – CuongHuyTo

+0

@CuongHuyTo um, por supuesto, puede haber una cobertura del 100%? No para todas las clases, pero es trivial generar ejemplos para los cuales puede haber una cobertura del 100%. He dado varias presentaciones usando el ejemplo del 100% de cobertura de línea/sucursal con "pruebas" que en realidad no prueban ni una sola cosa. – eis

+0

@ Adam: muéstrame cómo puedes probar 100% un método que toma una cadena como entrada y la revierte. – CuongHuyTo

1

que sabe que esto es una cuestión de edad, pero recientemente el tío Bob escribir un post muy interesante sobre la mutación de las pruebas que pueden ayudar a comprender la utilidad de este tipo de pruebas:

Uncle Bob mutating testing blog post

Cuestiones relacionadas