Nous passons plus de temps à implémenter un test fonctionnel qu'à implémenter le système lui-même, est-ce normal?

12

Fondamentalement, nous avons trois projets principaux, deux d'entre eux sont des services Web et l'autre est une application Web. Bien que je sois satisfait de couvrir autant que possible nos services Web avec des tests fonctionnels (les trois projets ont leurs propres tests unitaires), les tests fonctionnels de l'application Web prennent beaucoup de temps aux développeurs pour être mis en œuvre. Par beaucoup, je veux dire deux fois, ou parfois plus, le temps nécessaire pour implémenter la fonctionnalité testée avec le test unitaire inclus.

La politique du gestionnaire consiste à tester chaque fonctionnalité que nous ajoutons, même si elle n'est pas critique pour l'entreprise (c'est-à-dire un nouveau CRUD).

Je suis d'accord pour tester toutes les fonctionnalités des services Web, car il est difficile de les tester manuellement, et ces tests s'exécutent rapidement et ne prennent pas beaucoup de temps à mettre en œuvre.

Alors, quelle est la valeur de passer plus de temps à écrire un test fonctionnel qu'à écrire du code système, un test unitaire et à réparer les tikets QA? Est-ce normal? Ne devrions-nous pas écrire des tests fonctionnels uniquement pour des fonctionnalités critiques et laisser QA effectuer des tests de régression sur aucune fonctionnalité critique?

Remarque: nous ne développons pas de logiciel médical ou de logiciel de la NASA ou rien de critique.

Pablo Lascano
la source
14
Nous n'avons pas de tests. Nous passons énormément de temps à réparer les choses après coup. "Tu peux me payer maintenant, ou tu peux me payer plus tard." C'est plus tard et ce n'est pas joli.
MetalMikester
3
Oui - une partie de l'image est certainement qu'une suite de tests bien entretenue réduit le temps nécessaire à la mise en œuvre réelle.
Michael Borgwardt

Réponses:

16

Les tests fonctionnels sont très importants. Oui, ils prennent du temps à écrire mais si vous écrivez les bons tests fonctionnels, ils en valent largement la peine.

Il y a quelques bonnes raisons de faire des tests fonctionnels automatisés sur une application.

  • Lorsqu'une nouvelle fonctionnalité est ajoutée à votre site Web, elle vous permet de savoir immédiatement si les modifications apportées à cette nouvelle fonctionnalité interrompent toute autre fonctionnalité de votre site.
  • Il s'agit d'une connaissance documentée du fonctionnement et de la collaboration de l'application pour répondre aux besoins de l'entreprise.
  • Lorsqu'il est temps de mettre à jour une bibliothèque tierce, vous pouvez la mettre à jour et exécuter votre suite de tests fonctionnels pour voir si quelque chose se casse. Au lieu d'avoir à parcourir chaque page vous-même, vous pouvez demander à un ordinateur de le faire pour vous et vous donner une liste de tous les tests qui ont échoué.
  • Test de charge! Vous pouvez simuler des milliers d'utilisateurs simultanés frappant tous votre site en même temps et vous pouvez voir où votre site ralentit et se déforme sous la pression. Vous pouvez voir comment votre site Web se comporte bien avant de recevoir un appel de fin de soirée indiquant que le site est tombé en panne.
  • Les tests fonctionnels prennent du temps à faire manuellement. Oui, il faut du temps pour écrire les cas, mais si vous deviez vous asseoir avec un classeur avec 500 pages de tests que vous deviez compléter avant de pouvoir expédier le produit, vous souhaiteriez avoir les tests automatisés!
  • Les documents de test deviennent rapidement obsolètes. Lorsqu'une nouvelle fonctionnalité est ajoutée, vous devez vous assurer de mettre à jour le document de test principal. Si quelqu'un saute certains tests, vous obtenez tout à coup des bogues qui se glissent dans les pages qui sont "faites et testées". Je travaille actuellement dans un environnement comme ça, et je peux vous assurer que c'est un cauchemar.

En fin de compte, oui, il faut du temps pour écrire ces cas, mais vous devriez être fier de les écrire. C'est votre façon de prouver, sans l'ombre d'un doute, que votre code fonctionne et qu'il fonctionne avec toutes les autres fonctionnalités. Lorsque le contrôle qualité vient à vous et dit qu'il y a un bogue, vous le corrigez, puis l'ajoutez à votre suite de tests pour montrer qu'il est corrigé et assurez-vous qu'il ne se reproduise plus.

C'est votre filet de sécurité. Quand quelqu'un entre et détourne un proc stocké et fait un petit changement pour qu'il fonctionne avec son code, vous remarquerez qu'il a cassé 3 autres fonctionnalités dans le processus. Vous l'attraperez cette nuit-là et pas la veille de la date limite!

Quant à l'écriture de tests fonctionnels pour les fonctions critiques du système uniquement. Cela ne vous donnera pas l'image complète et cela permettra aux bogues de se faufiler. Il suffit d'ajouter une petite fonctionnalité qui n'est pas critique pour le système, mais qui interagit indirectement avec une fonction critique du système et vous avez le potentiel d'avoir un bug introduit.

Tyanna
la source
Merci pour votre réponse. Je suis conscient de l'importance et des avantages des tests fonctionnels, mes préoccupations concernent le rapport coût-efficacité de tous les tests. Nous développions un test fonctionnel depuis trois ans, mais maintenant dans ce projet, je pense que le coût de la mise en œuvre de test ALL est bien plus que de trouver un bug en production, d'augmenter un ticket et de le corriger ... Je me demande si il existe des circonstances où NE PAS faire un test fonctionnel est mieux (en termes de rapport coût-bénéfice) que de ne pas le faire, et je me demande si nous sommes dans une telle circonstance, où est-il préférable de choisir judicieusement ce qu'il faut tester.
Pablo Lascano
@donsenior ~ si vous pensez que le test prend trop de temps, alors regardez les outils que vous utilisez. Les utilisez-vous correctement? Utilisez-vous même des outils pour gagner du temps? L'écriture de tests prend plus de temps que l'écriture du code b / c vous avez plus de code à écrire. C'est la nature des tests. Si vous commencez à choisir et à choisir pour quoi écrire les tests, cela arrivera au point que personne n'écrira de tests, ou ces tests seront bâclés.
Tyanna
mon idée pour choisir quoi tester, n'est pas un choix aléatoire, mais choisissez la fonctionnalité commerciale la plus critique (et ce ne serait pas la décision des développeurs, mais celle du gestionnaire). Et je pense au contraire, les développeurs ont tendance à écrire des tests bâclés maintenant parce qu'ils doivent tout tester, même cette fonctionnalité qui prend cinq minutes pour le contrôle qualité et deux jours pour que le développeur automatise. Je suis d'accord que les outils que nous utilisons ne sont peut-être pas les meilleurs pour tester notre application Web (fitnesse et java). J'ai peur que nous approchions du point d'écrire et de maintenir le test fonctionnel plus que le système
Pablo Lascano
@donsenior ~ Bien sûr, il faut 5 minutes à QA pour tester un boîtier, mais cela prend moins d'un seconde à un ordinateur pour le tester. Vous devriez demander "Pourquoi faut-il 2 jours pour écrire quelque chose qui prend 5 minutes à tester à la main"? Encore une fois, regardez vos outils. Peut-être que l'AQ devrait également écrire des cas de test? Le problème n'est pas d'écrire des cas de test pour votre système, c'est la façon dont ces cas de test sont en cours d'écriture.
Tyanna
Eh bien, ces tests prennent beaucoup plus d'une seconde à exécuter (rappelez-vous que ce sont des tests fonctionnels, pas des tests unitaires). Mais ce n'est pas un problème, ils courent la nuit. Je pense que vous avez raison en ce sens que l'AQ devrait également rédiger des cas de tests, mais malheureusement, ce n'est pas une décision que je peux prendre. Merci beaucoup pour vos réponses, j'ai marqué celle-ci comme acceptée!
Pablo Lascano
7

Plus de 2 fois ... me semble un peu trop. Vous voudrez peut-être analyser les raisons de cela, elles pourraient inclure:

  • mauvais support d'outil pour la création et la maintenance des tests

  • les contrats des services Web ne sont pas suffisamment décrits dans la conception. Les développeurs doivent élaborer les contrats pendant les tests, ce qui est généralement un processus d'alignement long.

Parlez à vos développeurs.

En supposant que vous développez dans les sprints, ces tests fonctionnels ne sont qu'une partie du sprint. Cela ne se fait pas sans ces tests. Si vous ne l'avez pas, votre temps pour les tests d'intégration après la phase de développement pourrait doubler.

Andreas Huppert
la source
Je suis d'accord, nous n'utilisons peut-être pas le bon outil pour tester l'application Web. Aucun problème pour tester nos services Web. Quoi qu'il en soit, outre le bien ou le mal de la façon dont nous mettons en œuvre les tests, je suis préoccupé par les coûts. Je pense qu'à ce stade, il vaut mieux (en termes de coûts / avantages) de laisser un peu de test pour le département QA et de corriger les bugs même s'ils se trouvent en production.
Pablo Lascano
Vous avez omis des cours mal conçus comme la raison possible de prendre trop de temps pour tester. C'est de loin la raison la plus courante que je vois lorsque les gens prennent une éternité à tester leur code.
Dunk
4

Est-il normal de passer plus de temps à implémenter un test fonctionnel qu'à implémenter le système lui-même?

Absolument. Écrire de très bons tests est susceptible de prendre la majorité du temps dans de nombreux (bons) magasins.
Un ratio 2-1 est donc très bien. Les développeurs moins expérimentés eux-mêmes ne prennent souvent pas tout le temps en compte les tests.

Michael Durrant
la source
2

Il y a la loi des rendements décroissants. En supposant que vous écrivez d'abord des tests pour le code le plus risqué, la valeur générée par d'autres tests diminue avec le temps.

Les tests unitaires sont du code, ils contiendront donc des bogues (comme tous les autres codes). La correction de ces bogues prend du temps.

D'après mon expérience, les tests unitaires contiennent beaucoup plus de bogues que le système qu'ils testent, et les corriger est un fardeau continu.


la source
1

C'est une question de qualité.

Si vous avez besoin d'accéder au marché, vous développerez votre application le plus rapidement possible. Vous ne pouvez même pas avoir de tests automatiques du tout =) mais vous donnerez votre application à votre audition avant vos concurrents.

Mais si vous savez que votre auditif ne disparaîtra pas, vous ferez tout ce que vous ne pouvez pas pour les décevoir. Chaque ticket de bug fera baisser votre réputation. Imaginez qu'un bug supprimera 50% de votre réputation, le suivant - 25% et ainsi de suite. Peut-il donc y avoir trop de tests?

Nikita U.
la source
eh bien je ne sais pas vraiment si à ce stade nous réduisons réellement les tickets. Peut-être que nous avons réduit (mais pas beaucoup) les tickets QA, mais le taux de bugs trouvés par ce test n'est pas assez grand (de mon point de vue) pour justifier un tel coût d'avoir 2/3 de temps d'ingénieurs logiciels à développer des tests fonctionnels.
Pablo Lascano
0

Si par "est-ce normal" vous demandez si c'est courant, non, ce n'est certainement pas le cas. Beaucoup d'équipes de développement ont de mauvaises pratiques de test (j'en fais partie) et même des livres de qualité, j'ai lu des conseils pour passer à peu près autant de temps à coder la fonctionnalité que les tests. Si, normalement, vous demandez si elle est saine, cela dépend, mais deux fois plus de tests que nécessaire, c'est mieux qu'aucun test.

Cela n'a pas besoin d'être critique . Lorsque vous testez une fonctionnalité, vous testez quelque chose d' utile pour les utilisateurs finaux et il est de votre responsabilité de savoir (et non de deviner) qu'elle fonctionne tout le temps correctement. Si vous avez besoin de deux fois plus pour cet objectif, alors cela devrait être fait de cette façon - si possible.

Il est également possible que votre politique soit visiblement trop stricte en ce qui concerne les tests automatisés, mais il est difficile de dire sans savoir la qualité qu'ils visent, leurs ressources et à quoi d'autre ils pourraient l'affecter.

Arthur Havlicek
la source