web-dev-qa-db-fra.com

Agile sans tests d'unité

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

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

Peut-être qu'il y a d'autres manières, mais je ne vois toujours pas comment ils peuvent fonctionner.

27
Evil Toad

Pour être pédants, rien dans le manifeste agile ou le Guide de Scrum ne fait référence aux pratiques techniques, telles que 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 appelez-vous agile, vous pourriez même avoir agilité.

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

Sans les tests en tant que filet de sécurité, vous introduirez de nombreux bugs de régression dans chaque libération ou être terrifié de refactoring. Les deux auront une incidence importante sur votre capacité à continuer à un rythme durable. Si vous ne pouvez pas supporter votre rythme ou votre parcours de changement (refonte) lorsque vous avez besoin, vous n'avez pas d'agilité. Agilité, après tout, est l'objectif que nous aspirons.

36
RubberDuck

Le manifeste agile indique simplement:

individus et interactions sur les processus et les outils

logiciel de travail sur une documentation complète

Collaboration client sur la négociation de contrat

Répondre au changement après un plan

Aucune mention des tests unitaires là-bas. Même les 12 principes Ne mentionnez pas les tests.

Donc, techniquement, il est possible d'être une équipe agile sans écrire des tests d'unité. En pratique, il est vraiment difficile de voir comment une équipe peut maintenir des logiciels de travail dans un environnement agile sans tests pour les aider à faire des changements constants.

29
David Arno

Même s'il n'y a pas de mot direct indiquant que les tests unitaires ou le TDD, ni aucun type de test dans le manifeste agile, car d'autres ont répondu ici, je pense qu'un bon maître ou développeur Scrum Scrum serait en mesure de discerner l'une des déclarations du manifeste.

logiciel de travail sur une documentation complète.

Comment quelqu'un saurait si le logiciel fonctionne? Le manifeste n'a pas besoin d'énoncer explicitement le test des tests. C'est succinct.

Les tests unitaires (dans le contexte du sujet) rendront votre phase de codage ralentissée sur la phase antérieure, mais en vaut la peine lorsque vous progressez, rendez-vous au développement beaucoup plus rapidement. Il vous donne un contrôle de grain fine sur les tests de niveau de code, ainsi que de rendre votre conception évolutive, vous permettant de travailler votre logiciel et peut facilement gérer la régression; à qui ferait votre agile de développement.

8
Axel

Ça a absolument un sens. Agile ne concerne pas les tests, car d'autres ont déjà mentionné, mais pour répondre spécifiquement à votre question:

Non, vous n'avez pas besoin d'un test unitaire.

Vous pouvez exécuter un processus agile avec des tests d'intégration uniquement. Vous pouvez exécuter un test d'intégration automatisé tous les soirs par exemple et résoudre les insectes qui se trouvent le lendemain. Vous pouvez avoir un testeur manuel exécutant des tests d'intégration continuellement si vous le souhaitez. Quel que soit le système, les tests d'unités sont entièrement facultatifs.

Vous trouverez peut-être des tests unitaires vous aide à développer et assez juste à cela, mais il y a beaucoup de choses qui peuvent aider le développement que vous n'auriez peut-être pas.

Vous avez besoin d'une forme de test, même si ses anciens testeurs bêta-client ". Si votre client est fortement impliqué dans le processus et que cela ne vous dérange pas de trouver des bogues, cela peut travailler - comme ils ont tendance à trouver des bugs que personne d'autre ne pensait que des insectes!

2
gbjbaanb

Ce n'est pas nécessaire. Le test est génial lorsque vous avez des personnes qui savent vraiment comment l'utiliser. Lorsque vous ne le faites pas, non seulement n'est pas nécessaire, cela devient une responsabilité. Je dirais qu'il y a beaucoup de programmeurs qui ne sont pas très qualifiés.

Je suis heureux que vous ayez reconnu dans votre question que l'agile est sur la manière dont vous libérez des logiciels au lieu de suivre une certaine méthodologie. Le manifeste agile est une belle référence, mais ce n'est pas le guide définitif. Existait agile avant qu'il ne l'ait fait. Il existe des moyens de développer des logiciels d'être "plus agiles" mais différentes combinaisons peuvent être utilisées sur divers projets.

Si vous publiez de nouveaux logiciels à un rythme acceptable pour le client, vous êtes probablement agile. Je n'incluais pas non plus de trop replier et de me plaindre des changements de fonctionnalités des développeurs. Fixer une chose seulement pour casser un autre n'est pas idéal non plus. Lorsque vos utilisateurs sont plusieurs versions de la mise à niveau, vous n'êtes probablement pas très agile, que vous testiez ou non.

1
JeffO

J'aimerais contrer l'argument (d'autres réponses) que le manifeste agile énonce clairement quelque chose à ce sujet, à savoir:

Attention continue à Excellence technique et bonne conception améliore l'agilité.

J'aime beaucoup la définition de moinsexcellence technique et elle inclut les tests d'unité et TDD. Vous pouvez maintenant affirmer que vous n'avez peut-être pas besoin de tests d'unité et de TDD pour y parvenir, mais c'est la voie la plus courante et probablement profitée.

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

En d'autres termes, lorsque vous êtes lent dans la modification de votre produit, cela n'a pas d'importance à la manière dont vous structurez vos équipes, votre organisation ou quel cadre vous adoptez, vous serez lent à répondre aux modifications.

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

J'ai inventé une programmation extrême pour rendre le monde en sécurité pour les programmeurs. - Kent Beck

Scrum manque de pratiques techniques, mais jeff a déclaré ce qui suit à ce sujet:

Je n'ai jamais vu une équipe de Scrum Hyper-productive qui n'utilisait pas de pratiques de développement de la programmation extrêmes. - Jeff Sutherland

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

Je m'attendrais à ce que des équipes de Scrum sans pratiques techniques ne soient éventuellement à l'aide de rétrospectives proposées avec une pratique similaire. Vous voulez être hyper-productif aussi, pas?

Le modèle fluence agile modèle, le mentionne au niveau des deux étoiles:

Les techniques utiles incluent l'intégration continue, Développement axé sur les tests , la programmation de 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 de course devrait au moins essayer d'obtenir un niveau de deux étoiles.

La consensus générale est donc que oui sans bonnes pratiques de test unitaire, de code de nettoyage et de refacteur, il n'est pas possible d'être vraiment agile. Cela pourrait changer à l'avenir que de nouvelles pratiques techniques émergent.

Selon vous, que pensez-vous que la réponse serait si nous nous demandons des cadres du manifeste comme Robert C. Martin, Martin Fowler ou Kent Beck? Peut-être qu'ils diront que cela dépend, mais c'est généralement quelque chose que vous devriez faire.

1