Les tests de bout en bout et d'intégration en valent-ils la peine pour des éléments non critiques pour la mission?


9

Il est bien connu que les tests de bout en bout et d'intégration sont coûteux. Bien sûr, si nous développons des applications où des gens pourraient mourir en cas de problème, c'est un investissement intéressant. Cependant, dans les applications où les erreurs ne sont pas la fin du monde, ne serait-il pas moins cher de sauter complètement les tests E2E et les tests d'intégration et de créer un plan de sauvegarde en cas de problème? Comme un test manuel des user stories + tests unitaires + l'utilisation d'un langage typé est-elle suffisante?

Comme par exemple, si une boutique en ligne a perdu une commande, elle pourrait envoyer l'article gratuitement + un autre article comme excuse. L'utilisateur final pourrait se retrouver encore plus heureux de cette façon et l'entreprise économise globalement de l'argent.

Je suppose que ma question est, en général, combien coûte un test d'intégration et un test E2E et combien d'argent cela permet-il d'économiser? Existe-t-il un moyen de faire un calcul risque / coût pour cela?


4
Existe-t-il un moyen de faire un calcul risque / coût pour cela? À part faire les deux et comparer ensuite, non.
Robbie Dee

4
Vous devez considérer le retour sur investissement de tout dans le processus de développement. Les tests unitaires en valent-ils la peine? Les tests manuels en valent-ils la peine? La qualité du code en vaut-elle la peine? La création du logiciel en vaut-elle la peine en premier lieu? Ce sont des questions commerciales importantes. Ce qui bien sûr ne peut pas être répondu en général. Et ils concernent davantage l'administration des affaires que le génie logiciel.
Christian Hackl

Selon vous, quel est l'impact commercial si une boutique en ligne comme Amazon perd quelques heures ou commandes? Ils peuvent essayer de renvoyer les articles sans frais, mais qu'est-ce que cela ferait pour leur réputation?
Bart van Ingen Schenau

@BartvanIngenSchenau Je pense qu'une grande entreprise comme Amazon peut se permettre des tests d'intégration et E2E. Il est facile de voir quelques heures de commandes qui leur coûtent des millions. Mais je me demande si pour les petites entreprises, le coût de la réputation est inférieur au coût des tests eux-mêmes. D'autant plus que transformer des clients mécontents en clients heureux peut être extrêmement précieux, ce qui pourrait même ne pas être un coût au départ. Je n'ai tout simplement aucune expérience pour tirer des conclusions, d'où la raison pour laquelle je pose la question.
Marc

Réponses:


12

Peu importe que vous implémentiez E2E et des tests d'intégration ou non, vous avez besoin d'un plan de sauvegarde dans les deux cas . Ne vous attendez jamais à ce qu'un système soit exempt de bogues simplement parce qu'il a été testé.

Ainsi, dans votre estimation de coût, vous ne comparez pas le coût d'implémentation des tests E2E avec les coûts estimés par votre plan de sauvegarde en cas de panne, vous comparez:

  • Coûts de réalisation manuelle des tests E2E (plusieurs fois, avant chaque nouvelle version)

contre.

  • Coûts de construction (et de maintenance) des tests E2E automatisés

Si vous pouvez utiliser ces tests E2E plusieurs fois, il y aura généralement un certain nombre de tests où les coûts atteindront le seuil de rentabilité. Cela devrait être la mesure que vous appliquez pour planifier à l'avance les tests E2E que vous effectuerez manuellement et ceux que vous automatiserez.

Notez qu'il peut y avoir certains types de tests E2E qui peuvent être mis en œuvre facilement, où le retour sur investissement est immédiatement clair, mais il existe également des types de tests E2E où le développement et la maintenance peuvent être plus coûteux que de les faire manuellement sur une période de plusieurs années.


Merci, c'est une excellente réponse. Quels sont les exemples de tests E2E qui sont faciles à mettre en œuvre mais conduisent à plus de développement et de maintenance sur toute la ligne?
Marc

2
@Marc: Je suppose que vous avez mal compris ma dernière phrase, je parlais de différents tests: ceux qui sont faciles à implémenter / maintenir, et ceux qui ne le sont pas.
Doc Brown

