Pourquoi dit-on souvent que les cas de test doivent être créés avant de commencer le codage?
Quels sont ses avantages et ses inconvénients si nous n'écoutons pas ces conseils?
De plus, ces conseils se réfèrent-ils aux tests de la boîte noire, aux tests de la boîte blanche ou aux deux?
L'écriture de tests avant les implémentations est l'une des idées fondamentales derrière le développement piloté par les tests (TDD). La procédure est la suivante:
Cette procédure est la même si vous implémentez une fonctionnalité ou corrigez un bogue; il est souvent appelé "Red-Green-Refactor" (rouge = échec du test, vert = réussite du test). Les avantages de cette méthode sont nombreux:
Maintenant pour les inconvénients:
Pourquoi dit-on souvent que les cas de test doivent être créés avant de commencer le codage?
C'est un principe de base de développement piloté par les tests , mais pas une "meilleure pratique" générale. Tout le monde ne veut ni n'a besoin de faire du TDD, même si ses partisans affirment souvent que tout le monde en bénéficierait.
Quels sont ses avantages et ses inconvénients si nous n'écoutons pas ces conseils?
L'avantage est qu'il vous oblige à penser à votre code dans une perspective de test avant de l'écrire, ce qui présente deux avantages principaux: vous êtes moins susceptible d'oublier les cas spéciaux et les conditions aux limites, et votre code doit être testable et donc modulaire. Autre avantage important: à tout moment, vous savez que votre code fonctionne comme vous le pensiez.
L'inconvénient est qu'il peut encourager la réflexion sur les détails de bas niveau et ignorer les problèmes de conception importants (mais la même chose peut se produire si vous commencez simplement à coder). De plus, la conception la plus facilement testable n'est pas nécessairement la meilleure (mais probablement bien meilleure qu'une conception issue d'un codage ad hoc).
Bien sûr, il y a la question de savoir si TDD permet de gagner plus de temps que d'écrire tous ces coûts de tests unitaires. Ses partisans l'affirment certainement.
De plus, ces conseils se réfèrent-ils aux tests de la boîte noire, aux tests de la boîte blanche ou aux deux?
En général, TDD traite exclusivement des tests unitaires , qui sont des tests en boîte blanche. Les tests d'intégration doivent être effectués en plus.
Quand j'écris test d'abord , il ne s'agit pas vraiment de vérifier le bon fonctionnement de mon code, pas vraiment de boîte noire ou boîte blanche ou tout ce qui concerne assurance qualité , et voici pourquoi ...
Au fil des ans, j'ai pratiqué et perfectionné une compétence pour convaincre la direction que j'ai besoin de bons testeurs 1 , 2 , et cela suffit pour que mon code fonctionne comme prévu sans que j'y réfléchisse beaucoup.
La raison principale pour laquelle je préfère le test est qu'il m'aide à comprendre comment concevoir mon code afin qu'il soit pratique à utiliser. Je ne suis pas bon à imaginer dans ma tête comment mon module sera utilisé par d'autres modules, donc je peux le faire trop compliqué et cela me mordra plus tard et nécessitera peut-être même une refonte.
C'est un problème que je code un module pour moi-même ou pour quelqu'un d'autre, il est tout aussi pénible d'utiliser moi-même une interface peu pratique et d'avoir à expliquer son utilisation à d'autres programmeurs.
L'approche "test d'abord" me sauve de cette douleur; il ne nécessite pas d'imagination pour voir immédiatement comment mon module sera utilisé s'il est conçu de telle ou telle manière et permet de choisir facilement le plus pratique.
Lors du codage d'un module pour quelqu'un d'autre, cela m'évite également d'avoir à expliquer péniblement comment l'utiliser.
Regardez, codez dans
this test
montre comment utiliser ce module et si vous l'exécutez, vous verrez également les résultats auxquels vous devez vous attendre. Utilisation d'une autre manière que celle indiquée dansthis test
serait une erreur. Maintenant, pars et laisse-moi faire quelque chose d'intéressant.
Il est dit dans le contexte de la pratique TDD / BDD , qui sont concevoir des méthodologies, pas des méthodologies de test.
Avec TDD/BDD, l'idée est de chasser l'utilisation de l'API avant d'écrire l'API, de la faire évoluer avec des tests.
Vu sous cet angle, il s'agit d'écrire un test pour un appel d'API inexistant ou un test pour un comportement d'API inexistant, puis de l'implémenter.
Quant aux tests de blackbox/whitebox - encore une fois, il ne s'agit pas de tester - il s'agit de design .
Pourquoi dit-on souvent que les cas de test doivent être créés avant de commencer le codage?
Il y a plusieurs raisons pour lesquelles cela est dit.
Quels sont ses avantages et ses inconvénients si nous n'écoutons pas ces conseils?
Avantages
Contre
De plus, ces conseils se réfèrent-ils aux tests de la boîte noire, aux tests de la boîte blanche ou aux deux?
Ça dépend. La plupart des tests unitaires ont tendance à être plus blackbox dans la mesure où ils examineront les entrées et sorties de la méthode ou de la fonction. Cependant, il y a des moments où des simulations ou des talons sont nécessaires, ce qui en fait davantage un test de boîte blanche car il nécessite désormais des informations sur la mise en œuvre. Il peut s'agir d'un point discutable aux fins de TDD car le développeur est généralement celui qui écrit les tests.