<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog de Bruno Orsier &#187; Bonnes pratiques</title>
	<atom:link href="https://blog.developpez.com/bruno-orsier/pcategory/bonnes-pratiques/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/bruno-orsier</link>
	<description></description>
	<lastBuildDate>Thu, 04 Apr 2013 16:06:21 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Dojos et apprentissage de bonnes pratiques : les noms de tests</title>
		<link>https://blog.developpez.com/bruno-orsier/p7291/tests-unitaires/dojos_et_apprentissage_de_bonnes_pratiqu</link>
		<comments>https://blog.developpez.com/bruno-orsier/p7291/tests-unitaires/dojos_et_apprentissage_de_bonnes_pratiqu#comments</comments>
		<pubDate>Thu, 26 Feb 2009 22:29:21 +0000</pubDate>
		<dc:creator><![CDATA[Bruno Orsier]]></dc:creator>
				<category><![CDATA[Bonnes pratiques]]></category>
		<category><![CDATA[Programmation]]></category>
		<category><![CDATA[Tests unitaires]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Une bonne pratique qui est apparue très rapidement dans nos dojos de programmation est de bien nommer les tests. En effet, comme les dojos successifs sont séparés de plusieurs semaines, à chaque fois on redécouvre le code, et quand les tests sont mal nommés, nous sommes obligés de les relire entièrement pour les comprendre. En fait l&#8217;un des avantages des dojos est de simuler sur une courte période ce qui se passe dans la vie [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Une bonne pratique qui est apparue très rapidement dans nos dojos de programmation est de <strong>bien nommer les tests</strong>. En effet, comme les dojos successifs sont séparés de plusieurs semaines, à chaque fois on redécouvre le code, et quand les tests sont mal nommés, nous sommes obligés de les relire entièrement pour les comprendre. En fait l&rsquo;un des avantages des dojos est de simuler sur une courte période ce qui se passe dans la vie réelle : quand vous revenez sur votre code plusieurs mois ou années plus tard, vous avez parfois l&rsquo;impression qu&rsquo;il a été écrit par quelqu&rsquo;un d&rsquo;autre, non ?</p>
<p>Par conséquent les participants des dojos sont tous d&rsquo;accord sur le fait qu&rsquo;il faut bien nommer les tests. Rien de très surprenant, me direz-vous, c&rsquo;est une bonne pratique bien connue. Par exemple dans <a href="http://www.amazon.fr/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/" target="_blank">Clean Code</a>, le livre de l&rsquo;oncle Bob dont j&rsquo;ai parlé dans un <a href="http://blog.developpez.com/bruno-orsier/p7221/bonnes-pratiques/programmation/les-commentaires-traduisent-notre-echec-/" target="_blank">billet précédent</a>, il y a plusieurs points qui parlent du nommage correct. Le deuxième chapitre, écrit par <a href="http://www.objectmentor.com/omTeam/ottinger_t.html" target="_blank">Tim Ottinger</a>, est même entièrement consacré à la question du nommage. Plus loin dans le livre, le chapitre &laquo;&nbsp;Tests propres&nbsp;&raquo; mentionne notamment :</p>
<p><span id="more-35"></span></p>
<blockquote><p>Qu&rsquo;est-ce qui rend un test propre ? Trois choses. Lisibilité, lisibilité et lisibilité. La lisibilité est même peut-être plus importante dans les tests unitaires que dans le code de production. Qu&rsquo;est-ce qui rend les tests lisibles ? La même chose qui rend tout code lisible : clarté, simplicité et densité d&rsquo;expression. Dans un test vous voulez dire beaucoup avec aussi peu d&rsquo;expressions que possible. [&#8230;]</p>
</blockquote>
<p>La lisibilité du nom du test est donc importante pour avoir un test &laquo;&nbsp;propre&nbsp;&raquo;. Enfin dans le chapitre &laquo;&nbsp;Odeurs et heuristiques&nbsp;&raquo;, il y a plusieurs points sur les noms, comme :</p>
<blockquote><p>N1 : choisissez des noms descriptifs</p>
<p>N&rsquo;allez pas trop vite pour choisir un nom. Assurez-vous que le nom est descriptif. Rappelez-vous que les significations tendent à dériver au fur et à mesure que le logiciel évolue, donc ré-évaluez fréquemment les noms que vous choisissez.</p>
<p>Ce n&rsquo;est pas simplement une recommandation pour faire joli. Dans le logiciel les noms constituent 90% de ce qui rend le code lisible. Vous devez prendre le temps de les choisir soigneusement and de les garder pertinents. Les noms sont trop importants pour être traités à la légère.</p>
<p>[&#8230;]</p>
<p>N4 : des noms non-ambigus</p>
<p>Choisissez des noms qui rendent non-ambigus le fonctionnement d&rsquo;une fonction ou d&rsquo;une variable. [&#8230;]</p>
</blockquote>
<p>Pour l&rsquo;instant je n&rsquo;ai pas prêté suffisamment attention à cette question des noms des tests. J&rsquo;utilisais le premier nom qui me venait à l&rsquo;esprit. Suite à la &laquo;&nbsp;découverte&nbsp;&raquo; de cette bonne pratique grâce aux dojos, j&rsquo;ai donc revisité mon <a href="http://bruno-orsier.developpez.com/tutoriels/TDD/pentaminos/index.php" target="_blank">tutoriel sur le développement dirigé par les tests (TDD)</a>, et essayé d&rsquo;améliorer les noms des tests. Le tableau ci-dessous présente les noms de tests du tutoriel, ainsi que le nouveau nom que je leur ai trouvé, parfois avec difficulté. </p>
<p>Pour ce tableau j&rsquo;ai suivi la convention utilisée par mes collègues, à savoir des groupes de mots séparés par des caractères &laquo;&nbsp;souligné&nbsp;&raquo;, comme dans <em>LeNombreDeSolutionsCalculees_DoitEtreEgal_AuNombreDeSolutionsTheoriques</em>. Mes collègues ne trouvent pas très lisibles d&rsquo;autres conventions comme tout séparer par des &laquo;&nbsp;souligné&nbsp;&raquo;, comme dans <em>le_nombre_de_solution_calculees_doit_etre_egal_au_nombre_de_solution_theoriques</em>, ou comme tout regrouper et &laquo;&nbsp;séparer&nbsp;&raquo; par des majuscules, comme dans <em>LeNombreDeSolutionsCalculeesDoitEtreEgalAuNombreDeSolutionsTheoriques</em>. </p>
<p>En ce qui me concerne j&rsquo;ai une préférence pour <em>le_nombre_de_solution_calculees_doit_etre_egal_au_nombre_de_solution_theoriques</em>, tout simplement parce qu&rsquo;il est facile d&rsquo;automatiser l&rsquo;obtention d&rsquo;un tel nom : il suffit d&rsquo;écrire une phrase en français, et une simple macro permet d&rsquo;obtenir un nom satisfaisant pour un compilateur (voir par exemple <a href="http://blog.jpboodhoo.com/MacroToAidBDDTestNamingStyle.aspx" target="_blank">Macro to aid BDD test naming style</a>). La troisième convention est également automatisable, mais moins lisible à mon goût.</p>
<p>Pour mieux comprendre les noms ci-dessous, il faut savoir que les 12 pentaminos sont représentés chacun par une lettre qui correspond à sa forme : X, L, V, I etc.</p>
<table cellspacing="0" cellpadding="2" width="856" border="1">
<tbody>
<tr>
<td valign="top" width="282">
<h1><strong>Avant</strong></h1>
</td>
<td valign="top" width="572">
<h1><strong>Après</strong></h1>
</td>
</tr>
<tr>
<td valign="top" width="282">NombreDeSolutions</td>
<td valign="top" width="572">LeNombreDeSolutionsCalculees_DoitEtreEgal_AuNombreDeSolutionsTheoriques</td>
</tr>
<tr>
<td valign="top" width="282">EchangeDeDimensions</td>
<td valign="top" width="572">LeNombreDeSolutions_DoitResterInvariant_ApresEchangeDeDimensions</td>
</tr>
<tr>
<td valign="top" width="282"> </td>
<td valign="top" width="572"> </td>
</tr>
<tr>
<td valign="top" width="282">TestTotalPentaminos</td>
<td valign="top" width="572">LaFabrique_DoitRetourner_ToutesLesVariantes</td>
</tr>
<tr>
<td valign="top" width="282">TestPositionDuPentominoX</td>
<td valign="top" width="572">LePentaminoX_DoitEtre_CorrectementPositionné_SurUneGrilleDe10x6</td>
</tr>
<tr>
<td valign="top" width="282"> </td>
<td valign="top" width="572"> </td>
</tr>
<tr>
<td valign="top" width="282">TestAjoutPentamino</td>
<td valign="top" width="572">LePentaminoI_DoitPouvoir_EtreAjouteEnPosition1</td>
</tr>
<tr>
<td valign="top" width="282">TestAjoutPentaminoSansRepetition</td>
<td valign="top" width="572">LePentaminoI_NeDoitPasPouvoir_EtreAjouteDeuxFoisEnPosition1</td>
</tr>
<tr>
<td valign="top" width="282">TestSolutionTrouveePlateauVide</td>
<td valign="top" width="572">PourUnPlateauVide_AucuneSolution_NeDoitEtreTrouvee</td>
</tr>
<tr>
<td valign="top" width="282">PlaceLibreSurPlateauVide</td>
<td valign="top" width="572">PourUnPlateauVide_LaPosition1_DoitEtreLibre</td>
</tr>
<tr>
<td valign="top" width="282">PlaceNonLibreXapresI</td>
<td valign="top" width="572">LaPosition1_NeDoitPlusEtreLibrePourX_ApresAjoutDeI</td>
</tr>
<tr>
<td valign="top" width="282">PlaceNonLibreEnFinDeLigne</td>
<td valign="top" width="572">LaPlace_NeDoitPasEtreLibre_EnFinDeLigne_PourI</td>
</tr>
<tr>
<td valign="top" width="282">PlaceNonLibrePourXen65</td>
<td valign="top" width="572">LaPlace_NeDoitPasEtreLibre_EnPosition65_PourX</td>
</tr>
<tr>
<td valign="top" width="282">PlaceNonLibrePourXen37</td>
<td valign="top" width="572">LaPlace_NeDoitPasEtreLibre_EnPosition37_PourX</td>
</tr>
<tr>
<td valign="top" width="282">PlaceLibrePourXen45</td>
<td valign="top" width="572">LaPlace_DoitEtreLibre_EnPosition45_PourX</td>
</tr>
<tr>
<td valign="top" width="282">ProchainePositionPlateauVide</td>
<td valign="top" width="572">PourUnPlateauVide_LaProchainePositionLibre_DoitEtre1</td>
</tr>
<tr>
<td valign="top" width="282">ProchainePositionPlateauApresI</td>
<td valign="top" width="572">ApresAjoutDeI_EnPosition1_LaProchainePositionLibre_DoitEtre6</td>
</tr>
<tr>
<td valign="top" width="282">DepassementLimites</td>
<td valign="top" width="572">PourUnPlateauVide_LePentaminoP_PeutEtreAjoute_EnPosition62</td>
</tr>
<tr>
<td valign="top" width="282">PlacementVenPosition1</td>
<td valign="top" width="572">ApresAjoutDeV_EnPosition1_LesLibertesDePlace_DoiventEtreJustes_EnDiversEndroits</td>
</tr>
<tr>
<td valign="top" width="282">PlacementVenPosition1viaLignes</td>
<td valign="top" width="572">ApresAjoutDeV_EnPosition1_LesLignes_DoiventContenir_Respectivement3_1_1_lettresV</td>
</tr>
<tr>
<td valign="top" width="282">PlacementLenPosition5viaLignes</td>
<td valign="top" width="572">ApresAjoutDeL_EnPosition5_LesLignes_DoiventContenir_Respectivement1_4_lettresL</td>
</tr>
<tr>
<td valign="top" width="282">AjouterPuisEnleverI</td>
<td valign="top" width="572">AjouterPuisEnleverI_DoitEtre_UneOperationInvariante_VerificationParAjout</td>
</tr>
<tr>
<td valign="top" width="282">PositionLibreApresAjouterPuisEnleverI</td>
<td valign="top" width="572">AjouterPuisEnleverI_DoitEtre_UneOperationInvariante_VerificationParPositionLibre</td>
</tr>
<tr>
<td valign="top" width="282"> </td>
<td valign="top" width="572"> </td>
</tr>
<tr>
<td valign="top" width="282">ConstructionSolutionComplete</td>
<td valign="top" width="572">AjouterDouzePentaminos_DansLeBonOrdre_DoitEtrePossible</td>
</tr>
<tr>
<td valign="top" width="282">SolutionTrouvee</td>
<td valign="top" width="572">AjouterDouzePentaminos_DansLeBonOrdre_DoitDonnerUneSolution</td>
</tr>
<tr>
<td valign="top" width="282">DescriptionLigne1</td>
<td valign="top" width="572">PourUneSolutionConnue_LaLigne1_DoitEtreJuste</td>
</tr>
<tr>
<td valign="top" width="282">DescriptionLigne2</td>
<td valign="top" width="572">PourUneSolutionConnue_LaLigne2_DoitEtreJuste</td>
</tr>
<tr>
<td valign="top" width="282">DescriptionLigne3</td>
<td valign="top" width="572">PourUneSolutionConnue_LaLigne3_DoitEtreJuste</td>
</tr>
<tr>
<td valign="top" width="282">DescriptionLigne4</td>
<td valign="top" width="572">PourUneSolutionConnue_LaLigne4_DoitEtreJuste</td>
</tr>
<tr>
<td valign="top" width="282">DescriptionLigne5</td>
<td valign="top" width="572">PourUneSolutionConnue_LaLigne5_DoitEtreJuste</td>
</tr>
<tr>
<td valign="top" width="282">DescriptionLigne6</td>
<td valign="top" width="572">PourUneSolutionConnue_LaLigne6_DoitEtreJuste</td>
</tr>
<tr>
<td valign="top" width="282"> </td>
<td valign="top" width="572"> </td>
</tr>
<tr>
<td valign="top" width="282">TestPosition27DansPremierQuadrant</td>
<td valign="top" width="572">LaPosition27_DoitEtre_DansLePremierQuadrant</td>
</tr>
<tr>
<td valign="top" width="282">TestPosition17DansPremierQuadrant</td>
<td valign="top" width="572">LaPosition17_DoitEtre_DansLePremierQuadrant</td>
</tr>
<tr>
<td valign="top" width="282"> </td>
<td valign="top" width="572"> </td>
</tr>
<tr>
<td valign="top" width="282">TestDescription</td>
<td valign="top" width="572">LaDescriptionDuProgramme_DoitEtre_NonVide</td>
</tr>
</tbody>
</table>
<p> </p>
<p>Obtenir de bons noms a été finalement assez difficile, et consommateur de temps. D&rsquo;ailleurs je ne suis pas forcément satisfait de tous. Il est probable que travailler en binôme sur la question permettrait d&rsquo;arriver à de meilleurs résultats. </p>
<p>J&rsquo;ai constaté aussi que la difficulté de trouver certains noms pouvait indiquer une &laquo;&nbsp;mauvaise odeur&nbsp;&raquo;. Par exemple pour <em>ApresAjoutDeV_EnPosition1_LesLibertesDePlace_DoiventEtreJustes_EnDiversEndroits</em>, la longueur et le caractère vague  du nom m&rsquo;indiquent que le test fait sans doute trop de choses, et qu&rsquo;il vaudrait mieux le couper en plusieurs petits tests.</p>
<p>Travailler sur les noms a été également révélateur de défauts potentiels de structuration de mes tests. Ainsi l&rsquo;une des classes comporte quatre méthodes dont les noms sont construits de manière similaire : <em>PourUnPlateauVide_LePentaminoP_PeutEtreAjoute_EnPosition62, PourUnPlateauVide_LaProchainePositionLibre_DoitEtre1, PourUnPlateauVide_LaPosition1_DoitEtreLibre, PourUnPlateauVide_AucuneSolution_NeDoitEtreTrouvee,</em> alors que les autres noms sont bien différents. Cela indique que ces quatre méthodes devraient certainement aller sur une autre classe de tests, ce qui permettrait de factoriser le contexte &laquo;&nbsp;Pour un plateau vide&nbsp;&raquo;. Les noms pourraient alors être simplifiés, ce qui augmenterait la lisibilité. </p>
<p>En conclusion, appliquer cette bonne pratique a été un exercice utile pour améliorer mon tutoriel dans une future version, et c&rsquo;est une pratique que je m&rsquo;efforcerai d&rsquo;appliquer au quotidien.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Les commentaires traduisent notre échec à nous exprimer !</title>
		<link>https://blog.developpez.com/bruno-orsier/p7221/bonnes-pratiques/programmation/les_commentaires_traduisent_notre_echec_</link>
		<comments>https://blog.developpez.com/bruno-orsier/p7221/bonnes-pratiques/programmation/les_commentaires_traduisent_notre_echec_#comments</comments>
		<pubDate>Thu, 12 Feb 2009 16:52:31 +0000</pubDate>
		<dc:creator><![CDATA[Bruno Orsier]]></dc:creator>
				<category><![CDATA[Programmation]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Discussion intéressante ce 11 février lors du troisième dojo du Club Agile Rhône Alpes : nous nous apprêtions à introduire des commentaires dans notre code de test quand un participant a fait remarquer qu&#8217;il préférerait voir ces mêmes informations sur la trace de sortie, afin de rendre les résultats de tests unitaires plus lisibles. Plusieurs solutions ont été discutées, et nous avons retenu la plus simple, à savoir inclure l&#8217;information en question directement dans le [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Discussion intéressante ce 11 février lors du troisième dojo du <a href="http://clubagile.org/" target="_blank">Club Agile Rhône Alpes</a> : nous nous apprêtions à introduire des commentaires dans notre code de test quand un participant a fait remarquer qu&rsquo;il préférerait voir ces mêmes informations sur la trace de sortie, afin de rendre les résultats de tests unitaires plus lisibles. Plusieurs solutions ont été discutées, et nous avons retenu la plus simple, à savoir inclure l&rsquo;information en question directement dans le nom de la méthode de test.</p>
<p>Cela m&rsquo;a fait prendre conscience à quel point un commentaire représente une information &laquo;&nbsp;morte&nbsp;&raquo; par rapport au code, &laquo;&nbsp;vivant&nbsp;&raquo; car exécuté. Et cela m&rsquo;a remis en mémoire un chapitre du livre <a href="http://www.amazon.fr/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/" target="_blank">Clean Code: A Handbook of Agile Software Craftsmanship</a> par <a href="http://www.objectmentor.com/omTeam/martin_r.html" target="_blank">Robert C. Martin</a> (et d&rsquo;autres auteurs comme <a href="http://www.michaelfeathers.com/" target="_blank">Michael Feathers</a> qui a écrit le chapitre &laquo;&nbsp;Error Handling&nbsp;&raquo;). En effet ce nouveau manuel de référence consacre pas moins de 21 pages à la question des commentaires dans le code (presqu&rsquo;autant qu&rsquo;au TDD !). </p>
<p>Comment bien commenter son code est un sujet assez sensible, sur lequel les développeurs et leurs managers sont enclins à s&rsquo;enflammer facilement ! Personnellement je converge petit à petit vers l&rsquo;opinion qu&rsquo;il faut éviter les commentaires autant que possible, et Robert C. Martin explique cela très bien, aussi je traduis ci-dessous quelques extraits :</p>
<p><span id="more-36"></span></p>
<p> </p>
<blockquote><p>En effet, les commentaires sont, au mieux, un mal nécessaire. Si nos langages de programmation étaient suffisamment expressifs, ou si nous avions le talent de les manier subtilement pour exprimer notre intention, nous n&rsquo;aurions pas beaucoup besoin de commentaires &#8211; peut-être même pas du tout besoin.</p>
</blockquote>
<blockquote><p>Le bon usage des commentaires est de compenser notre échec à nous exprimer nous-mêmes avec du code. Notez que j&rsquo;ai utilisé le mot <em>échec</em>. Je le pense vraiment. Les commentaires sont toujours des échecs. Nous devons en avoir parce que nous n&rsquo;arrivons pas toujours à nous exprimer sans eux, mais leur utilisation n&rsquo;est pas une cause de célébration.</p>
</blockquote>
<blockquote><p>Alors quand vous vous trouvez dans une situation ou vous devez écrire un commentaire, réfléchissez-y et regardez s&rsquo;il n&rsquo;y a pas un moyen de changer les circonstances, et de vous exprimer avec du code. Chaque fois que vous vous exprimez avec du code, vous devriez vous taper sur l&rsquo;épaule. Chaque fois que vous écrivez un commentaire, vous devriez faire la grimace et ressentir l&rsquo;échec de vos capacités d&rsquo;expression.</p>
<p>Pourquoi suis-je si remonté contre les commentaires ? Parce qu&rsquo;ils mentent. Pas toujours, et pas intentionnellement, mais trop souvent. Plus un commentaire est ancien, et plus loin il est du code qu&rsquo;il décrit, plus il est probable qu&rsquo;il soit tout simplement faux. La raison est simple. Les programmeurs ne peuvent pas raisonnablement les maintenir.</p>
<p>&#8230;</p>
<p>Il y a l&rsquo;argument que les programmeurs devraient être suffisamment disciplinés pour garder les commentaires dans un état élevé de réparation, pertinence et précision. Je suis d&rsquo;accord, ils devraient. Mais je préférerais que cette énergie aille dans la direction de rendre le code si clair et expressif qu&rsquo;il n&rsquo;ait plus besoin de commentaires du tout.</p>
<p>Des commentaires imprécis sont bien pires que pas de commentaires du tout. Ils sont malhonnêtes et vous trompent. Ils font des promesses qui ne seront jamais satisfaites. Ils exposent de vieille règles qui n&rsquo;ont plus besoin d&rsquo;être suivies (et qui ne devraient pas être suivies).</p>
<p>La vérité peut être trouvée à un seul endroit : le code. Seul le code peut véritablement vous dire ce qu&rsquo;il fait. C&rsquo;est la seule source d&rsquo;information réellement précise. Par conséquent, bien que les commentaires soient quelquefois nécessaires, nous dépenserons une énergie significative à les minimiser.</p>
</blockquote>
<p>Le chapitre continue ensuite avec de nombreux exemples de bons et mauvais commentaires, qui me conviennent parfaitement, sauf le cas des mauvais commentaires de type &laquo;&nbsp;commentaires de <a href="http://fr.wikipedia.org/wiki/Journalisation" target="_blank">journalisation</a>&laquo;&nbsp;. Ce sont les commentaires que l&rsquo;on ajoute en début de fichier ou de méthode pour indiquer pour quelle raison on y touche (identifiant de user story au minimum), la date, l&rsquo;auteur. A supprimer absolument pour Robert C. Martin, étant donné que nos systèmes de gestion de source fournissent maintenant facilement cette information. Je suis d&rsquo;accord sur le principe, mais pas sur la pratique !</p>
<p>En effet nous travaillons dans un cadre réglementaire et nous pouvons être audités par des clients, lesquels arrivent avec des formulaires d&rsquo;évaluation du code qui exigent d&rsquo;examiner&#8230; les commentaires ! J&rsquo;ai constaté que les auditeurs n&rsquo;étaient pas trop exigeants sur le détail des commentaires eux-mêmes, mais ils sont intransigeants sur le fait qu&rsquo;il doit y avoir des commentaires. Donc à l&rsquo;heure actuelle je ne suis pas confiant de présenter à des auditeurs du code très peu commenté (mais très lisible) comme le recommande Robert C. Martin. J&rsquo;aurais un peu l&rsquo;impression d&rsquo;aller tout nu à l&rsquo;audit&#8230;</p>
<p>Donc pour moi les commentaires de journalisation ont la fonction d&rsquo;habiller un peu le code (et celui qui est audité). De plus les informations qu&rsquo;ils contiennent sont assez utiles, notamment lors du support technique. Quand je travaille sur la résolution d&rsquo;un bug mystérieux, et que j&rsquo;arrive sur une certaine méthode, les commentaires de journalisation me sont utiles :</p>
<ul>
<li>une longue liste de commentaires m&rsquo;indique que la mise au point a été laborieuse, et que je dois me méfier avant de modifier la fonction,</li>
<li>un unique commentaire ancien m&rsquo;indique une portion de code stable depuis longtemps. Est-il vraiment justifié d&rsquo;y toucher maintenant ?</li>
<li>les identifiants de user stories me renseignent les impacts possibles si je touche à cette méthode</li>
<li>les noms de ceux qui ont travaillé successivement sur la méthode me renseignent aussi sur d&rsquo;éventuels risques, ou sur des anti-patterns possibles.</li>
</ul>
<p>Il est vrai que qu&rsquo;un système de gestion de version de sources moderne peut fournir ces informations. Nous utilisons maintenant SubVersion qui offre la fonctionnalité &laquo;&nbsp;Blame&nbsp;&raquo;, laquelle permet de voir &laquo;&nbsp;à plat&nbsp;&raquo; toutes les modifications d&rsquo;un fichier. Il reste à voir si cette fonctionnalité est suffisamment performante (dans notre ancien système, certains fichiers ont été modifiés plus de 400 fois &#8211; est-ce que Blame fonctionne dans de tels cas ?).</p>
<p>Si Blame fonctionne réellement à cette échelle, je suis assez disposé à abandonner les commentaires de journalisation dans de futurs projets, à condition que le code soit développé suivant les principes exposés dans Clean Code. </p>
<p>Donc d&rsquo;accord pour la nudité, mais à condition qu&rsquo;elle soit magnifique !</p>
<p>Et vous, que pensez-vous des commentaires ? Que faites-vous en pratique ?</p>
<p> </p>
<p>Remarque : vous pouvez lire un chapitre du livre en ligne <a href="http://www.informit.com/articles/article.aspx?p=1235624&amp;seqNum=3" target="_blank">ici sur informit.Com</a>, c&rsquo;est une introduction avec des interviews de programmeurs expérimentés (Bjarne Stroustrup, Grady Booch, Dave Thomas, et Ward Cunningham) qui expliquent ce que Clean Code veut dire pour eux. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
