Le test est-il une partie nécessaire de la méthodologie Agile?

24

J'ai fait partie de nombreuses équipes qui tentent de pratiquer des méthodologies Agiles et souvent ces équipes sont centrées sur les tests. Le test est-il une partie nécessaire de la pratique de la méthodologie Agile ou est-ce juste une pratique XP qui a été maintenue au fil des ans?

stevebot
la source
76
Les tests sont une partie nécessaire de tout développement logiciel de qualité.
Telastyn
2
doublon possible de Pouvez-vous être agile sans faire de TDD (développement piloté par les tests)? - si vous n'êtes pas d'accord, faites le moi savoir ...
Murph
11
Je ne suis pas d'accord avec le double. Les tests sont plus larges que TDD et la question plus large a des réponses différentes.
Bart van Ingen Schenau
Je suis d'accord avec @BartvanIngenSchenau. Non seulement tester une activité beaucoup plus large que simplement faire TDD, mais TDD et les tests unitaires ne sont pas les mêmes. Je suis surpris que tant de gens confondent les deux derniers.
Andres F.
Il peut avoir été intégré dans le concept de "Définition de Terminé", ce qui dans Agile / Scrum signifie qu'il dépend du contexte. Lorsque Agile est appliqué au marketing, aux ventes, etc., ils n'ont pas de concepts similaires à ceux des tests de logiciels, mais ont toujours une "définition de fait". Pour les logiciels, la "définition du fait" doit tenir compte de la qualité (à la fois visible et interne, par exemple la qualité du code) du résultat final, ainsi que du niveau de test qui a été effectué.
rwong

Réponses:

33

Les tests sont absolument essentiels à l'agile, principalement parce que l'agile est basé sur des améliorations incrémentielles: la difficulté est qu'il peut parfois être difficile de voir comment les modifications actuelles affecteront votre ancien code. La meilleure façon de vous assurer que vous n'avez pas cassé quelque chose est de le tester et de savoir COMMENT le tester. De cette façon, vous trouvez le bogue immédiatement, pas sur la route lorsque vous avez oublié exactement ce que vous avez fait lorsque vous écriviez le code qui a cassé une ancienne fonctionnalité.

La raison pour laquelle cela diffère de la programmation de conception descendante plus traditionnelle est que dans cet environnement, il a) est très difficile à tester jusqu'à ce que vous ayez le produit fini b) en théorie, vous considérez tous les critères de conception en même temps, et vous êtes donc moins susceptible de prendre une décision de conception qui rompt les décisions de conception précédentes.

Michée
la source
2
Il est également important que les modifications incrémentielles futures ne rompent pas les fonctionnalités précédentes, et les tests unitaires sont un moyen facile de vérifier cela.
1
Je dirais que les tests sont absolument essentiels pour le développement de logiciels .
Andres F.
@Snowman Testing! = Tests unitaires. Aussi, test unitaire! = TDD (juste au cas où ...).
Andres F.
@AndresF. vrai, je pense normalement que les tests unitaires font partie intégrante d'Agile pour les raisons que j'ai décrites ci-dessus. Échec de lecture.
8

Vous parlez probablement de tests automatisés, de tests unitaires, de tests d'intégration, etc. Ceux-ci sont plus importants pour les tests agiles que manuels (avec des testeurs et autres) car ils sont trop lents, il n'est donc pas possible de tester chaque petite modification que vous apportez. Étant donné que l'agilité consiste à effectuer de petites itérations rapides, il est très utile de disposer de tests qui vérifient l'exactitude en secondes ou minutes, plutôt qu'en heures ou jours.

Karthik T
la source
8

Si vous n'avez pas de tests, comment savez-vous que votre code fonctionne?

Edit: l'affirmation selon laquelle les tests ne peuvent pas prouver que le code fonctionne ne définit pas un terme crucial, à savoir les travaux . Qu'est-ce que cela signifie pour un programme de fonctionner? Si vous gardez ce terme vague, il n'y a aucun moyen de prouver ou d'être sûr que n'importe quel programme fonctionne. Déjà.

D'autre part, vous pouvez définir les œuvres comme "se comporte selon une spécification". Maintenant, vous pouvez non seulement utiliser des tests pour montrer que le code fonctionne, mais les tests eux-mêmes peuvent servir de spécification exécutable du comportement de votre code. En d'autres termes, une suite de tests bien écrite définit ce qui fonctionne .

Cette façon de penser vous oblige également à réexaminer la signification d'un bug . Si votre code passe tous les tests, il n'y a pas de bogues dans le code. Si, malgré cela, le système ne se comporte pas comme il se doit, alors son comportement n'est pas correctement spécifié. C'est à dire. le bug est dans la spécification, définie par des tests.

Cette approche du développement logiciel dissocie la spécification fonctionnelle d'un système de sa mise en œuvre, ce qui, selon tous les livres de génie logiciel dans le monde, est une très bonne chose. Dans le même temps, cette approche garantit que votre implémentation correspond toujours à la spécification fonctionnelle.

Dima
la source
13
lorsque les clients cessent de déposer des rapports de bogues? :-)
gbjbaanb
3
Vous pourriez le prouver correctement. La chambre était propre génie logiciel est très similaire à TDD, en fait, mais il ne se produit automatiquement des tests statistiques qui sont générés à partir des spécifications et des preuves.
Jörg W Mittag
1
-1 - "Les tests montrent la présence, pas l'absence de bugs."
Telastyn
@Telastyn, Ne pas avoir de tests montre la présence de bugs avec une quasi-certitude. D'un autre côté, un ensemble de tests bien écrit fournit une spécification exécutable de ce que fait votre code.
Dima
Je ne suis pas en désaccord, mais aucun test ne prouve que votre code fonctionne.
Telastyn
5

Non, ce n'est pas nécéssaire"

Les principes d'Agile ne disent rien directement sur les tests.

Mais c'est fortement recommandé

Étant donné l'engagement d'Agile envers un processus durable, une livraison continue / incrémentielle et la qualité des logiciels, les tests automatisés sont la meilleure solution actuellement disponible pour la plupart des projets

Les exceptions (comme l'a noté Jörg W Mittag) incluent les outils de développement prouvés corrects, les systèmes de méta-programmation qui génèrent du code, et al. Mais ces types de systèmes sont rares.

Steven A. Lowe
la source
4

Agile et XP tentent tous deux d'éviter Big Design Up Front . Dans BDUF, les exigences sont rassemblées, une spécification formelle est créée, puis le codage est fait, puis tests sont effectués. Cela a du sens pour des systèmes bien définis, essentiels à la mission et à la vie, comme l'équipement médical, les sondes spatiales, etc.

Agile évite ce flux car il ne fonctionne pas bien pour des problèmes qui ne sont pas bien définis, par exemple "quels que soient les changements demandés par le client cette semaine". Nous avons encore besoin d'une spécification formelle, donc nous savons quoi faire et quand nous avons terminé, mais plutôt que d'une sorte de document écrit, nous utilisons du code sous la forme de tests automatisés.

Les tests unitaires automatisés sont rapides à écrire, rapides à exécuter et très modulaires / découplés. Cela en fait un moyen rapide de spécifier et de vérifier formellement les exigences.

Warbo
la source