<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.netapsys.fr/index.php/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Netapsys Blog - agile</title>
  <link>http://blog.netapsys.fr/index.php/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Thu, 29 Jul 2010 16:33:35 +0200</pubDate>
  <copyright>Netapsys 2008 - 2009</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>AGILE &amp; MORE EFFICIENT : Test JUnit, EasyMock &amp; Spring</title>
    <link>http://blog.netapsys.fr/index.php/post/2010/03/24/AGILE-MORE-EFFICIENT-%3A-Test-JUnit-EasyMock-Spring</link>
    <guid isPermaLink="false">urn:md5:fbcb266a97c46e14b20f3732c46919f2</guid>
    <pubDate>Wed, 24 Mar 2010 08:11:00 +0100</pubDate>
    <dc:creator>Abderrazek CHINE</dc:creator>
        <category>Spring Java</category>
        <category>agile</category><category>easymock</category><category>efficient</category><category>junit</category><category>mockito</category><category>test</category><category>tests unitaires</category><category>unitaire</category>    
    <description>&lt;p&gt;Ce billet aborde l'aspect purement technique de mise en oeuvre de l'agilité dans le développement d'applications robustes.&lt;br /&gt;
Il s'inscrit dans la continuité du séminaire de Netapsys sur le thème &quot;Agile &amp;amp; more efficient&quot;.&lt;br /&gt;
Il présente les tests JUnit 4.x et EasyMock sous Spring afin de concrétiser &quot;être agile&quot;.&lt;br /&gt;
EasyMock permet de simuler l'accès aux fonctionnalités des couches applicatives, par exemple la couche DAO.&lt;br /&gt;
Un des piliers de l'agilité est TDD (Test Driven Development).&lt;br /&gt;
Le TDD est une approche évolutive de réalisation de projets basés sur les tests avant même de produire du code effectif.&lt;br /&gt;
TDD combine le TFD (Test First development) et le refactoring afin d'arriver à affiner / définir les spécifications. &lt;br /&gt;
Easymock et JUnit constituent donc les briques afin de réaliser le TDD via les tests unitaires et d'intégration.&lt;br /&gt;
En fait, les tests unitaires sont faciles à mettre en place mais les tests d'intégration restent encore difficiles.&lt;br /&gt;
Et le coût de réaliser les tests d'intégration est pesant.&lt;br /&gt;
Et EasyMock permet la mise en place des tests sans pour autant avoir développé une ligne de code d'implémentation des couches applicatives.
Tous ces aspects vont être explicités ci-dessous.&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;&lt;br /&gt;
Nous démarrons avec un projet exemple simple qui permet de comprendre les notions importantes dans EasyMock.
&lt;br /&gt;
1- &lt;ins&gt;Le projet exemple&lt;/ins&gt;:
&lt;br /&gt;
&lt;br /&gt;
Comme notre objectif est de faire du TDD, nous allons écrire uniquement les interfaces puis enchaîner avec les tests sur des classes simulées (moquées) par EasyMock.
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/***interface couche dao**/&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; IContactDao&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
  	&lt;span style=&quot;color: #993333;&quot;&gt;void&lt;/span&gt; save&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;Contact contact&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Et celle de service:
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;/***interface couche service*****/&lt;/span&gt;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; IService&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
  	&lt;span style=&quot;color: #993333;&quot;&gt;void&lt;/span&gt; save&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;Contact contact&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
      &lt;span style=&quot;color: #993333;&quot;&gt;void&lt;/span&gt; setContactDao&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;IDao dao&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
Et l'entité Contact est un POJO simple:&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;package&lt;/span&gt; fr.&lt;span style=&quot;color: #006600;&quot;&gt;netapsys&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;easymock&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;entites&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a1a100;&quot;&gt;import java.io.Serializable;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a1a100;&quot;&gt;import fr.netapsys.easymock.common.BaseObject;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; Contact &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;implements&lt;/span&gt; &lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;Serializable&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;final&lt;/span&gt; &lt;span style=&quot;color: #993333;&quot;&gt;long&lt;/span&gt; serialVersionUID = -1511337412528984583L&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #993333;&quot;&gt;int&lt;/span&gt; id&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;String&lt;/span&gt; nom&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;String&lt;/span&gt; prenom&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #aaaadd; font-weight: bold;&quot;&gt;String&lt;/span&gt; mail&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; Contact&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
		&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;super&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;	
&amp;nbsp;
	&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;//Setters/getters omis		&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
