Comment puis-je commencer les tests dans une anticulture de tests? [fermé]

20

J'ai une confession à faire: les tests automatisés formalisés n'ont jamais fait partie de mon expérience en programmation. Je travaille maintenant dans une très grande entreprise avec de nombreux développeurs (la plupart d'entre eux sont des développeurs Web d'une sorte ou d'une autre), et il est évident que la plupart d'entre eux ne testent pas * non plus. (* Je ne vais pas continuer à le dire formellement ; veuillez en déduire.)

Si j'attends d'avoir le soutien de mon organisation pour commencer les tests, cela n'arrivera jamais. Si j'essaie de «changer les choses de l'intérieur» en poussant les tests à la direction, je serai à bout de souffle avant que le changement ne se produise. Je dois commencer les tests maintenant.

Mais avec TDD et ses semblables, je vais finir avec beaucoup de code de test en même temps que le code de production. Nos systèmes de contrôle de version (tous centralisés) ne sont pas organisés pour stocker le code de test. Je vais devoir trouver une place pour tout ça sur mon poste de travail.

Est-il possible de commencer une pratique personnelle de tests de logiciels dans une culture qui ne valorise pas ou ne fournit pas les outils pour cela? Quelles techniques et outils utilisez-vous pour vous permettre de tester lorsque les outils et l'organisation officiels n'ont pas de place pour les tests, les frameworks et les automatisations?

kojiro
la source
14
Pourquoi ne pouvez-vous pas stocker le code de test dans le VCS de votre entreprise? J'imagine que dans un projet qui a un srcrépertoire pour le code de production, il serait également possible d'ajouter un testrépertoire - ou est-ce explicitement interdit pour une raison quelconque?
Péter Török
@ PéterTörök Vous nous surestimez. Nous n'avons pas de srcrépertoire, nous avons des racines web. Pour vérifier mon code dans VCS central, je le vérifierais dans la racine Web.
kojiro
Si vous n'avez pas le contrôle des sources dans votre culture antitesting, j'essaierais de le faire en premier (ou aussi) car cela résoudra beaucoup d'autres problèmes que je suis sûr que votre équipe a. Ensuite, il jette les bases de ce que vous voulez faire pour les tests.
Scott Wylie
@ScottWylie Je n'ai pas vraiment dit ça. Nous avons VCS, nous ne l'avons tout simplement pas organisé pour les tests (ou bien autre chose que des modifications directes à des trucs webroot). Je pense que le neveu de quelqu'un a créé CVS en 1998 et personne n'a changé depuis.
kojiro

Réponses:

22

J'ai personnellement fait cela avec un succès considérable. Les facteurs clés de succès:

  • Obtenez un support de gestion (provisoire). Les avantages des tests automatisés sont bien documentés et devraient convaincre tout gestionnaire de l'essayer. Cela comprend la recherche d'une place dans le VCS et un serveur de build, car
  • Les tests automatisés ne fournissent leur pleine valeur que s'ils sont exécutés fréquemment et automatiquement afin que vous soyez au courant des problèmes rapidement et que vous n'ayez pas à compter sur des personnes qui n'oublient pas de les exécuter. Vous avez besoin d'un serveur de build qui les exécute au moins quotidiennement. Il peut s'agir d'un ancien poste de travail. Jenkins prend très peu de travail pour démarrer.
  • Mener par l'exemple. Écrivez des tests, parlez des avantages qu'ils vous offrent et, lorsqu'ils révèlent des erreurs introduites par d'autres développeurs, parlez-en en termes de protection contre une gêne potentiellement beaucoup plus grande.
  • Optez pour les fruits bas. Certaines parties de l'application seront difficiles à tester, d'autres faciles. Certains seront robustes, d'autres cassants. L'écriture de tests pour des pièces fragiles mais faciles à tester fournit le plus de valeur dans les plus brefs délais.
  • Voyez si vous pouvez écrire des tests réutilisables, par exemple des conventions de test ou des fonctionnalités que tous les modules (pages Web, services REST, etc.) doivent avoir mais qui sont souvent oubliés.
Michael Borgwardt
la source
7

Sans aide à la gestion, vous êtes mort dans l'eau. La direction prétendra que vous ne faites pas de travail utile, vous serez pénalisé dans vos commentaires et finalement vous serez licencié. Il existe des moyens d'amener la direction à voir que les tests précoces leur coûtent moins cher et tout cela. Il est possible de changer la culture mais vous mettez votre cou sur le bloc de coupe.

Je suggérerais de lire le chapitre de Machiavel le Prince sur la façon d'introduire le changement avant de faire quoi que ce soit.

Sardathrion - Rétablir Monica
la source
La vôtre est la deuxième réponse suggérant que les tests coûteront du temps qui ne serait pas autrement dépensé. Mais tester les évangélistes (il me semble) vous dira que tester permet de gagner du temps. Pas seulement à long terme, mais même dans la perspective d'un projet de longueur moyenne, car vous ne passerez pas autant de temps à déboguer votre code de production, et les tests vous obligent à adapter le code pour les transmettre, ce qui (dans mon compréhension de la théorie) tout cela permet de réduire le temps global consacré au codage. Avez-vous trouvé que ce n'était pas le cas?
kojiro
1
@kojiro: Oui, les tests globaux réduiront le temps et les coûts. Cependant, il ne le fera pas à court terme. Certains gestionnaires considèrent le court terme comme plus important. Après tout, qu'est-ce qu'un bon logiciel, sinon un, pour lequel l'entreprise est payée et peut facturer au client des corrections de bugs.
Sardathrion
2
Les tests permettent de gagner du temps, mais lorsque vous devez refaire la moitié du code pour être testable, vous perdez du temps au début à faire tout ce travail juste pour, des mois plus tard, être capable de faire des tests, puis cela accélère. Les gestionnaires ne pensent pas dans "les mois à venir", ils pensent dans "ce mois-ci", donc tout ce qu'ils voient est la "perte de temps" parce que ce développeur ne crée pas de nouveau code qu'il joue avec des tests que nous pouvons ' t vendre ou, plus probablement, refactoriser le code qui "fonctionne déjà"
Wayne Molina
Habituellement, même à court terme, cela fera gagner du temps. Lorsque vous travaillez sur quelque chose, il est beaucoup plus rapide de pouvoir exercer un morceau de code à travers un test, puis d'avoir à exécuter l'application entière et à l'amadouer pour exécuter ce morceau de code particulier.
Stefan Billiet
3

D'après mon expérience, si la culture est anti-test, vous ne pouvez pas raisonnablement l'introduire. Soit les tests seront vus comme une perte de temps et vous serez réprimandé pour avoir "perdu du temps" ou "pris trop de temps", soit le code s'est débarrassé d'années de ne pas être écrit de manière testable (par exemple pas d'interfaces, tout étroitement couplé) et vous devrez passer beaucoup de temps à refactoriser et / ou réécrire le code (ce qui risque de "prendre trop de temps" et de "perdre du temps") pour le rendre testable afin que vous puissiez écrire des tests en premier lieu .

Vous pourriez avoir une chance si vous faites des trucs greenfield qui n'ont qu'à interagir avec des choses existantes (créer une belle enveloppe autour des mauvaises zones) ou si vous pouvez le faire en petites quantités où cela ne causera pas de problèmes ou vous obligera à "travailler sur des tâches qui ne vous sont pas assignées" qui peuvent vous mettre dans la niche.

Wayne Molina
la source
1

Je ne pense pas que vous irez très loin jusqu'à ce que vous puissiez prouver suffisamment qu'il existe un problème (qui peut ne pas être actuellement reconnu) que les tests automatisés peuvent résoudre.

S'il existe une culture de tests manuels par rapport à des scripts définis, il y a un coût d'exécution de ces scripts associé à un risque de résultats incomplets ou inexacts. Il peut y avoir une histoire (documentée ou sous forme de «récit de guerre») de cela. Suggérer un projet pilote pour automatiser certains de ces tests manuels en vue de réaliser une économie de coûts à long terme.

S'il n'y a même pas de fonction de test manuel, je dirais que l'entreprise ne perçoit pas qu'un quelconque type de test formel, automatisé ou non, a de la valeur. Dans ce cas, je considérerais que le chemin à parcourir est long et fortement ascendant, mais encore une fois, il faudra probablement une démonstration claire que l'entreprise peut bénéficier d'une approche moins décontractée de la qualité logicielle. Si vous ne pouvez pas faire cela, il est difficile de voir comment il pourrait y avoir un soutien pour l'idée sur des bases commerciales.

Mike Woodhouse
la source
0

Une idée est que vous visiez à écrire un test qui prouve que le code que quelqu'un d'autre a écrit est défectueux. Devrait vendre le concept.

Anders Lindén
la source