Il est difficile et irréaliste de conserver des données factices volumineuses. C’est encore plus difficile lorsque la structure de la base de données subit des modifications.
Faux.
Les tests unitaires ne nécessitent pas de "grandes" données fictives. Il faut assez de données factices pour tester les scénarios et rien de plus.
En outre, les programmeurs véritablement paresseux demandent aux experts en la matière de créer des feuilles de calcul simples des différents scénarios de test. Juste un tableur simple.
Ensuite, le programmeur paresseux écrit un script simple pour transformer les lignes de la feuille de calcul en scénarios de test unitaires. C'est assez simple, vraiment.
Lorsque le produit évolue, les feuilles de calcul des scénarios de test sont mises à jour et de nouveaux tests unitaires sont générés. Faites-le tout le temps. Ça marche vraiment.
Même avec MVVM et la capacité de tester l'interface graphique, il faut beaucoup de code pour reproduire le scénario de l'interface graphique.
Quelle? "Reproduire"?
Le but de TDD est de concevoir des objets pour la testabilité (développement d’essais). Si l'interface graphique est aussi complexe, elle doit être repensée pour être plus simple et plus testable. Plus simple signifie aussi plus rapide, plus facile à maintenir et plus flexible. Mais la plupart du temps plus simple signifie plus testable.
Je sais par expérience que TDD fonctionne bien si vous le limitez à une simple logique métier. Cependant, la logique métier complexe est difficile à tester car le nombre de combinaisons de test (espace de test) est très grand.
Cela peut être vrai
Cependant, demander aux experts en la matière de fournir les tests élémentaires sous une forme simple (comme une feuille de calcul) est vraiment utile.
Les feuilles de calcul peuvent devenir assez volumineuses. Mais ce n'est pas grave, car j’ai utilisé un simple script Python pour transformer les feuilles de calcul en scénarios de test.
Et. J'ai dû écrire certains cas de test manuellement car les feuilles de calcul étaient incomplètes.
Pourtant. Lorsque les utilisateurs ont signalé des "bogues", je leur ai simplement demandé quel scénario de test de la feuille de calcul était erroné.
À ce moment-là, les experts en la matière corrigeraient le tableur ou ajouteraient des exemples pour expliquer ce qui était censé se passer. Les rapports de bogue peuvent - dans de nombreux cas - être clairement définis comme un problème de scénario de test. En effet, de par mon expérience, définir le bogue comme un cas de test cassé rend la discussion beaucoup plus simple.
Plutôt que d'écouter les experts essayer d'expliquer un processus métier extrêmement complexe, ils doivent produire des exemples concrets du processus.
TDD exige que les exigences soient 100% correctes. Dans de tels cas, on pourrait s’attendre à ce que des exigences contradictoires soient prises en compte lors de la création des tests. Mais le problème est que ce n'est pas le cas dans un scénario complexe.
Ne pas utiliser TDD oblige absolument à ce que les exigences soient 100% correctes. Certains affirment que TDD peut tolérer des exigences incomplètes et changeantes, lorsqu'une approche non-TDD ne peut pas fonctionner avec des exigences incomplètes.
Si vous n'utilisez pas TDD, la contradiction est découverte tardivement lors de la phase de mise en œuvre.
Si vous utilisez TDD, la contradiction est trouvée plus tôt lorsque le code réussit certains tests et échoue pour d'autres tests. En effet, TDD vous fournit la preuve d’une contradiction plus tôt dans le processus, bien avant sa mise en œuvre (et les arguments lors des tests d’acceptation de l’utilisateur).
Vous avez un code qui passe certains tests et échoue d'autres. Vous ne regardez que ces tests et vous trouvez la contradiction. Cela fonctionne vraiment très bien dans la pratique, car les utilisateurs doivent maintenant discuter de la contradiction et produire des exemples cohérents et concrets du comportement souhaité.