Citation :si tu la change (la preuve) tu la refais. Mais comme l'a dit Sephi c'est un outil.Dans ce cas, ok. Donc le test unitaire n'est utile que si la preuve faite a besoin d'une hypothèse type "ça doit marcher dans tel cas précis". Par exemple, si ma preuve est "quelque soit l'entier en entrée et si mult(0, _) = 0 alors mult(X,Y)=X*Y", je peux effectivement recourir au test unitaire pour prouver que mult(0,_)=0 (même si ce n'est pas forcément obligatoire à mon avis, puisque l'étude du code source de la fonction permet de le dire directement).
Si ma preuve n'en n'a pas besoin (si, par exemple, elle dit "quelque soit l'entier en entrée j'ai son carré en sortie"), alors je n'ai pas l'utilité du test unitaire pour la preuve, mais ça pourrait me servir comme documentation (à titre d'exemple d'utilisation de la classe), c'est cela?
Ok, dans un tel cas, je comprend l'intérêt. Mais je ne le ressens toujours pas :p C'est comme comprendre l'intérêt d'une voiture qui fonce à 300Km/h sans en avoir envie.
Si je suis d'accord avec Niahoo, je ne le suis pas avec Roworll. Ok, le test unitaire ne dit pas qu'un soft est "bugproof", parce que le test unitaire ne test qu'un cas... Mais alors, pourquoi serait-ce "un sanity check complet" ou "tu es sur que les méthodes fonctionnent."? Ca contredis même pas la phrase précédente, mais le début de la même phrase "Ça ne permet évidemment pas de faire un code 100% bug free"... Ou alors, j'ai mal compris?
Si tu proposes la valeur 2 en entrée, ok, ca ne passe pas le test. Donc, je modifie ma méthode, et j'ajoute un "if $x == 2 then return 4;"...
Ok, le test unitaire valide une situation donnée, mais une et une seule. Pas une situation générique.
Et il me semble que oui, on peut "tester" tous les cas. C'est pour cette raison que la plupart des preuves (en maths, en logique, ou en n'importe quoi) commencent par "quelque soit/Pour tout X respectant les conditions suivantes". On ne vérifie par chaque valeur de X, chaque situation, mais on travaille sur le plan large: on ne teste non pas par valeur/situation, mais par hypothèse.
Donc, ok, le test unitaire valide le comportement pour une situation très précise. Mais alors, quels outils permettraient de valider toutes les situations envisageables (en considérant quelques axiomes, pas au niveau de son propre code mais plutôt au niveau hardware/langage)?