Donc nous avons en place les briques techniques qui vont servir à pratiquer le TDD et favoriser les échanges avec le client.&lt;br /&gt;
Écrivons les tests avant de commencer les développement pur et dur des couches dao, service et web(back &amp;amp; front).
&lt;br /&gt;
La classe de test est simple néanmoins consistante afin d'illustrer réellement l'apport des test mock.&lt;br /&gt;
&lt;br /&gt;
2- &lt;ins&gt;Classe JUnit4 test &lt;/ins&gt;&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;package&lt;/span&gt; fr.&lt;span style=&quot;color: #006600;&quot;&gt;netapsys&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;easymock&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;tests&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
&lt;span style=&quot;color: #a1a100;&quot;&gt;import org.apache.log4j.Logger;&lt;/span&gt;
&lt;span style=&quot;color: #a1a100;&quot;&gt;import org.junit.Assert;&lt;/span&gt;
&lt;span style=&quot;color: #a1a100;&quot;&gt;import org.junit.Before;&lt;/span&gt;
&lt;span style=&quot;color: #a1a100;&quot;&gt;import org.junit.Test;&lt;/span&gt;
&lt;span style=&quot;color: #a1a100;&quot;&gt;import org.junit.runner.RunWith;&lt;/span&gt;
&lt;span style=&quot;color: #a1a100;&quot;&gt;import org.springframework.test.context.ContextConfiguration;&lt;/span&gt;
&lt;span style=&quot;color: #a1a100;&quot;&gt;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;&lt;/span&gt;
&lt;span style=&quot;color: #a1a100;&quot;&gt;import fr.netapsys.easymock.entites.Contact;&lt;/span&gt;
&lt;span style=&quot;color: #a1a100;&quot;&gt;import fr.netapsys.easymock.interfaces.*;&lt;/span&gt;
&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;//**** notez cet import *****&lt;/span&gt;
&lt;span style=&quot;color: #a1a100;&quot;&gt;import static org.easymock.EasyMock.*;&lt;/span&gt;
&amp;nbsp;
@RunWith &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;SpringJUnit4ClassRunner.&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;
@ContextConfiguration &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;locations = &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt; &lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;classpath:spring.xml&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; 
&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt; TestEasyMock &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;final&lt;/span&gt; Logger logger=Logger.&lt;span style=&quot;color: #006600;&quot;&gt;getLogger&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;getClass&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; IContactDao contactDao&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; IContactService contactService&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
	@Before &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #993333;&quot;&gt;void&lt;/span&gt; setUp&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
		contactDao=createMock&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;IContactDao.&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
		contactService= createMock&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;IContactService.&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;
	@SuppressWarnings&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;nls&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;
	@Test &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #993333;&quot;&gt;void&lt;/span&gt; testSave&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
			Contact contact=&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Contact&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
			&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;//************** createMock, expect, replay, call &amp;amp; verify		&lt;/span&gt;
			expect&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;contactDao.&lt;span style=&quot;color: #006600;&quot;&gt;save&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;contact&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;andReturn&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;saveContactInDao&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;contact&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;			
			replay&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;contactDao&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
			contactDao.&lt;span style=&quot;color: #006600;&quot;&gt;save&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;contact&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
			verify&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;contactDao&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;			
			&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;//appel au service&lt;/span&gt;
			expect&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;contactService.&lt;span style=&quot;color: #006600;&quot;&gt;save&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;contact&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;andReturn&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;saveContactInService&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;contact&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
			replay&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;contactService&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
			Contact c=contactService.&lt;span style=&quot;color: #006600;&quot;&gt;save&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;contact&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
			logger.&lt;span style=&quot;color: #006600;&quot;&gt;info&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;gt;Contact retrieved by service :&amp;quot;&lt;/span&gt;+contact.&lt;span style=&quot;color: #006600;&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
			verify&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;contactService&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
			&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;Assert&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;assertTrue&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;  c.&lt;span style=&quot;color: #006600;&quot;&gt;getNom&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;contact.&lt;span style=&quot;color: #006600;&quot;&gt;getNom&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; c.&lt;span style=&quot;color: #006600;&quot;&gt;getId&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;==&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; c.&lt;span style=&quot;color: #006600;&quot;&gt;getMail&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006600;&quot;&gt;equals&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;mail@mail.fr&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;
	@SuppressWarnings&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;nls&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; Contact saveContactInDao&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;Contact contact&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
		Contact contact2Return=contact&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
		contact.&lt;span style=&quot;color: #006600;&quot;&gt;setNom&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;Easymock&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
		contact.&lt;span style=&quot;color: #006600;&quot;&gt;setPrenom&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;test&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;//setter id &lt;/span&gt;
		contact2Return.&lt;span style=&quot;color: #006600;&quot;&gt;setId&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
		&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;return&lt;/span&gt; contact2Return&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;	
	@SuppressWarnings&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;nls&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;
	&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; Contact saveContactInService&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;Contact contact&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#123;&lt;/span&gt;
		Contact contact2Return=contact&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #808080; font-style: italic;&quot;&gt;//contactDao.save(contact);&lt;/span&gt;
		contact2Return.&lt;span style=&quot;color: #006600;&quot;&gt;setMail&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;mail@mail.fr&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;		
		&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;return&lt;/span&gt; contact2Return&lt;span style=&quot;color: #66cc66;&quot;&gt;;&lt;/span&gt;
	&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
NB. Le fichier spring.xml est pour l'instant vide. Il ne contient que les déclarations des namespaces.&lt;br /&gt;
La seconde partie de ce billet revient sur ce fichier de configuration pour aller plus loin dans l'utilisation de l'api easymock combiné avec spring.&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;3- &lt;ins&gt;Exécutions des tests&lt;/ins&gt;&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;
La première capture illustre que le test JUnit répond bien:
&lt;br /&gt;
&lt;img src=&quot;http://blog.netapsys.fr/public/easymock/easymock_test.JPG&quot; alt=&quot;captureJunit0&quot; /&gt;
&lt;br /&gt;
Avec une sortie sur la console qui ressemble à:&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;dos&quot;&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;INFO  &lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#40;&lt;/span&gt;TestEasyMock.java&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#41;&lt;/span&gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;Contact retrieved by service :&lt;span style=&quot;color: #b100b1; font-weight: bold;&quot;&gt;fr.netapsys.easymock.entites.Contact@17050f5&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;/span&gt;
  id=&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;
  nom=Easymock
  prenom=test
  mail=mail@mail.fr
