<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>tyPouypOblOg : Tag test, everything about test</title>
    <link>http://www.typouype.org/tag/test.rss</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>Libre, Ruby, Objet, OpenBSD, Programmation</description>
    <item>
      <title>TDD C'est quoi ? (En ruby bien sur !) </title>
      <description>&lt;p&gt;&lt;em&gt;Voici un petit billet d&amp;#8217;initiation au D&#233;veloppement pilot&#233; par les Test (dit &lt;span class="caps"&gt;TDD&lt;/span&gt; pour Test Driven Development) avec Ruby. Initialiement publi&#233; sur le site de l&amp;#8217;association &lt;a href="http://rubyfrance.org"&gt;RubyFrance&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Imaginons que nous ayons besoin d&amp;#8217;un petit objet nous permettant d&amp;#8217;afficher un nom. En bon d&#233;veloppeur, nous allons d&amp;#8217;abord &#233;crire notre test.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;require &amp;quot;test/unit&amp;quot;

class TestMonObjet &amp;lt; Test::Unit::TestCase
  def test_attribut
    monObjet = MonObjet.new(&amp;quot;un titre&amp;quot;)
    assert_equal &amp;quot;un titre&amp;quot;, monObjet.nom
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Executons le test:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb
Loaded suite testMonObjet
Started
E
Finished in 0.001079 seconds.

  1) Error:
test_attribut(MonObjetTest):
NameError: uninitialized constant MonObjetTest::MonObjet
    testMonObjet.rb:6:in `test_attribut'

1 tests, 0 assertions, 0 failures, 1 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Mince une erreur. Vous allez me dire, c&amp;#8217;&#233;tait couru d&amp;#8217;avance, on a encore rien cod&#233;. Bien. Allons-y alors. D&amp;#8217;abord nous allons ajouter le fichier contenant l&amp;#8217;objet que nous allons cr&#233;er.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;require &amp;quot;monobjet.rb&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Ensuite cr&#233;ons ce fichier:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ cat monobjet.rb
class MonObjet
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Cela suffira largement pour empecher l&amp;#8217;erreur pr&#233;cedente. C&amp;#8217;est un point important dans l&amp;#8217;univers &lt;span class="caps"&gt;TDD&lt;/span&gt;. Il ne faut rien faire de plus que ce que les tests nous demande. Cela rejoint &#233;galement un autre concept: &lt;span class="caps"&gt;YAGNI&lt;/span&gt; (You Ain&amp;#8217;t Gonna Need It).&lt;/p&gt;


	&lt;p&gt;Executons encore ce test:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb
Loaded suite testMonObjet
Started
E
Finished in 0.00193 seconds.

  1) Error:
test_attribut(MonObjetTest):
ArgumentError: wrong number of arguments (1 for 0)
    testMonObjet.rb:7:in `initialize'
    testMonObjet.rb:7:in `new'
    testMonObjet.rb:7:in `test_attribut'

1 tests, 0 assertions, 0 failures, 1 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Hmm, encore une erreur, mais cette fois ce sont les param&#232;tres de notre objet qui pose probl&#232;me. Bien, corrigeons notre objet.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ cat monobjet.rb
class MonObjet
  def initialize un_nom
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Executons encore ce test:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb  
Loaded suite testMonObjet
Started
E
Finished in 0.001091 seconds.

  1) Error:
test_attribut(MonObjetTest):
NoMethodError: undefined method `nom' for #&amp;lt;MonObjet:0x80e4d100&amp;gt;
    testMonObjet.rb:8:in `test_attribut'

1 tests, 0 assertions, 0 failures, 1 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Encore une erreur. Mais cette fois c&amp;#8217;est la method nom qui est manquante pour MonObjet. Ajoutons la:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ cat monobjet.rb
class MonObjet
  def initialize un_nom
  end
  def nom
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Executons le test (oui, en tdd, on passe notre temps &#224; tester ! :-)):&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb  
Loaded suite testMonObjet
Started
F
Finished in 0.198677 seconds.

  1) Failure:
test_attribut(MonObjetTest) [testMonObjet.rb:8]:
&amp;lt;&amp;quot;un titre&amp;quot;&amp;gt; expected but was
&amp;lt;nil&amp;gt;.

