Le mutation testing existe depuis plus de 40 ans, mais c’est seulement dans les années 80 que des outils logiciel ont vu le jour. Le principe du mutation testing est d’apporter des modifications ou mutations (mutators) au code afin de déterminer si la suite de tests unitaires attrape ces changements. Si ce n’est pas le cas, c’est que vos tests sont incomplets et doivent être améliorés. L’article suivant présente l’utilisation du logiciel Humbug pour PHP.

Exemple de mutation

Par exemple, l’outil Humbug pourrait remplacer le symbole + par – dans une fonction. Tout cela se passe en mémoire et ne modifie pas votre code sur disque.

// Code original
function add($a, $b){
  return $a + $b;
}

// Code modifié en mémoire
function add($a, $b){
   return $a - $b;
}

Si vos tests ne permettent pas de repérer ce changement, c’est que vos tests sont incomplets !

Les mutators

Les tests ne se limitent pas à seulement 1 changement de symbole, en fait l’outil peut exécuter plus d’une dizaine de changements. Voici une liste de plusieurs autres mutators possibles.

Original

Avec mutation

Original

Avec mutation

+

/=

*=

+

%=

*=

*

/

**=

/=

/

*

&

|

%

*

|

&

**

/

^

&

+=

-=

~

-=

+=

>>

<<

*=

/=

<<

>>

 

Tests très lent

Il est à noter que l’exécution de ces tests peut être très longue et que l’outil Humbug est en version Alpha. En échange de ces désagréments, vous pourrez vérifier en profondeur la qualité de vos tests unitaires !

Afin d’accélérer l’exécution de ces tests, pensez à migrer vers super fast PHP 7.

Humbug en exécution

_ _ _
| || |_ _ _ __ | |__ _ _ __ _
| __ | || | ' \| '_ \ || / _` |
|_||_|\_,_|_|_|_|_.__/\_,_\__, |
|___/

Humbug version 1.0-dev
Humbug running test suite to generate logs and code coverage data...

361 [==========================================================] 28 secs
 

Humbug has completed the initial test run successfully.
Tests: 361 Line Coverage: 64.86%
Humbug is analysing source files...
Mutation Testing is commencing on 78 files...

(.: killed, M: escaped, S: uncovered, E: fatal error, T: timed out)
.....M.M..EMMMMMSSSSMMMMMSMMMMMSSSE.ESSSSSSSSSSSSSSSSSM..M.. | 60 ( 7/78)
...MM.ES..SSSSSSSSSS...MMM.MEMME.SSSS.............SSMMSSSSM. | 120 (12/78)
M.M.M...TT.M...T.MM....S.....SSS..M..SMMSM...........M...... | 180 (17/78)
MM...M...ESSSEM..MMM.M.MM...SSS.SS.M.SMMMMMMM..SMMMMS....... | 240 (24/78)
.........SMMMSMMMM.MM..M.SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS | 300 (26/78)

653 mutations were generated:
284 mutants were killed
218 mutants were not covered by tests
131 covered mutants were not detected
17 fatal errors were encountered
3 time outs were encountered

Metrics:

Mutation Score Indicator (MSI): 47%
Mutation Code Coverage: 67%
Covered Code MSI: 70%

Humbug sur Github

https://github.com/padraic/humbug

Humbug is a Mutation Testing framework for PHP to measure the real effectiveness of your test suites and assist in their improvement. It eats Code Coverage for breakfast.

Présentation d’introduction sur Humbug

http://fr.slideshare.net/markredeman/mutation-testing-in-php-with-humbug

Facebook Comments

0 réponses

Laisser un commentaire

Rejoindre la discussion?
N’hésitez pas à contribuer !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.