<?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/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Coma Informatique &#187; Développement logiciel</title>
	<atom:link href="http://www.kartmann.com/blog/category/developpement-logiciel/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kartmann.com/blog</link>
	<description>Tout ce qu'on peut faire avec un ordinateur</description>
	<lastBuildDate>Sat, 18 Jul 2009 22:23:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<!-- podcast_generator="podPress/8.8" -->
		<copyright>&#xA9; </copyright>
		<managingEditor>alexis@kartmann.com ()</managingEditor>
		<webMaster>alexis@kartmann.com()</webMaster>
		<category></category>
		<ttl>1440</ttl>
		<itunes:keywords></itunes:keywords>
		<itunes:subtitle></itunes:subtitle>
		<itunes:summary>Tout ce qu'on peut faire avec un ordinateur</itunes:summary>
		<itunes:author></itunes:author>
		<itunes:category text="Society &amp; Culture"/>
		<itunes:owner>
			<itunes:name></itunes:name>
			<itunes:email>alexis@kartmann.com</itunes:email>
		</itunes:owner>
		<itunes:block>No</itunes:block>
		<itunes:explicit>no</itunes:explicit>
		<itunes:image href="http://localhost/blog/wp-content/plugins/podpress/images/powered_by_podpress.jpg" />
		<image>
			<url>http://localhost/blog/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
			<title>Coma Informatique</title>
			<link>http://www.kartmann.com/blog</link>
			<width>144</width>
			<height>144</height>
		</image>
		<item>
		<title>Outil de geocodage de fichiers KML</title>
		<link>http://www.kartmann.com/blog/2008/07/30/480-outil-de-geocodage-de-fichiers-kml/</link>
		<comments>http://www.kartmann.com/blog/2008/07/30/480-outil-de-geocodage-de-fichiers-kml/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 16:54:00 +0000</pubDate>
		<dc:creator>alexkartmann</dc:creator>
				<category><![CDATA[Cartographie]]></category>
		<category><![CDATA[Développement logiciel]]></category>
		<category><![CDATA[geocode]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[kml]]></category>

		<guid isPermaLink="false">http://www.kartmann.com/blog/2008/07/30/480-outil-de-geocodage-de-fichiers-kml/</guid>
		<description><![CDATA[Pour ceux qui l&#8217;ignorent le format KML, dialecte XML utilisé comme format d&#8217;echange dans Google earth et Google Maps, est devenu un standard après sa soumission par Google à l&#8217;OGC.
Il est donc devenu le format idéal pour manipuler des bases d&#8217;addresses ou de tout object cartographique. Avec la possibilité d&#8217;ajouter des données personnalisés grâce au [...]]]></description>
			<content:encoded><![CDATA[<p>Pour ceux qui l&#8217;ignorent le format <strong>KML</strong>, dialecte <strong>XML </strong>utilisé comme format d&#8217;echange dans Google earth et Google Maps, est devenu un standard après <a href="http://www.opengeospatial.org/standards/kml/">sa soumission par Google à l&#8217;OGC</a>.</p>
<p>Il est donc devenu le format idéal pour manipuler des bases d&#8217;addresses ou de tout object cartographique. Avec la possibilité d&#8217;ajouter des données personnalisés grâce au tag ExtendedData on peut l&#8217;utiliser tout au long des étages d&#8217;une chaîne de traitement. </p>
<p>J&#8217;ai commencé à utiliser ce format dans le cadre d&#8217;un projet, et j&#8217;ai du créer quelques outils. Comme la cartographie n&#8217;est plus mon métier j&#8217;ai décider de les fournir gratuitement. Le premier outil permet de geocoder un fichier <strong>KML </strong>contenant des addresses sans coordonnées geographiques. Il est accessible  <a href="http://www.kartmann.com/lab/geocode.htm">ici</a>.</p>
<p>Je ne sais pas s&#8217;il servira à quelqu&#8217;un, faites le moi savoir !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kartmann.com/blog/2008/07/30/480-outil-de-geocodage-de-fichiers-kml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La sortie que tout le monde attendait&#8230;</title>
		<link>http://www.kartmann.com/blog/2007/06/29/376-la-sortie-que-tout-le-monde-attendait/</link>
		<comments>http://www.kartmann.com/blog/2007/06/29/376-la-sortie-que-tout-le-monde-attendait/#comments</comments>
		<pubDate>Fri, 29 Jun 2007 16:14:34 +0000</pubDate>
		<dc:creator>alexkartmann</dc:creator>
				<category><![CDATA[Développement logiciel]]></category>

		<guid isPermaLink="false">http://www.kartmann.com/blog/2007/06/29/376-la-sortie-que-tout-le-monde-attendait/</guid>
		<description><![CDATA[Eclipse 3.3 est là !



]]></description>
			<content:encoded><![CDATA[<p>Eclipse 3.3 est là !</p>
<p>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="160" height="140" id="europa" align="middle"><param name="allowScriptAccess" value="sameDomain" /><param name="movie" value="http://www.eclipse.org/europa/images/europa.swf" /><param name="quality" value="high" /><param name="scale" value="noscale" /><param name="bgcolor" value="#ffffff" /><embed src="http://www.eclipse.org/europa/images/europa.swf" quality="high" scale="noscale" bgcolor="#ffffff" width="160" height="140" name="europa" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /><br />
</object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kartmann.com/blog/2007/06/29/376-la-sortie-que-tout-le-monde-attendait/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax par la pratique</title>
		<link>http://www.kartmann.com/blog/2007/03/20/362-ajax-par-la-pratique/</link>
		<comments>http://www.kartmann.com/blog/2007/03/20/362-ajax-par-la-pratique/#comments</comments>
		<pubDate>Tue, 20 Mar 2007 22:06:27 +0000</pubDate>
		<dc:creator>alexkartmann</dc:creator>
				<category><![CDATA[Développement logiciel]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[programmation]]></category>
<category>programmation</category>
		<guid isPermaLink="false">http://www.kartmann.com/blog/2007/03/20/362-ajax-par-la-pratique/</guid>
		<description><![CDATA[

Je viens de terminer la lecture d&#8217;Ajax par la pratique, chez O&#8217;Reilly.
C&#8217;est le genre que bouquin que j&#8217;aime lire maintenant, parce que ce n&#8217;est pas qu&#8217;une collection de bout de code ou une copie de document de référence. Franchement avec un accès internet et vu le nombre de sites d&#8217;exemple et de documentation qui existe [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.fr/gp/product/2841773876?ie=UTF8&#038;tag=comainformati-21&#038;linkCode=as2&#038;camp=1642&#038;creative=6746&#038;creativeASIN=2841773876"><img border="0" src="/blog/wp-content/uploads/284177387601_aa_scmzzzzzzz_.jpg"/></a><img src="http://www.assoc-amazon.fr/e/ir?t=comainformati-21&#038;l=as2&#038;o=8&#038;a=2841773876" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
</p>
<p>Je viens de terminer la lecture d&#8217;<a href="http://www.amazon.fr/gp/product/2841773876?ie=UTF8&#038;tag=comainformati-21&#038;linkCode=as2&#038;camp=1642&#038;creative=6746&#038;creativeASIN=2841773876">Ajax par la pratique</a>, chez O&#8217;Reilly.</p>
<p>C&#8217;est le genre que bouquin que j&#8217;aime lire maintenant, parce que ce n&#8217;est pas qu&#8217;une collection de bout de code ou une copie de document de référence. Franchement avec un accès internet et vu le nombre de sites d&#8217;exemple et de documentation qui existe je ne comprends pas que l&#8217;on publie encore des bibles remplis de code source et de verbatim des documentations officielles.</p>
<p>A l&#8217;inverse, et contrairement à ce que son titre pourrait laisser croire, Ajax par la pratique est plutôt un guide général, et pas une suite de travaux pratique.</p>
<p>Après une présentation générale, on attaque direct avec une étude de cas sur Google Maps, avec création d&#8217;une solution utilisant les même principes. Evidement avec ce sujet, j&#8217;était particulièrement intéressé.</p>
<p>Ensuite les principes de base d&#8217;Ajax sont présentés, avec du code qui permet de mieux visualiser, et un fil rouge qui est l&#8217;intégration d&#8217;Ajax dans un site existant.</p>
<p>Les principaux Framework sont présentés (Json, Prototype, Script.aculo.us, Dojo, Atlas, DWR), ainsi que l&#8217;intégration avec les environnements de développement web serveur (Java, PHP, Rails, Asp.net).</p>
<p>C&#8217;est assez vivant, pas trop technique, mais quand même réservé à un public connaissant au moins html et javascript.</p>
<p>Bref je le conseille à tous ceux qui veulent se lancer dans Ajax et se demandent par où commencer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kartmann.com/blog/2007/03/20/362-ajax-par-la-pratique/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un bon billet sur XP et la qualité</title>
		<link>http://www.kartmann.com/blog/2006/06/24/303-un-bon-billet-sur-xp-et-la-qualite/</link>
		<comments>http://www.kartmann.com/blog/2006/06/24/303-un-bon-billet-sur-xp-et-la-qualite/#comments</comments>
		<pubDate>Sat, 24 Jun 2006 22:26:20 +0000</pubDate>
		<dc:creator>alexkartmann</dc:creator>
				<category><![CDATA[Développement logiciel]]></category>
		<category><![CDATA[extreme programming]]></category>
		<category><![CDATA[qualité]]></category>
<category>extreme programming</category><category>qualité</category>
		<guid isPermaLink="false">http://localhost/blog/2006/06/24/un-bon-billet-sur-xp-et-la-qualite/</guid>
		<description><![CDATA[Je n&#8217;ai pas parlé de XP et de qualité depuis quelques temps, mais cet article pointant vers un de mes vieux billets est très intéressant.
J&#8217;ai particulièrement apprécié l&#8217;explication sur la sur-qualité, qui est un peu le défaut que j&#8217;ai constaté sur certains projets, notamment quand le management à demandé que le produit ne sorte que [...]]]></description>
			<content:encoded><![CDATA[<p>Je n&#8217;ai pas parlé de XP et de qualité depuis quelques temps, mais <a href="http://agilitateur.azeau.com/index.php?itemid=27">cet article</a> pointant vers un de <a href="/blog/?2005/01/27/33-qualite-et-qualite">mes vieux billets</a> est très intéressant.</p>
<p>J&#8217;ai particulièrement apprécié l&#8217;explication sur la sur-qualité, qui est un peu le défaut que j&#8217;ai constaté sur certains projets, notamment quand le management à demandé que le produit ne sorte <q>que quand il sera parfait</q>. Et on se retrouve avec des réponses à des problèmes qui n&#8217;en sont pas.</p>
<p>Cela me rappelle une réflexion sur l&#8217;innovation, qui n&#8217;est le fait d&#8217;ajouter sans fin des fonctionnalités, mais plutôt d&#8217;enlever celles qui sont futiles pour se concentrer sur l&#8217;essentiel.</p>
<p>Ainsi voici donc le secret d&#8217;un projet logiciel réussi&nbsp;:</p>
<ul>
<li>On ne s&#8217;intéresse qu&#8217;aux fonctions utiles, et on les étudie complètement.</li>
<li>On ne fait que ce qui est nécessaire, mais on le fait comme il faut.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.kartmann.com/blog/2006/06/24/303-un-bon-billet-sur-xp-et-la-qualite/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Souvenir d&#8217;eXtreme programming #14 : La responsabilité collective du code</title>
		<link>http://www.kartmann.com/blog/2005/10/12/248-souvenir-d-extreme-programming-14-la-responsabilite-collective-du-code/</link>
		<comments>http://www.kartmann.com/blog/2005/10/12/248-souvenir-d-extreme-programming-14-la-responsabilite-collective-du-code/#comments</comments>
		<pubDate>Wed, 12 Oct 2005 20:38:41 +0000</pubDate>
		<dc:creator>alexkartmann</dc:creator>
				<category><![CDATA[Développement logiciel]]></category>
		<category><![CDATA[extreme programming]]></category>
		<category><![CDATA[programmation]]></category>
<category>extreme programming</category><category>programmation</category>
		<guid isPermaLink="false">http://localhost/blog/2005/10/12/souvenir-d-extreme-programming-14-la-responsabilite-collective-du-code/</guid>
		<description><![CDATA[Après un longue pause, voici le retour du feuilleton sur la mise en place de l&#8217;eXtreme programming dans une dotcom. Et pour ce grand retour, quel meilleur sujet que la responsabilité collective du code ?
Rappelons que la responsabilité collective du code consiste, dans un projet, à donner à tous les membres de l&#8217;équipe le droit [...]]]></description>
			<content:encoded><![CDATA[<p>Après un longue pause, voici le retour du feuilleton sur la mise en place de l&#8217;eXtreme programming dans une dotcom. Et pour ce grand retour, quel meilleur sujet que la responsabilité collective du code ?</p>
<p>Rappelons que la responsabilité collective du code consiste, dans un projet, à donner à tous les membres de l&#8217;équipe le droit de modifié la totalité du code source. C&#8217;est donc contraire au principe souvent utilisé de responsabilité individuelle du code, dans lequel chaque développeur est responsable du code qu&#8217;il a écrit et reste le seul à avoir le droit et le devoir de le modifier.</p>
<p>La responsabilité collective du code s&#8217;est avérée, dans le cas qui nous occupe, l&#8217;une des pratiques qui semblait la plus naturelle (à l&#8217;opposé du travail en binôme, par exemple), mais dont la mise en place c&#8217;est le plus heurté à des barrières psychologiques.</p>
<p>Voyons lesquelles.</p>
<h4>Je suis le meilleur</h4>
<p>Il y a d&#8217;abord le caid, le dieu vivant du développement. Tellement bon et conscient de son niveau qu&#8217;il ne <strong>peut</strong> pas laisser les autres toucher à son code. Ou alors il faut qu&#8217;il refasse tout derrière.</p>
<p>Alors même s&#8217;il souffre d&#8217;être le seul à pouvoir toucher son code, il aura du mal à le partager. De la rétention de code, en somme.</p>
<h4>Je ne suis pas digne</h4>
<p>De l&#8217;autre côté, il y a le programmeur humble (très rare, mais il existe). Face au caid, il est impressionné. Tellement qu&#8217;il n&#8217;<strong>ose</strong> même pas imaginer qu&#8217;il pourrait faire la même chose.</p>
<p>Alors l&#8217;idée qu&#8217;il puisse toucher au code de son idole le paralyse.</p>
<h4>Et comment on fait ?</h4>
<p>Le binômage, le binômage. Tout est là. On mélange les niveaux, la connaissance du code se partage, le niveau technique général s&#8217;améliore.</p>
<p>Du moins en théorie. Ce fut même globalement le cas. Mais pas sans heurt.</p>
<h4>L&#8217;euphorie</h4>
<p>Après la phase initiale de méfiance, la propriété collective code écrit sur le nouveau projet s&#8217;instaura sans restriction. Ce ne fut pas le cas de l&#8217;existant tout de suite. Mais comme la majorité du travail était lié au nouveau projet ce ne fut pas un problème.</p>
<p>En fonction des scénarios utilisateur et des tâches de développeur, chaque binôme intervenait sur toute les parties du code sans autocensure ni blocage.</p>
<p>Mais on vit apparaitre un nouveau comportement chez les caïds, finalement assez voisin de la rétention de code.</p>
<h4>Le remaniement des caïds</h4>
<p>Un binôme réalise une tâche de développement. Par la suite un binôme de caïds doit travailler sur le code, et décide de faire un remaniement. En fait remaniement, c&#8217;est presque une réécriture qui est réalisée.</p>
<p>Quelque soit l&#8217;humilité du binôme, voir son code complètement réécrit est une sacrée remise en cause.</p>
<p>Le pire, c&#8217;est même qu&#8217;après un certain temps les caïds commencent à <strong>systématiquement</strong> remanier le code des autres binôme.</p>
<p>Voyant cela j&#8217;étais un peu pessimiste quand à la productivité de l&#8217;équipe. En effet quel intérêt de tout refaire systématiquement, autant tout faire faire par les caïds.</p>
<h4>Montre moi et j&#8217;apprendrais</h4>
<p>En fait le simple fait d&#8217;avoir écrit un code <strong>et les tests associés</strong> rendait quand même le travail de remaniement plus facile pour les caïds que s&#8217;il avait du tout faire eu même. Donc la perte de productivité n&#8217;était pas si évidente.</p>
<p>Et le remaniement des caïds eut finalement un effet pédagogique. Le fait de voir son code réécrit par les caïds permit aux autres binômes de mieux comprendre ce qu&#8217;il fallait faire. De plus le code existant étant souvent la base des nouveaux développements, le fait de laisser les caïds faire du remaniement tend à améliorer la qualité du code.</p>
<h4>L’esprit d’équipe</h4>
<p>Finalement si le remaniement des caïds n’a pas eu l’effet dévastateur que l’on pouvait craindre, c’est parce qu’il existait un vrai esprit d’équipe. Mais avant la responsabilité partagée du code, l’esprit était là, mais pas la pratique. Avec la responsabilité partagé, le code est vraiment devenue une œuvre collective, et non plus une collection d’œuvres individuelles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kartmann.com/blog/2005/10/12/248-souvenir-d-extreme-programming-14-la-responsabilite-collective-du-code/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>La cartographie, principal débouché d&#8217;AJAX ?</title>
		<link>http://www.kartmann.com/blog/2005/09/02/228-la-cartographie-principal-debouche-d-ajax/</link>
		<comments>http://www.kartmann.com/blog/2005/09/02/228-la-cartographie-principal-debouche-d-ajax/#comments</comments>
		<pubDate>Fri, 02 Sep 2005 12:46:07 +0000</pubDate>
		<dc:creator>alexkartmann</dc:creator>
				<category><![CDATA[Développement logiciel]]></category>
		<category><![CDATA[Cartographie]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Microsoft]]></category>
<category>cartographie</category><category>google</category><category>microsoft</category>
		<guid isPermaLink="false">http://localhost/blog/2005/09/02/la-cartographie-principal-debouche-d-ajax/</guid>
		<description><![CDATA[Dans l&#8217;édition du 2/9/2005 de 01 informatique, un article présente Ajax comme &#8220;la nouvelle coqueluche du web&#8221;.
L&#8217;article est assez complet, et expose bien les avantages et les limites de cette technique à la mode.
Les exemples d&#8217;utilisation sont centré sur les application Google :

le mail, avec Gmail et Outlook Web Access, qui d&#8217;ailleurs est la premiere [...]]]></description>
			<content:encoded><![CDATA[<p>Dans l&#8217;édition du 2/9/2005 de 01 informatique, un article présente Ajax comme &#8220;la nouvelle coqueluche du web&#8221;.</p>
<p>L&#8217;article est assez complet, et expose bien les avantages et les limites de cette technique à la mode.</p>
<p>Les exemples d&#8217;utilisation sont centré sur les application Google :</p>
<ul>
<li>le mail, avec Gmail et Outlook Web Access, qui d&#8217;ailleurs est la premiere application Ajax (c&#8217;est même pour elle que le support de requete HTTP à partir de javascript a été rajouté à Internet Explorer) ;</li>
<li>la cartographie, avec Google Map et Viamichelin : &#8220;Il n&#8217;y a qu&#8217;a observer la différence entre les cartes de Maporama.fr et celles de Viamichelin.fr. Dans le premier cas, la navigation est ralentie par les rafraîchissement successifs. Dans le second, il est possible de zoomer et de recentrer le plan comme s&#8217;il s&#8217;agissait d&#8217;une application locale&#8230;&#8221;.</li>
</ul>
<p>Curieusement ni MSN Mappoint, ni Mapquest, ni Virtual Earth ne sont cités, alors qu&#8217;ils offrent les même avantages que Viamichelin.</p>
<p>Mais quoi qu&#8217;il en soit, sans Ajax (ou Flash pour Mappy) pour rendre la navigation plus fluide, un site de cartographie n&#8217;est plus crédible&#8230; Ce qui est dommage, car dans ce domaine une belle interface ne fait pas tout.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kartmann.com/blog/2005/09/02/228-la-cartographie-principal-debouche-d-ajax/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Un outil de test de sites DHTML</title>
		<link>http://www.kartmann.com/blog/2005/08/23/224-un-outil-de-test-de-sites-dhtml/</link>
		<comments>http://www.kartmann.com/blog/2005/08/23/224-un-outil-de-test-de-sites-dhtml/#comments</comments>
		<pubDate>Mon, 22 Aug 2005 23:51:40 +0000</pubDate>
		<dc:creator>alexkartmann</dc:creator>
				<category><![CDATA[Développement logiciel]]></category>

		<guid isPermaLink="false">http://localhost/blog/2005/08/23/un-outil-de-test-de-sites-dhtml/</guid>
		<description><![CDATA[Mon frère vient de réaliser un outil de test de site web utilisant le modèle de document de IE6 et javascript. Ce qui permet de tester aussi les parties dynamiques générées sur le client en javascript. Evidement cela reste pour le moment limité à Internet Explorer comme client mais le concept pourrait être porté sous [...]]]></description>
			<content:encoded><![CDATA[<p>Mon <a href="http://www.kartmann.org">frère</a> vient de réaliser un <a href="http://www.codeproject.com/useritems/WebReplay2.asp">outil de test de site web</a> utilisant le modèle de document de IE6 et javascript. Ce qui permet de tester aussi les parties dynamiques générées sur le client en javascript. Evidement cela reste pour le moment limité à Internet Explorer comme client mais le concept pourrait être porté sous d&#8217;autres navigateurs.</p>
<p>Personnellement je n&#8217;ai pas testé cet outil mais connaissant l&#8217;auteur je ne peux que le recommander&#8230;</p>
<p>Bons tests !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kartmann.com/blog/2005/08/23/224-un-outil-de-test-de-sites-dhtml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Souvenir d&#8217;eXtreme programming #13 : Le remaniement constant (constant refactoring)</title>
		<link>http://www.kartmann.com/blog/2005/07/07/199-souvenir-d-extreme-programming-13-le-remaniement-constant-constant-refactoring/</link>
		<comments>http://www.kartmann.com/blog/2005/07/07/199-souvenir-d-extreme-programming-13-le-remaniement-constant-constant-refactoring/#comments</comments>
		<pubDate>Thu, 07 Jul 2005 13:00:36 +0000</pubDate>
		<dc:creator>alexkartmann</dc:creator>
				<category><![CDATA[Développement logiciel]]></category>
		<category><![CDATA[extreme programming]]></category>
		<category><![CDATA[programmation]]></category>
<category>extreme programming</category><category>programmation</category>
		<guid isPermaLink="false">http://localhost/blog/2005/07/07/souvenir-d-extreme-programming-13-le-remaniement-constant-constant-refactoring/</guid>
		<description><![CDATA[Et non cher lecteur, le feuilleton eXtreme Programming n&#8217;est pas fini ! J&#8217;ai seulement eu d&#8217;autres projets quelque peu prenants (nDumbster entre autre).
Parlons donc du remaniement constant (constant refactoring). Il ne s&#8217;agit pas de déplacer régulièrement les personnes dans l&#8217;open space, même si cette pratique était aussi en vogue dans notre dotcom (on parlait de [...]]]></description>
			<content:encoded><![CDATA[<p>Et non cher lecteur, le feuilleton eXtreme Programming n&#8217;est pas fini ! J&#8217;ai seulement eu d&#8217;autres projets quelque peu prenants (<a href="http://ndumbster.sourceforge.net">nDumbster</a> entre autre).</p>
<p>Parlons donc du remaniement constant (constant refactoring). Il ne s&#8217;agit pas de déplacer régulièrement les personnes dans l&#8217;open space, même si cette pratique était aussi en vogue dans notre dotcom (on parlait de réorganisation spatiale !), mais de ne pas hésiter à modifier le code afin de le rendre plus propre, plus simple, plus maintenable.</p>
<p>Le remaniement est rendu possible par la présence de tests unitaires suffisants pour permettre des changements plus ou moins profonds dans le code sans risquer d&#8217;en perturber le fonctionnement (du moins une fois que tous les tests passent, bien sur). Sans une couverture <strong>complète</strong> du code par des tests unitaires,  le remaniement constant devient une activité proche du saut à l&#8217;élastique sans élastique. Je parle de couverture complète, et non pas totale, pour signifier qu&#8217;il s&#8217;agit d&#8217;avoir voir suffisamment de tests pour tester &#8220;tout ce qui peut casser&#8221;.</p>
<p>Harnaché avec ses tests unitaires, le développeur peut donc se lancer dans les remaniements les plus audacieux, et cela sans le moindre risque. Enfin presque. Du moins nous avons constaté la fin de cette peur de perturber du code existant dont l&#8217;effet le plus visible chez nous était la tendance à dupliquer le code plutôt qu&#8217;a l&#8217;adapter à un nouveau besoin. Nous avions ainsi dans notre code ASP une pléthore de fonctions presque identiques à quelque variation près. Tout le monde avait peur de modifier une fonction existant en introduisant une variable supplémentaire afin d&#8217;éviter du code redondant, par exemple.</p>
<p>L&#8217;ouvrage <a href="http://www.amazon.fr/exec/obidos/redirect?path=ASIN/3827316308&amp;link_code=as2&amp;camp=1642&amp;tag=comainformati-21&amp;creative=6746"></p>
<p>Refactoring</a><img src="http://www.assoc-amazon.fr/e/ir?t=comainformati-21&amp;l=as2&amp;o=8&amp;a=3827316308" width="1" height="1" border="0" alt="" /> de Martin Fowler, bien qu&#8217;illustré par des exemples en Java est très bien adapté à C# (quel hasard !). L&#8217;auteur y présente une liste de remaniement unitaire type qui permettent d&#8217;améliorer l&#8217;architecture d&#8217;une application.</p>
<p>Et c&#8217;est bien  là ce que permet le remaniement constant. A partir de petites améliorations, mais que l&#8217;on fait constamment, on obtient une application dont l&#8217;architecture est bonne tout au long de sa vie.</p>
<p>C&#8217;est bien évidement à l&#8217;encontre de l&#8217;approche classique, dans laquelle un architecte définira en détail l&#8217;architecture de l&#8217;application à partir de son cahier des charges. Comme en XP le cahier des charges détaillé n&#8217;existe pas, l&#8217;architecture détaillé non plus. Disons plutôt qu&#8217;on la construit au fur et à mesure.</p>
<p>Ceci ne rend cependant pas inutile tout notion d&#8217;architecture, mais change seulement la façon dont on la construit. En fait en XP on construit quasiment en même temps le cahier des charges, l&#8217;architecture et le code !</p>
<p>Dans le contexte d&#8217;un logiciel dont la définition n&#8217;est pas figé, sur un marché changeant, avec des clients ayant du mal à exprimer explicitement leurs besoins, mais capable de formuler précisément des demandes d&#8217;évolution, eXtreme Programming s&#8217;est révélé efficace. Et le remaniement permet d&#8217;obtenir une architecture homogène et non un patchwork de fonctionnalités collés ensembles.</p>
<p>Parmi les effets néfastes du refactoring si l&#8217;on n&#8217;y prend pas garde, c&#8217;est qu&#8217;il devient l&#8217;excuse du perfectionniste en retard. &#8220;D&#8217;accord j&#8217;ai passé trois jours sur cette tache prévue pour un jour, mais j&#8217;ai fait deux jours de refactoring&#8221;. Dans ce cas, je rappelle que le remaniement doit être constant, c&#8217;est à dire répartie durant les taches de développement, et non pas considéré comme une tache indépendante. On ne fait pas du remaniement sur n&#8217;importe quelle partie du code, mais sur une partie de code que l&#8217;on doit modifier pour une tâche en cours.</p>
<p>Il y a une bonne comparaison (je crois qu&#8217;elle vient de Kent Beck) entre le remaniement et le fait de nettoyer sa cuisine. Il vaut mieux cuisiner dans une cuisine propre (donc développer avec un code propre), mais on peut soit nettoyer sa cuisine avant de cuisiner, soit après avoir cuisiné, soit pendant qu&#8217;on cuisine. Et évidement si on nettoie pendant qu&#8217;on cuisine, le temps que l&#8217;on passe dans la cuisine n&#8217;est pas tellement plus long, alors que nettoyer avant de cuisiner risque de prendre plus de temps, surtout les casseroles bien sales ! Bref c&#8217;est lorsque l&#8217;on remanie son code durant l&#8217;écriture que le remaniement est le moins couteux.</p>
<p>Il reste encore quelques pratiques d&#8217;eXtreme Programming à traiter avant la fin de ce feuilleton. Si vous avez des questions ou des points que vous voudriez voir traiter, n&#8217;hésitez pas. Amis eXtreme Programmers, ne soyez pas triste à l&#8217;annonce de la fin proche, j&#8217;ai encore d&#8217;autres expériences à raconter. Notamment de l&#8217;eXtreme Programming en solo !</p>
<p><em>A suivre&#8230;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kartmann.com/blog/2005/07/07/199-souvenir-d-extreme-programming-13-le-remaniement-constant-constant-refactoring/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Test unitaire d&#8217;envoi d&#8217;email avec Dumbster et nDumbster.</title>
		<link>http://www.kartmann.com/blog/2005/06/23/188-test-unitaire-d-envoi-d-email-avec-dumbster-et-ndumbster/</link>
		<comments>http://www.kartmann.com/blog/2005/06/23/188-test-unitaire-d-envoi-d-email-avec-dumbster-et-ndumbster/#comments</comments>
		<pubDate>Wed, 22 Jun 2005 23:10:45 +0000</pubDate>
		<dc:creator>alexkartmann</dc:creator>
				<category><![CDATA[Développement logiciel]]></category>

		<guid isPermaLink="false">http://localhost/blog/2005/06/23/test-unitaire-d-envoi-d-email-avec-dumbster-et-ndumbster/</guid>
		<description><![CDATA[Pour tester un programme envoyant des emails, on peut utiliser un mock object du composant d&#8217;envoi de message, mais on n&#8217;est pas certain que les paramètres sont corrects, et il faut un mock object par composant d&#8217;envoi de message.
Une autre solution est d&#8217;utiliser un serveur vrai SMTP et d&#8217;envoyer tous les tests vers une adresse [...]]]></description>
			<content:encoded><![CDATA[<p>Pour tester un programme envoyant des emails, on peut utiliser un mock object du composant d&#8217;envoi de message, mais on n&#8217;est pas certain que les paramètres sont corrects, et il faut un mock object par composant d&#8217;envoi de message.</p>
<p>Une autre solution est d&#8217;utiliser un serveur vrai SMTP et d&#8217;envoyer tous les tests vers une adresse mail dédié. Mais la vérification ne peut être manuelle.</p>
<p>Aucune de ces solutions n&#8217;était vraiment satisfaisants quand un contexte d&#8217;automatisation des tests, notamment en développement piloté par les tests.</p>
<p>Mais il existe une solution bien plus élégante. <a href="http://sourceforge.net/projects/dumbster/">Dumbster</a> est une librairie Java qui implémente un vrai serveur SMTP. Par contre les mails reçus sont stockés dans une listes au lieu d&#8217;être relayés. Il suffit de l&#8217;utiliser dans une librairie de test JUnit pour automatiser complètement le test d&#8217;envoi de message. Une bonne nouvelle pour monsieur toto@mail.com qui va arrêter de recevoir des messages bidons (histoire véridique).</br></p>
<p>Pour les développeurs .Net comme moi, il existe un portage de Dumbster en C#, <a href="http://sourceforge.net/projects/ndumbster/">NDumbster</a>. La version actuellement en ligne n&#8217;est pas très fonctionnelle, mais cela devrait changer, notamment grâce au patch que j&#8217;<a href="http://sourceforge.net/tracker/index.php?func=detail&amp;aid=1223366&amp;group_id=130537&amp;atid=718122">ai soumis</a>. Avec cette version, j&#8217;ai pu tester un système de gestion de mailling list en quelques heures au lieu de quelques jours (avec en plus des tests automatiques complets).</p>
<p>Ne faites plus d&#8217;application envoyant des mails sans ces librairies !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kartmann.com/blog/2005/06/23/188-test-unitaire-d-envoi-d-email-avec-dumbster-et-ndumbster/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Souvenir d&#8217;eXtreme programming #12 : L&#8217;intégration continue</title>
		<link>http://www.kartmann.com/blog/2005/06/15/183-souvenir-d-extreme-programming-12-l-integration-continue/</link>
		<comments>http://www.kartmann.com/blog/2005/06/15/183-souvenir-d-extreme-programming-12-l-integration-continue/#comments</comments>
		<pubDate>Wed, 15 Jun 2005 10:44:59 +0000</pubDate>
		<dc:creator>alexkartmann</dc:creator>
				<category><![CDATA[Développement logiciel]]></category>
		<category><![CDATA[extreme programming]]></category>
		<category><![CDATA[programmation]]></category>
<category>extreme programming</category><category>programmation</category>
		<guid isPermaLink="false">http://localhost/blog/2005/06/15/souvenir-d-extreme-programming-12-l-integration-continue/</guid>
		<description><![CDATA[Continuons notre série en parlant un peu d&#8217;une pratique qui n&#8217;est pas propre à XP, mais tout processus de développement discipliné : l&#8217;intégration continue.
Le but est d&#8217;éviter un phénomène classique de rétention de source : Un développeur garde du code sur son poste plusieurs jours (semaines/mois ?) sans le réintégrer dans le système de gestion [...]]]></description>
			<content:encoded><![CDATA[<p>Continuons notre série en parlant un peu d&#8217;une pratique qui n&#8217;est pas propre à XP, mais tout processus de développement discipliné : l&#8217;intégration continue.</p>
<p>Le but est d&#8217;éviter un phénomène classique de rétention de source : Un développeur garde du code sur son poste plusieurs jours (semaines/mois ?) sans le réintégrer dans le système de gestion de source. Lorsqu&#8217;il effectue la réintégration, il peut passer un long moment à régler les conflits avec d&#8217;autres modifications effectué. Et dans certains cas, une réintégration un peu brutale peut provoquer d&#8217;autre problèmes (le fameux effet papillon).</p>
<p>Pour éviter cela, l&#8217;intégration continue consiste à réintégrer très régulièrement les sources dès que le développeur a atteint un état stable de l&#8217;application (c&#8217;est à dire dès que ses tests passent).</p>
<p>Un élément nécessaire pour l&#8217;intégration continue est l&#8217;utilisation d&#8217;un outil de gestion de version comme CVS ou Subversion. Dans notre cas, vu l&#8217;utilisation de Visual Studio, nous avons naturellement utilisé Visual Source Safe (VSS). VSS était configuré en mode verrou partagé. Cela signifie que plusieurs développeurs peuvent travailler sur le même fichier (C&#8217;est un peu comparable au mode de fonctionnement de CVS). C&#8217;est lors de la réintégration que l&#8217;on gère les conflits éventuels.</p>
<p>Lors de la présentation de l&#8217;organisation spatiale, j&#8217;avais parlé de la machine de build. Lorsqu&#8217;un binôme a terminé une tâche élémentaire, et que tous les tests passent sur sa machine, les sources sont réintégrés dans VSS, puis le binôme se rends devant sur la machine de build, récupère tous les sources de VSS (et pas seulement ceux qu&#8217;ils ont modifiés), recompile l&#8217;application et lance les tests. Si un problème se produit, ils doivent le corriger avant de retourner à leurs poste (ou de rentrer chez eux).</p>
<p>Lorsque les tests se passent bien sur la machine de build, les binaires sont copié dans un répertoire de livraison et installé sur le serveur de pré-production, avant d&#8217;éventuellement mis en production si l&#8217;équipe marketing valide cette version. Au départ afin de signaler qu&#8217;une livraison a été faite, on utilisait une crécelle, mais le bruit était un peu trop fort et son utilisation n&#8217;a pas duré.</p>
<p>Après une réintégration réussie, le binôme peut récupérer sur son poste de travail les dernières versions de code sur VSS, puis démarrer une nouvelle tâche. Et systématiquement avant de commencer à travailler le matin on récupère les dernières versions.</p>
<p>L&#8217;utilisation de la machine de build s&#8217;est vite généralisé, et finalement peu de problème de conflit ont eu lieu, ce qui fut un grand changement par rapport au passé (alors même qu&#8217;il y avait peu de code dont la responsabilité était partagée). Aujourd&#8217;hui la machine de build serait sans doute remplacé par un serveur de construction automatique comme CruiseControl.Net.</p>
<p>Malgré cela, l&#8217;intégration continue, couplée avec les tests unitaires, est la clé du succès de la responsabilité partagé du code. On en reparlera.</p>
<p><em>A suivre</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kartmann.com/blog/2005/06/15/183-souvenir-d-extreme-programming-12-l-integration-continue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