1 tests, 1 assertions, 1 failures, 0 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Voil&#224; qui deviens interessant. Cette fois, ce n&amp;#8217;est pas une erreur, c&amp;#8217;est un echec du test. La m&#233;thode &amp;#8220;nom&amp;#8221; ne renvoi pas la bonne valeur. 
La situation d&amp;#8217;echec dans le test unitaire est aussi appel&#233; &amp;#8220;la barre rouge&amp;#8221;. Et quand il y a une barre rouge, le principe est de la faire redevenir verte le plus rapidement possible (en ajoutant tr&#232;s peu de code voir en enlevant du code).&lt;/p&gt;


	&lt;p&gt;Modifions donc rapidement notre code pour r&#233;pondre au besoin du test:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ cat monobjet.rb
class MonObjet
  def initialize un_nom
  end
  def nom
    &amp;quot;un titre&amp;quot;
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Doucement, doucement, je vous vois venir, oui j&amp;#8217;ai mis une valeur en dur, executons le test (c&amp;#8217;est barre rouge), nous en parlons juste apr&#232;s.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb  
Loaded suite testMonObjet
Started
.
Finished in 0.000902 seconds.

1 tests, 1 assertions, 0 failures, 0 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Voil&#224;, le test passe. Nous pouvons maintenant parler. J&amp;#8217;ai mis une valeur en dur dans la m&#233;thode &amp;#8220;nom&amp;#8221;, cela vous d&#233;range ? Et bien pas moi. Je r&#233;pond ici au besoin exprim&#233; dans le test. Mais je n&amp;#8217;ai pas dit que nous allions nous arreter l&#224; ! Ajoutons un test pour bien pr&#233;ciser notre besoin.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;require &amp;quot;test/unit&amp;quot;

class TestMonObjet &amp;lt; Test::Unit::TestCase
  def test_attribut
    monObjet = MonObjet.new(&amp;quot;un titre&amp;quot;)
    assert_equal &amp;quot;un titre&amp;quot;, monObjet.nom
  end
  def test_attribut_autre
    monObjet = MonObjet.new(&amp;quot;un autre titre&amp;quot;)
    assert_equal &amp;quot;un autre titre&amp;quot;, monObjet.nom
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Executons le test unitaire maintenant enrichi d&amp;#8217;un test.&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb  
Loaded suite testMonObjet
Started
.F
Finished in 0.024359 seconds.

  1) Failure:
test_attribut_autre(MonObjetTest) [testMonObjet.rb:12]:
&amp;lt;&amp;quot;un autre titre&amp;quot;&amp;gt; expected but was
&amp;lt;&amp;quot;un titre&amp;quot;&amp;gt;.

2 tests, 2 assertions, 1 failures, 0 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Forcement, avec une valeur en dur, cela ne vas pas. Faisons passer la barre au vert avant de discuter:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ cat monobjet.rb
class MonObjet
  def initialize un_nom
    @nom = un_nom
  end
  def nom
    @nom
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Executons le test:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb  
Loaded suite testMonObjet
Started
..
Finished in 0.001734 seconds.

2 tests, 2 assertions, 0 failures, 0 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Parfait ! Barre verte !&lt;/p&gt;


	&lt;p&gt;Bien, maintenant, on peut laisser &#233;taler nos connaissance en ruby pour effectuer un petit refactoring:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ cat monobjet.rb
class MonObjet
  attr_reader :nom
  def initialize un_nom
    @nom = un_nom
  end
end&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Executons le test a nouveau pour &#234;tre sur que ce refactoring n&amp;#8217;a pas chang&#233; la donne:&lt;/p&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;rubyFrance:~ $ ruby testMonObjet.rb  
Loaded suite testMonObjet
Started
..
Finished in 0.001734 seconds.

