web-dev-qa-db-fra.com

Quels sont les inconvénients des tests automatisés?

Il y a un certain nombre de questions sur ce site qui donnent beaucoup d'informations sur les avantages qui peuvent être tirés des tests automatisés. Mais je n'ai rien vu qui représente l'autre côté de la médaille: quels sont les inconvénients? Tout dans la vie est un compromis et il n'y a pas de balles d'argent, donc il doit sûrement y avoir des raisons valables de ne pas faire de tests automatisés. Que sont-ils?

Voici quelques-uns que j'ai trouvé:

  • Nécessite plus de temps de développement initial pour une fonctionnalité donnée
  • Nécessite un niveau de compétence plus élevé des membres de l'équipe
  • Augmenter les besoins en outillage (lanceurs de test, frameworks, etc.)
  • Analyse complexe requise en cas d'échec d'un test - ce test est-il obsolète en raison de mon changement ou me dit-il que j'ai fait une erreur?

Modifier
Je dois dire que je suis un grand partisan des tests automatisés, et je ne cherche pas à être convaincu de le faire. Je cherche à comprendre quels sont les inconvénients, donc quand je vais dans mon entreprise pour en faire un cas, je n'ai pas l'air de lancer la prochaine balle argentée imaginaire.

Aussi, je suis explicite pas à la recherche de quelqu'un pour contester mes exemples ci-dessus. Je prends pour vrai qu'il doit avoir des inconvénients (tout a des compromis) et je veux comprendre ce que c'est.

49
RationalGeek

Vous avez à peu près cloué les plus importants. J'ai quelques ajouts mineurs, plus l'inconvénient que les tests réussissent réellement - quand vous ne le voulez pas vraiment (voir ci-dessous).

  • Temps de développement: avec le développement piloté par les tests, cela est déjà calculé pour les tests unitaires, mais vous avez toujours besoin de tests d'intégration et de système, qui peuvent également avoir besoin de code d'automatisation. Le code écrit une fois est généralement testé à plusieurs étapes ultérieures.

  • Niveau de compétence: bien sûr, les outils doivent être pris en charge. Mais ce n'est pas seulement votre propre équipe. Dans un projet plus important, vous pouvez avoir une équipe de test distincte qui écrit des tests pour vérifier les interfaces entre le produit de votre équipe et les autres. Beaucoup plus de gens doivent avoir plus de connaissances.

  • Besoins en outillage: vous êtes sur place. Pas grand chose à ajouter à cela.

  • Échec des tests: c'est le vrai bugger (pour moi en tout cas). Il y a un tas de raisons différentes, chacune pouvant être considérée comme un inconvénient. Et le plus gros inconvénient est le temps nécessaire pour décider laquelle de ces raisons s'applique réellement à votre test échoué.

    • a échoué, en raison d'un bug réel. (juste pour être complet, car c'est bien sûr avantageux)
    • a échoué, car votre code de test a été écrit avec un bogue traditionnel.
    • a échoué, car votre code de test a été écrit pour une ancienne version de votre produit et n'est plus compatible
    • a échoué, car les exigences ont changé et le comportement testé est désormais jugé "correct"
  • Tests non échoués: ils sont également un inconvénient et peuvent être assez mauvais. Cela arrive surtout lorsque vous changez les choses et que vous vous rapprochez de ce qu'Adam a répondu. Si vous modifiez quelque chose dans le code de votre produit, mais que le test n'en tient pas compte, cela vous donne ce "faux sentiment de sécurité".

    Un aspect important des tests qui n'ont pas échoué est qu'un changement d'exigences peut entraîner la invalidité d'un comportement antérieur. Si vous disposez d'une traçabilité décente, la modification des exigences doit pouvoir être mise en correspondance avec votre code de test et vous savez que vous ne pouvez plus faire confiance à ce test. Bien sûr, le maintien de cette traçabilité est encore un autre inconvénient. Et si vous ne le faites pas, vous vous retrouvez avec un test qui n'échoue pas, mais vérifie en fait que votre produit fonctionne à tort. Quelque part sur la route, cela vous frappera .. généralement quand/où vous vous y attendez le moins.

  • Coûts de déploiement supplémentaires: vous ne faites pas que des tests unitaires en tant que développeur sur votre propre machine. Avec les tests automatisés, vous souhaitez les exécuter sur les validations des autres à un endroit central pour savoir quand quelqu'un a interrompu votre travail. C'est bien, mais il faut aussi le mettre en place et le maintenir.

26
Frank

Après avoir commencé à essayer des tests automatisés dans notre équipe, le plus gros inconvénient que j'ai vu est qu'il est très difficile d'appliquer un code hérité qui n'a pas été conçu avec des tests automatisés en tête. Cela améliorerait sans aucun doute notre code à long terme, mais le niveau de refactorisation nécessaire pour les tests automatisés tout en conservant notre raison est une barrière très élevée à l'entrée à court terme, ce qui signifie que nous devrons être très sélectifs sur l'introduction de l'automatisation. tests unitaires afin de respecter nos engagements à court terme. En d'autres termes, il est beaucoup plus difficile de rembourser les cartes de crédit lorsque vous êtes déjà lourdement endetté.

29
Karl Bielefeldt

L'inconvénient le plus important est peut-être ... les tests sont du code de production. Chaque test que vous écrivez ajoute du code à votre base de code qui doit être maintenu et pris en charge. Ne pas le faire conduit à des tests dont vous ne croyez pas les résultats, vous n'avez donc pas d'autre choix. Ne vous méprenez pas - je suis un grand défenseur des tests automatisés. Mais tout a un coût, et c'est un gros.

21
Ross Patterson

Je ne dirais pas que ce sont des inconvénients entièrement applicables, mais les quelques-uns que j'ai touchés le plus sont:

  • Temps nécessaire pour configurer le test dans une application d'entreprise complexe.
  • Gérer les anciens tests qui échouent incorrectement, en d'autres termes, le système a évolué et maintenant les tests sont faux.
  • Fausse confiance d'une couverture de test inégale ou inconnue.

Une couverture inégale peut conduire à un faux sentiment de sécurité. Si vous faites un refactoriseur et utilisez les tests pour prouver sa validité, qu'est-ce qui a prouvé que vos tests sont en mesure de le prouver?

Le temps qu'il faut pour créer le test est parfois un problème pour nous. Nos tests automatisés n'incluent pas seulement des tests unitaires, mais utilisent également des tests de cas. Celles-ci ont tendance à être plus larges et nécessitent un contexte.

Bien sûr, mon point de vue est d'une application qui est plus ancienne que ses tests unitaires.

15
Adam Houldsworth

Je dirais que le principal problème avec eux est qu'ils peuvent fournir un faux sentiment de sécurité. Tout simplement parce que vous avez des tests unitaires, cela ne signifie pas qu'ils sont réellement faire quoi que ce soit et cela inclut de tester correctement les exigences.

De plus, les tests automatisés peuvent également inclure des bogues eux-mêmes , ce qui pose la question si les tests unitaires doivent être testés eux-mêmes donc pas nécessairement réaliser quoi que ce soit.

9
billy.bob

Bien que les tests d'automatisation présentent de nombreux avantages, ils présentent également leurs propres inconvénients. Certains des inconvénients sont:

  • Des compétences sont requises pour écrire les scripts de test d'automatisation.
  • Le débogage du script de test est un problème majeur. Si une erreur est présente dans le script de test, cela peut parfois entraîner des conséquences mortelles.
  • La maintenance des tests est coûteuse en cas de méthodes de lecture. Même si un changement mineur se produit dans l'interface graphique, le script de test doit être réenregistré ou remplacé par un nouveau script de test.
  • La maintenance des fichiers de données de test est difficile si le script de test teste plus d'écrans.

Certains des inconvénients ci-dessus soustraient souvent les avantages tirés des scripts automatisés. Bien que les tests d'automatisation aient des avantages et des inconvénients, ils sont largement adaptés dans le monde entier.

4
jameswood037

J'ai récemment demandé ne question sur les tests de développement de jeux - c'est BTW comment je connaissais celui-ci. Les réponses y indiquaient des inconvénients curieux et spécifiques:

  1. Il est coûteux de le faire lorsque votre code doit être fortement couplé .
  2. Il est difficile de le faire lorsque vous devez être conscient des différentes plates-formes matérielles, lorsque vous devez analyser la sortie vers l'utilisateur et que le résultat du code n'a de sens que dans un contexte plus large .
  3. Les tests UI et UX sont très difficiles .
  4. Et notamment, les tests automatisés peuvent être plus chers et moins efficaces qu'un groupe de bêta-testeurs à très faible coût (ou gratuits) .

