Question

Lors de la TDD , comment indiquer que les tests sont suffisants pour cette classe / fonctionnalité " ;?

I.e. quand pourriez-vous dire que vous avez terminé de tester tous les cas extrêmes?

Était-ce utile?

La solution

Avec Test Driven Development, vous écrivez un test avant d’écrire le code qu’il teste. Une fois le code écrit et le test réussi, il est temps d’écrire un autre test. Si vous suivez correctement TDD, vous avez écrit suffisamment de tests une fois le code utilisé pour faire tout ce qui est nécessaire.

Comme pour les cas extrêmes, prenons un exemple tel que la validation d'un paramètre dans une méthode. Avant d’ajouter le paramètre à votre code, vous créez des tests qui vérifient que le code gérera chaque cas correctement. Ensuite, vous pouvez ajouter le paramètre et la logique associée et vous assurer que les tests réussissent. Si vous envisagez plus de cas extrêmes, vous pouvez ajouter plus de tests.

En procédant étape par étape, vous n’aurez plus à vous soucier des cas extrêmes lorsque vous aurez fini de rédiger votre code, car vous aurez déjà rédigé les tests correspondants. Bien sûr, il y a toujours une erreur humaine et vous pouvez rater quelque chose ... Lorsque cette situation se produit, il est temps d'ajouter un autre test, puis de corriger le code.

Autres conseils

Le conseil de Kent Beck est d’écrire des tests jusqu’à ce que la peur se transforme en ennui. Autrement dit, jusqu'à ce que vous ne craigniez plus rien, cela suppose que vous commenciez avec un niveau de peur adéquat.

À un certain niveau, c'est un instinct de

  

"Suis-je convaincu que les tests détecteront tous les problèmes auxquels je peux penser   maintenant? "

Sur un autre plan, vous avez déjà un ensemble d'exigences système ou utilisateur à satisfaire, vous pouvez donc vous arrêter ici.

Bien que j'utilise la couverture de code pour me dire si je n'ai pas suivi mon processus TDD et pour trouver le code qui peut être supprimé, je ne considérerais pas la couverture de code comme un moyen utile de savoir quand arrêter. La couverture de votre code pourrait être de 100%, mais si vous avez oublié d'inclure une exigence, vous ne l'êtes pas vraiment.

Peut-être une idée fausse à propos de TDD est que vous devez savoir tout pour pouvoir tester. Ceci est erroné car les tests résultant du processus TDD ressemblent à une piste de navigation. Vous savez ce qui a été testé dans le passé et peut vous guider dans une certaine mesure, mais cela ne vous dira pas quoi faire ensuite.

Je pense que le TDD pourrait être considéré comme un processus évolutif. C'est-à-dire que vous commencez avec votre conception initiale et son ensemble de tests. Au fur et à mesure que votre code se fait mal en production, vous ajoutez plus de tests et un code qui les fait passer avec succès. Chaque fois que vous ajoutez un test ici et un test là-bas, vous effectuez également un test TDD, et cela ne coûte pas très cher. Vous ne saviez pas que ces cas existaient lorsque vous avez écrit votre première série de tests, mais vous avez maintenant acquis ces connaissances et pouvez vérifier ces problèmes en appuyant simplement sur un bouton. C’est le grand pouvoir du TDD et l’une des raisons pour lesquelles je le préconise autant.

Eh bien, quand vous ne pouvez plus imaginer de cas d'échec qui ne fonctionne pas comme prévu.

Une partie de TDD consiste à conserver une liste des éléments que vous souhaitez implémenter et des problèmes liés à votre implémentation actuelle. Ainsi, lorsque cette liste est épuisée, vous avez essentiellement terminé ...

Et rappelez-vous, vous pouvez toujours revenir en arrière et ajouter des tests lorsque vous découvrez des bogues ou de nouveaux problèmes avec la mise en œuvre.

que le bon sens, il n'y a pas de réponse parfaite. L’objectif de TDD est d’éliminer la peur. Si vous pensez pouvoir le tester, continuez comme il faut ...

N'oubliez pas que si vous rencontrez un bogue ultérieurement, écrivez d'abord un test pour le reproduire, puis corrigez-le afin d'éviter toute modification ultérieure pour le supprimer à nouveau!

Certaines personnes se plaignent de ne pas bénéficier de X% de couverture .... certains tests sont inutiles, et une couverture à 100% ne signifie pas que vous testez tout ce qui peut provoquer la rupture de votre code, mais uniquement le fait qu'il ne se cassera pas. comme vous l'avez utilisé!

