Prueba de mutación
# Prueba de mutación

La prueba de mutaciones (también conocida como análisis de mutaciones o mutación de programas) se utiliza para diseñar nuevas pruebas de software y evaluar la calidad de las pruebas ya existentes. La prueba de mutaciones requiere hacer un pequeño cambio en el código fuente o byte code. Cada versión cambiada es un mutante y las pruebas deben ser capaces de distinguir el programa original del mutante a partir del comportamiento observado. A esto se le llama matar al mutante. Un conjunto de pruebas es evaluado en base al porcentaje de los mutantes que mata (la puntuación de mutación), y los mutantes supervivientes se pueden usar para diseñar nuevas pruebas. Los mutantes son creados utilizando operadores de mutación concretos que imitan errores comunes de programación (p. ej. utilizar operadores o variables equivocados) u obligan a crear pruebas importantes (como forzar a que se divida por cero). El objetivo es ayudar al desarrollador a crear pruebas efectivas localizando carencias en el conjunto de pruebas, especialmente en los puntos del programa que son menos transitados durante su ejecución.

La mayor parte de este artículo es sobre "mutación de programas", en la que se cambia un programa. Una definición más general, análisis de mutaciones, consiste en utilizar reglas bien definidas sobre estructuras sintácticas para hacer cambios sistemáticos a artefactos de software. Se ha empleado análisis de mutaciones para resolver otros problemas, pero normalmente se utiliza para prueba de software. Por lo tanto, la prueba de mutaciones se puede entender como el uso del análisis de mutaciones para diseñar nuevas pruebas o evaluar las pruebas existentes. Esto permite emplear el análisis y la prueba de mutaciones para diseñar modelos, especificaciones, bases de datos, pruebas, documentos XML y otros tipos de artefactos, aunque lo más común es mutar programas.

## Ejemplo

A continuación se expone un ejemplo aclarativo:

Programa original:

Programa mutado, al cual se le cambia una instrucción, por lo cual lo llamamos mutante de orden 1. En este caso, la mutación se corresponde simplemente por un cambio del operador aritmético:

