Agile sans tests unitaires

27

Est-il judicieux de parler de «développement agile» ou de prétendre que vous appliquez une «méthodologie agile» si la base de code sur laquelle vous travaillez a une couverture de test unitaire de 0%? (Et vous, en tant qu'équipe, ne faites rien à ce sujet).

Pour être clair: pour moi, cela n'a pas de sens. Dans mon expérience personnelle, j'ai trouvé que les tests unitaires sont le seul outil qui vous permet d'être vraiment "agile" (c'est-à-dire répondre aux changements, améliorer votre conception, partager les connaissances, etc ...) et TDD est la seule pratique qui vous y emmène. .

Il y a peut-être d'autres façons, mais je ne vois toujours pas comment elles peuvent fonctionner.

Crapaud maléfique
la source
14
Agile a beaucoup plus de chances de réussir des tests automatisés pour le sauvegarder. J'ai été obligé d'appliquer Agile sans tests auparavant et c'est un piège. C'est juste un moyen pratique d'accumuler des dettes techniques plus rapidement qu'auparavant.
MetaFight
5
TDD n'est pas nécessairement la seule pratique qui vous y mène. C'est un problème courant, cependant. Personnellement, je trouve que le BDD est une approche plus pragmatique.
MetaFight
6
«Agile a beaucoup plus de chances de réussir avec des tests automatisés pour le sauvegarder»: il en va de même pour les projets non agiles. Je pense que les tests automatisés sont plutôt orthogonaux à la méthodologie utilisée: ils vous rendent plus sûr que votre code est correct et vous aide à le garder propre.
Giorgio
Au fait, cette question test unitaire mixte et TDD vous pouvez avoir un test unitaire sans TDD.
Walfrat
En lisant les réponses ici, je suis surpris de voir à quel point les choses ont changé depuis que j'ai appris l'agilité au milieu des années 00. La programmation TDD et par paires était considérée comme les pratiques agiles ESSENTIELLES pour maintenir un code de haute qualité à un rythme élevé.
nomen

Réponses:

36

Pour être pédant, rien dans le Manifeste Agile ou le Guide Scrum ne fait référence aux pratiques techniques, comme les tests unitaires ou TDD, du tout. Donc, oui, en théorie, vous pourriez livrer tôt et souvent en mettant l'accent sur la collaboration et la valeur sans eux et vous appeler Agile, vous pourriez même avoir de l' agilité .

En pratique cependant, il est presque impossible de fournir de la valeur de manière cohérente ( en production ) toutes les quelques semaines sans une bonne suite de tests. Cela inclut les tests d'intégration ainsi que les tests unitaires. Les tests unitaires ne vont que jusqu'à présent. Il y a une raison pour laquelle c'est une pyramide et non un rectangle après tout.

Sans les tests en tant que filet de sécurité, vous introduirez de nombreux bogues de régression dans chaque version ou serez terrifié par la refactorisation. Les deux auront un impact considérable sur votre capacité à continuer à un rythme durable . Si vous ne pouvez pas maintenir votre rythme ou changer de cap (refonte) si nécessaire, alors vous n'avez pas d'agilité. L'agilité, après tout, est l'objectif que nous visons.

Canard en caoutchouc
la source
Devez-vous suivre le Manifeste Agile pour être agile?
JeffO
Non @JeffO. Vous ne le faites pas, mais cela aide certainement. J'ai édité pour clarifier mon intention.
RubberDuck
1
Les programmeurs les plus agiles de l'OMI sont ceux qui sont très pragmatiques même s'ils n'ont jamais entendu parler du manifeste agile.
Giorgio
1
Je ne peux pas être en désaccord avec vous là-bas @Giorgio. Je faisais partie d'une équipe agile des années avant qu'aucun d'entre nous n'ait jamais entendu parler d'Agile.
RubberDuck
2
@CortAmmon - Si vous voulez définir Agile (grand "A" agile comme dans votre méthodologie), je serais d'accord avec vous, mais si vous voulez être agile (petit "a" comme étant réellement agile pour pouvoir mieux gérer les changements ), alors vous n'avez pas du tout à suivre une méthodologie particulière. Si vous pouvez faire de la cascade et gérer les changements (difficile, mais pas impossible), qui s'en soucie?
JeffO
29

Le manifeste agile déclare simplement:

Individus et interactions sur les processus et les outils

Logiciel de travail sur une documentation complète

Collaboration client sur négociation de contrat

