Qwizards_-_X-Men_Summer_Edition_2014

Pruebas de Mutación (Mutation testing)


En esta entrada vamos a ver este concepto que me pareció muy interesante como alternativo a aplicar en el desarrollo de unit tests. También me pareció interesante desde la perspectiva de la creación de Test Automatizados, ya que es una práctica recomendable hacer fallar el test automatizado para poder ver que maneje de la forma esperada la detección de errores.

Que es?

Es una técnica para medir la calidad de los tests a largo plazo. En las pruebas de mutación, mutamos (cambiamos) ciertas declaraciones en el código fuente y comprobamos si los casos de prueba son capaces de encontrar esos errores introducidos. Es un tipo de pruebas de caja blanca que se utiliza principalmente para las pruebas unitarias. Los cambios en la aplicación “mutante” se mantienen muy pequeños, por lo que no afecta al objetivo general de la aplicación.

Objetivo

El objetivo de las pruebas de mutación es evaluar la calidad de los casos de prueba que deben ser lo suficientemente robustos como para fallar ante código mutante. Este método también es llamado estrategia de evaluación basada en fallos, ya que implica la creación de fallas en el programa.

Ejemplo

Código Fuente:

public class Math {

public int add(int i1, int i2){

return i1 + i2;

} }

Código con Mutación:

public class Math {

public int add(int i1, int i2) {

return i1 - i2;

} }

Pasos:

  • Corremos los tests sobre  el Código fuente -> pruebas pasan
  • Corremos los tests sobre  el Código Mutante -> pruebas pasan (Mutante sobrevive!)
  • Corremos los tests sobre  el Código Mutante -> pruebas fallan (Mutante Muere!)

Como podemos ver, que el mutante sobreviva nos indica que cambiando el código fuente, los tests siguen pasando, algo muy pero muy mal! En cambio,  si corremos las pruebas sobre el código mutante y las mismas fallan, esto indica que las pruebas fueron capaces de detectar el cambio, lo que es muy bueno!

Ventajas

  • Trae un nuevo tipo de errores a la atención de los desarrolladores.
  • Es el método más poderoso para detectar defectos ocultos, que podrían ser imposible identificar mediante las técnicas de pruebas convencionales.
  • Es un complemento a la medida de cobertura de las pruebas.
    Trae un buen nivel de detección de errores para las pruebas de unidad.
    Descubre ambigüedades en el código fuente.
    Se obtienen sistemas más fiables y estables.

Desventajas

  • Extremadamente costoso y consume mucho tiempo, ya que hay mucho código mutante que necesita ser generado (Por esto se dejo de usar luego de ser una practica muy famosa allá por 1971)
  • Muy difícil de aplicar sin una herramienta de automatización (por su costo)
  • Cada mutación tendrá el mismo número de casos de prueba que la de el programa original. Por lo tanto, puede necesitar ser probado contra el conjunto de pruebas original de un gran número de programas de mutantes.
  • Implica cambios en el código fuente,  por lo que no es en absoluto aplicable para las pruebas de caja negra.

¿Te gustaría alguna aclaración? ¿Te Parece que falta algo? Deja tu comentario!!!


Te gustó el post? Quieres contribuir para que escriba más?
Contribute with the Blog

3 pensamientos en “Pruebas de Mutación (Mutation testing)”

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s