Files
lespiedsdanslecode/public/posts/2008/2008-09-28-tdd-c-est-quoi/index.html
T
2019-02-24 23:33:14 +01:00

102 lines
5.1 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Yannick François - Les pieds dans le code</title>
<meta name="DC.title" content="elsif.fr, site de Yannick François aka yaf aka pouype."/>
<meta name="description" content="Yannick François's website. Senior developer, Code pedagogist. /ut7 teammate, proud member of Electrolab, the crazy hackerspace. Eternel supporter of April, a french association about freesoftware."/>
<meta name="keywords" content="code, développement, lean, agile, logiciel, tdd, objet, ruby, site perso, personnel, ruby on rails, refactoring, openbsd, bsd, libre, creative commons, unix"/>
<meta name="author" content="Yannick François, https://elsif.fr"/>
<meta name="designer" content="Yannick François, https://elsif.fr"/>
<meta name="geo.placename" content="Poissy, Ile de france, France"/>
<meta name="robots" content="index,follow" />
<meta name="language" content="French" />
<meta name="HandheldFriendly" content="True" />
<meta name="MobileOptimized" content="320" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0" />
<link rel="index" title="Yannick François / Developer" href="https://elsif.fr" />
<link rel="stylesheet" href="/css/knacss.css" media="all"/>
<link rel="stylesheet" href="/css/elsif.css" media="all"/>
<article>
<h1>
TDD C&rsquo;est quoi ? (En ruby bien sur !)
</h1>
<p><em>Voici un petit billet dinitiation au Développement piloté par les Test (dit <span class="caps">TDD</span> pour Test Driven Development) avec Ruby. Initialiement publié sur le site de lassociation &ldquo;RubyFrance</em>&ldquo;:<a href="http://rubyfrance.org">http://rubyfrance.org</a></p>
<p>Imaginons que nous ayons besoin dun petit objet nous permettant dafficher un nom. En bon développeur, nous allons dabord écrire notre test.</p>
<p>Executons le test:</p>
<p><notextile>
Mince une erreur. Vous allez me dire, c’était couru davance, on a encore rien codé. Bien. Allons-y alors. Dabord nous allons ajouter le fichier contenant lobjet que nous allons créer.
</notextile></p>
<p>Ensuite créons ce fichier:</p>
<p><notextile>
Cela suffira largement pour empecher lerreur précedente. Cest un point important dans lunivers <span class="caps">TDD</span>. Il ne faut rien faire de plus que ce que les tests nous demande. Cela rejoint également un autre concept: <span class="caps">YAGNI</span> (You Aint Gonna Need It).</p>
<p>Executons encore ce test:
</notextile></p>
<p>Hmm, encore une erreur, mais cette fois ce sont les paramètres de notre objet qui pose problème. Bien, corrigeons notre objet.</p>
<p><notextile>
Executons encore ce test:
</notextile></p>
<p>Encore une erreur. Mais cette fois c&rsquo;est la method nom qui est manquante pour MonObjet. Ajoutons la:</p>
<p><notextile>
Executons le test (oui, en tdd, on passe notre temps à tester ! :-)):
</notextile></p>
<p>Voilà qui deviens interessant. Cette fois, ce n&rsquo;est pas une erreur, c&rsquo;est un echec du test. La méthode &ldquo;nom&rdquo; ne renvoi pas la bonne valeur.
La situation d&rsquo;echec dans le test unitaire est aussi appelé &ldquo;la barre rouge&rdquo;. Et quand il y a une barre rouge, le principe est de la faire redevenir verte le plus rapidement possible (en ajoutant très peu de code voir en enlevant du code).</p>
<p>Modifions donc rapidement notre code pour répondre au besoin du test:</p>
<p><notextile>
Doucement, doucement, je vous vois venir, oui jai mis une valeur en dur, executons le test (cest barre rouge), nous en parlons juste après.
</notextile></p>
<p>Voilà, le test passe. Nous pouvons maintenant parler. J&rsquo;ai mis une valeur en dur dans la méthode &ldquo;nom&rdquo;, cela vous dérange ? Et bien pas moi. Je répond ici au besoin exprimé dans le test. Mais je n&rsquo;ai pas dit que nous allions nous arreter là ! Ajoutons un test pour bien préciser notre besoin.</p>
<p><notextile>
Executons le test unitaire maintenant enrichi dun test.
</notextile></p>
<p>Forcement, avec une valeur en dur, cela ne vas pas. Faisons passer la barre au vert avant de discuter:</p>
<p><notextile>
Executons le test:
</notextile></p>
<p>Parfait ! Barre verte !</p>
<p>Bien, maintenant, on peut laisser étaler nos connaissance en ruby pour effectuer un petit refactoring:</p>
<p><notextile>
Executons le test a nouveau pour être sur que ce refactoring na pas changé la donne:</p>
<p></notextile>
Un des interêt de faire un développement piloté par les tests cest de tendre une sorte de filet de sécurité permettant de donnée plus de courage, ou au moins de tranquillité pour effectuer le refactoring. Mais il existe bien dautre avantage à ce mode de développement. Notamment celui de ne pas faire plus que nécessaire.</p>
<p>Les tests ainsi écrit, modifié, mis à jour permette de disposer à tout moment dune documentation sur lexecution du programme.</p>
<article>
<footer style="font-size:75%;text-align:right"><em><a href="/feed.xml">suivre les articles</a></em></footer>
</body>
</html>