Mutation testing PHP Mantisbt con Infection - proyectosuniandes/Proyecto-MISO4208 GitHub Wiki
Se intento implementar mutantes para Mantisbt ya que está desarrollado en PHP con una herramienta llamada infection(https://infection.github.io/), se realizo la investigación pero no fue posible debido a que esta herramienta solo es compatible con frameworks de pruebas ya establecidos y no soporta cypress o cucumber que son los que veníamos trabajando. A continuacion describimos infection y como funciona.
¿Qué es Infection?
Infection es un framework de mutation testing para PHP basado en mutaciones AST (Abstract Syntax Tree). Funciona como una herramienta CLI y se puede ejecutar desde la raíz de su proyecto.
Infection actualmente soporta frameworks de pruebas PHPUnit, PhpSpec y Codeception, requiere tener instalado PHP 7.1+ y Xdebug/phpdbg/pcov.
En pocas palabras,
- ejecuta el conjunto de pruebas para ver si todas las pruebas pasan
- muta el código fuente con un conjunto de mutadores predefinidos (operadores de mutación)
- para cada mutante (código modificado con un cambio) ejecuta las pruebas que cubren la línea cambiada
- analiza si las pruebas comienzan a fallar
- recoge los resultados de mutantes muertos, escapados, errores y tiempos de espera
Dado que se tiene una clase Form con un método hasErrors(),
// Form.php
public function hasErrors(): bool
{
return count($this->errors) > 0;
}
Infection creará los siguientes mutantes:
Conditional boundary mutator:
public function hasErrors(): bool
{
- return count($this->errors) > 0;
+ return count($this->errors) >= 0;
}
Conditional negotiation mutator:
public function hasErrors(): bool
{
- return count($this->errors) > 0;
+ return count($this->errors) < 0;
}
Integer 0-1, 1-0 mutator:
public function hasErrors(): bool
{
- return count($this->errors) > 0;
+ return count($this->errors) > 1;
}