mageekblog - Mot-clé - Couverture de codeLe blog personnel de Frédéric Hardy. Au menu, PHP, agilité, FreeBSD, cuisine et photographies.2021-12-02T08:20:54+01:00Frédéric Hardyurn:md5:26874ca5b8cd4cac8d08b0e68e64f63aDotclearComplément à la documentation de Xdebugurn:md5:a11cdd50e139fd90df5aff59bbc5c0262010-12-07T14:00:00+01:002010-12-07T14:01:17+01:00mageekguyPHPCouverture de codeDerick RethansPHPUnitXdebug<p>Je <ironie>m'amuse</ironie> énormément avec <a href="http://www.phpunit.de/">PHPUnit</a> actuellement, dans le cadre de mon travail.</p>
<p>Évidemment, j'ai rencontré quelques problèmes, mais rien de bien
insurmontable, jusqu'à il y a quelques jour ou je me suis rendu compte
que le rapport de couverture de code n'était plus généré.</p>
<p>Après quelques recherche, j'ai découvert que le problème provenait d'un appel à <code>require('php://temp')</code> dans le cadre d'une méthode de test.</p>
<p>Cependant, à partir de cette information, j'ai eu du mal à incriminer avec certitude <a href="http://www.phpunit.de/">PHPUnit</a>, puisque ce dernier fait appel à un outil externe, à savoir <a href="http://www.xdebug.org/">Xdebug</a>, pour collecter les informations relatives à la couverture de code.</p>
<p>Je me plonge donc actuellement dans les arcanes de <a href="http://www.phpunit.de/">PHPUnit</a> et de <a href="http://www.xdebug.org/">Xdebug</a> afin de découvrir le coupable, et du coup, je suis obligé de lire dans le détail leur documentation.</p>
<p>Or, celle de <a href="http://www.xdebug.org/">Xdebug</a> est parfois incomplète sur certain point précis, comme, par exemple, <a href="http://www.xdebug.org/docs/code_coverage">la couverture de code</a> (merci <a href="http://fr.wikipedia.org/wiki/Loi_de_Murphy">Murphy</a>).</p> <p>Ainsi, elle ne fournit aucune information sur la signification des valeurs du tableau renvoyé par <code>xdebug_get_code_coverage()</code>, notamment lorsque la couverture de code a été demandée via <code>xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE)</code>.</p>
<p>Pour l'exemple, voici un tableau pouvant être retourné par <code>xdebug_get_code_coverage()</code> :</p>
<blockquote><pre><code>array(<br /> '/path/to/file' => array(<br /> 5 => int -1<br /> 6 => int -1<br /> 7 => int -1<br /> 9 => int -2<br /> 10 => int -1<br /> 11 => int 1<br /> 12 => int 1<br /> 13 => int -2<br /> 15 => int 1<br /> 16 => int -1<br /> 18 => int -1<br /> )<br />)<br /></code></pre></blockquote>
<p>S'il est relativement évident que les clefs correspondent aux numéros des lignes du fichiers, les valeurs -2, -1 et 1 m'ont laissé dans l'expectative la plus complète.</p>
<p>J'ai donc demandé les informations nécessaires à <a href="http://derickrethans.nl/">Derick Rethans</a>, l'auteur de <a href="http://www.xdebug.org/">Xdebug</a>, via <abbr ttile="Internet Relay Chat">IRC</abbr>, et voici les explications manquantes :</p>
<ul><li>Une valeur à -2 indique que la ligne correspondante contient du code mort, c'est à dire qu'il ne sera jamais exécuté par <a href="http://www.php.net">PHP</a>, comme par exemple une accolade fermante après un appel à l'instruction <code>return</code>.</li>
<li>Une valeur à -1 indique que la ligne correspondante contient du code exécutable, mais qu'elle n'a pas été exécutée.</li>
<li>Une valeur à 1 indique que la ligne correspondante a été exécutée.</li>
</ul>
<p>Évidemment, la documentation de <a href="http://www.xdebug.org/">Xdebug</a> devrit être prochainement mise à jour avec ces informations.</p>
<p>Et pour ceux qui se poserait la question, je n'ai encore aucune explication au sujet du fait qu'un appel à <code>require('php://temp')</code> empêche <a href="http://www.phpunit.de/">PHPUnit</a> de faire son rapport de couverture de code correctement.</p>http://blog.mageekbox.net/?post/2010/12/07/Compl%C3%A9ment-%C3%A0-la-documentation-de-Xdebug#comment-formhttp://blog.mageekbox.net/?feed/atom/comments/216