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;
}