2 tests, 2 assertions, 0 failures, 0 errors&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Un des inter&#234;t de faire un d&#233;veloppement pilot&#233; par les tests c&amp;#8217;est de tendre une sorte de filet de s&#233;curit&#233; permettant de donn&#233;e plus de courage, ou au moins de tranquillit&#233; pour effectuer le refactoring. Mais il existe bien d&amp;#8217;autre avantage &#224; ce mode de d&#233;veloppement. Notamment celui de ne pas faire plus que n&#233;cessaire.&lt;/p&gt;


	&lt;p&gt;Les tests ainsi &#233;crit, modifi&#233;, mis &#224; jour permette de disposer &#224; tout moment d&amp;#8217;une documentation sur l&amp;#8217;execution du programme.&lt;/p&gt;</description>
      <pubDate>Sun, 28 Sep 2008 19:14:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:38bbeb2c-b2ea-4207-b07d-cc7cc1821e94</guid>
      <comments>http://www.typouype.org/2008/09/28/tdd-c-est-quoi#comments</comments>
      <category>Ruby</category>
      <category>tdd</category>
      <category>test</category>
      <category>agiles</category>
      <category>Code</category>
      <link>http://www.typouype.org/2008/09/28/tdd-c-est-quoi</link>
    </item>
    <item>
      <title>Ruby : Test Unitaire</title>
      <description>&lt;p&gt;Ruby b&#233;n&#233;ficie comme beaucoup d&amp;#8217;autres langages modernes de son framework de test. Voici donc une petite documentation sur &lt;strong&gt;comment &#233;crire un test unitaire&lt;/strong&gt; pour Ruby.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;Pour ceux qui ne savent pas ce qu&amp;#8217;est un test unitaire, je vous renvoie sur l&amp;#8217;article &lt;a href="http://fr.wikipedia.org/wiki/Test_unitaire"&gt;Test Unitaire [wikipedia]&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Pour commencer il nous faut importer la librairie &amp;#8220;Test::Unit&amp;#8221;&lt;/p&gt;


&lt;pre&gt;
require "test/unit" 
&lt;/pre&gt;

	&lt;p&gt;Rien que cela nous permet d&#233;j&#224; de faire un premier test en executant notre script.&lt;/p&gt;


&lt;pre&gt;
yannick@libellule:~/Code/RubyFrance/testUnit $ ruby testUnit.rb
Loaded suite testUnit
Started

Finished in 0.000607 seconds.

0 test, 0 assertions, 0 failures, 0 errors
&lt;/pre&gt;

	&lt;p&gt;Le fait d&amp;#8217;inclure la librairie de test unitaire permet d&amp;#8217;avoir un comportement par d&#233;faut qui va:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Charger la suite de test &#224; executer&lt;/li&gt;
		&lt;li&gt;lancer les tests&lt;/li&gt;
		&lt;li&gt;faire l&amp;#8217;affichage des resultats de test&lt;/li&gt;
		&lt;li&gt;faire un compte rendu de cette execution&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Ajoutons un test maintenant&lt;/p&gt;


&lt;pre&gt;
require "test/unit" 

class StringTest &amp;lt; Test::Unit::TestCase
  def test_length
    s = "Bon test &#224; tous !" 
    assert_equal(17, s.length)
  end
end
&lt;/pre&gt;

	&lt;p&gt;Nous avons d&#233;fini une classe, celle-ci doit &#233;tendre TestCase. Cela permet au framework de test de s&amp;#8217;y retrouver.
Chaque m&#233;thode de test d&#233;finie ensuite doit contenir &lt;code&gt;test&lt;/code&gt; en d&#233;but de nom (le caract&#232;re &lt;code&gt;_&lt;/code&gt; n&amp;#8217;est plac&#233; que pour une meilleur lisibilit&#233; et selon les conventions couramment appliqu&#233;es en Ruby)&lt;/p&gt;


	&lt;p&gt;Les m&#233;thodes assert (ici &lt;code&gt;assert_equal&lt;/code&gt;, mais il en existe beaucoup d&amp;#8217;autres) permettent d&amp;#8217;effectuer un test. Ici un test d&amp;#8217;&#233;galit&#233;, mais nous pourrions &#233;galement v&#233;rifi&#233; une diff&#233;rence, un boul&#233;en r&#233;pondant vrai ou faux et d&amp;#8217;autres encore (voir la documentation sur le &lt;a href="http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/classes/Test/Unit/Assertions.html"&gt;module Test::Unit::Assertions&lt;/a&gt;).&lt;/p&gt;


	&lt;p&gt;Apr&#232;s execution, voici le r&#233;sultat:&lt;/p&gt;


&lt;pre&gt;
yannick@libellule:~/Code/RubyFrance/testUnit $ ruby testUnit.rb
Loaded suite testUnit
Started
.
Finished in 0.000802 seconds.

1 test, 1 assertions, 0 failures, 0 errors
&lt;/pre&gt;

	&lt;p&gt;Un test a &#233;t&#233; execut&#233; avec succ&#232;s.&lt;/p&gt;


	&lt;p&gt;Ajoutons encore un test pour avancer:&lt;/p&gt;


&lt;pre&gt;
require "test/unit" 

class StringTest &amp;lt; Test::Unit::TestCase
  def test_length
    s = "Bon test &#224; tous !" 
    assert_equal(17, s.length)
  end
  def test_expression_substitution
    assert_equal("", "#{'ah! ' * 3}")
  end
