Je voulais vous demander aux gens, dans quels cas il est logique de tester un code fonctionnel typé statiquement, comme écrit en haskell, scala, ocaml, nemerle, f # ou haXe (le dernier est ce qui m'intéresse vraiment, mais je voulais puiser dans les connaissances des plus grandes communautés).
Je pose cette question car d'après ma compréhension:
Un aspect des tests unitaires est d'avoir les spécifications sous forme exécutable. Cependant, lorsque vous utilisez un style déclaratif, qui mappe directement les spécifications formalisées à la sémantique du langage, est-il même possible d'exprimer les spécifications sous une forme exécutable d'une manière distincte, ce qui ajoute de la valeur?
L'aspect le plus évident des tests unitaires est de détecter les erreurs qui ne peuvent pas être révélées par une analyse statique. Étant donné que le code fonctionnel de type sécurisé est un bon outil pour coder extrêmement près de ce que votre analyseur statique comprend, il semblerait que vous puissiez déplacer une grande partie de la sécurité vers l'analyse statique. Cependant, une simple erreur comme l'utilisation
x
au lieu dey
(les deux étant des coordonnées) dans votre code ne peut pas être couverte. OTOH une telle erreur pourrait également survenir lors de l'écriture du code de test, donc je ne suis pas sûr que cela en vaille la peine.Les tests unitaires introduisent une redondance, ce qui signifie que lorsque les exigences changent, le code les implémentant et les tests couvrant ce code doivent tous deux être modifiés. Ce surcoût est bien sûr à peu près constant, on pourrait donc dire que cela n'a pas vraiment d'importance. En fait, dans des langages comme Ruby, cela ne se compare vraiment pas aux avantages, mais étant donné que la programmation fonctionnelle typée statiquement couvre la plupart des tests unitaires au sol, il semble que ce soit une surcharge constante que l'on peut simplement réduire sans pénalité.
J'en déduis que les tests unitaires sont quelque peu obsolètes dans ce style de programmation. Bien sûr, une telle affirmation ne peut conduire qu'à des guerres de religion, alors permettez-moi de résumer cela en une simple question:
Lorsque vous utilisez un tel style de programmation, dans quelle mesure utilisez-vous les tests unitaires et pourquoi (quelle qualité espérez-vous gagner pour votre code)? Ou l'inverse: avez-vous des critères par lesquels vous pouvez qualifier une unité de code fonctionnel typé statiquement comme couvert par l'analyseur statique et donc sans besoin de couverture de test unitaire?