Karl Popper est un philosophe des sciences ayant fait des apports majeurs à l’é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’un programme soit une connaissance objective au même titre qu’un théorème ou qu’une théorie scientifique.
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’ailleurs, un test ne peut pas prouver la validité d’un programme, au contraire, il ne peut que mettre en évidence une erreur. Popper démontre que le raisonnement inductif n’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’on essaie de contredire, par l’expérimentation ou par la logique. Pour valider un programme on cherche à le mettre en défaut, ce qui est pourtant intuitivement l’inverse du résultat visé.
Je vois donc la programmation comme l’ajout de conjectures sur un fond initial (langage de programmation employé, librairies, système d’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’à partir d’une base de vérités que l’on augmente par déduction.
En poussant plus loin l’analogie, le test unitaire consisterait donc à tenter de réfuter la conjecture (le programme). Popper affirme également qu’une théorie qui en supplante une autre doit expliquer mieux ou plus de choses que la précédente mais également « survivre » aux mêmes tentatives de réfutation. C’est ce que j’appellerais les tests de non-régression.
Mais alors, si programme = conjecture et test = réfutation, que penser de cette pratique XP : « écrire systématiquement les test unitaires en premier, et ensuite seulement le programme qui va passer les tests unitaires avec succès » (le fameux Test-Driven Development) ?
En termes « popperiens » cela revient à faire des réfutations avant même de conjecturer ! Les « XPeurs » feraient-ils de la programmation d’une façon irrationnelle ?
Disons plutôt que cela signifie que la conjecture est implicite, qu’elle trotte dans la tête du programmeur (ou est discutée au sein du binôme pour ceux qui pratiquent également le « pair-programming ») pendant la programmation des réfutations/tests. Et c’est seulement une fois que toutes les réfutations sont posées que l’on rédige l’équation ou le programme. Connaissant à l’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’avance).
Cela revient à peser tous les cailloux de la terre et trouver l’é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’avoue) de poser la conjecture (le programme) avant d’essayer de le réfuter (par les tests).
Là où je rejoins les partisans du test extrême c’est que la qualité d’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’est prêtée au plus de tentatives de réfutation.
Ayant moins de connaissances en philosophie qu’en informatique, il est probable que je résume mal la pensée de Popper, je vous recommande donc chaudement la lecture de l’original, comme par exemple « la connaissance objective » disponible en livre de poche.



A la place, juste un PV, qui traîne par terre. Ce qui se passe, c’est que l’on vient de vous retirer votre voiture pour 1 an, assorti d’une amende de 1500€, et interdiction d’acheter une nouvelle voiture pendant l’année d’interdiction.
Cependant, vous continuerez à rembourser le crédit auto, ou payer les mensualités si cette voiture était une location. « Pourquoi moi ? ». Il se trouve qu’un employé d’une association qui lutte contre la vitesse au volant a signalé votre plaque d’immatriculation à la Haute Autorité Contre la Vitesse au Volant, pour excès de vitesse répétés.
Sauf que maintenant, plus de voiture, et pour toute la famille en plus.
Votre époux(se) et vos enfants qui pourtant ont leur permis n’ont plus de voiture non plus, ni le droit d’en avoir une.
Comme on ne peut pas prouver que vous étiez au volant, la justice vous accorde le bénéfice du doute : OK ce n’était pas vous. Mais c’était votre plaque d’immatriculation. Donc, on vous colle une amende pour « non-sécurisation de votre voiture ».
En gros, si on vous a « emprunté » votre voiture pour faire un excès de vitesse, c’est que vous aviez dû mal la verrouiller ou que vous n’avez pas acheté le modèle d’alarme officiel labellisé par l’état (ah ben oui, il n’existe que pour les Renault, fallait pas acheter coréen). En passant, si nos assureurs appliquaient la logique du législateur, ils ne rembourseraient jamais aucun vol ni cambriolage…
Prouver que ce n’était pas votre voiture qui roulait il y a trois mois, trop vite, sur une départementale interdite. Malheureusement, n’importe qui peut accrocher votre plaque sur sa voiture, et la vitesse a été mesurée au pifomètre par un employé de l’association de lutte contre la vitesse. Alors bonne chance, et bienvenue dans le monde de l’HADOPI…
» sur internet à propos de l’un de vos produits, récoltez son adresse IP, la date et l’heure du commentaire et envoyez le tout à l’HADOPI, assorti d’une liste de 3 000 téléchargements illégaux choisis au hasard dans votre catalogue.
Le gêneur ou la gêneuse sera interdit d’internet pendant une durée pouvant aller jusqu’à un an,
ce qui vous laissera le temps de faire la promotion de votre produit plus sereinement… sauf si votre cible trouve un moyen de prouver son innocence; mais je vois pas comment ça serait possible. C’est pas beau, ça ?