end
&lt;/pre&gt;

	&lt;p&gt;Apr&#232;s ex&#233;cution nous obtenons:&lt;/p&gt;


&lt;pre&gt;
yannick@libellule:~/Code/RubyFrance/testUnit $ ruby testUnit.rb
Loaded suite testUnit
Started
F.
Finished in 0.000827 seconds.

  1) Failure:
test_expression_substitution(StringTest) [testUnit.rb:12]:
&amp;lt;""&amp;gt; expectedbut was
&amp;lt;"ah! ah! ah! "&amp;gt;.
2 test, 2 assertions, 1 failures, 0 errors
&lt;/pre&gt;

	&lt;p&gt;Et voil&#224;, comme vous l&amp;#8217;aviez devin&#233;, nous avons une erreur. Dans notre cas, l&amp;#8217;erreur viens de notre test.&lt;/p&gt;


	&lt;p&gt;On vois ici l&amp;#8217;inter&#234;t de mettre chaque test sur un domaine diff&#233;rent dans une m&#233;thode diff&#233;rente: on vois facilement quel type de test nous voulions effectuer. Dans le d&#233;veloppement d&amp;#8217;une application compl&#232;te, avec plusieurs dizaines d&amp;#8217;objets &#224; tester, et plusieurs dizaines de m&#233;thodes sur chacun d&amp;#8217;eux, les erreurs d&amp;#8217;ex&#233;cution de test peuvent devenir un vrai casse-t&#234;te.&lt;/p&gt;


	&lt;p&gt;Effectuons la correction:&lt;/p&gt;


&lt;pre&gt;
require "test/unit" 

class StringTest &amp;lt; Test::Unit::TestCase
  def test_length
    s = "Bon test &#224; tous !" 
    assert_equal(17, s.length)
  end
  def test_expression_substitution
    assert_equal("ah! ah! ah! ", "#{'ah! ' * 3}")
  end
end
&lt;/pre&gt;

	&lt;p&gt;ex&#233;cution du test:&lt;/p&gt;


&lt;pre&gt;
yannick@libellule:~/Code/RubyFrance/testUnit $ ruby testUnit.rb
Loaded suite testUnit
Started
..
Finished in 0.001273 seconds.