Répondre au changement suite à un plan

Aucune mention de tests unitaires là-bas. Même les 12 principes ne mentionnent pas les tests.

Donc, techniquement, il est possible d'être une équipe agile sans écrire de tests unitaires. En pratique cependant, il est vraiment difficile de voir comment une équipe peut maintenir un logiciel fonctionnel dans un environnement agile sans tests pour l'aider à effectuer des changements constants.

David Arno
la source
4
Il est difficile de voir comment une équipe peut maintenir un logiciel fonctionnel dans n'importe quel environnement sans tests.
Bryan Oakley
6
Ce n'est pas parce que quelque chose est difficile à voir
Ampt
8

Même s'il n'y a pas de mot direct sur les tests unitaires ou TDD ou tout type de test dans le manifeste agile comme d'autres l'ont répondu ici, je crois qu'un bon Scrum Master ou développeur serait capable de discerner l'une des déclarations du manifeste.

Logiciel de travail  sur une documentation complète.

Comment savoir si le logiciel fonctionne? Le manifeste n'a pas besoin d'indiquer explicitement le terme test. C'est succinct.

Les tests unitaires (dans le contexte du sujet) ralentiront votre phase de codage à l'étape précédente, mais en valent la peine à mesure que vous progressez, ce qui accélère le développement. Il vous donne un contrôle fin du grain sur les tests de niveau de code et rend votre conception évolutive, vous donnant l'assurance que votre logiciel fonctionne et peut facilement gérer la régression; ce qui rendrait votre développement agile.

Axel
la source
3
Vous pouvez le tester manuellement. Vous n'avez pas besoin de tests unitaires pour cela. Ils aident. BEAUCOUP. Ils sont comme la meilleure chose qui puisse améliorer un processus. Mais ils ne sont en aucun cas essentiels pour fournir des logiciels.
T. Sar - Réintègre Monica
Oui bien sûr. Je n'ai pas dit que vous ne pouviez pas le faire manuellement. J'ai dit n'importe quel type de test. Je ne déclarais aucune forme de désaccord sur les tests. Et en ce qui concerne vos tests manuels, c'est sur une perspective différente de votre côté sur la façon dont vous pouvez rester agile tout en faisant face à des régressions.
Axel
Je comprends votre point de vue. Cependant, la question concerne les tests unitaires en particulier, pas exactement les tests en général. La lecture de votre réponse dans le contexte de la question fait considérer votre test comme un "test unitaire"!
T. Sar - Rétablir Monica
Là, désolé pour ça.
Axel
2
@ThalesPereira, un test unitaire qui vous indique si le changement que vous avez fait il y a quarante secondes a cassé quelque chose est beaucoup plus agile que le rapport que vous obtenez du département QA vous disant que quelque chose que quelqu'un a changé il y a trois jours l'a cassé.
Solomon Slow
2

C'est tout à fait logique. Agile ne consiste pas à tester, comme d'autres l'ont déjà mentionné, mais à répondre spécifiquement à votre question:

Non, vous n'avez absolument pas besoin de tests unitaires.

Vous pouvez exécuter un processus agile avec des tests d'intégration uniquement. Vous pouvez par exemple exécuter un test d'intégration automatisé tous les soirs et corriger les bogues détectés le lendemain. Vous pouvez avoir un testeur manuel exécutant des tests d'intégration en continu si vous le souhaitez. Quel que soit le système, le test unitaire est entièrement facultatif.

Vous trouverez peut-être que les tests unitaires vous aident à développer, et assez juste pour cela, mais il y a beaucoup de choses qui peuvent aider au développement que vous pourriez ne pas avoir.

Vous avez besoin d'une certaine forme de test, même si ce sont les anciens «testeurs bêta clients». Si votre client est fortement impliqué dans le processus et ne craint pas de trouver des bogues, alors cela peut fonctionner - car ils ont tendance à trouver des bogues que personne d'autre ne pensait être des bogues!

gbjbaanb
la source
Vous pouvez exécuter un processus agile avec des tests d'intégration uniquement. Est-ce théorique ou parlé d'expérience?
R Sahu
1

Ce n'est pas obligatoire. Les tests sont excellents lorsque des personnes savent vraiment comment les utiliser. Lorsque vous ne le faites pas, non seulement ce n'est pas nécessaire, cela devient un passif. Je dirais qu'il y a beaucoup de programmeurs qui ne sont pas très compétents.

