36 votes

Avez-vous utilisé Quickcheck dans un projet réel

Quickcheck et ses variantes (même il y en a un en Java), semble être intéressant. Cependant, en dehors de l'intérêt des milieux universitaires, est-il vraiment utile dans une application réelle de test (par exemple. une application de l'interface utilisateur ou Client/Serveur ou même prendre StackOverflow lui-même)? Toutes les expériences que vous avez eu avec test similaire générateurs est apprécié.

48voto

John Leidegren Points 21951

Oui, bien. En fait non, mais j'ai étudié à la vertu de l'homme qui l'a développé à l'origine QuickCheck et c'est vraiment un type intéressant.

En 2004, nous avons été obligés d'utiliser QuickCheck pour tester nos programmes Haskell et il était une combinaison du bon et du mauvais. Plutôt mauvais parce que Haskell était un peu intimidant lui-même, mais jamais le moins merveilleux, quand vous avez à travailler.

John a ensuite perfectionné ce qu'il a écrit des années en arrière, et en fait contribué à Ericssion tester leurs complexes de télécommunications matériel, et il a trouvé des bugs dans les 20 millions de lignes de code de réduction qu'à seulement trois étapes par le biais de son approche. Il est un grand orateur, donc c'est toujours une joie de l'écouter présenter ce qu'il fait si bien, mais dans l'ensemble, ce qu'il a fait avec QuickCheck était nouveau pour moi. Je lui ai donc demandé ce que son intérêt était dans la concrétisation de cette au marché. Il était ouvert à l'idée, mais à l'époque de son entreprise (basé autour de QuickCheck) était relativement nouveau et si il y avait d'autres domaines qu'il mettrait l'accent sur. C'est maintenant 2007. Mon point est, que vous pourriez apprendre de QuickCheck même si vous ne finissent par utiliser.

Mais qu'est-ce que QuickCheck? C'est un test combinatoire cadre et un moyen intéressant de tester les programmes. Les personnes de plus à Microsoft Research a construit Pex qui est une sorte de semblable. Pex génère automatiquement des tests par l'examen de votre IL. Cependant, Jean écrira un générateur pour une éventuelle entrée et de tester les propriétés d'une fonction. Une propriété est quelque chose qui peut facilement être testé et c'est beaucoup plus formelles. par exemple, l'inversion d'une liste? Ainsi, l'inversion d'une liste, c'est la même chose que le fractionnement d'une liste en deux moitiés, l'inversion de chacune d'entre elles, puis concaténant les deux inversé moitiés dans l'ordre inverse.

1,2,3,4 // original
1,2 3,4 // split into A and B
2,1 4,3 // reverse A and B
4,3,2,1 // concat B and A

C'est une grande propriété à tester avec QuickCheck appelé la spécification et le résultat est assez étonnant.

Pex est sympa, mais pas aussi cool que QuickCheck, Pex simplifie les choses, QuickCheck n', mais il faut beaucoup d'effort pour rédiger un bon cahier des charges.

La puissance de QuickCheck est que quand il se heurte à un échec, il permettra de réduire l'entrée qui a causé votre test à l'échec, à la plus petite possible. Vous laissant avec une description détaillée de ce que la progression de l'état qui a causé votre test à l'échec. En comparaison à d'autres infrastructures de test qui va juste essayer de casser votre code dans une attaque par force brute manière.

Ceci est rendu possible en raison de la façon dont vous écrivez votre essai de la spécification. QuickCheck s'appuie sur les pseudo-aléatoire à inventer d'entrée et c'est à cause de cela, elle est capable de revenir en arrière et trouver vraiment petite entrée qui ne passe pas le test.

C'est beaucoup plus de travail pour écrire QuickCheck propriétés, mais le résultat final est meilleur test. Comme Jean l'a dit lui-même, 70% des bugs sont capturés par des tests unitaires, mais c'est que d'autres de 30%, ce qui provoque vos planter le programme. QuickCheck est le test de ces dernières 30%.

8voto

Paul Johnson Points 8604

J'ai fait un vrai Haskell problème qui a impliqué une simulation d'événements discrets. J'ai donc écrit une DES bibliothèque basée sur la suite monade, ainsi que les équivalents de MVars et les Canaux. J'avais besoin de vérifier que cela a bien fonctionné correctement, j'ai donc écrit un tas de QuickCheck propriétés à démontrer que, par exemple, deux flux de données en simultané écrit à un Canal serait correctement fusionnées, sans renoncer à quoi que ce soit.

J'ai aussi utilisé QuickCheck du document et vérifiez les propriétés dans mon Allaient Fixe et Virgule bibliothèques.

Dans mon expérience, QuickCheck est parfois grande. Si vous pouvez résumer une propriété importante d'une manière concise, bien que l'algorithme qui permet de propriété est poilue, puis QuickCheck est une grande victoire. D'autre part, je constate souvent que l'algorithme est équivalent à la propriété, je veux vérifier. Dans ce cas, je regarde pour le plus simple des propriétés. Par exemple, supposons que la fonction "foo" est censé être non-strictement monotone. Ensuite, vous pouvez écrire

prop_fooMonotonic x y = (x > y) ==> (foo x >= foo y)

7voto

Norman Ramsey Points 115730

J'utilise QuickCheck pour beaucoup de choses. Dans les six derniers mois:

  • Couru QuickCheck pour tester les transformations de couleurs et cosinus discrète se transforme en une image compressor.

  • Couru QuickCheck pour tester une symbolique de la différenciation module I fouettée pour certains d'optimisation numérique.

  • Couru QuickCheck pour tester un ternaire-arbre de recherche dans le style de Bentley et Sedgewick.

QuickCheck rarement répond à tous mes tests unitaires besoins, mais c'est une excellente façon de commencer---et le QuickCheck que les lois sur la bonne documentation.

5voto

ADEpt Points 4405

Je l'ai utilisé beaucoup, surtout dans la manière compliquée, surtout pour le protocole d'essai et de l'analyseur implémentations.

Cependant, ici, c'est moins trivial peu de mon expérience personnelle: http://www.haskell.org/haskellwiki/QuickCheck_as_a_test_set_generator

5voto

Apocalisp Points 22526

ScalaCheck (un QuickCheck pour Scala) est utilisé pour l'essai Fonctionnel Java, une bibliothèque qui, entre autres choses, met en œuvre un QuickCheck pour Java.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X