Théorie
Il y a une idée fausse commune selon laquelle les tests unitaires sont destinés à tester des "unités" .
Les tests unitaires, comme tous les autres tests, testent la fonctionnalité . Rien d'autre ne peut être testé.
Cependant, la fonctionnalité d'un système complexe ne peut souvent pas être testée efficacement.
Disons, un utilisateur appuie sur un bouton "Supprimer", et rien ne se passe. Pourquoi? Une erreur peut se trouver dans une base de données, une connexion peut être rompue, une logique de base peut mal fonctionner ou même une opération peut réussir mais l'interface n'a pas été mise à jour correctement. Chaque couche peut contenir de nombreuses fonctions qui s'appellent les unes les autres, et il n'est pas toujours clair où se trouve l'erreur.
Les tests unitaires sont basés sur un paradigme de séparation des composants et de les tester individuellement.
Encore une fois, cela ne garantit pas que tout le système fonctionnera, mais cela simplifie les tests.
TDD n'est pas une exigence en soi. Il simplifie le codage en forçant un développeur à répondre en premier, "que vais-je réellement coder?".
Frais
Beaucoup pensent qu'en n'écrivant pas de tests, ils gagnent du temps. Faux. En pensant stratégiquement, le coût d'une erreur augmente de façon exponentielle avec le temps depuis l'apparition jusqu'à la détection.
Supposons que vous faites une erreur dans votre code et que vous le détectiez et le corrigiez le même jour. Le coût est de X $ .
Supposons que l'erreur reste non détectée et passe à la génération interne hebdomadaire. Heureusement, le QA l'a détecté, a soulevé un bug dans bug tracker, le problème a fait l'objet d'une discussion de 5 minutes sur une réunion de 5 personnes, etc. Enfin, vous le corrigez. Le coût est la somme de la main-d'œuvre dépensée par tout le monde, et il peut être de 3 $ X dans ce cas.
Et si l'erreur passait aux tests bêta et impliquait plus de personnes? Le mot Let, 10 $ * X .
S'il reste longtemps non détecté, est allé à 1000 clients (espérons-le, pas à un million!), 10 d'entre eux l'ont détecté, ils ont discuté avec votre personnel de support, certains peuvent appeler votre patron, vos coéquipiers tentent de le reproduire , etc, etc. Enfin, le bogue vous revient et vous le corrigez. Combien, au total? Eh bien plus de 50 $ * X .
Comme vous le voyez, un bug vous reviendra tôt ou tard (ou votre collègue). La seule différence est quand cela se produit et combien cela coûterait.
Les tests unitaires raccourcissent le cycle de vie des bogues et réduisent donc les coûts.
Avantages
- Les tests unitaires permettent au développeur de mieux coder . Aussi simple que cela.
- Ils permettent de gagner du temps;
- Ils diminuent les coûts;
- Les tests unitaires cohabitent avec le code qu'ils testent. Sur toute demande de changement (qui arrive tout le temps), les tests s'adapteront.
Les inconvénients
Je peux voir une seule excuse pour ne pas écrire de tests. Si vous écrivez un prototype, par exemple quelque chose qui n'ira jamais aux autres. Ou peut-être que vous écrivez quelque chose pour un usage unique.