Correct, la version éditée le rend plus clair.
Marc

@Marc: D'après mon expérience, les tests via des interfaces utilisateur (particulièrement complexes) sont souvent un candidat où l'automatisation des tests est moins rentable que les autres tests - mais cela dépend beaucoup de la catégorie de logiciels, des outils disponibles et des spécifications technologies concernées.
Doc Brown

7

Peut-être contre-intuitivement, les tests automatisés peuvent réellement réduire le temps de développement par rapport à l'absence de tests. C'est donc un gagnant-gagnant.

L'idée est que les tests contribuent à plusieurs niveaux

  1. Forcer la collecte et la spécification d'exigences strictes

    Cela a un impact énorme sur la vitesse de développement. Pas de retour en arrière pour demander plus de détails, pas de malentendus, pas de fonctionnalités inutiles, etc.

  2. Les développeurs savent quand une fonctionnalité est terminée

    La plupart des tests sont effectués par des développeurs lors de l'écriture du code plutôt que par des testeurs vérifiant un produit fini. L'automatisation de ces tests réduit cette charge de travail

  3. Bugs introduits par de nouvelles fonctionnalités détectés instantanément.

    Celles-ci peuvent facilement vous coûter un sprint et nécessiter la réécriture d'une fonctionnalité entière si elles ne sont pas détectées.

  4. Cycle de libération plus rapide

    Cela signifie moins de code en vol, ce qui signifie moins de fusion, ce qui signifie moins de travail et moins de complexité pour les développeurs

Surtout si vous avez une configuration de framework de test, l'écriture de ces tests prend moins de temps que vous économisez dans ces efficacités.

De plus, vous économisez du temps de test manuel et vous obtenez un meilleur produit à la fin.


Pour moi, cette réponse est valable ou non selon que l'OP parle de tests d'intégration au-delà des tests unitaires. S'il y a déjà des tests unitaires, la réponse semble être spéculative au mieux . S'il n'y a pas de tests unitaires, alors naturellement - certains tests automatisés sont meilleurs que pas du tout.
Robbie Dee

Oui, je suppose que nous avons des tests unitaires en place
Marc

1

Ma réponse? Peut-être, probablement pas .

Les tests EOE sont bons lorsqu'ils sont très simples. Si vous prévoyez de couvrir des scénarios de base, vous pouvez réussir à obtenir un certain avantage avec les tests EOE. Mais si vous avez une application vraiment complexe et volumineuse (mission critique ou non), ces tests EOE seront coûteux à maintenir et vous devez connaître votre scénario pour évaluer s'il en vaut la peine.

Il y a quelques années, le blog des tests Google abordait ce sujet. Je ne peux qu'être d'accord avec l'auteur. Un bon test doit être rapide , fiable et isoler les défaillances , des fonctionnalités que les tests EOE ne sont pas capables de vous fournir.

J'ai travaillé sur une application qui a plus de 12 heures de tests de bout en bout couvrant de nombreux scénarios. Finalement, nous avons réussi à distribuer ces tests sur différentes machines, en contrôlant le début, l'exécution et la fin des tests, en collectant et en fusionnant les résultats. L'application testée était une application monolithique (ce qui est plus facile à installer et à exécuter pour tester) et était un cauchemar pour maintenir les tests.

