<?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>OCTO talks ! &#187; xdepend</title>
	<atom:link href="http://blog.octo.com/tag/xdepend/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.octo.com</link>
	<description>Le blog d&#039;OCTO Technology, cabinet d&#039;architectes en systèmes d&#039;information</description>
	<lastBuildDate>Fri, 03 Feb 2012 13:46:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Retour sur le JUG de Lausanne sur l&#8217;analyse de la qualité du code Java</title>
		<link>http://blog.octo.com/retour-jug-lausanne-qualite-code-java/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=retour-jug-lausanne-qualite-code-java</link>
		<comments>http://blog.octo.com/retour-jug-lausanne-qualite-code-java/#comments</comments>
		<pubDate>Fri, 04 Mar 2011 09:00:33 +0000</pubDate>
		<dc:creator>Cyril Picat</dc:creator>
				<category><![CDATA[Architecture et technologies]]></category>
		<category><![CDATA[audit]]></category>
		<category><![CDATA[coverity]]></category>
		<category><![CDATA[headway structure101]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jugl]]></category>
		<category><![CDATA[parasoft jtest]]></category>
		<category><![CDATA[qualité du code]]></category>
		<category><![CDATA[sonar]]></category>
		<category><![CDATA[Suisse]]></category>
		<category><![CDATA[xdepend]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=20466</guid>
		<description><![CDATA[Il y a deux semaines a eu lieu le JUG de Lausanne sur l&#8217;analyse de la qualité du code. J&#8217;en ai été l&#8217;organisateur et la publication de la vidéo de cet événement m&#8217;a donné l&#8217;occasion de le revivre et m&#8217;a donné envie de le commenter. Voilà donc mes impressions personnelles sur cet événement. Quelques explications [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/jugl-fevrier-qualite-cod/' rel='bookmark' title='ANNONCE : Java User Group exceptionnel le 10 février à Lausanne, Suisse'>ANNONCE : Java User Group exceptionnel le 10 février à Lausanne, Suisse</a></li>
<li><a href='http://blog.octo.com/analyse-code-groovy-grails/' rel='bookmark' title='Analyser la qualité de votre code Groovy / Grails'>Analyser la qualité de votre code Groovy / Grails</a></li>
<li><a href='http://blog.octo.com/cr-du-barcamp-java/' rel='bookmark' title='Retour sur le BarCamp Java du Mardi 30 Septembre'>Retour sur le BarCamp Java du Mardi 30 Septembre</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fretour-jug-lausanne-qualite-code-java%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22Retour%20sur%20le%20JUG%20de%20Lausanne%20sur%20l%27analyse%20de%20la%20qualit%C3%A9%20du%20code%20Java%22%20%7D);"></div>
<p><a style="display: block; float: right; width: 80px; margin-left: 10px;" href="http://www.octo.com/Content/implantations#suisse"><img width="80px" alt="OCTO Suisse" src="http://blog.octo.com/wp-content/uploads/2010/04/SUISSE.png" title="OCTO Suisse"/></a></p>
<p>Il y a deux semaines a eu lieu le JUG de Lausanne sur l&#8217;analyse de la qualité du code. J&#8217;en ai été l&#8217;organisateur et la publication de la <a href="http://parleys.com/d/2297">vidéo de cet événement</a> m&#8217;a donné l&#8217;occasion de le revivre et m&#8217;a donné envie de le commenter. Voilà donc mes <strong>impressions personnelles</strong> sur cet événement. </p>
<p><span id="more-20466"></span></p>
<p>Quelques explications pour commencer sur mes motivations : travaillant chez OCTO Suisse, j&#8217;audite régulièrement des applications sur des technologies variées, principalement JEE et C/C++ (personne n&#8217;est parfait). Comme tout le monde, j&#8217;ai mes habitudes et les outils que je maîtrise, et depuis quelques audits la sensation de faire un peu la même chose et de voir très souvent les mêmes problèmes (les deux sont certainement liés). D&#8217;où cette pulsion : <strong>découvrir de nouvelles manières d&#8217;auditer, de nouveaux outils, de nouveaux problèmes&#8230;</strong></p>
<p>Tout d&#8217;abord je dis <strong>bravo aux éditeurs</strong> qui se sont tous pliés aux règles du jeu et qui ont réalisé ce mini-audit dans un format de présentation assez original et pas si facile. En deux mots, ils devaient présenter le résultat de l&#8217;<b>audit de la même application</b> avec leur outil, en 20 minutes et avec un <b>maximun de démo et un minimum de slides</b> (voir <a href="http://mailings.octo.com/2011-01-25/fr/index-fr.html">ici</a> pour plus de détails). Ils l&#8217;ont tous fait de manière différente et je vais essayer de passer au travers de ce que j&#8217;ai aimé / moins aimé. </p>
<h3 style="margin-top: 14px;">Sur la forme</h3>
<p>J&#8217;avoue que j&#8217;ai été particulièrement impressionné par <strong>Freddy de Sonar</strong>. Pour moi c&#8217;est le seul à avoir réussi à donner une <strong>vision globale de la qualité d&#8217;IceScrum2</strong> et qui a donné <strong>son plan d&#8217;action</strong> pour remédier à ces problèmes de qualité. En fait cela marque une différence d&#8217;approche très nette entre les éditeurs. Alors que Sonar a eu une <strong>approche top-down</strong>, les autres éditeurs ont eu plutôt une approche bottom-up. Henri d&#8217;XDepend a également eu une approche top-down mais c&#8217;était moins formalisé (il n&#8217;y a pas de dashboard dans l&#8217;outil) et il manquait un vrai plan d&#8217;action.</p>
<p>Autre élément de forme, Freddy a fait sa <strong>présentation en duo</strong>, avec lui en speaker et une personne au clavier pour la démo. C&#8217;était un plus indéniable, lui permettant de se concentrer sur le discours.</p>
<h3 style="margin-top: 14px;">Sur le fond</h3>
<p><strong>3 éditeurs sur 5</strong> (Coverity, Parasoft, Sonar) étaient d&#8217;accord, le logiciel <strong>IceScrum2</strong> est d&#8217;une <strong>qualité moyenne</strong> selon leurs benchmarks. Sur ce point, j&#8217;ai été fortement impressionné par l&#8217;avis et par le <strong>benchmark de Coverity</strong> : &#8216;IceScrum2, 4 bugs / 1000 LOC, un logiciel dans la moyenne&#8217;. Jusque là rien d&#8217;extraordinaire me direz-vous. Ce qui m&#8217;a marqué, c&#8217;est la pertinence de ces chiffres. La moyenne provient de lignes de codes analysées via le programme <a href="http://scan.coverity.com">Coverity Scan</a>, soit plus de <strong>14,5 milliards de LOC</strong> ! Et pour ce qui est de la fiabilité de l&#8217;indicateur, le <strong>taux de vrai positif</strong> (bugs avérés) est <strong>au-delà de 70%</strong> (je ne me rappelle plus du chiffre exact). J&#8217;avoue que j&#8217;ai été scotché. J&#8217;ai tellement l&#8217;habitude de devoir trier les faux-positifs ou les violations mineures dans les outils de qualité que, pour moi, il s&#8217;agit d&#8217;un vrai différentiateur pour Coverity de ne se concentrer que sur des bugs avérés.</p>
<p>Pour les deux autres éditeurs, Headway et XDepend, la conclusion était <b>moins élogieuse</b>. Ces outils sont positionnés de manière un peu différente, ce sont plus des outils d&#8217;analyse de l&#8217;<b>architecture</b> que des chercheurs de bugs comme Coverity, Parasoft ou Sonar. Pour Headway, l&#8217;architecture était plutôt mauvaise de leur point de vue : le code est spaghetti, il n&#8217;y a aucune structure au dessus des classes (*). Du côté d&#8217;XDepend, on a plutôt eu le droit à un ensemble de constats mais pas de vraie conclusion sur la qualité globale. Dommage.</p>
<p><strong>Un manque</strong> sur lequel pour moi tous les outils se rejoignent, c&#8217;est que la plupart des <strong>benchmarks</strong> nous ont été donné <strong>de manière orale</strong> par les éditeurs. Extraits choisis :  &#8216;[ndlr pour les duplications] au-delà de 2%, c&#8217;est qu&#8217;on a des problèmes&#8217;, &#8217;4 bugs / 1000 lines of code is average&#8217; etc… Pourquoi ne pas plutôt intégrer ces benchmarks dans les outils et les faire <strong>apparaître de manière visuelle</strong> (via une couleur, par exemple sur les différentes zones du dashboard Sonar) ?</p>
<h3 style="margin-top: 14px;">Sur la technologie</h3>
<p>Côté technologie, <strong>3 produits m&#8217;ont impressionné</strong> : Coverity, (Re)Structure101 et XDepend.</p>
<p>Je ne m&#8217;étendrais pas sur <strong>XDepend</strong>, connaissant bien le produit puisqu&#8217;il est édité par OCTO. En deux mots, ce qui m&#8217;impressionne toujours avec cet outil c&#8217;est sa capacité à vous aider à rentrer dans le code et à l&#8217;<strong>explorer de manière visuelle</strong>. C&#8217;est également le seul outil du panel qui vous permet grâce à un langage SQL-like (le <a href="http://www.ndepend.com/CQL.htm">CQL</a>) de <strong>requêter votre code</strong> au-delà des simples recherches sur des classes que vous pouvez faire dans votre IDE (usages, références, définition).</p>
<p><strong>Structure 101</strong> et <strong>Restructure 101</strong> m&#8217;ont impressionné sur la façon dont ils restituaient et structuraient les dépendances. L&#8217;outil arrive à <strong>hiérarchiser les dépendances</strong> pour les rendre naturellement sous forme de couches. J&#8217;ai bien aimé également les notions de <em>fat versus tangled</em> que met en avant l&#8217;outil et aussi le discours qui va avec l&#8217;outil, notamment le fait que la structuration progressive des langages s&#8217;est arrêtée à la classe (label, fonction puis classe). Il y a une réelle valeur à <strong>structurer son logiciel à des niveaux d&#8217;abstractions supérieurs</strong>, ce qui devrait être fait au travers des packages et des binaires par exemple.</p>
<p>Mon troisième waouh va à <strong>Coverity</strong>. J&#8217;ai tout d&#8217;abord été impressionné par <strong>leur analyseurs</strong>. Par exemple leur analyseur &#8216;Flow Analysis&#8217; est capable de <strong>détecter de manière statique</strong> des cas <strong>habituellement détectés au runtime</strong>, car il propage les valeurs de retours et d&#8217;appels entre fonctions, ce que ne fait pas l&#8217;analyseur &#8216;Flow Analysis&#8217; de JTest par exemple.  Il y avait notamment un cas de mauvaise synchronisation remonté par JTest au runtime alors que Coverity le remontait à l&#8217;analyse statique. Ensuite, un autre type d&#8217;analyse très impressionnante est leur &#8216;intention checks&#8217;, en français les <strong>vérifications de l&#8217;intention du développeur</strong>. Ces analyseurs détectent de <strong>manière statistique des comportements suspicieux</strong>. Par exemple un développeur qui ne vérifie pas la valeur de retour d&#8217;une fonction alors qu&#8217;elle est vérifiée dans 9 cas sur 10 dans le reste du code. Ou un développeur qui utilise l&#8217;opérateur <em>==</em> sur un objet alors que dans 5 cas sur 6 c&#8217;est <em>equals()</em> qui a été utilisé. Le dernier point, c&#8217;est que l&#8217;outil a l&#8217;air vraiment puissant pour <strong>analyser</strong> non pas une version d&#8217;un logiciel mais <strong>toute la vie d&#8217;un logiciel</strong>. L&#8217;analyse présentée par Coverity contenait tout l&#8217;historique et les différentes branches d&#8217;IceScrum2 et la démo mettait en avant quels défauts étaient présents dans quelle branche, les branches où le défaut avait été corrigé etc&#8230; Les autres éditeurs étaient loin de cela et le simple fait d&#8217;avoir été capable d&#8217;importer l&#8217;historique pour une simple démo montre que l&#8217;outillage de Coverity doit être à la hauteur. Enfin, c&#8217;est peut-être un détail mais les commentaires des <strong>erreurs</strong> paraissaient <strong>vraiment clairs</strong>.</p>
<p>Dernier point sur la technologie, je n&#8217;avais jamais vu d&#8217;<strong>analyseurs dynamiques</strong> en action et je dois avouer que cela m&#8217;a pas mal <strong>impressionné</strong>. Parasoft et Coverity ont démontré cette fonctionnalité dans leur sessions respectives et quand on voit les bugs qui en ressortent (à première vue surtout des bugs de concurrence) alors qu&#8217;ils n&#8217;ont stimulé l&#8217;application qu&#8217;avec quelques clicks, je n&#8217;ose pas imaginer la valeur des résultats de ces analyseurs en les faisant tourner sur des tests fonctionnels ou sur des tests de charge.</p>
<h3 style="margin-top: 14px;">Sur l&#8217;utilisabilité</h3>
<p><strong>JTest</strong> est clairement le vainqueur ici car il s&#8217;intègre directement dans l&#8217;<strong>outil principal du développeur, son IDE</strong>. Pour les autres outils, Sonar et Coverity sont simples et ergonomiques. <strong>La difficulté</strong> pour maîtriser ces 3 outils ne vient clairement pas de l&#8217;outil mais de <strong>la compréhension des erreurs</strong> remontées par ces outils. Que veut dire cette erreur ? Est-elle importante ? Devrais-je la désactiver sur mon projet ?</p>
<p>Reste <strong>XDepend et Structure 101</strong>, qui sont deux clients lourds avec des interfaces assez évoluées et riches. Ces outils demandent néanmoins <strong>un vrai apprentissage avant d&#8217;être maitrisés</strong>, c&#8217;est très impressionnant en démo mais une fois seul face à la bête, mieux vaut se diriger vers les webcasts pour la prendre en main. Pour donner un ordre d&#8217;idée, j&#8217;ai encore découvert de nouvelles fonctionnalités sur XDepend au cours de la présentation d&#8217;Henri et il m&#8217;a bien fallu 2-3 audits avant d&#8217;avoir vraiment pris en main la bête.</p>
<h3 style="margin-top: 14px;">Sur le prix</h3>
<p>Je ne sais pas si on peut corréler le prix et la valeur mais <strong>les prix de ces 5 produits sont très différents</strong>, allant de gratuit à quelques milliers d&#8217;euros voire dizaine de milliers d&#8217;euros pour une licence serveur. Coverity est clairement l&#8217;outil le plus cher des cinq et ma perception est que ses analyseurs sont les plus évolués (parmi ses concurrents : Sonar et JTest). Reste la question sous-jacente : est-ce que ça en vaut le prix ?</p>
<h3 style="margin-top: 14px;">Des regrets ?</h3>
<p>Je dois dire que j&#8217;ai eu quelques regrets sur cette soirée. Premièrement <strong>l&#8217;absence</strong> d&#8217;un des leaders, à savoir <strong>CAST Software</strong>, qui n&#8217;a pas souhaité se joindre au comparatif. Ensuite, le fait qu&#8217;on ait principalement vu des problèmes remontés dans du code Java. Je m&#8217;attendais à au moins voir des problèmes sur <strong>la couche Web</strong> (HTML, JavaScript, CSS) et au mieux sur <strong>la base de données</strong> (schéma, requêtes etc…). Cette déception rejoint d&#8217;ailleurs le point précédent car c&#8217;est clairement une force de CAST ou de Metrixware d&#8217;être capable de faire des analyses multi-technos et aux frontières des technologies.</p>
<p>En parlant des absents, un autre regret est d&#8217;avoir dû se <b>limiter</b> dans <b>le nombre d&#8217;éditeurs</b> présents. Le concept de la soirée a en fait particulièrement séduit les éditeurs et deux éditeurs se sont montrés inventifs afin de pouvoir participer à l&#8217;événement : <a href="http://www.kalistick.com">Kalistick</a> et <a href="http://www.squoring.com">SQuoRING</a> ont en effet publié dans la foulée leur analyse d&#8217;IceScrum2 et je vous encourage à les consulter <a href="http://blog.kalistick.com/fr/kalistick/lausanne-jug-analysis-of-icescrum2-project/">ici</a> et <a href="http://www.squoring.com/demo/icescrum2/index.html">là</a>.</p>
<p>Un point qui relève plus du détail est que j&#8217;espérais voir l&#8217;offre de <b>JTest</b> sur la partie <strong>génération de tests unitaires</strong>. C&#8217;est vrai que ça sortait du cadre de l&#8217;audit et je comprends donc qu&#8217;ils n&#8217;aient eu ni le temps ni l&#8217;occasion de l&#8217;aborder. Une prochaine fois, peut-être…</p>
<p>Enfin un dernier regret, qui est plus un souhait en fait, est de ne pas avoir (encore) <b>essayé les outils</b>. Je connais déjà assez bien Sonar et XDepend mais parmi les 3 restants, j&#8217;espère bien essayer sur un prochain audit, dans cet ordre, Coverity, Structure 101 et JTest. Histoire de pouvoir confirmer ou infirmer ce qui est aujourd&#8217;hui <b>une première impression</b>.</p>
<p>J&#8217;espère vous avoir donné envie d&#8217;en savoir plus sur ce thème et sur cette session, vous pouvez retrouvez les <strong>slides et la vidéo sur SlideShare et Parleys</strong>, bon visionnage !</p>
<table>
<tbody>
<tr>
<td style="padding: 10px;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="225" height="185" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=februaryjuglonsoftwarequalityanalysis-110215083315-phpapp01" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="225" height="185" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=februaryjuglonsoftwarequalityanalysis-110215083315-phpapp01" allowscriptaccess="always" allowfullscreen="true"></embed></object></td>
<td style="padding: 10px;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="237" height="221" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="pageId" value="2297" /><param name="src" value="http://www.parleys.com/share/parleysshare2.swf?pageId=2297" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="237" height="221" src="http://www.parleys.com/share/parleysshare2.swf?pageId=2297" pageid="2297" allowfullscreen="true"></embed></object></td>
</tr>
</tbody>
</table>
<p>-<br />
(*) ce constat est à prendre avec des pincettes car Headway a concentré sa présentation sur IceFaces, qui est la librairie JSF qu&#8217;utilise IceScrum2 et pas du code IceScrum2 à proprement parler</p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=20466" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/jugl-fevrier-qualite-cod/' rel='bookmark' title='ANNONCE : Java User Group exceptionnel le 10 février à Lausanne, Suisse'>ANNONCE : Java User Group exceptionnel le 10 février à Lausanne, Suisse</a></li>
<li><a href='http://blog.octo.com/analyse-code-groovy-grails/' rel='bookmark' title='Analyser la qualité de votre code Groovy / Grails'>Analyser la qualité de votre code Groovy / Grails</a></li>
<li><a href='http://blog.octo.com/cr-du-barcamp-java/' rel='bookmark' title='Retour sur le BarCamp Java du Mardi 30 Septembre'>Retour sur le BarCamp Java du Mardi 30 Septembre</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/retour-jug-lausanne-qualite-code-java/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ANNONCE : Java User Group exceptionnel le 10 février à Lausanne, Suisse</title>
		<link>http://blog.octo.com/jugl-fevrier-qualite-cod/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=jugl-fevrier-qualite-cod</link>
		<comments>http://blog.octo.com/jugl-fevrier-qualite-cod/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 16:40:03 +0000</pubDate>
		<dc:creator>Cyril Picat</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[code quality]]></category>
		<category><![CDATA[coverity]]></category>
		<category><![CDATA[headway structure101]]></category>
		<category><![CDATA[jugl]]></category>
		<category><![CDATA[parasoft jtest]]></category>
		<category><![CDATA[sonar]]></category>
		<category><![CDATA[Suisse]]></category>
		<category><![CDATA[xdepend]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=19478</guid>
		<description><![CDATA[Le JUG Lausanne organise une session dédiée à l&#8217;analyse de qualité logicielle sur la plateforme Java, avec la participation des éditeurs phares du domaine. La liste finale des éditeurs est la suivante : Coverity Headway Software (Structure 101) Parasoft (JTest) Sonar XDepend Au cours de cette session, chaque éditeur démontrera en 20 minutes les capacités [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/retour-jug-lausanne-qualite-code-java/' rel='bookmark' title='Retour sur le JUG de Lausanne sur l&#8217;analyse de la qualité du code Java'>Retour sur le JUG de Lausanne sur l&#8217;analyse de la qualité du code Java</a></li>
<li><a href='http://blog.octo.com/paris-java-user-group-maven-a-la-demande/' rel='bookmark' title='Paris Java User Group &#8211; Maven à la demande'>Paris Java User Group &#8211; Maven à la demande</a></li>
<li><a href='http://blog.octo.com/compte-rendu-de-la-soiree-dinauguration-du-french-scrum-user-group/' rel='bookmark' title='Compte-rendu de la soirée d&#8217;inauguration du French Scrum User Group'>Compte-rendu de la soirée d&#8217;inauguration du French Scrum User Group</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fjugl-fevrier-qualite-cod%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22ANNONCE%20%3A%20Java%20User%20Group%20exceptionnel%20le%2010%20f%C3%A9vrier%20%C3%A0%20Lausanne%2C%20Suisse%22%20%7D);"></div>
<p><img src="http://mailings.octo.com/2011-01-05/fr/img/bandeau-bleu.png" alt="Java User Group Lausanne" width="500"  border="0" align="absmiddle"></p>
<p><img src="http://mailings.octo.com/2011-01-25/fr/img/illustration.png" alt="10 fevrier 2011 " width="500"  border="0" usemap=#backlinks></p>
<p><span id="more-19478"></span></p>
<map name="backlinks">
<area shape=rect Coords=29,125,142,160 href="http://www.coverity.com">
<area shape=rect coords=139,128,161,150 href="http://www.headwaysoftware.com">
<area shape=rect coords=189,125,270,160 href="http://www.parasoft.com">
<area shape=rect coords=280,125,360,160 href="http://www.sonarsource.org">
<area shape=rect coords=370,125,465,150 href="http://www.xdepend.com">
</map>
<p>Le JUG Lausanne organise une session dédiée à <strong>l&#8217;analyse de qualité logicielle</strong> sur la plateforme Java, avec la participation des éditeurs phares du domaine. La liste finale des éditeurs est la suivante : </p>
<ul>
<li>Coverity</li>
<li>Headway Software (Structure 101)</li>
<li>Parasoft (JTest)</li>
<li>Sonar</li>
<li>XDepend</li>
</ul>
<p>Au cours de cette session, chaque éditeur démontrera <strong>en 20 minutes</strong> les capacités de son outil à travers <strong>l&#8217;analyse de la m&ecirc;me application</strong> : IceScrum2.<br/></p>
<p>Ces démonstrations seront <strong>suivies</strong> de 20 minutes de &laquo;&nbsp;<strong>questions aux experts</strong>&nbsp;&raquo; où les participants pourront poser des questions ouvertes aux éditeurs, qui y répondront tour à tour.<br/></p>
<p>Cet événement est un <strong>événement gratuit</strong>. Les présentations seront <strong>en anglais</strong> (Coverity, Headway, Parasoft) <strong>ou en français</strong> (Sonar, XDepend), selon les éditeurs.<br/></p>
<p>Il est important de vous <a style="font-weight:bold;" href="http://www.jugevents.org/jugevents/event/32936" title="pré-inscription" target="_blank">inscrire</a> afin de prévoir la capacité de la salle. L&#8217;événemenent sera suivi d&#8217;un <strong>apéritif</strong> qui sera l&#8217;occasion d&#8217;échanger librement avec les éditeurs sur des sujets précis.<br/></p>
<p><a style="float:right;" href="http://maps.google.fr/maps/place?cid=269969098106894563&#038;q=moevenpick+hotel+lausanne&#038;hl=fr&#038;dtab=0&#038;sll=46.366026,6.368974&#038;sspn=0.370537,0.643186&#038;ie=UTF8&#038;ll=46.543986,6.562958&#038;spn=0,0&#038;z=13"><img style="width:65%; border:none; padding-left: 40px;" src="http://mt0.google.com/vt/data=mcrJxvPvd_ggecXMP71gvcMxtKgiqE_3lMJit7cv0El_lwMXibKrImQF3OcEZyfPlPzrRj4jHzXeYgjPX5kQAxpvrCgm8eW3X9G26I4"></a></p>
<p>Attention, le lieu de l&#8217;événement n&#8217;est pas le lieu habituel ! L&#8217;événement aura lieu à l&#8217;<strong>hôtel Moevenpick de Lausanne</strong>, à deux pas de la station du métro <strong>M2 Ouchy</strong> et directement accessible depuis la gare CFF (comptez 10 minutes).</p>
<div style="clear:right; margin-top: 100px;">
L&#8217;equipe du JUG Lausanne,<a href="http://jugl.ch" target="_blank"><img src="http://mailings.octo.com/2011-01-05/fr/img/JUGL.png" alt="jugl" width="76" height="51" border="0"></a>
</div>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=19478" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/retour-jug-lausanne-qualite-code-java/' rel='bookmark' title='Retour sur le JUG de Lausanne sur l&#8217;analyse de la qualité du code Java'>Retour sur le JUG de Lausanne sur l&#8217;analyse de la qualité du code Java</a></li>
<li><a href='http://blog.octo.com/paris-java-user-group-maven-a-la-demande/' rel='bookmark' title='Paris Java User Group &#8211; Maven à la demande'>Paris Java User Group &#8211; Maven à la demande</a></li>
<li><a href='http://blog.octo.com/compte-rendu-de-la-soiree-dinauguration-du-french-scrum-user-group/' rel='bookmark' title='Compte-rendu de la soirée d&#8217;inauguration du French Scrum User Group'>Compte-rendu de la soirée d&#8217;inauguration du French Scrum User Group</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/jugl-fevrier-qualite-cod/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XDepend : 3 questions à Marc Cherfi</title>
		<link>http://blog.octo.com/xdepend-3-questions-a-mat-huston/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=xdepend-3-questions-a-mat-huston</link>
		<comments>http://blog.octo.com/xdepend-3-questions-a-mat-huston/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 14:22:26 +0000</pubDate>
		<dc:creator>Benjamin Magnan</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[amélioration continue]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[qualité du code]]></category>
		<category><![CDATA[Université du SI]]></category>
		<category><![CDATA[xdepend]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=3686</guid>
		<description><![CDATA[Marc Cherfi, membre de l&#8217;équipe XDepend animera le stand dédié au logiciel à l’Université du SI les 1er et 2 juillet prochains. Aujourd&#8217;hui il nous parle des standards de qualité du logiciel, du positionnement de XDepend sur le marché et de son intervention à l&#8217;USI. Comment peut-on faire émerger des standards de qualité sur un [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/domain-specific-languages-3-questions-a-guillaume-laforge/' rel='bookmark' title='Domain-Specific Languages: 3 questions à Guillaume Laforge'>Domain-Specific Languages: 3 questions à Guillaume Laforge</a></li>
<li><a href='http://blog.octo.com/architectures-web/' rel='bookmark' title='Architectures Web : 3 questions à Jean-François Caenen'>Architectures Web : 3 questions à Jean-François Caenen</a></li>
<li><a href='http://blog.octo.com/mozilla-firefox-3-questions-a-tristan-nitot/' rel='bookmark' title='Mozilla Firefox : 3 questions à Tristan Nitot'>Mozilla Firefox : 3 questions à Tristan Nitot</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fxdepend-3-questions-a-mat-huston%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22XDepend%20%3A%203%20questions%20%C3%A0%20Marc%20Cherfi%22%20%7D);"></div>
<p>Marc Cherfi, membre de l&#8217;équipe XDepend animera le stand dédié au logiciel à <a href="http://www.universite-du-si.com/">l’Université du SI</a> les 1er et 2 juillet prochains. Aujourd&#8217;hui il nous parle des standards de qualité du logiciel, du positionnement de XDepend sur le marché et de son intervention à l&#8217;USI.<br />
<span id="more-3686"></span></p>
<h2>Comment peut-on faire émerger des standards de qualité sur un projet au travers de l&#8217;analyse de code ?</h2>
<p>Deux approches en général s’opposent dans ce genre de démarche :</p>
<ul>
<li>Une approche traditionnelle, <strong>dite Top Down </strong>qui consiste à prétendre l’<strong>universalité des règles de qualité</strong> et du bon design du code qui s&#8217;appliqueraient à <strong>tous les projets dans tous les contextes</strong>. Cette approche nécessite un investissement initial, pour mettre en place les outils, qui au fil du temps fournissent des informations qui s’avèrent inexploitables ou inadaptées. Vérifiez dans votre projet : Combien d’erreurs ou de warnings dans vos rapports Checkstyle ou PMD sur votre projet ? Pourquoi personne ne s’alarme plus ?</li>
<li>Une approche plus inspirée des <strong>pratiques agiles et de l’amélioration continue</strong> des processus, <strong>dite Bottom Up</strong>. Dans cette approche les standards sont construits de manière itérative et incrémentale par l’équipe de développement tout au long du projet. Ce sont donc les standards que l’équipe se choisit et qui répondent à des problématiques concrètes rencontrées sur le projet. N’oubliez pas, <strong>on ne peut améliorer que ce que l&#8217;on mesure</strong>.</li>
</ul>
<p>Je considère que cette <strong>seconde approche</strong> est la plus efficace pour rendre pérennes les actions d&#8217;amélioration pour la qualité logicielle.</p>
<p>Dans une telle démarche, nous identifions quatre grandes activités :</p>
<ol>
<li><strong>Extraire :</strong> Faire émerger l’information à partir du code source ou binaire</li>
<li><strong>Visualiser :</strong> Naviguer dans l’information</li>
<li><strong>Investiguer :</strong> Rechercher des informations précises, recouper et lier des domaines différents (code, test, historique) en fonction des besoins du projet</li>
<li><strong>Contrôler :</strong> Cristalliser le résultat des investigations au travers de règles, de standards à contrôler selon une certaine fréquence</li>
</ol>
<p>Un outil qui se veut le support d&#8217;une telle démarche doit adresser de manière simple et efficace chacune de ces activités.</p>
<h2>Comment XDepend se positionne-t-il sur le marché ?</h2>
<p>Dans l’écosystème Java, il existe beaucoup d’outils de qualimétrie. Le sujet a connu son heure de gloire il y a de cela quelques années et semble aujourd&#8217;hui éculé. Après la vague des <strong>extracteurs spécialisés</strong> (activité Extraire) comme PMD, Checkstyle, FindBug, l’activité se concentre aujourd’hui sur l’<strong>agrégation des indicateurs </strong>avec des outils comme Maven ou Sonar, ceci à des fins de contrôle (activité  Contrôler).</p>
<p>Cependant, peu d’outils permettent aujourd’hui d’adresser les activités <strong>Visualiser </strong>et <strong>Investiguer</strong>. Pourtant elles sont au cœur de la production de standards adaptés et pérennes dans le temps. Au travers notamment du CQL (Code Query Language) et de son IHM innovante (Treemap, matrice de dépendances, &#8230;), <strong>XDepend couvre parfaitement ces deux étapes clés</strong>.</p>
<p>XDepend est encore un produit nouveau dans l’écosystème Java. C’est un produit qui progresse, avec une <strong>nouvelle version tous les mois</strong>. Il est actuellement disponible en RC2, et vous verrez que la version <strong>1.0 prévue pour Septembre</strong> vous apportera encore plus de bonnes surprises.</p>
<h2>Pourquoi animer un stand à l’USI ?</h2>
<p>Tout simplement parce que XDepend est à sa manière au cœur des sujets phares de l’USI 2009, aussi bien sur l’aspect « informatique conviviale » que amélioration continue des processus IT. Dans la philosophie de l’USI le stand XDepend s’adresse autant aux Geeks qu’aux Boss.</p>
<p><strong>Vous les Geeks</strong> qui pensez avoir un code qui déchire, apportez-le (*) et venez l’observer aux rayons X, vous découvrirez peut-être des choses surprenantes …</p>
<p><strong>Vous les Boss</strong> pour qui le code est un lointain souvenir, apportez-le (*) et venez découvrir de manière conviviale les entrailles de vos applications.</p>
<p><strong>Et pour tous</strong> ceux qui veulent découvrir XDepend : la puissance de son interface graphique, la précision de son langage d’interrogation CQL, ses facilités d’intégration au sein de vos projets, … venez maltraiter les principaux frameworks du marché (Spring, Hibernate, JDK).</p>
<p>Ce sera aussi l’occasion de nous rencontrer et d’<strong>imaginer ensemble le futur d’XDepend </strong>. Et enfin pour les incollables de la qualité logicielle et de la plate-forme Java participez à notre jeu concours pour gagner une licence XDepend Pro.</p>
<p><strong>Pour en savoir plus :</strong><br />
Site web XDepend : <a href="http://www.xdepend.com">http://www.xdepend.com</a><br />
Blog : <a href="http://blog.xdepend.com">http://blog.xdepend.com</a></p>
<p><em>(*) Munissez-vous d’une clé USB contenant vos binaires (JAR, WAR ou EAR décompressés)</em></p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=3686" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/domain-specific-languages-3-questions-a-guillaume-laforge/' rel='bookmark' title='Domain-Specific Languages: 3 questions à Guillaume Laforge'>Domain-Specific Languages: 3 questions à Guillaume Laforge</a></li>
<li><a href='http://blog.octo.com/architectures-web/' rel='bookmark' title='Architectures Web : 3 questions à Jean-François Caenen'>Architectures Web : 3 questions à Jean-François Caenen</a></li>
<li><a href='http://blog.octo.com/mozilla-firefox-3-questions-a-tristan-nitot/' rel='bookmark' title='Mozilla Firefox : 3 questions à Tristan Nitot'>Mozilla Firefox : 3 questions à Tristan Nitot</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/xdepend-3-questions-a-mat-huston/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mesurer la qualité d&#8217;un projet pour le désendetter</title>
		<link>http://blog.octo.com/mesurer-la-qualite-dun-projet-pour-le-desendetter/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mesurer-la-qualite-dun-projet-pour-le-desendetter</link>
		<comments>http://blog.octo.com/mesurer-la-qualite-dun-projet-pour-le-desendetter/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 08:39:20 +0000</pubDate>
		<dc:creator>Jessy Bernal</dc:creator>
				<category><![CDATA[Architecture et technologies]]></category>
		<category><![CDATA[dette technique]]></category>
		<category><![CDATA[outil d'analyse statique]]></category>
		<category><![CDATA[qualité]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[xdepend]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=2291</guid>
		<description><![CDATA[En ingénierie logicielle, tant qu&#8217;un projet se développe, la dette technique s&#8217;accumule inexorablement. Les sessions de refactoring sont là pour contrebalancer cette tendance et leur mise en place régulière garantit la maintenabilité du projet. Mais ce qui est délicat avec la dette technique, c&#8217;est qu&#8217;elle n&#8217;est pas vraiment mesurable, et comme l&#8217;iceberg, on n&#8217;en voit [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/le-projet-da-vinci-machine-ou-le-support-des-langages-dynamiques-pour-la-jvm/' rel='bookmark' title='Le projet Da Vinci Machine, ou le support des langages dynamiques pour la JVM'>Le projet Da Vinci Machine, ou le support des langages dynamiques pour la JVM</a></li>
<li><a href='http://blog.octo.com/comment-mesurer-la-productivite/' rel='bookmark' title='Comment mesurer la productivité ?'>Comment mesurer la productivité ?</a></li>
<li><a href='http://blog.octo.com/retour-jug-lausanne-qualite-code-java/' rel='bookmark' title='Retour sur le JUG de Lausanne sur l&#8217;analyse de la qualité du code Java'>Retour sur le JUG de Lausanne sur l&#8217;analyse de la qualité du code Java</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fblog.octo.com%252Fmesurer-la-qualite-dun-projet-pour-le-desendetter%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22Mesurer%20la%20qualit%C3%A9%20d%27un%20projet%20pour%20le%20d%C3%A9sendetter%22%20%7D);"></div>
<p>En ingénierie logicielle, tant qu&#8217;un projet se développe, la <a id="zrrl" title="dette technique" href="http://en.wikipedia.org/wiki/Technical_debt">dette technique</a> s&#8217;accumule inexorablement. Les sessions de refactoring sont là pour contrebalancer cette tendance et leur mise en place régulière garantit la maintenabilité du projet. Mais ce qui est délicat avec la dette technique, c&#8217;est qu&#8217;elle n&#8217;est pas vraiment mesurable, et comme l&#8217;iceberg, on n&#8217;en voit que la partie émergée. Résultat, le refactoring est souvent sous-estimé et mal maitrisé. Si on ajoute à cela une mauvaise couverture de test, refondre le code applicatif fait peur, fait mal. Plus personne n&#8217;a l&#8217;audace de le tenter, et à long terme, c&#8217;est la banqueroute assurée du projet.</p>
<p>L&#8217;objectif de cet article est de proposer une approche efficace pour savoir comment attaquer efficacement un grosse refonte d&#8217;un code mal couvert par les tests. Cette tâche technique est divisée en plusieurs problématiques : comment déterminer les zones de risque du projet, trouver où poser les tests pour sécuriser l&#8217;étape de refactoring et trouver les zones à refactorer.</p>
<p>Pour rendre l&#8217;article concret, nous allons utiliser à titre d&#8217;exemple XDepend qui est un <a id="wk1c" title="bons outils d'analyse de code" href="http://www.xdepend.com/">outil d&#8217;analyse de code statique java</a>. En effet, on parle d&#8217;amélioration de la qualité, donc pour juger de l&#8217;efficacité de nos actions, il faut pouvoir les mesurer.<span id="more-2291"></span></p>
<h3>Déterminer et sécuriser les zones de risques du projet</h3>
<p>Les méthodes les plus risquées sont premièrement les méthodes les plus utilisées: en effet, un bug introduit dans le refactoring d&#8217;une méthode utilisée dans la plupart des fonctionnalités de votre application et les impacts sont tout de suite démesurés.</p>
<p>Pour mettre en évidence ces méthodes , nous disposons de quelques métriques simples comme le couplage afférent (Ca) et le couplage efférent (Ce).<br />
Le couplage afférent pour un élément de code est le nombre d&#8217;éléments qui l&#8217;utilisent. Cette métrique témoigne de la &laquo;&nbsp;responsabilité&nbsp;&raquo; de cet élément dans l&#8217;ensemble du code.<br />
A l&#8217;opposé, le couplage efférent est le nombre d&#8217;éléments différents qu&#8217;utilise un élément, témoignant de son &laquo;&nbsp;indépendance&nbsp;&raquo; vis à vis du reste du code.</p>
<p>L&#8217;outil d&#8217;analyse de code statique que nous utilisons, XDepend, permet de sortir la liste des méthodes les plus utilisées en une simple requête :</p>
<blockquote>
<pre>SELECT TOP 10 METHODS ORDER BY MethodCa DESC</pre>
</blockquote>
<p>Les méthodes qui ressortent de ces métriques sont donc logiquement les premières sur lesquelles il faudra porter son attention.</p>
<p>XDepend permet d&#8217;aller encore plus loin dans cette recherche, en donnant un score à chaque méthode (MethodRank) et chaque type (TypeRank) selon son importance. Ce score est calculé à la manière du Pagerank de Google : tout comme la pertinence d&#8217;une page web, l&#8217;importance d&#8217;un élément de code est déterminée par le nombre d&#8217;éléments de code qui l&#8217;utilisent et de leur importance.</p>
<blockquote>
<pre>SELECT TOP 10 METHODS ORDER BY TypeRank DESC</pre>
</blockquote>
<h3>Sécuriser l&#8217;existant</h3>
<p>On peut ensuite filtrer la liste de méthodes ordonnée par importance avec les informations relatives à la couverture de tests existante (si celle-ci existe). Ainsi, on met en exergue les méthodes les plus importantes qui ne sont pas suffisamment testées :</p>
<blockquote>
<pre>SELECT TOP 10 METHODS WHERE PercentageCoverage &lt; 98 ORDER BY MethodRank DESC</pre>
</blockquote>
<p>Poser des tests sur ces méthodes nous assurera que le refactoring des zones associées ne provoquera aucune régression.</p>
<h3>Repérer les zones à refactorer</h3>
<p>Une fois le coeur du projet renforcé par un harnais de tests, on peut sereinement envisager de casser morceau par morceau pour mieux reconstruire. Mais comment déterminer la pertinence des méthodes à refactorer? Comment mesurer le gain qu&#8217;apportera ce refactoring pour la suite du projet ? Voici quelques pistes classiques à envisager en premier lieu :</p>
<h4>Les méthodes mal codées</h4>
<p>La littérature logicielle regorge de préconisation permettant de s&#8217;assurer qu&#8217;une méthode reste maintenable en traçant des limites pertinentes : complexité cyclomatique, nombre de lignes de code, de paramètres, de variables&#8230;</p>
<p>Toutes ces limites peuvent être visualisées en une requête :</p>
<blockquote>
<pre>WARN IF Count &gt; 0 IN SELECT TOP 10 METHODS WHERE (
NbLinesOfCode &gt; 30           OR
NbBCInstructions &gt; 200       OR
CyclomaticComplexity &gt; 20    OR
BCCyclomaticComplexity &gt; 50  OR
BCNestingDepth &gt; 4           OR
NbParameters &gt; 5             OR
NbVariables &gt; 8              OR
NbOverloads &gt; 6
) ORDER BY MethodRank DESC</pre>
</blockquote>
<h4>Le manque de cohésion des méthodes (Lack of Cohesion in Methods, LCOM)</h4>
<p>La notion de cohésion d&#8217;une classe est aussi importante : les responsabilités de la classe forment un tout cohérent. Pour déterminer la cohésion, on se base sur l&#8217;utilisation des variables d’instance par les méthodes de la classe.<br />
Plus le manque de cohésion (LCOM) est élevé, plus la classe est considérée complexe et donc moins facile à maintenir. Sur des classes comportant de nombreuses variables d&#8217;instance et de nombreuses méthodes, il est alors judicieux de surveiller ces classes et de les refactorer pour faire descendre le LCOM.</p>
<blockquote>
<pre>WARN IF Count &gt; 0 IN SELECT TOP 10 TYPES WHERE
LCOM &gt; 0.8 AND NbFields &gt; 10 AND NbMethods &gt;10
ORDER BY LCOM DESC</pre>
</blockquote>
<h4>Les dépendances cycliques entre packages</h4>
<p>Les dépendances cycliques entre packages amènent à l&#8217;antipattern du plat de spaghetti qui ne permet pas de déterminer le qui, le quoi et le comment d’une modification de données. Cette faible indépendance fonctionnelle porte préjudice au critère de réutilisation du composant.<br />
Si A dépend de B qui dépend de C qui dépend de A, alors A ne peut plus être développé et testé indépendamment de B ou C. Ces packages forment une unité indivisibe, une sorte de super-composant qui a un coup bien supérieur en maintenabilité que la somme des 3 packages. Il faut donc repérer les dépendances cycliques et les casser.</p>
<blockquote>
<pre>WARN IF Count &gt; 0 IN SELECT TOP 10 JARS WHERE ContainsPackageDependencyCycle</pre>
</blockquote>
<h4>Le code mort</h4>
<p>Le code mort peut devenir une plaie dans la maintenabilité d&#8217;un projet<br />
Un Ca (couplage afférent) à 0 signifie que dans le contexte de l&#8217;application, la méthode ou le type concerné n&#8217;est pas directement utilisé.<br />
On peut ainsi mettre en évidence rapidement des portions de codes qui ne semblent pas être utilisées en associant quelques règles CQL simples définissant une méthode non-utilisée :</p>
<blockquote>
<pre>WARN IF Count &gt; 0 IN SELECT TOP 10 METHODS WHERE
MethodCa == 0 AND !IsPublic</pre>
</blockquote>
<p><strong>Attention</strong> : Les méthodes publiques peuvent faire partie d&#8217;une API exposée et donc logiquement ne pas être utilisées dans le contexte de l&#8217;application, il faut donc les écarter de cette recherche.</p>
<h3>Mesurer l&#8217;impact d&#8217;une session de refactoring</h3>
<p>L&#8217;idéal après un refactoring est de prendre le temps d&#8217;analyser ce que le refactoring a apporté.<br />
Première piste, regarder toutes les méthodes qui ont été modifiées suite au refactoring.</p>
<blockquote>
<pre>SELECT METHODS WHERE (CodeWasChanged OR WasAdded)</pre>
</blockquote>
<p>Le résultat de cette requête est parfois surprenant lorsqu&#8217;on compare ce qui était prévu et tout ce qui a été modifié au final.<br />
On peut aussi tracer le nombre de méthodes et de lignes de code qui ont été modifiées et opposer ces informations à la durée du refactoring. Garder ces traces permet de s&#8217;améliorer en  estimant plus justement les refactoring suivants.</p>
<p>On doit aussi s&#8217;assurer que le code qui a été modifié est maintenant couvert au maximum. En effet, le but du refactoring est de &laquo;&nbsp;perdre du temps&nbsp;&raquo; pour remonter le niveau de qualité exigé pour maintenir le projet et être à l&#8217;avenir entièrement serein sur les points refactorés.<br />
La requête suivante permet cette détection :</p>
<blockquote>
<pre>WARN IF Count &gt; 0 IN SELECT METHODS WHERE
PercentageCoverage &lt; 98 AND
(CodeWasChanged OR WasAdded)
ORDER BY PercentageCoverage DESC , NbLinesOfCodeCovered , NbLinesOfCodeNotCovered</pre>
</blockquote>
<p>(l&#8217;idéal est d&#8217;avoir un code couvert à 100%, mais en pratique il n&#8217;est pas toujours possible d&#8217;atteindre les 100% de couverture, 98% est notre valeur empirique).<br />
J&#8217;espère que ces quelques préconisations vous aideront dans vos refactoring afin que cette tâche apporte encore plus de valeur à votre projet. Et vous, quels sont les indicateurs que vous surveillez durant vos refactoring et quelles autres approches avez-vous pour détecter au mieux les douleurs dans votre code ?</p>
<h3>Aparté sur l&#8217;outil</h3>
<p>Les requêtes utilisées dans cet article sont du CQL (Code Query Language) et peuvent être exploitées par les outils d&#8217;analyse de code <a title="outil d'analyse de code statique .Net" href="http://www.ndepend.com" target="_blank">NDepend</a> (pour .Net) et <a title="outil d'analyse de code statique java" href="http://www.xdepend.com" target="_blank">XDepend</a> pour Java que nous utilisons pour auditer les projets de nos clients. Il suffit d&#8217;avoir les binaires du projet (.dll ou .jar) pour lancer une analyse et effectuer ces requêtes sur vos projets. La plupart des requêtes sont prédéfinies pour vous aider dans vos analyses mais la puissance du langage vous permet d&#8217;affiner les requêtes facilement et d&#8217;ajouter des conditions supplémentaires sur plus de 80 métriques de design logiciel. La force de cet outil réside dans sa GUI aussi riche que dynamique.</p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=2291" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/le-projet-da-vinci-machine-ou-le-support-des-langages-dynamiques-pour-la-jvm/' rel='bookmark' title='Le projet Da Vinci Machine, ou le support des langages dynamiques pour la JVM'>Le projet Da Vinci Machine, ou le support des langages dynamiques pour la JVM</a></li>
<li><a href='http://blog.octo.com/comment-mesurer-la-productivite/' rel='bookmark' title='Comment mesurer la productivité ?'>Comment mesurer la productivité ?</a></li>
<li><a href='http://blog.octo.com/retour-jug-lausanne-qualite-code-java/' rel='bookmark' title='Retour sur le JUG de Lausanne sur l&#8217;analyse de la qualité du code Java'>Retour sur le JUG de Lausanne sur l&#8217;analyse de la qualité du code Java</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/mesurer-la-qualite-dun-projet-pour-le-desendetter/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

