<?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; refactoring</title>
	<atom:link href="http://blog.octo.com/tag/refactoring/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>XPDays 2009 : Compte rendu du Lundi 25 mai</title>
		<link>http://blog.octo.com/xpdays-2009-compte-rendu-du-lundi-25-mai/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=xpdays-2009-compte-rendu-du-lundi-25-mai</link>
		<comments>http://blog.octo.com/xpdays-2009-compte-rendu-du-lundi-25-mai/#comments</comments>
		<pubDate>Thu, 28 May 2009 15:32:45 +0000</pubDate>
		<dc:creator>Mathieu Gandin</dc:creator>
				<category><![CDATA[Actualité]]></category>
		<category><![CDATA[Brèves de consultants]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[Lean]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[xp]]></category>
		<category><![CDATA[xpdays 2009]]></category>

		<guid isPermaLink="false">http://blog.octo.com/?p=3467</guid>
		<description><![CDATA[Parce que XPDays est un rendez-vous phare de l’agilité en France, on se devait d’être présent pour cette quatrième édition. Le temps d’arriver tranquillement dans le Chalet de la Porte Jaune sous un joli soleil matinal, on se demande par quoi commencer dans le copieux programme de cette première journée. Notre premier choix se porte [...]
Suggestion d'articles :<ol>
<li><a href='http://blog.octo.com/compte-rendu-citcon-paris-2009/' rel='bookmark' title='Compte rendu CITCON Paris 2009'>Compte rendu CITCON Paris 2009</a></li>
<li><a href='http://blog.octo.com/1er-compte-rendu-du-seminaire-lean-dans-les-services/' rel='bookmark' title='1er Compte rendu du séminaire « Lean dans les services »'>1er Compte rendu du séminaire « Lean dans les services »</a></li>
<li><a href='http://blog.octo.com/2eme-compte-rendu-du-seminaire-lean-dans-les-services/' rel='bookmark' title='2ème compte rendu du séminaire « Lean dans les Services »'>2ème compte rendu du séminaire « Lean dans les Services »</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%252Fxpdays-2009-compte-rendu-du-lundi-25-mai%252F%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22XPDays%202009%20%3A%20Compte%20rendu%20du%20Lundi%2025%20mai%22%20%7D);"></div>
<p><strong>Parce que XPDays est un rendez-vous phare de l’agilité en France, on se devait d’être présent pour cette quatrième édition. Le temps d’arriver tranquillement dans le Chalet de la Porte Jaune sous un joli soleil matinal, on se demande par quoi commencer dans le copieux programme de cette première journée.</strong></p>
<p><span id="more-3467"></span></p>
<p>Notre premier choix se porte sur l’atelier <a href="http://xpday.fr/programme#BlancheNeigeEtLesSeptNainsLeMiroirMagiqueVousAideAMieuxTravaillerEnEquipe" class="broken_link">« Blanche Neige et les Sept Nains : Le miroir magique vous aide à mieux travailler en équipe »</a> présenté par <a href="http://www.selfishprogramming.com/">Portia Tung</a> et <a href="http://blog.nayima.be/">Pascal Van Cauwenberghe</a>. « Miroir miroir, dis moi pourquoi ? », c’est avec cette question que démarre l’atelier, avant que toute l’assistance ne se lance dans un <strong>« TurboNetworking » (une sorte de speed-dating orienté réseau professionnel) où chaque participant dispose de 3 minutes pour découvrir 3 choses intéressantes chez 3 personnes</strong>. Exercice, où j’ai eu l’occasion de croiser un SCRUMMaster, un praticien de Crystal et un jeune développeur agile qui a travaillé sur divers Plugin Eclipse.</p>
<p>Après cette introduction, Portia et Pascal nous racontent l’histoire de <strong>« Blanche Neige et les sept nains », version Tarantino, toute ressemblance avec des projets informatiques étant volontaire …</strong> En effet on apprend que Blanche Neige est une bonne équipière, travaille dur et est un petit peu naïve ; le chasseur est discipliné, pragmatique, mais mercenaire ; Prof est savant, axé sur les solutions, mais arrogant ; ou encore Timide est attentif aux besoins des autres, calme, mais n’aime pas les conflits.  Chaque personnage étant donc un type de personne que vous avez sûrement déjà croisé sur un projet.</p>
<p><strong>La suite du jeu consiste à se regarder dans le miroir :</strong> on tire au hasard un des personnages (pour ma part j’ai eu Timide, le Chasseur et Blanche Neige), on choisit quelqu’un qui ressemble à ces personnages (non je ne vous dirais pas qui j’ai choisi) et on donne les raisons de ces ressemblances. Ensuite on recherche ce que ces raisons nous apprennent sur nous-mêmes et quelles actions nous pouvons  tirer de ces leçons apprises.</p>
<p>On continue en groupe, <strong>le but est de maintenant trouver un projet et de constituer une équipe avec ses personnages</strong>. Quels vont être leur rôle, leur place dans ce projet ? Comment va-t-on pouvoir tirer parti des richesses de ses gens malgré certains traits de caractères qui les opposent ? Blanche Neige, Grincheux et Timide vont-ils constituer une équipe qui déchire grave ? On termine la session en partageant avec le reste du groupe nos projets, et nos actions individuelles, le temps de récupérer les deux dernières leçons données par Portia et Pascal :</p>
<ul>
<li>Dans le monde des adultes il y a <strong>MBTI</strong> (Myer-Briggs Type Indicator) et <strong>Belbin</strong>. Mais n’oublions pas que cela reste des modèles, la réalité et les dynamiques d’équipes étant plus complexes.</li>
<li><strong>On ne change pas les autres, on ne peut changer que soi-même</strong></li>
</ul>
<p>Après ce superbe workshop, je pars coder pendant 30 minutes dans l’atelier de développement <a href="http://xpday.fr/programme#XtremMilesSuite" class="broken_link">Xtrem Miles</a>. Objectif ambitieux puisque nous nous retrouvons avec du code que nous n’avons pas écrit, et qui n’est pas entièrement testé. Cette contrainte nous oblige a effectuer une opération d’archéologie par le biais de tests dont le but est de nous permettre de comprendre comment le code existant fonctionne.</p>
<p>Ensuite, je me rends à la session « <a href="http://xpday.fr/programme#XP20AmeliorerLAmeliorationContinueAvecLean" class="broken_link">XP 2.0 : Améliorer l’amélioration continue avec Lean</a> », présentée par <a href="http://www.regismedina.com/">Régis Médina</a> et Antoine Contal. Sujet très à la mode, le <strong>Lean Management</strong> est ici présenté avec les raisons et motivations des orateurs, à savoir pour <strong>aller plus loin que XP en terme d’amélioration continue</strong>. Cette session est l’occasion d’avoir une présentation rigoureuse du système de management de Toyota, basé sur la satisfaction des clients, la réduction des coûts en éliminant les gaspillages et le développement des collaborateurs.</p>
<p>On y apprend comment le projet WebTV d’Orange, développé avec SCRUM, travaille sur son amélioration continue en y installant des pratiques issues du Lean Management, notamment le <strong>Kaizen</strong> (mesure de ses performances, rendre les problèmes visibles, résoudre les problèmes et en tirer les bonnes leçons). Pour mesurer ces performances, il faut identifier son client et identifier ce qu’il veut, quand et où, et sans problème. Une fois son client identifié, Antoine nous explique comment il a corrigé certains problèmes en installant des contre-mesures, en se basant sur le <strong>cycle d’amélioration de Deming, le PDCA</strong>. Parmi les leçons tirées on note l’émergence de standards de travail, projetés sur les murs en format A3. Ayant travaillé sur le projet d’Antoine,  je m’aperçois alors que mon nom apparaît sur son A3 décrivant le processus du Stand Up Meeting de l’équipe WebTV. Me voilà dans le processus … Cette session nous apporte de nombreuses pistes pour appliquer cette démarche auprès des équipes de développement, mais on aimerait voir aussi d&#8217;autres chemins pour installer le Lean sur toutes la chaine de valeur du SI, incluant aussi la production par exemple. C&#8217;est d&#8217;ailleurs l&#8217;occasion de faire un peu d&#8217;autopromotion sauvage, <a href="http://usi2009.universite-du-si.com/index.php?module=Pagesetter&amp;tid=1&amp;filter=tag:eq:19" class="broken_link">où le Lean à la dimension du SI (chaîne de valeur partant de l&#8217;idée d&#8217;un MOA jusqu&#8217;à la production) sera aussi abordée à l&#8217;Université du SI 2009</a>, avec, on l&#8217;espère, autant de talent.</p>
<p>Après la pause déjeuner, on part voir « <a href="http://xpday.fr/programme#LaTheorieDesCentresuneNouvelleFaconDeVoirLaConceptionIncrementaleDesLogiciels" class="broken_link">La Théorie des Centres, une nouvelle façon de voir la conception incrémentale des logiciels</a> » présentée par Régis Medina. On ne vous présentera pas la <strong>Théorie des Centres de Christopher Alexander</strong> (il nous faudrait plus d’un article de blog). Le célèbre architecte et auteur de « Notes on the Synthesis of Form » nous apprend que <strong>concevoir consiste à retirer des erreurs sans en créer d’autres</strong> ; et de <strong>« A Pattern Language » et « The Oregon Experience » où de nombreuses pratiques ont été reprises par Kent Beck pour XP</strong>. Après avoir pas mal plané avec une certaine euphorie lysergique, Régis Medina nous fait redescendre en nous montrant une démonstration de refactoring de code (comment faire émerger un FormBuilder dans un formulaire SWING) en utilisant la Théorie des Centres. Exercice particulièrement intéressant, prônant pour une certaine beauté du code, dont on regrette juste qu’il ne soit pas appliqué aussi sur la conception d’IHM.</p>
<p>La journée se termine avec quelques conversations autour d’un verre, avant de repartir content de cette journée, et on espère que les prochaines éditions de XPDays seront toutes aussi réussies.</p>

 <img src="http://blog.octo.com/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=3467" width="1" height="1" style="display: none;" /><p>Suggestion d'articles :</p><ol>
<li><a href='http://blog.octo.com/compte-rendu-citcon-paris-2009/' rel='bookmark' title='Compte rendu CITCON Paris 2009'>Compte rendu CITCON Paris 2009</a></li>
<li><a href='http://blog.octo.com/1er-compte-rendu-du-seminaire-lean-dans-les-services/' rel='bookmark' title='1er Compte rendu du séminaire « Lean dans les services »'>1er Compte rendu du séminaire « Lean dans les services »</a></li>
<li><a href='http://blog.octo.com/2eme-compte-rendu-du-seminaire-lean-dans-les-services/' rel='bookmark' title='2ème compte rendu du séminaire « Lean dans les Services »'>2ème compte rendu du séminaire « Lean dans les Services »</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.octo.com/xpdays-2009-compte-rendu-du-lundi-25-mai/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>