La plupart du temps, nous maintenions les tests au lieu d'attraper des bogues à partir de leurs résultats. Découvrir l'origine d'un bug sur un test de bout en bout prend beaucoup de temps. Nous avons également traité de nombreux tests «faux négatifs» et peu de temps pour comprendre le problème et le corriger: problèmes de chargement de l'applet Java, élément attendu introuvable sur la page (ainsi que d'autres problèmes de vitesse d'automatisation), conserver le code de requête qui sont juste utilisés sur le test de mémoire de la base de données (car la requête d'origine utilise un code spécifique à la base de données), etc.

Tout cela a besoin de personnel pour rester opérationnel. À la fin, nous commençons à supprimer certains tests EOE et à les remplacer par de nombreux tests unitaires / d'intégration.

Donc, mon conseil prudent est d'utiliser la pyramide de test de Google:

À titre de bonne première supposition, Google suggère souvent une répartition 70/20/10: 70% de tests unitaires, 20% de tests d'intégration et 10% de tests de bout en bout. Le mélange exact sera différent pour chaque équipe, mais en général, il devrait conserver cette forme de pyramide.


0

D'après mon expérience, les tests E2E, quelle que soit la criticité de l'application, sont toujours prudents. Je pense toujours en termes de pire scénario, si les choses vont en forme de poire, êtes-vous à l'aise de vous tenir devant la direction et de justifier votre approche? Sinon, vous devez changer votre approche. De nombreuses organisations minimisent l'importance et les ressources allouées aux tests, mais soyez assurés que lorsque les choses tournent mal, tout le monde cherche quelqu'un à blâmer et si vous avez pris la décision de limiter les tests ou donné ces conseils, vous êtes le seul à licencier ligne.

Le développement de logiciels nécessite trop souvent un œil sur la politique organisationnelle.


0

"Il est bien connu que les tests de bout en bout et d'intégration sont coûteux."

Je pense que je ne suis pas d'accord avec cette affirmation.

Premièrement, les tests E2E sont ce qui compte pour les utilisateurs finaux et peuvent être les options les plus rentables et les plus économiques pour tester des systèmes complexes. Par exemple, lorsque quelqu'un achète une voiture, la plupart des gens ne la démontent pas et ne commencent pas à tester le carb, la boîte de vitesses et les roues isolément. Au lieu de cela, ils le prennent pour un essai routier.

Deuxièmement, en termes d'outillage, E2E n'a pas tendance à ralentir l'évolution interne du produit et dure plus longtemps. Si vous y réfléchissez, la surface fonctionnelle réelle de la plupart des produits change rarement autant, tandis qu'en interne, elle peut être soumise à toutes sortes de développements. Par conséquent, une fois que l'outil de test est opérationnel, il dure généralement extrêmement bien. Par exemple, si nous revenons à l'analogie avec la voiture. Le même cas de test "à prendre pour un lecteur" fonctionnerait à peu près sur Ford Model T comme sur Tesla. Tout comme les investissements dans les routes roulantes, les souffleries, les configurations de tests d'étanchéité, etc. Combien de tests de composants internes auraient eu un si bon retour sur investissement sur leur durée de vie?

Là où les tests E2E ont tendance à être plus chers / inappropriés, c'est dans la configuration initiale et s'ils sont utilisés pour tout tester. De manière pragmatique, je pense que la meilleure façon d'éviter ce piège est de prioriser l'automatisation des tests de choses qui:

  1. Sont faciles à automatiser et ne nécessitent probablement pas beaucoup de maintenance pour continuer à fonctionner.
  2. Consommez le plus de temps pour appliquer des processus de test manuels cohérents et adéquats.
  3. Risque de faire de vous ou de votre patron des idiots si le produit est sorti avec il cassé.

Utilisez n'importe quelle forme de test, y compris E2E, qui vous semble appropriée. Concentrez-vous sur ceux-ci.


0

Vous ne pouvez pas vraiment comparer le coût des tests d'intégration au coût d'un meilleur scénario où un bogue n'affecte qu'une seule commande. Un bug logique serait tout aussi susceptible d'affecter un grand nombre de commandes. Dire qu'un bug signifie qu'aucun paiement n'est capturé - cela pourrait avoir des effets désastreux pour toute entreprise.

Vous devriez vous demander quel est le pire des bogues qui pourrait, en réalité, se retrouver en production en raison du manque de tests E2E. Et souvenez-vous de la loi Murphys.


0

Je suppose que cette question concerne les applications Web d'entreprise.

Ma recommandation pour les choses moyennement critiques:

  • Effectuez des tests automatisés pour vos API backend, en vous assurant que le backend fonctionne comme prévu. Ces tests doivent être écrits par les développeurs lors de l'implémentation d'une API.
  • Ne vous souciez pas des tests d'interface utilisateur automatisés, c'est-à-dire effectuez les tests frontaux manuellement.

Je pense que la plupart des tests devraient être au niveau de l'API ou au niveau des composants. Je ne me soucie pas des tests unitaires qui exécutent uniquement certaines fonctions internes.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.