&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #66cc66;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
Easymock est utilisé par spring et le projet apache strutstestcase. Néanmoins, à mon avis, il est plus ou moins intuitif à pratiquer.&lt;br /&gt;
Son concurrent MOCKITO séduit par la simplicité d'emploi.&lt;br /&gt;
EasyMock se comporte comme un &quot;recorder&quot; et par conséquent nécessite généralement les étapes suivantes:&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;createMock,  ( &lt;em&gt;C'est ce que a été fait dans la méthode annotée par @Before&lt;/em&gt; )&lt;br /&gt;
expect,        (&lt;em&gt;C'est ce qui a été fait dans le corps de la méthode testSave&lt;/em&gt;) &lt;br /&gt;
replay,     (&lt;em&gt;idem&lt;/em&gt;)&lt;br /&gt;
call,          (&lt;em&gt;idem&lt;/em&gt;)&lt;br /&gt;
verify.      (&lt;em&gt;idem. A noter que cet appel peut générer une exception incompréhensible si l'ordre des étapes n'est pas respecté&lt;/em&gt;)&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;
La prochaine fois, nous introduirons l'auto-injection Spring des beans de la couche service en simulant (en moquant) uniquement la couche DAO.&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.netapsys.fr/index.php/post/2010/03/24/AGILE-MORE-EFFICIENT-%3A-Test-JUnit-EasyMock-Spring#comment-form</comments>
      <wfw:comment>http://blog.netapsys.fr/index.php/post/2010/03/24/AGILE-MORE-EFFICIENT-%3A-Test-JUnit-EasyMock-Spring#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.netapsys.fr/index.php/feed/rss2/comments/140</wfw:commentRss>
      </item>
    
  <item>
    <title>Retour d'expérience sur l'intégration continue</title>
    <link>http://blog.netapsys.fr/index.php/post/2010/03/01/Retours-dexperience-sur-lintegration-continue</link>
    <guid isPermaLink="false">urn:md5:511f99d7ae63d8ef772f87490d197ac2</guid>
    <pubDate>Mon, 01 Mar 2010 22:29:00 +0100</pubDate>
    <dc:creator>Fabian Piau</dc:creator>
        <category>Agile</category>
        <category>agile</category><category>conférence</category><category>extreme programming</category><category>intégration continue</category><category>nantes</category>    
    <description>    &lt;p&gt;Sébastien Roul et moi-même allons co-animer une présentation sur l'intégration continue le mercredi 17 mars dans le cadre d'une rencontre Agile à Nantes.&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://www.agilenantes.org/&quot; hreflang=&quot;fr&quot;&gt;&lt;img src=&quot;http://blog.netapsys.fr/public/images/agile-nantes-IC/agile-nantes.png&quot; alt=&quot;agile-nantes.png&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Notre objectif ne sera pas seulement d'en présenter les concepts, nous apporterons aussi notre vision et retour d'expérience.&lt;/p&gt;


&lt;p&gt;En effet, après plus d'un an d'utilisation chez Netapsys Atlantique, l'intégration continue s'inscrit au cœur de notre métier avec une mise en place systématique sur l'ensemble de nos projets client.&lt;/p&gt;


&lt;p&gt;L'intérêt de cette double intervention permettra de présenter ma vision de développeur avec une utilisation quotidienne, mais aussi la vision de chef de projet avec Sébastien.&lt;/p&gt;


&lt;p&gt;L'intégration continue n’est pas seulement l'installation d'un serveur avec quelques outils appropriés, c’est vraiment un état d'esprit qui doit vivre au sein de l'équipe...&lt;/p&gt;


&lt;p&gt;Pour en savoir plus ou assister à la présentation, vous pouvez consulter &lt;a href=&quot;http://www.agilenantes.org/2010/02/22/lintegration-continue-mercredi-17-mars-2010/&quot; hreflang=&quot;fr&quot;&gt;ce billet&lt;/a&gt; sur le site d'Agile Nantes.
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;em&gt;&lt;strong&gt;Mise à jour du 29 mars 2010&amp;nbsp;: &lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;Cette rencontre s’est déroulée dans le cadre des rencontres agiles à Nantes dans des locaux prêtés à l’occasion par l’école SUPINFO.&lt;/p&gt;


&lt;p&gt;Voici les slides de la présentation.&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://blog.netapsys.fr/public/images/agile-nantes-IC/Presentation-IC-agileNantes.pdf&quot; hreflang=&quot;fr&quot;&gt;&lt;img src=&quot;http://blog.netapsys.fr/public/images/agile-nantes-IC/Miniature.png&quot; alt=&quot;Miniature.png&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.netapsys.fr/index.php/post/2010/03/01/Retours-dexperience-sur-lintegration-continue#comment-form</comments>
      <wfw:comment>http://blog.netapsys.fr/index.php/post/2010/03/01/Retours-dexperience-sur-lintegration-continue#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.netapsys.fr/index.php/feed/rss2/comments/132</wfw:commentRss>
      </item>
    
  <item>
    <title>Une bonne couverture pour l'hiver</title>
    <link>http://blog.netapsys.fr/index.php/post/2009/11/08/Ameliorer-la-couverture-du-code-avec-Emma</link>
    <guid isPermaLink="false">urn:md5:d089cd37201c4b4a8022ef80ea37598d</guid>
    <pubDate>Sun, 08 Nov 2009 22:52:00 +0100</pubDate>
    <dc:creator>Fabian Piau</dc:creator>
        <category>Agile</category>
        <category>agile</category><category>eclemma</category><category>eclipse</category><category>java</category><category>tests unitaires</category>    
    <description>&lt;h2&gt;Améliorer la couverture du code avec Emma&lt;/h2&gt;
&lt;p&gt;Dans cet article, je vous présente le plug-in &lt;a href=&quot;http://www.eclemma.org&quot; hreflang=&quot;fr&quot;&gt;EclEmma&lt;/a&gt; (contraction d'Eclipse et d'Emma), &lt;a href=&quot;http://emma.sourceforge.net&quot; hreflang=&quot;fr&quot;&gt;Emma&lt;/a&gt; est un analyseur de code Java open-source qui détermine la couverture du code. EclEmma est bien évidemment son portage sous Eclipse.&lt;/p&gt;
&lt;p&gt;Après l'avoir utilisé pendant quelques semaines, j'avoue me demander comment j'ai pu faire sans avant.&lt;/p&gt;    &lt;br /&gt;
&lt;h2&gt;Installation du plug-in&lt;/h2&gt;
&lt;p&gt;Tout d'abord, l'installation. Sous Eclipse, Help -&amp;gt; Install New Software... -&amp;gt; Add site. L'adresse est http://update.eclemma.org/. Après installation, Eclipse doit être redémarré.&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Utilisation&lt;/h2&gt;
&lt;p&gt;Habituellement, pour lancer vos tests unitaires, j'imagine que vous sélectionnez soit un package, soit une classe de tests ou soit un test seul, puis vous faites un clic droit, Run As -&amp;gt; JUnit Test&lt;/p&gt;
&lt;p&gt;Pour lancer le(s) test(s) avec EclEmma afin de vérifier la couverture correspondante, il vous suffit de faire quasiment la même chose. Vous utilisez le nouveau menu &quot;Coverage As&quot; au lieu du &quot;Run As&quot;. Notez qu'il est possible d'utiliser un bouton dans l'IHM, mais je préfère le menu.&lt;/p&gt;
&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_01.png&quot; alt=&quot;Nouveau bouton IHM&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;
&lt;br /&gt;
&lt;h2&gt;Présentation détaillée&lt;/h2&gt;
&lt;p&gt;Voici un exemple en images pour bien voir comment cela fonctionne.&lt;/p&gt;
&lt;p&gt;Nous souhaitons implémenter la fonctionnalité suivante: la conversion d'un texte au format HTML. Rien de bien évolué donc, mais parfait pour une présentation d'EclEmma.&lt;/p&gt;
&lt;p&gt;Nous allons créer un premier test pour tester la gestion des accents.&lt;/p&gt;
&lt;a href=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_02.png&quot;&gt;&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_02_redim.png&quot; alt=&quot;Un premier test&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
Le test ne compile même pas, nous allons implémenter juste le code qu'il faut pour qu'il compile.
&lt;p&gt;Après création de la classe ConvertToHtml et de sa méthode « convert », le test peut être lancé.&lt;/p&gt;
&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_03.png&quot; alt=&quot;Le code pour que le test compile&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;
&lt;br /&gt;
&lt;p&gt;Sans surprise, le test ne passe pas.&lt;/p&gt;
&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_04.png&quot; alt=&quot;Le test est en échec&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;
&lt;br /&gt;
&lt;p&gt;Implémentons la méthode « convert ».&lt;/p&gt;
&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_05.png&quot; alt=&quot;Le code suffisant pour passer le test&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;
&lt;br /&gt;
&lt;p&gt;Maintenant, le test réussit.&lt;/p&gt;
&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_06.png&quot; alt=&quot;Le test passe&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;
&lt;br /&gt;
&lt;p&gt;Le code n'est pas parfait, nous allons faire un peu de refactoring pour l'alléger et l'améliorer.&lt;/p&gt;
&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_07.png&quot; alt=&quot;Refactoring du code&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;
&lt;br /&gt;
&lt;p&gt;On vérifie que le test passe toujours.&lt;/p&gt;
&lt;p&gt;A cet instant précis, vous pouvez vous poser la question suivante : bon d'accord, je sais que le code que j'ai écrit passe le test. Mais, comment être sûr que je n'ai pas écrit trop de code, c'est-à-dire que j'ai écrit un code qui fait plus que ce que mon test lui demande...&lt;/p&gt;
&lt;p&gt;La solution est dans EclEmma. On relance le test avec ce dernier.&lt;/p&gt;
&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_08.png&quot; alt=&quot;Le code est couvert&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;
&lt;br /&gt;
&lt;p&gt;Le code testé est surligné en vert. Dans mon cas, tout est  complètement testé.&lt;/p&gt;
&lt;a href=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_09.png&quot;&gt;&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_09_redim.png&quot; alt=&quot;Le test est couvert&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;p&gt;En plus, un tableau résumé s'affiche en bas. Le taux de couverture indiqué est de 100%.&lt;/p&gt;
&lt;a href=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_10.png&quot;&gt;&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_10_redim.png&quot; alt=&quot;Tableau résumé EclEmma&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;p&gt;Bon, il faut avouer que ce n'était pas trop dur avec un exemple aussi simple, mais gardez en tête l'utilité d'un tel logiciel sur une application contenant plusieurs centaines de milliers de lignes de code avec quelques milliers de tests unitaires.&lt;/p&gt;
&lt;p&gt;Pour le tutoriel, je vais aller à l'encontre du principe TDD et  modifier le code métier sans avoir préalablement écrit mon test.&lt;/p&gt;
&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_11.png&quot; alt=&quot;Modification du code&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;
&lt;br /&gt;
&lt;p&gt;Relançons le test avec EclEmma.&lt;/p&gt;
&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_12.png&quot; alt=&quot;Le code n'est plus entièrement couvert&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;
&lt;br /&gt;
&lt;p&gt;Le taux de couverture est « tombé» (si j'ose dire) à 95%. Ce que nous avons ajouté n'est clairement pas couvert par un test unitaire. La ligne est surlignée en rouge. EclEmma nous donne tout de suite le feedback qu'il nous faut.&lt;/p&gt;
&lt;p&gt;Un coup d'œil au tableau résumé et je sais exactement quel est le fichier concerné. Bon là, c'est moins drôle, je n'en ai que deux, ce n'était pas trop difficile à trouver.&lt;/p&gt;
&lt;a href=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_13.png&quot;&gt;&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_13_redim.png&quot; alt=&quot;Tableau résumé EclEmma&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;p&gt;Sans plus attendre, nous allons ajouter le test pour tester la non-conversion d'un texte qui ne doit effectivement pas être converti.&lt;/p&gt;
&lt;a href=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_14.png&quot;&gt;&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_14_redim.png&quot; alt=&quot;Ajout d'un second test&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;p&gt;J'ai profité de la phase de réflexion sur l'écriture de mon test unitaire pour améliorer mon code métier en supprimant le préfixe en sortie, et en le mettant en constante.&lt;/p&gt;
&lt;p&gt;Je relance EclEmma... Je retrouve un taux de couverture à 100%, tout est bien testé, et mon code fait exactement ce que je veux qu'il fasse (pas plus, pas moins).&lt;/p&gt;
&lt;a href=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_15.png&quot;&gt;&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_15_redim.png&quot; alt=&quot;Retour à une couverture optimale&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;p&gt;Encore une fois, à des fins pédagogiques (bien sûr),  nous allons modifier le code métier sans avoir modifié les tests. Supposons que maintenant on utilise un suffixe de non-conversion. On relance EclEmma. Oh, les belles couleurs !&lt;/p&gt;
&lt;a href=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_16.png&quot;&gt;&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_16_redim.png&quot; alt=&quot;Une ligne à moitié couverte&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;p&gt;Une ligne est surlignée en jaune, elle est partiellement testée. Arrangeons le code en 2 lignes pour y voir plus clair.&lt;/p&gt;
&lt;a href=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_17.png&quot;&gt;&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_17_redim.png&quot; alt=&quot;Explications sur une ligne à moitié couverte&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;p&gt;Tout s'explique maintenant, on est passé dans la première partie du ET mais pas dans la seconde, car la première partie n'a pas été vérifiée.&lt;/p&gt;
&lt;p&gt;Vous l'aurez compris, EclEmma colorise les lignes de la façon suivante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;font color=&quot;green&quot;&gt;Vert:&lt;/font&gt;&lt;/strong&gt; la ligne est testée, un test (au moins) la vérifie.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;font color=&quot;#F24E4E&quot;&gt;Rouge:&lt;/font&gt;&lt;/strong&gt; la ligne n'est pas testée, aucun test ne la vérifie, il faut donc écrire un test.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;font color=&quot;#CAC41D&quot;&gt;Jaune:&lt;/font&gt;&lt;/strong&gt; la ligne est partiellement testée, elle contient du code testé et du code non testé. Pour voir exactement ce qui est testé, « cassez » la ligne en plusieurs morceaux comme j'ai fait précédemment.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;EclEmma fournit deux pourcentages de couverture, celui sur le code de l'application par les tests (c'est celui-ci qu'il faudra le plus surveiller, c'est le plus important), mais aussi le taux de couverture sur les tests eux-mêmes. Ce dernier peut-être utile, car il permet de faire un bon nettoyage dans les tests en montrant les lignes qui ne sont jamais utilisées.&lt;/p&gt;
&lt;p&gt;Enfin, si vous regardez les propriétés du projet, vous pouvez avoir un résumé de la couverture par type d'élément Java. Ces chiffres sont utiles pour le développeur, le chef de projet, et peuvent faire partie d'un livrable client.&lt;/p&gt;
&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_18.png&quot; alt=&quot;Second tableau résumé&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;
&lt;br /&gt;
&lt;p&gt;La configuration par défaut d'EclEmma est très suffisante. Vous pouvez paramétrer quelques options comme la personnalisation des 3 couleurs ou bien ajouter le taux de couverture dans le package explorer (comme ci-dessous).&lt;/p&gt;
&lt;img src=&quot;http://blog.netapsys.fr/public/images/eclemma/eclemma_19.png&quot; alt=&quot;Ajout des décorateurs de pourcentage&quot; style=&quot;margin: 0 auto; display: block;&quot; /&gt;
&lt;br /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Selon moi, EclEmma (Emma plus généralement pour ceux qui ne travaillent pas sous Eclipse) fait partie de la boîte à outils indispensables à  tout développeur JAVA travaillant quotidiennement avec des tests unitaires.&lt;/p&gt;
&lt;p&gt;Il vous aidera facilement à améliorer votre taux de couverture. Autrement dit, et pour être plus réaliste, il vous montrera efficacement que vous développez plus qu'il n'en faut pour passer vos tests. Ainsi, peut-être qu'un jour, vous réussirez à atteindre un taux de couverture proche du mythique 100% (mais là... rien n'est moins sûr, car tout n'est pas testable comme on le voudrait... c'est une autre histoire... et surtout un sujet différent).&lt;/p&gt;
&lt;p&gt;Je vous souhaite un bon test de ce logiciel sur vos tests !&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.netapsys.fr/index.php/post/2009/11/08/Ameliorer-la-couverture-du-code-avec-Emma#comment-form</comments>
      <wfw:comment>http://blog.netapsys.fr/index.php/post/2009/11/08/Ameliorer-la-couverture-du-code-avec-Emma#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.netapsys.fr/index.php/feed/rss2/comments/121</wfw:commentRss>
      </item>
    
  <item>
    <title>Scrum et XP : Retours d'expérience</title>
    <link>http://blog.netapsys.fr/index.php/post/2009/04/04/Scrum-et-XP-%3A-Retours-dexperience</link>
    <guid isPermaLink="false">urn:md5:19fe949dbc993d1962d58fbe5151f8e1</guid>
    <pubDate>Sat, 04 Apr 2009 18:50:00 +0200</pubDate>
    <dc:creator>Céline Gilet</dc:creator>
        <category>Agile</category>
        <category>agile</category><category>extreme programming</category><category>scrum</category>    
    <description>&lt;p&gt;Jeudi dernier, le groupe des praticiens Agiles de Nantes proposaient deux retours d'expérience autour des méthodes Scrum et de la mise en place de l'eXtreme Programming (XP).&lt;br /&gt;
Nous avons aussi pu bénéficier d'un retour sur la formation ScrumMaster dispensée par Pyxis.&lt;br /&gt;
Petit résumé de la soirée...&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Scrum&lt;/strong&gt; est une méthode agile utilisée pour la gestion de projet. Son objectif est de proposer au client une structure réactive pour mieux répondre à ses besoins et à ses demandes d'évolution tout au long du projet. Cette réactivité passe par une amélioration de la productivité des équipes.&lt;br /&gt;
Pour y parvenir, Scrum propose un certain nombre de préconisations en terme d'organisation et de communication. &lt;br /&gt;
&lt;br /&gt;
Au niveau organisationnel, Scrum identifie trois rôles différents :&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;le &lt;strong&gt;Directeur de Produit&lt;/strong&gt;  (&quot;&lt;strong&gt;Product Owner&lt;/strong&gt;&quot;)&amp;nbsp;: il s'agit du client ou du représentant du client. C'est lui qui a la connaissance métier et qui détermine l'ordre des fonctionnalités à implémenter.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;le &lt;strong&gt;ScrumMaster&lt;/strong&gt;&amp;nbsp;: il s'agit d'un membre de l'équipe projet. Il a en charge d'animer les daily meetings (points journaliers) et de motiver l'équipe. Un point essentiel&amp;nbsp;: ce rôle n'est pas forcément assuré par le chef de projet !&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;et le dernier acteur, sans qui rien ne serait possible, l' &lt;strong&gt;Equipe&lt;/strong&gt;&amp;nbsp;: c'est elle qui réalise l'application. Il n'y a pas de notion de hiérarchie dans l'équipe. Les décisions sont prises ensemble, notamment lors des daily meetings. On parle d'une équipe en auto-gestion&amp;nbsp;: chacun sait ce qui est à faire et pour quand. L'équipe partage donc cet objectif commun et c'est à elle de tout mettre en œuvre pour y arriver.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;
Le principe clé de Scrum est la &lt;strong&gt;communication&lt;/strong&gt;. C'est en communiquant le plus possible qu'on va être capable de résoudre les problèmes ou de détecter des incompatibilités entre fonctionnalités le plus tôt possible.&lt;br /&gt;
Pour mettre en place une communication efficace, Scrum propose les &lt;strong&gt;daily meetings&lt;/strong&gt;. Tous les acteurs du projet doivent y participer (y compris le client). L'objectif est de faire le point en toute transparence. Chaque membre de l'équipe indique :&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ce qu'il a fait hier&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;les problèmes qu'il a résolu&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ses éventuels points de blocage&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ce qu'il va faire aujourd'hui&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La présence du client est importante lors de ces points car cela lui permet de suivre l'état d'avancement de l'application et d'avoir connaissance des problèmes que rencontre l'équipe sur telle fonctionnalité. Une ré estimation ou un retard de livraison pour une fonctionnalité sera alors mieux compris.&lt;br /&gt;
Impliquer le client au quotidien et pas seulement lors des livraisons est un vrai challenge. C'est indéniablement l'élément le plus difficile à mettre en œuvre de la méthode Scrum. Sur le retour d'expérience présenté, c'est d'ailleurs l'implication du client qui a été mise de côté...&lt;br /&gt;
&lt;br /&gt;
Même si Scrum est un vaste sujet, passons au deuxième thème de la soirée&amp;nbsp;: l'eXtreme Programming.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;L'eXtreme Programming&lt;/strong&gt; (&lt;strong&gt;XP&lt;/strong&gt;) est une autre méthode agile de conduite de projet. Comparée à Scrum, XP propose des préconisations qui sont plus orientées côté technique.&lt;br /&gt;
On va alors retrouver, comme principes :&lt;br /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une &lt;strong&gt;conception simple&lt;/strong&gt; et qui évolue tout au long du projet (on ne garde que les diagrammes qui sont indispensables)&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;la mise en place d'une &lt;strong&gt;intégration continue&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;la mise en place de l'&lt;strong&gt;automatisation des tests&lt;/strong&gt; (qui permet d'assurer les opérations de refactoring)&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;la généralisation du &lt;strong&gt;pair-programming&lt;/strong&gt; (un développeur doit être capable d'intervenir sur l'ensemble du code de l'application)&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;l'application de &lt;strong&gt;normes de développement&lt;/strong&gt; (ces normes doivent être connues de tous les développeurs&amp;nbsp;: il est donc essentiel que les développeurs prennent part à leur définition au début du projet)&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Parmi tous ces principes, le plus dur à faire accepter (notamment à la direction) est le pair-programming, qui est souvent perçu comme une perte de temps.&lt;br /&gt;
&lt;br /&gt;
Scrum et XP ont une ligne directrice commune&amp;nbsp;: mettre définitivement de côté les méthodes de développement dites traditionnelles qui consistaient à suivre un cahier des charges et à livrer l'application en fin de projet. Le projet doit être découpé en plusieurs cycles et une livraison doit être faite à la fin de chaque cycle&amp;nbsp;: on parle de développement itératif. Les livraisons régulières (en moyenne tous les 30 jours) sont là pour obtenir des validations intermédiaires du client et pour être sûr d'être en adéquation avec le besoin.&lt;br /&gt;
&lt;br /&gt;
En résumé, &quot;&lt;strong&gt;pragmatisme&lt;/strong&gt;&quot;, &quot;&lt;strong&gt;souplesse&lt;/strong&gt;&quot; et &quot;&lt;strong&gt;simplicité&lt;/strong&gt;&quot; doivent être les valeurs de référence tout au long du projet&amp;nbsp;: les méthodes Scrum et XP sont là pour nous aider !!&lt;br /&gt;
&lt;br /&gt;
Et comme promis, le retour sur la formation de ScrumMaster dispensée par Pyxis qu'a suivie Pierrick Thibault, Directeur technique chez Carra Consulting. Il s'agit d'un retour positif, aussi bien sur le contenu que sur la qualité du formateur&amp;nbsp;: François Beauregard. Selon Pierrick, les présentations et les exercices pratiques permettent de prendre conscience de la nécessité d'apporter de l'agilité dans la gestion de projets.&lt;br /&gt;
Mais c'est à chacun de réfléchir à ce qu'il est possible d'appliquer sur un projet en fonction du client et de ses équipes&amp;nbsp;: il n'y a pas de recette miracle mais une liste d'ingrédients que chacun doit combiner&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.netapsys.fr/index.php/post/2009/04/04/Scrum-et-XP-%3A-Retours-dexperience#comment-form</comments>
      <wfw:comment>http://blog.netapsys.fr/index.php/post/2009/04/04/Scrum-et-XP-%3A-Retours-dexperience#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.netapsys.fr/index.php/feed/rss2/comments/84</wfw:commentRss>
      </item>
    
  <item>
    <title>La chandeleur chez Netapsys Atlantique</title>
    <link>http://blog.netapsys.fr/index.php/post/2009/02/10/La-chandeleur-chez-Netapsys-Atlantique</link>
    <guid isPermaLink="false">urn:md5:ff4dba0902f555d95cb3d78c9cc32979</guid>
    <pubDate>Tue, 10 Feb 2009 16:27:00 +0100</pubDate>
    <dc:creator>Denis Sanchez</dc:creator>
        <category>Netapsys</category>
        <category>agile</category><category>chandeleur</category><category>CHU</category><category>Nantes</category><category>netapsys atlantique</category>    
    <description>    &lt;p&gt;&lt;img src=&quot;http://blog.netapsys.fr/public/images/articles/netapsys/.crepes_t.jpg&quot; alt=&quot;crepe&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;
De nombreuses raisons de fêter la chandeleur chez Netapsys Atlantique.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Ce n'est pas la présentation de Jésus à toute l'équipe mais l'arrivée de Nicolas David stagiaire issu de Polytech Nantes.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Nicolas rejoint Netapsys pour terminer sa formation d'ingénieur. Son stage doit se dérouler sur une période de 5 mois.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;La seconde raison, c'est la première livraison de &quot;Easydor&quot;, l'application de gestion financière du CHU de Nantes après 2 mois de travail studieux où l'équipe nantaise a mis en place pour la première fois une gestion de projet et d'équipe avec les méthodes agiles. &lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Le premier bilan est très encourageant. En effet, de nombreux points ont été améliorés&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la communication&lt;/li&gt;
&lt;li&gt;la dynamique&lt;/li&gt;
&lt;li&gt;le partage des connaissances&lt;/li&gt;
&lt;li&gt;la mise en place des tests et de l'intégration continue&lt;/li&gt;
&lt;li&gt;le refactoring&lt;/li&gt;
&lt;li&gt;les stand’up&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Toutes ces bonnes nouvelles méritaient bien une petite crêpe&amp;nbsp;!&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.netapsys.fr/index.php/post/2009/02/10/La-chandeleur-chez-Netapsys-Atlantique#comment-form</comments>
      <wfw:comment>http://blog.netapsys.fr/index.php/post/2009/02/10/La-chandeleur-chez-Netapsys-Atlantique#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.netapsys.fr/index.php/feed/rss2/comments/68</wfw:commentRss>
      </item>
    
  <item>
    <title>Lean Management : les 7 principes</title>
    <link>http://blog.netapsys.fr/index.php/post/2008/07/25/Lean-Management-%3A-Les-7-principes</link>
    <guid isPermaLink="false">urn:md5:2ef65a5c4a9c2c46459774d56792ec50</guid>
    <pubDate>Fri, 25 Jul 2008 09:59:00 +0200</pubDate>
    <dc:creator>Can Atac</dc:creator>
        <category>Bonnes pratiques</category>
        <category>agile</category><category>lean</category><category>méthodologie</category><category>Poppendieck</category><category>xp</category>    
    <description>&lt;p&gt;Dans notre étude sur les apports de la méthodologie Lean prodiguée par le couple Poppendieck et son influence sur la méthodologie Agile, nous nous trouvons face à sept principes à respecter afin d'améliorer la valeur ajoutée de la production logicielle&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;l'élimination du gâchis (1)&lt;/li&gt;
&lt;li&gt;la création de la connaissance&lt;/li&gt;
&lt;li&gt;la construction de la qualité (5)&lt;/li&gt;
&lt;li&gt;le report de l'engagement (2)&lt;/li&gt;
&lt;li&gt;les livraisons rapides (3)&lt;/li&gt;
&lt;li&gt;le respect des personnes (4)&lt;/li&gt;
&lt;li&gt;l'amélioration du système&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reprenons quelques principes qui nous semblent avoir un lien de parenté avec les principes agiles.&lt;/p&gt;    &lt;ol&gt;
&lt;li&gt;Le coût des limites organisationnelles&amp;nbsp;: la communication est ralentie par les barrières organisationnelles qu'une entreprise met en place. Les Poppendieck annoncent une augmentation des coûts de 25%. Cette remarque soutient la bonne pratique Agile de rapprochement physique des parties prenantes d'un projet informatique&lt;/li&gt;
&lt;li&gt;Limiter &quot;agressivement&quot; la liste des points à livrer à la capacité de livraison (2). Cela se traduit par un report des engagements des parties prenantes sur le cahier des charges et le contenu des livraisons. Il s'agit de décider le plus tard possible&amp;nbsp;! Cela peut choquer au premier abord. L'idée est de figer les dates de livraison (la fin d'une itération en somme, ou d'un sprint à la sauce Scrum) et de laisser les acteurs décider du contenu des livraisons. Nous devinons les implications&amp;nbsp;: coopération des acteurs, transparence sur les charges, connaissance des problèmes...&lt;/li&gt;
&lt;li&gt;Livraison rapide&amp;nbsp;: inspirée des méthodes de production 'Just-In-Time' du secteur automobile (zéro stock), les parties prenantes racourcissent les délais de livraison. Cette accélération du rythme des livraisons est un des grands principes adoptés par les méthodes agiles.&lt;/li&gt;
&lt;li&gt;Le respect des personnes. Nous retrouvons cette valeur introduite en 2004 comme étant la cinquième dans les valeurs XP. En quoi est-il besoin de s'en préoccuper&amp;nbsp;? Sans aller étudier la théorie de la sociologie du travail, notre bon sens nous laisse deviner qu'une mise en confiance des équipes va améliorer, entre autres, la communication&amp;nbsp;: meilleure connaissance des problèmes, des charges associées au développement d'une fonction mais également l'implication. Nous voyons poindre ici deux valeurs XP&amp;nbsp;: communication et en second plan, le courage de prendre des risques.&lt;/li&gt;
&lt;li&gt;La construction de la qualité&amp;nbsp;: tests et retests. Aucun problème pour créer un nouveau lien vers XP...&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Même si la connaissance des principes de la gestion de projet &quot;Lean&quot; ne bouleverse pas les praticiens des méthodes agiles, elle offre une vision plus orientée 'coût' et ouvre un champ d'étude de bonnes pratiques issues de méthodes historiques de management provenant d'autres secteurs (de chez Toyota en particulier).&lt;/p&gt;


&lt;p&gt;Une preuve, s'il en est, que les managers en informatique ne sont pas les premiers ou les seuls au monde à penser le changement ;-)&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.netapsys.fr/index.php/post/2008/07/25/Lean-Management-%3A-Les-7-principes#comment-form</comments>
      <wfw:comment>http://blog.netapsys.fr/index.php/post/2008/07/25/Lean-Management-%3A-Les-7-principes#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.netapsys.fr/index.php/feed/rss2/comments/35</wfw:commentRss>
      </item>
    
  <item>
    <title>Les Poppendieck : une source d'inspiration de la communauté Agile</title>
    <link>http://blog.netapsys.fr/index.php/post/2008/07/08/Les-Poppendieck-%3A-Une-source-dinspiration-de-la-communaute-Agile</link>
    <guid isPermaLink="false">urn:md5:b239e209d7d3ebfbc4f069c7c4fe7812</guid>
    <pubDate>Tue, 08 Jul 2008 14:28:00 +0200</pubDate>
    <dc:creator>Can Atac</dc:creator>
        <category>Agile</category>
        <category>agile</category><category>lean</category><category>méthodologie</category><category>Poppendieck</category>    
    <description>    &lt;p&gt;C'est en lisant un billet récent sur le site de Martin Fowler répondant à la question
&lt;a href=&quot;http://martinfowler.com/bliki/AgileVersusLean.html&quot;&gt;&quot;I'm thinking of using agile software development - but should I use Lean software development instead?&quot;&lt;/a&gt;, que je me suis mis à m'intéresser au Lean software development.&lt;/p&gt;


&lt;p&gt;Ce papier super intéressant rappelle les influences des méthodes &quot;Lean&quot; issues du secteur automobile japonais sur les développements &quot;Agile&quot;.&lt;/p&gt;


&lt;p&gt;Un petit tour sur le site du couple &lt;a href=&quot;http://www.poppendieck.com/&quot; hreflang=&quot;fr&quot;&gt;Poppendieck&lt;/a&gt; offre au visiteur quelques principes &quot;Lean&quot; et invite à les comparer avec les principes derrière le &lt;a href=&quot;http://agilemanifesto.org/principles.html&quot; hreflang=&quot;fr&quot;&gt;Manifeste Agile&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Nous tenterons de cerner les points communs et les divergences.&lt;/p&gt;


&lt;p&gt;A retenir, Martin Fowler et Jez Humble animeront un webinar le 28/07/08 sur la gestion des mises en production à la sauce 'Lean' autour du nouveau produit 'Cruise' de la société ThoughtWorks.&lt;/p&gt;


&lt;p&gt;A suivre...&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.netapsys.fr/index.php/post/2008/07/08/Les-Poppendieck-%3A-Une-source-dinspiration-de-la-communaute-Agile#comment-form</comments>
      <wfw:comment>http://blog.netapsys.fr/index.php/post/2008/07/08/Les-Poppendieck-%3A-Une-source-dinspiration-de-la-communaute-Agile#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.netapsys.fr/index.php/feed/rss2/comments/33</wfw:commentRss>
      </item>
    
</channel>
</rss>