Un test est une manière de décrire avec précision quelque chose que vous voulez. L'ajout d'un test élargit la portée de ce que vous voulez ou ajoute des détails de ce que vous voulez.

Si vous ne pouvez plus imaginer ce que vous voulez, ni améliorer ce que vous voulez, passez à autre chose. Vous pouvez toujours revenir plus tard.

Les tests

dans TDD couvrent la spécification . En fait, ils peuvent remplacer une une spécification. En TDD, les tests ne visent pas à couvrir le code. Ils s'assurent que le code couvre la spécification, car le code échouera à un test s'il ne couvre pas la spécification. Tout code supplémentaire que vous avez n'a pas d'importance.

Vous avez donc suffisamment de tests lorsque les tests semblent décrire toutes les attentes que vous ou les parties prenantes avez.

J'ai peut-être oublié quelque chose dans le monde Agile / XP, mais si j'ai bien compris le processus, le développeur et le client spécifiaient les tests dans le cadre de la fonctionnalité . Cela permet aux scénarios de test de remplacer la documentation relative aux exigences plus formelles, aide à identifier les cas d'utilisation de la fonctionnalité, etc. de long du chemin

Alberto Savoia indique que " si tous vos tests réussissent, il y a de fortes chances que vos tests soient réussis. pas assez bien ". Je pense que c’est un bon moyen de penser aux tests: demandez si vous faites des cas extrêmes, passez un paramètre inattendu, etc. Un bon moyen d’améliorer la qualité de vos tests consiste à travailler avec une paire - en particulier un testeur - et à obtenir de l’aide sur davantage de scénarios de test. Jumeler avec des testeurs est bien, car ils ont un point de vue différent.

Bien sûr, vous pourriez utiliser un outil pour effectuer des tests de mutation et obtenir plus de confiance de vos tests. J'ai utilisé Jester pour améliorer à la fois mes tests et la manière dont je les ai écrits. Pensez à utiliser quelque chose comme ça.

Cordialement

Théoriquement, vous devriez couvrir toutes les combinaisons d’entrée possibles et vérifier que le résultat est correct, mais que parfois cela ne vaut pas la peine.

De nombreux autres commentaires ont été mis en avant. Vous sentez-vous confiant dans le code que vous avez écrit compte tenu de votre couverture de test? Au fur et à mesure que votre code évolue, vos tests le couvrent-il toujours de manière adéquate? Vos tests capturent-ils le comportement et les fonctionnalités souhaités pour le composant testé?

Il doit y avoir un juste milieu. Au fur et à mesure que vous ajoutez de plus en plus de cas de test, vos tests peuvent devenir fragiles à mesure que ce qui est considéré comme un cas limite change continuellement. Après de nombreuses suggestions précédentes, il peut être très utile d’obtenir tout ce que vous pouvez penser au début, puis d’ajouter de nouveaux tests à mesure que le logiciel se développe. Ce type de culture biologique peut aider vos tests à se développer sans tous les efforts nécessaires.

Je ne vais pas mentir mais je suis souvent paresseux lorsque je reviens pour écrire des tests supplémentaires. Je pourrais rater cette propriété qui contient le code 0 ou le constructeur par défaut dont je me moque. Parfois, ne pas maîtriser complètement le processus peut vous faire gagner du temps dans n zones moins critiques (mythe de la couverture de code à 100%).

N'oubliez pas que l'objectif ultime est d'obtenir un produit de premier ordre et de ne pas vous tuer en testant. Si vous avez le sentiment de manquer quelque chose, il est fort probable que vous en ayez et que vous deviez ajouter plus de tests.

Bonne chance et bonne programmation.

Vous pouvez toujours utiliser un outil de couverture de test tel qu'EMMA ( http://emma.sourceforge.net/) ou son plugin EclEmma EclEmma ( http://www.eclemma.org/ ) ou similaire. Certains développeurs estiment qu'une couverture de test à 100% est un objectif louable. d'autres ne sont pas d'accord.

Essayez simplement de trouver toutes les solutions possibles pour faire échouer quelque chose. Valeurs nulles, valeurs hors limites, etc. Une fois que vous ne pouvez rien trouver, passez à autre chose.

Si par la suite vous trouvez un nouveau bogue ou trouvez une solution, ajoutez le test.

Il ne s’agit pas d’une couverture de code. C'est une métrique dangereuse, car le code est "couvert". bien avant qu'il soit "bien testé".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top