Je suis heureux que vous ayez reconnu dans votre question qu'être agile, c'est comment vous publiez réellement un logiciel au lieu de suivre une méthodologie. Le Manifeste Agile est une belle référence, mais ce n'est pas le guide définitif. L'agilité existait avant elle. Il existe des moyens de développer un logiciel pour être "plus agile" mais différentes combinaisons peuvent être utilisées sur différents projets.

Si vous publiez un nouveau logiciel à un rythme acceptable pour le client, vous êtes probablement agile. J'inclurais également de ne pas avoir trop de recul et de me plaindre des changements de fonctionnalités par les développeurs. Réparer une chose pour en casser une autre n'est pas idéal non plus. Lorsque vous êtes plusieurs utilisateurs derrière la mise à niveau, vous n'êtes probablement pas très agile, que vous testiez ou non.

JeffO
la source
1

Je voudrais contredire (autres réponses) que le manifeste Agile énonce clairement quelque chose à ce sujet, à savoir:

Une attention continue à l'excellence technique et à une bonne conception améliore l'agilité.

J'aime beaucoup la définition LeSS de l'excellence technique et elle comprend les tests unitaires et TDD. Vous pouvez maintenant affirmer que vous pourriez ne pas avoir besoin de tests unitaires et / ou TDD pour y parvenir, mais c'est la façon la plus courante et probablement conseillée.

L'agilité organisationnelle est limitée par l'agilité technique

En d'autres termes, lorsque vous tardez à apporter des modifications à votre produit, peu importe la façon dont vous structurez vos équipes, votre organisation ou le cadre que vous adoptez, vous serez lent à répondre aux changements.

Si vous pouvez empêcher votre produit de résister au changement d'une autre manière, vous pourriez être sur la bonne voie, mais:

J'ai inventé la programmation extrême pour rendre le monde sûr pour les programmeurs. - Kent Beck

Scrum n'a aucune pratique technique, mais Jeff a dit ce qui suit à ce sujet:

Je n'ai jamais vu une équipe Scrum hyper-productive qui n'utilisait pas les pratiques de développement Extreme Programming. - Jeff Sutherland

Cité de cet article: http://ronjeffries.com/articles/017-02ff/gathering2017/

Je m'attendrais à ce que les équipes Scrum sans pratiques techniques finissent par utiliser des rétrospectives avec une pratique similaire. Vous voulez aussi être hyper-productif, non?

Le modèle de fluence Agile , le mentionne au niveau deux étoiles:

Les techniques utiles incluent l'intégration continue, le développement piloté par les tests , la programmation par paires et la propriété collective.

Si vous ne ciblez que le premier niveau de fluidité Agile, vous pouvez ignorer la pratique, mais tout produit plus grand et plus long devrait au moins essayer d'atteindre un niveau deux étoiles.

Ainsi, le consensus général est que oui sans bonnes tests unitaires, code propre et pratiques de refactorisation, il n'est actuellement pas possible d'être vraiment Agile. Cela pourrait changer à l'avenir avec l'émergence de nouvelles pratiques techniques.

Selon vous, quelle serait la réponse si nous demandions à certains signataires du manifeste comme Robert C. Martin, Martin Fowler ou Kent Beck? Ils diront peut-être que cela dépend, mais en général, c'est quelque chose que vous devez faire.

Niels van Reijmersdal
la source
1
le fait est que cela ne doit pas être un "test unitaire", vous pouvez simplement lancer un test d'intégration et considérer que c'est suffisant. Cependant, si vous n'avez rien et testez tout manuellement, vous deviendrez très probablement lent à réagir rapidement au changement ou à effectuer régulièrement une régression importante.
Walfrat
2
D'accord techniquement, ce n'est pas le cas, mais les tests à des niveaux plus élevés sont souvent plus fragiles, plus difficiles à maintenir et vous ralentissent probablement au final si vous en avez trop. J'aime la façon dont Martin Fowler l'exprime: "Si vous obtenez un échec dans un test de haut niveau, non seulement vous avez un bug dans votre code fonctionnel, vous avez également un test unitaire manquant ou incorrect." de martinfowler.com/bliki/TestPyramid.html
Niels van Reijmersdal
Tester à un niveau supérieur ne teste pas les mêmes choses, vous laissez donc des trous mais considérez que le risque est actuellement suffisamment digne. Pour un site Web qui pourrait suffire, pour un système de finition critique -> pas question.
Walfrat