<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>A la Poursuite du Code en Rouge &#187; Epistémologie</title>
	<atom:link href="http://www.schwinl.net/tag/epistemologie/feed" rel="self" type="application/rss+xml" />
	<link>http://www.schwinl.net</link>
	<description>Le blog de Guillaume Rams sur le génie logiciel</description>
	<lastBuildDate>Thu, 02 Feb 2012 20:43:34 +0000</lastBuildDate>
	<language>fr</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Une réfutation de l&#8217;écriture du test en premier (Test-Driven Development)</title>
		<link>http://www.schwinl.net/articles/refutation-du-tdd</link>
		<comments>http://www.schwinl.net/articles/refutation-du-tdd#comments</comments>
		<pubDate>Wed, 28 Jul 2010 21:37:24 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[Cross-post Oxiane]]></category>
		<category><![CDATA[Génie Logiciel]]></category>
		<category><![CDATA[Epistémologie]]></category>
		<category><![CDATA[Extreme Programming]]></category>
		<category><![CDATA[Popper]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Test]]></category>

		<guid isPermaLink="false">http://www.schwinl.net/?p=228</guid>
		<description><![CDATA[Karl Popper est un philosophe des sciences ayant fait des apports majeurs à l&#8217;épistémologie, avec entre autres sa définition de la démarche scientifique par la réfutabilité. Je me suis amusé à appliquer certaines de ses thèses à la mise au point de programmes, en supposant qu&#8217;un programme soit une connaissance objective au même titre qu&#8217;un [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_231" class="wp-caption alignleft" style="width: 215px"><a href="http://www.amazon.fr/Conjectures-r%C3%A9futations-croissance-savoir-scientifique/dp/2228900583/"><img class="size-full wp-image-231 " title="Conjectures et réfutations" src="http://www.schwinl.net/wp-content/uploads/2010/07/conjectures.png" alt="" width="205" height="316" /></a><p class="wp-caption-text">Conjectures et réfutations</p></div>
<p>Karl Popper est un philosophe des sciences ayant fait des apports majeurs à l&#8217;épistémologie, avec entre autres sa définition de la démarche scientifique par la réfutabilité. Je me suis amusé à appliquer certaines de ses thèses à la mise au point de programmes, en supposant qu&#8217;un programme soit une connaissance objective au même titre qu&#8217;un théorème ou qu&#8217;une théorie scientifique.</p>
<p>Si on applique ces thèses, on peut démontrer que la lecture du code source ne suffit pas, par la seule puissance de la déduction, à prouver que le programme est correct. D&#8217;ailleurs, un test ne peut pas prouver la validité d&#8217;un programme, au contraire, il ne peut que mettre en évidence une erreur. Popper démontre que le raisonnement inductif n&#8217;est pas la méthode rationnelle pour se rapprocher de la vérité, mais que nous procédons par conjectures et réfutations. Tout raisonnement fonctionnerait à partir de théories que l&#8217;on essaie de contredire, par l&#8217;expérimentation ou par la logique. Pour valider un programme on cherche à le mettre en défaut, ce qui est pourtant intuitivement l&#8217;inverse du résultat visé.</p>
<p>Je vois donc la programmation comme l&#8217;ajout de conjectures sur un fond initial (langage de programmation employé, librairies, système d&#8217;exploitation, autres applications). Fond qui, en passant, est également réfutable selon Popper, contredisant les philosophes affirmant que tout raisonnement rationnel ne se fait qu&#8217;à partir d&#8217;une base de vérités que l&#8217;on augmente par déduction.</p>
<p>En poussant plus loin l&#8217;analogie, le test unitaire consisterait donc à tenter de réfuter la conjecture (le programme). Popper affirme également qu&#8217;une théorie qui en supplante une autre doit expliquer mieux ou plus de choses que la précédente mais également &laquo;&nbsp;survivre&nbsp;&raquo; aux mêmes tentatives de réfutation. C&#8217;est ce que j&#8217;appellerais les tests de non-régression.</p>
<p>Mais alors, si programme = conjecture et test = réfutation, que penser de cette pratique XP : &laquo;&nbsp;<em>écrire systématiquement les test unitaires en premier, et ensuite seulement le programme qui va passer les tests unitaires avec succès</em>&nbsp;&raquo; (le fameux Test-Driven Development) ?</p>
<p>En termes &laquo;&nbsp;popperiens&nbsp;&raquo; cela revient à faire des réfutations avant même de conjecturer ! Les &laquo;&nbsp;XPeurs&nbsp;&raquo; feraient-ils de la programmation d&#8217;une façon irrationnelle ?</p>
<p>Disons plutôt que cela signifie que la conjecture est implicite, qu&#8217;elle trotte dans la tête du programmeur (ou est discutée au sein du binôme pour ceux qui pratiquent également le &laquo;&nbsp;pair-programming&nbsp;&raquo;) pendant la programmation des réfutations/tests. Et c&#8217;est seulement une fois que toutes les réfutations sont posées que l&#8217;on rédige l&#8217;équation ou le programme. Connaissant à l&#8217;avance les tests, la programmation ressemble plus à mon avis à une sorte de régression au sens statistique (trouver la courbe qui passe par tous les points connus à l&#8217;avance).</p>
<p><strong>Cela revient à peser tous les cailloux de la terre et trouver l&#8217;équation vraie pour tout un tas de cailloux donné afin de formuler la gravité. Il me semble donc à la fois plus rationnel (et plus intuitif, je l&#8217;avoue) de poser la conjecture (le programme) avant d&#8217;essayer de le réfuter (par les tests).</strong></p>
<div id="attachment_232" class="wp-caption alignright" style="width: 200px"><a href="http://www.amazon.fr/connaissance-objective-Popper-Karl-R/dp/2080814052/"><img class="size-full wp-image-232 " title="La connaissance objective" src="http://www.schwinl.net/wp-content/uploads/2010/07/connaissance.png" alt="La connaissance objective" width="190" height="302" /></a><p class="wp-caption-text">La connaissance objective</p></div>
<p>Là où je rejoins les partisans du test extrême c&#8217;est que la qualité d&#8217;un programme est proportionnelle à la quantité de tests tentant de le réfuter, tout comme la meilleure théorie, toutes choses égales par ailleurs, est celle qui se prête et s&#8217;est prêtée au plus de tentatives de réfutation.</p>
<p>Ayant moins de connaissances en philosophie qu&#8217;en informatique, il est probable que je résume mal la pensée de Popper, je vous recommande donc chaudement la lecture de l&#8217;original, comme par exemple &laquo;&nbsp;la connaissance objective&nbsp;&raquo; disponible en livre de poche.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.schwinl.net/articles/refutation-du-tdd/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

