Comment TDD se compare-t-il avec des langages de programmation fonctionnelle comme F # et Erlang? p>
Je n'ai pas encore travaillé directement avec une langue de programmation fonctionnelle, mais d'après ce que j'en ai vu, vous avez deux côtés d'une équation et il faut équilibrer comme dans l'algèbre ou la comptabilité; Cela semble quelque peu rappelant TDD où vous définissez vos sorties attendues en tant que relevés d'affirmation (un côté de l'équation) et le reste de la fonctionnalité entre une classe découplée à partir du test (de l'autre côté de l'équation), sauf que la programmation fonctionnelle IMHO semble un peu plus propre. p>
Les deux ont-ils des similitudes, ou je suis juste omniprésent cela un peu? P>
5 Réponses :
Je pense que TDD et la programmation fonctionnelle (FP) sont différentes dans ce TDD, une méthodologie et une PF sont une programmation paradigme. P>
Je dirais que la FP aide à la pratique du TDD en tant que FP vous encourage à rendre les choses déterministes lorsque cela est possible. Les fonctions déterministes sont beaucoup plus faciles à tester que les non déterministes. P>
Ils sont orthogonaux. p>
TDD est une approche de développement de logiciels qui se concentre sur la correction de l'exactitude en développant des tests par rapport aux spécifications avant l'écriture du code de production. La programmation fonctionnelle est un paradigme pour la conception et la mise en œuvre de logiciels. P>
Oh bien, pensais que j'étais sur quelque chose, merci d'avoir refusé cela.
Ils sont orthogonaux, mais TDD a une partie de la "sensation" de la FP. Difficile de le mettre en mots plus clairs que ça ...
Ici, avez un uppot sur votre commentaire, qui vous donne ... Nul points!
Vous êtes correct que lorsque vous écrivez un programme fonctionnel, vous pouvez utiliser un raisonnement d'équation pour dériver la définition d'une fonction. Cependant, que le raisonnement n'existe généralement pas sur une forme de réifié (telle que des tests), il n'est donc pas essentiel que une fonction soit prouvée correcte de manière à être vérifiable à la machine ou à l'homme. Il est certainement possible d'utiliser TDD avec des langages fonctionnelles (par exemple, d'utiliser n'importe quelle bibliothèque TDD compatible .NET avec F #) pour vérifier que les fonctions ont été dérivées correctement, mais il existe également d'autres stratégies de test pouvant être plus propres aux langages fonctionnels, tels que l'utilisation de QuickCheck pour la vérification des spécifications randomisées. P>
Chris a raison de dire qu'ils sont orthogonaux. Cependant, il existe des aspects de la programmation fonctionnelle qui facilitent les tests de programmes fonctionnels. P>
Les programmes fonctionnels sont composés de fonctions et garantissent que la fonction se comportera de la même manière dans tous les contextes. Cela signifie que lorsque vous testez une fonction dans le test de l'unité, vous savez qu'il sera toujours fonctionner forte> de cette façon. Vous n'avez pas à tester si cela fonctionne si vous le branchez dans un autre environnement. P> li>
Enfin, il y a quelques belles outils automatiques forts> pour tester des programmes fonctionnels. Pour f #, nous avons Fscheck A > (qui est basé sur QuickCheck connu de Haskell). Celles-ci bénéficient de diverses propriétés de programmes fonctionnels. P> li>
ul>
Alors, ils ont tous les deux un but différent et sont essentiellement une chose différente, mais il y a quelques relations agréables (peut-être comme un thé em> et une théière em> :-) ils sont choses complètement différentes, mais travailler très bien ensemble!) p>
Je pense que la sensation similaire entre les deux tiges du fait que, avec les deux fonctions, sont censées être déterministes. Les fonctions de FP ne doivent pas avoir d'effets secondaires et d'effets secondaires dans les fonctions de test pour le code orienté objet doivent être supprimés par des talons d'injection. P>