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.
1 2 3 4 5 6 7 8 9 |
// 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
_ _ _ | || |_ _ _ __ | |__ _ _ __ _ | __ | || | ' \| '_ \ || / _` | |_||_|\_,_|_|_|_|_.__/\_,_\__, | |___/ 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
Laisser un commentaire
Participez-vous à la discussion?N'hésitez pas à contribuer!