Le 4ème point me fait penser à une de mes expériences. J'ai travaillé sur une entreprise très maigre, orientée XP et gérée par Scrum, où les tests unitaires étaient fortement recommandés. Cependant, dans sa voie vers un style plus léger et moins bureaucratique, l'entreprise a simplement négligé la construction d'une équipe d'assurance qualité - nous n'avions pas de testeurs. Si fréquemment, les clients ont trouvé des bugs triviaux en utilisant certains systèmes, même avec une couverture de test> 95%. J'ajouterais donc un autre point:

  • Les tests automatisés peuvent vous faire sentir que l'AQ et les tests ne sont pas importants.

De plus, je pensais à l'époque à la documentation et j'ai cogité une hypothèse qui peut être valide (dans une moindre mesure) pour en tester deux. Je pensais simplement que le code évolue si rapidement qu'il est assez difficile de créer une documentation qui suit une telle vitesse, il est donc plus utile de passer du temps à rendre le code lisible que d'écrire une documentation lourde et facilement obsolète. (Bien sûr, cela ne s'applique pas aux API, mais uniquement à l'implémentation interne.) Le test souffre un peu du même problème: il peut l'être aussi lent à écrire par rapport au code testé. OTOH, c'est un problème moindre car les tests avertissent qu'ils sont obsolètes, tandis que votre documentation restera silencieuse tant que vous ne la relirez pas très, très attentivement .

Enfin, un problème que je trouve parfois: les tests automatisés peuvent dépendre d'outils et ces outils peuvent être mal écrits. J'ai commencé un projet en utilisant XUL il y a quelque temps et, mec, c'est juste pénible d'écrire des tests unitaires pour une telle plateforme. J'ai démarré une autre application en utilisant Objective-C, Cocoa et Xcode 3 et le modèle de test dessus était essentiellement un tas de solutions de contournement.

J'ai d'autres expériences sur les inconvénients des tests automatisés, mais la plupart d'entre eux sont répertoriés dans d'autres réponses. Néanmoins, je suis un ardent défenseur des tests automatisés. Cela a sauvé énormément de travail et de maux de tête et je le recommande toujours par défaut. Je pense que ces inconvénients ne sont que de simples détails par rapport aux avantages des tests automatisés. (Il est important de toujours proclamer votre foi après avoir commenté les hérésies pour éviter l'auto da fé.)

3
brandizzi

Deux qui ne sont pas mentionnés sont:

  • Durée d'horloge nécessaire pour exécuter une grande suite de tests

J'ai fait partie des efforts automatisés d'AQ où il a fallu une demi-journée pour exécuter les tests, car les tests étaient lents. Si vous ne faites pas attention à l'écriture de vos tests, votre suite de tests pourrait également se révéler ainsi. Cela ne semble pas être un gros problème jusqu'à ce que vous gériez maintenant ce temps, "Oh, je viens de commettre un correctif, mais cela va prendre 4 heures pour prouver l'exactitude".

  • Fragilité de certaines méthodes d'écriture de test

Certaines méthodes de test (telles que l'automatisation de l'interface utilisateur) semblent se casser à chaque fois que vous vous retournez. Particulièrement douloureux si votre script, par exemple, bloque le processus de test car il attend qu'un bouton apparaisse - mais le bouton a été renommé.

Ce sont deux choses que vous pouvez contourner, avec de bonnes pratiques de test: trouvez des moyens de garder votre suite de tests rapide (même si vous devez faire des astuces comme la distribution de tests sur des machines/CPU). De même, on peut prendre soin d'éviter les méthodes fragiles de rédaction des tests.

3
RyanWilcox

Je veux en ajouter un de plus, un faux sentiment de sécurité.

Au-delà de très petits ensembles de problèmes bien définis, il n'est pas possible de créer des tests complets. Il peut y avoir et il y aura souvent des bogues dans notre logiciel que les tests automatisés ne testent tout simplement pas. Lorsque les tests automatisés réussissent, nous supposons trop souvent qu'il n'y a pas de bogues dans le code.

2
Jim C

Il est difficile de convaincre le gestionnaire/capital-risqueur

  • testautomation augmente le coût initial.
  • testautomation augmente le temps de mise sur le marché.
  • l'avantage de l'automation de test vient à mi-parcours et à long terme. une concurrence féroce se concentre davantage sur les avantages à court terme.

voir Market Driven Unit Testing pour plus de détails.

0
k3b