2 test, 2 assertions, 0 failures, 0 errors
&lt;/pre&gt;

	&lt;p&gt;Et voil&#224;. Vous devriez &#234;tre capables de commencer &#224; &#233;crire quelques tests, mais ce n&#8217;est qu&#8217;un d&#233;but !.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;&lt;strong&gt;Cet article a &#233;t&#233; &#233;crit pour le site de l&amp;#8217;association &lt;a href="http://www.rubyfrance.org"&gt;RubyFrance&lt;/a&gt;, vous pourrez le retrouver dans les documentations propos&#233;es par l&amp;#8217;association: &lt;a href="http://rubyfrance.org/documentations/test-unitaire/"&gt;RubyFrance: TestUnitaire&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 15 Aug 2008 14:41:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:dc63084f-0cd8-4d87-b869-f08b1e45c8a3</guid>
      <comments>http://www.typouype.org/2008/08/15/ruby-test-unitaire#comments</comments>
      <category>Ruby</category>
      <category>testunit</category>
      <category>testfirst</category>
      <category>test</category>
      <link>http://www.typouype.org/2008/08/15/ruby-test-unitaire</link>
    </item>
    <item>
      <title>Dojo</title>
      <description>&lt;p&gt;Lundi soir, comme apparemment presque tout les lundi soir, c&amp;#8217;est rendez-vous au &lt;strong&gt;dojo&lt;/strong&gt;. Non pas celui des arts martiaux, mais celui du d&#233;veloppement. Pour rester &lt;strong&gt;agiles&lt;/strong&gt;, l&amp;#8217;association &lt;a href="http://xp-france.org"&gt;XP-France&lt;/a&gt; organise des rencontres au dojo.&lt;/p&gt;


	&lt;p&gt;Dans une salle gentillement fourni par &lt;a href="http://www.epiconcept.com"&gt;EpiConcept&lt;/a&gt;, des praticiens agiles se retrouvent pour un Kata voir un Randori.&lt;/p&gt;


	&lt;p&gt;J&amp;#8217;ai pass&#233; une super soir&#233;e. J&amp;#8217;ai d&#233;couvert &lt;a href="http://www.haskell.org/"&gt;Haskell&lt;/a&gt; un langage fonctionnel pur (c&amp;#8217;est a pr&#233;ciser apparemment ;-)). J&amp;#8217;ai vu des tests, et encore des tests et c&amp;#8217;est beau. Vivement le prochain !&lt;/p&gt;


	&lt;p&gt;Si vous voulez en savoir plus: Voir &lt;a href="http://xp-france.net/cgi-bin/wiki.pl?LeProjetDuDojo"&gt;le projet Dojo&lt;/a&gt; sur le wiki de l&amp;#8217;asso.&lt;/p&gt;


	&lt;p&gt;Moi je vais tenter d&amp;#8217;y aller tout les lundi :-D&lt;/p&gt;</description>
      <pubDate>Tue, 22 Apr 2008 22:15:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:28808fd9-c52c-40e1-8be1-a645e3fd3792</guid>
      <comments>http://www.typouype.org/2008/04/22/dojo#comments</comments>
      <category>agiles</category>
      <category>dojo</category>
      <category>haskell</category>
      <category>tdd</category>
      <category>XP</category>
      <category>xpfrance</category>
      <category>test</category>
      <link>http://www.typouype.org/2008/04/22/dojo</link>
    </item>
    <item>
      <title>5e ap&#233;ro rubyFrance</title>
      <description>&lt;p&gt;&lt;em&gt;une semaine plus tard&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;Cet session f&#251;t tr&#232;s bonne. Pas loin de 30 personnes ont fait le d&#233;placement pour cette &amp;#8220;ap&#233;ro&amp;#8221; qui en fait ressemblait plus &#224; une bonne pr&#233;sentation.&lt;/p&gt;


	&lt;p&gt;Le th&#232;me principal de ce lundi &#233;tait l&amp;#8217;agilit&#233;, l&amp;#8217;extreme programming, les tests. En effet, des membres de l&amp;#8217;association &lt;a href="http://www.xp-france.net"&gt;XP-France&lt;/a&gt; sont venus nous pr&#233;senter l&amp;#8217;agilit&#233;, le d&#233;veloppement pilot&#233; par les tests le tout dans sous la forme d&amp;#8217;un &lt;strong&gt;kata&lt;/strong&gt;, une des pratiques de dojo.&lt;/p&gt;


	&lt;p&gt;Ensuite, Jean-Fran&#231;ois nous a pr&#233;senter une toute nouvelle librairie ruby qui gagne &#224; &#234;tre connu: Arel &#233;galement appel&#233; &lt;a href="http://wiki.rubyonrails.org/rails/pages/ActiveResource"&gt;ActiveRessource&lt;/a&gt;. Un librairie visant &#224; permettre la cr&#233;ation d&amp;#8217;&lt;acronym title="Object Relationnal Mapping"&gt;ORM&lt;/acronym&gt;. Disont pour r&#233;sum&#233; que cela enl&#232;verais la couche &amp;#8220;concat&#233;nation de chaine de caract&#232;res&amp;#8221; dans ActiveRecord par exemple, et du coup nous aurions le moyen de construire plus joliement des requ&#234;te &lt;span class="caps"&gt;SQL&lt;/span&gt;. A suivre donc.&lt;/p&gt;


	&lt;p&gt;Depuis quelque temps d&#233;j&#224; je m&amp;#8217;interesse aux m&#233;thodes agiles, &#224; l&amp;#8217;extreme programming, cette pr&#233;sentation &#224; fini de me convaincre qu&amp;#8217;il faut absoluement que j&amp;#8217;aille en Dojo pour pratiquer le code, &#233;changer avec d&amp;#8217;autres personnes agu&#233;ri &#224; ces techniques de tests et de fa&#231;on de voir le code.&lt;/p&gt;


	&lt;p&gt;On en reparle plus tard ;-)&lt;/p&gt;</description>
      <pubDate>Sat, 19 Apr 2008 10:40:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:3bbb1fd1-b922-4daa-a3dc-f2c09fce074e</guid>
      <comments>http://www.typouype.org/2008/04/19/5e-apero-rubyfrance#comments</comments>
      <category>Ruby</category>
      <category>agile</category>
      <category>test</category>
      <category>XP</category>
      <category>activeressources</category>
      <category>orm</category>
      <link>http://www.typouype.org/2008/04/19/5e-apero-rubyfrance</link>
    </item>
  </channel>
</rss>
