Y a-t-il des avantages aux pratiques agiles autres que d'avoir un build fonctionnel entre les sprints?

9

Je me suis récemment intéressé aux pratiques agiles dans le développement de logiciels et depuis, j'ai vu beaucoup d'articles souligner que ces pratiques permettent de réduire les coûts globaux.

La logique derrière cela se présente généralement comme suit: si vos besoins changent, vous pouvez refléter ce changement dans le prochain backlog de sprint et cela entraînera une réduction des coûts, car la conception de la nouvelle fonctionnalité et son implémentation sont proches en termes de temps, de sorte que le le coût diminue, selon la célèbre règle selon laquelle plus vous devez apporter de modifications à vos exigences plus tard il sera coûteux de satisfaire à cette exigence.

Mais les projets logiciels moyens à grands sont complexes. Une modification soudaine des exigences ne signifie pas que vous n'aurez pas à toucher à d'autres parties de votre système pour satisfaire à cette exigence. Dans de nombreux cas, l'architecture devra être modifiée de manière très significative, ce qui signifie également que vous devrez réimplémenter toutes les fonctionnalités qui reposaient sur l'ancienne architecture. Donc, tout l'intérêt de la réduction des coûts disparaît un peu ici. Bien sûr, si une nouvelle exigence nécessite une nouvelle partie indépendante du système, ce n'est pas un problème, l'ancienne architecture ne fait que croître, elle n'a pas besoin d'être repensée et réimplémentée.

Et l'inverse. Si vous utilisez une cascade et que vous réalisez soudainement qu'une nouvelle exigence doit être introduite, vous pouvez aller changer votre conception. S'il nécessite que l'architecture existante soit modifiée, vous devez la repenser. Si cela ne dérange pas vraiment, mais introduit simplement une nouvelle partie du système, alors vous allez faire tout le travail, pas de problème ici.

Cela dit, il me semble que le seul avantage du développement agile est de créer des fonctionnalités complètes entre les sprints, et pour beaucoup de gens et de projets, ce n'est pas critique. De plus, l'agile semble entraîner une mauvaise architecture logicielle dans l'ensemble, car les fonctionnalités sont en quelque sorte giflées les unes sur les autres, les équipes agiles ne se soucient que du fonctionnement d'une fonctionnalité, pas de la façon dont elle fonctionne. Il semble que lorsque les systèmes deviennent de plus en plus complexes avec le temps, les pratiques de développement agiles augmentent en fait le chaos dans l'architecture globale du produit, ce qui entraîne finalement des coûts plus élevés, car il sera de plus en plus difficile d'introduire des changements, tandis que la cascade vous permettra de perfectionner votre architecture. avant de libérer quoi que ce soit.

Quelqu'un peut-il me dire où je vais mal ici, car de toute évidence beaucoup de gens utilisent l'agilité dans les environnements de production, donc je dois me tromper quelque part.

tux91
la source
Vous avez raison. Je voudrais souligner que le terme «cascade» n'a pas de définition universelle (comme beaucoup d'autres termes en informatique). La plupart des gens pensent que vous n'êtes pas autorisé à coder à moins que les 2000 pages complètes des exigences soient écrites et signées. Cela ne doit pas du tout être le cas.
NoChance
Ouais, par "cascade", je veux dire un processus linéaire de spécifications fonctionnelles (essentiellement) -> design -> code entre les jalons, pas les sprints. Et, bien sûr, les exigences de 2000 pages et les spécifications techniques ne sont pas indispensables, les responsabilités de base des classes et leurs relations les unes avec les autres sont souvent suffisantes comme conception de haut niveau.
tux91
3
@EmmadKareem: En fait, dans Waterfall proprement dit, c'est exactement le cas. Vous ne commencez à coder que lorsque tous les détails de la conception sont finaux. Heureusement, la véritable cascade est rarement appliquée au développement de logiciels - principalement parce qu'elle ne fonctionne pas vraiment.
tdammers
1
@tdammers, merci pour votre commentaire. Cela s'est cependant produit plusieurs fois. La méthode de la cascade n'a pas de propriétaire et peut être appliquée et interprétée différemment. Il n'y a pas de règle qui dit de ne pas coder avant .... ou bien ..., c'est parce que ce n'est pas une méthodologie. Lorsqu'il est enveloppé dans une bonne méthodologie, je pense que cela a beaucoup de sens spécialement dans les projets où les utilisateurs connaissent le cœur de ce dont ils ont besoin d'un système.
NoChance
@Emmad Kareem: Je suis d'accord avec vous. Je pense que les méthodes agiles sont plus adaptées aux projets dans lesquels les exigences ne sont pas claires et beaucoup de prototypage et de commentaires des utilisateurs sont nécessaires pour obtenir les exigences finales. D'un autre côté, il existe des cas où les exigences essentielles sont claires dès le départ. Dans ces cas, j'adopterais une méthode de développement qui ressemble plus à la cascade (avec une certaine marge de correction en cours de route) qu'à une méthode agile. Je pense que cela dépend vraiment du type de projet sur lequel vous travaillez.
Giorgio

Réponses:

7

Tout d'abord, le modèle «cascade» a toujours été un homme de paille décrivant comment NE PAS exécuter un projet de développement logiciel. Cherchez-le.

Quoi qu'il en soit, la plupart des projets SDLC «en cascade» impliquent un processus de «gestion du changement», car lorsque les gens découvrent que les hypothèses qui ont été inscrites dans les spécifications ne sont plus valables (et cela se produit toujours sur de grands projets complexes). Malheureusement, le processus de gestion du changement est conçu comme une mesure de gestion des exceptions et est stupidement coûteux, ce qui signifie que le projet se terminera tard ou de mauvaise qualité.

L'idée derrière les méthodologies Agile est que le changement est une donnée - il se produira. Par conséquent, vous devez effectuer une opération standard de «gestion des modifications» plutôt que la gestion des exceptions. Ce n'est pas facile, mais les gens ont constaté que si vous utilisez beaucoup de bonnes pratiques de conception, vous pouvez le faire.

Un autre problème majeur avec la conception à chargement frontal est que (le plus souvent) beaucoup de temps est consacré à la collecte et à la conception des exigences, au développement et aux tests en souffrent. De plus, si le test est la dernière phase et qu'un problème grave est découvert, il est très peu probable qu'il soit résolu dans votre délai.

L'une des meilleures caractéristiques d'une approche Agile est peut-être qu'elle exige une interaction continue (c'est-à-dire une communication réelle) entre l'équipe qui développe la solution et le client qui en a besoin. Des priorités sont établies, de sorte que les éléments de priorité la plus élevée soient effectués en premier (et si le temps est écoulé, ce sont les éléments de faible priorité qui sont coupés). Les commentaires arrivent rapidement.

Revenons à la question des changements spectaculaires - vous devez vraiment utiliser des méthodes qui atténuent les changements. Les bons principes SOLID OO peuvent jouer un rôle important, tout comme la création de suites de tests automatisées solides afin que vous puissiez tester en régression votre logiciel. Vous devriez faire ces choses quelle que soit votre méthodologie, mais elles deviennent vraiment essentielles si vous essayez d'être agile.

Matthew Flynn
la source
Grand merci. Pour tous ceux qui veulent en savoir plus sur le fonctionnement du design en agile et pourquoi ce n'est pas si mal: http://jamesshore.com/Agile-Book/incremental_design.html
tux91
8

Eh bien, il y a quelques avantages. Le premier est que les clients ne lisent pas les documents de spécification. Déjà. Waterfall suppose que tout le monde sera bien d'accord avec une spécification au début, puis lorsque le logiciel sera livré au client un an plus tard, il sera heureux. Dans la pratique, les clients ne découvrent jamais que tout ce dont ils ont vraiment besoin, n'ont vraiment pas besoin et doivent vraiment être quelque chose de différent lorsqu'ils jouent activement avec le logiciel lui-même. Agile obtient un prototype fonctionnel entre les mains des clients, de sorte que ces déconnexions sont immédiatement prises. Agile ne consiste pas seulement à réagir à l'évolution des exigences. Il s'agit également de faire en sorte que ces exigences changeantes surviennent tôt, lorsque le coût du changement est faible, et non à la fin, lorsque le coût du changement est élevé.

Un deuxième avantage est que, car Agile a souvent des livrables très visibles, les projets sont moins susceptibles de dérailler. Avec un grand projet Waterfall, il est trop facile de prendre du retard sans même s'en rendre compte. Waterfall produit des marches de la mort sur plusieurs mois à la fin du projet. Avec Agile, parce que vous livrez aux clients toutes les deux semaines, tout le monde sait exactement où se trouve le projet et les fiches sont prises (et ajustées) rapidement. D'après mon expérience, Waterfall produit des semaines ou des mois de 100 heures à la fin. Agile signifie que vous devrez peut-être mettre quelques jours de 12 heures à la fin du sprint.

Un troisième avantage est que les projets Agiles ont tendance à être plus motivants. Il est très difficile pour les gens d'avoir une sorte de motivation dans un projet d'un an. La date limite semble si lointaine et ce manque d'immédiateté signifie que les gens ont tendance à tergiverser, à sur-polir les dessins et à défaut, ils ne fonctionnent pas de manière très productive. Cela est particulièrement vrai parce que les premiers mois sont consacrés à des choses que les gens n'aiment pas faire, comme les documents techniques. Parce que Agile a toujours des délais très immédiats et concrets dans un avenir très proche, les gens ont tendance à être plus motivés. Il est beaucoup plus difficile de tergiverser avec un délai concret pour un ensemble fixe de tâches qui doit arriver la semaine prochaine.

Gort le robot
la source
Premier argument, c'est exactement à cela que sert l'impression agile. Faire face à des exigences en constante évolution. De plus, en ce qui concerne la modification précoce des exigences, cela a encore une énorme possibilité de jouer avec l'architecture en main, ce qui conduit à réimplémenter beaucoup de code existant. Deuxième argument, pouvez-vous expliquer pourquoi les projets de cascade provoquent des marches de la mort? On dirait qu'un peu de discipline associée à des spécifications techniques concises peuvent faire des merveilles ici. Troisième argument, quel est le problème de construire un projet de cascade de bas en haut et de pouvoir le construire de temps en temps?
tux91
2
D'après mon expérience avec les projets Waterfall, ils sont toujours à l'heure pour les premiers 90% du temps prévu, moment auquel ils sont soudainement en retard de plusieurs mois. Le modèle agile d'insister sur les démos à chaque sprint rend cela beaucoup moins probable. Lorsque les gens savent qu'ils seront responsables dans une semaine et demie, ils sont généralement mieux motivés que lorsqu'ils seront tenus responsables dans neuf mois. C'est juste de la psychologie humaine.
Gort le robot
1
Eh bien, je suppose que je ne peux pas contester l'expérience, bien que mon expérience ait été un peu différente, avec un bon design en main, le codage n'a pas beaucoup de problèmes en cours de route et les estimations semblaient assez bonnes aussi. Je pense toujours que l'architecture résultante sera plus solide si vous utilisez une cascade.
tux91
2
Il y a quelques domaines - la plupart sécurité critiques, par exemple ceux qui , la signalisation ferroviaire, avionique - où les clients font lire les spécifications très attentivement. Ils sont assez rares et ont tendance à conduire à des méthodologies de développement très différentes de toute façon.
Donal Fellows
4

En réponse à la citation de la question, qui est une idée fausse fondamentale des opposants anti-agiles

"... alors que la cascade vous permet de perfectionner votre architecture avant de libérer quoi que ce soit." est une erreur, laissez-moi le réparer pour vous; "... alors que la cascade vous permet de perfectionner votre architecture pour ne jamais rien lâcher. "

L'implication selon laquelle Waterfall fournit une architecture de meilleure qualité est fondamentalement fausse et complètement réfutée par des preuves historiques empiriques.

Si Facebook a été conçu à la manière d'une cascade avec 500 millions d'utilisateurs comme une exigence difficile et rapide et qu'il n'a pas été publié avant une architecture de support perfectionnée, personne n'en aurait jamais entendu parler aujourd'hui.

Même chose avec YouTube, Twitter et d'innombrables autres sociétés.

Ils ont obtenu quelque chose que le client pouvait toucher et réagir au travail et l'ont publié le plus rapidement possible. Ils ont reçu des commentaires, les ont affinés et les ont à nouveau publiés; répéter. C'est ainsi que dans ces trois exemples, ils répondent avec uniquement des fonctionnalités que les clients acceptent et veulent et perdent le moins de temps possible sur des choses que les clients trouvent peu ou pas de valeur.

Quiconque possède des années importantes d'expérience en développement de logiciels conviendra qu'il n'existe pas d' architecture perfectionnée . Juste une qui commence plus loin de l'entropie et de la grosse boule de boue que d'autres alternatives. Agile le reconnaît et en tient compte. Construire dans le processus, ceci comme dette technique, re-priorisation rapide et refactoring.


la source
3
En utilisant le mot «jamais», êtes-vous en train de dire qu'il n'y a aucun produit logiciel qui a été fait en utilisant la cascade? De plus, pourquoi "ne jamais" publier quoi que ce soit si vous avez un ensemble d'exigences pour un jalon particulier que vous finissez par mettre en œuvre avec succès?
tux91
1
@ tux91 vous faites valoir mon point de vue; rien ne sera jamais parfait étant donné que les besoins changent immédiatement après la mise en papier des conceptions et sont obsolètes avant l'écriture d'une seule ligne de code. Ainsi, la déclaration que j'ai citée est une erreur, vous ne perfectionnerez jamais une architecture et ne libérerez donc jamais rien.
1
@ tux91 continue de lire pour la compréhension, dis-je, qu'il n'y a pas d'architecture préfet et si vous ne publiez pas tant qu'il n'y en a pas comme dans la citation, alors rien ne sera jamais publié. Je n'ai pas dit ce que vous prétendez, point, c'est dans votre tête et votre interprétation. Ce que j'ai dit, c'est l'argument selon lequel la cascade offre en quelque sorte une architecture de meilleure qualité est une erreur et fondamentalement défectueuse. Et ces arguments sur la NASA et la cascade et quoi d'autre; en plus d'être sans rapport avec les programmeurs , a tué 3 astronautes, sur le terrain d'ailleurs, pas une brillante histoire à succès.
1
@ tux91 par rapport à "jamais", je suis avec Jarrod ici: la question dit "la cascade vous permet de perfectionner ..." - qu'il conteste par un mot tout à fait approprié (dans ce contexte "parfait" irréaliste) "jamais". La seule raison pour laquelle je n'ai pas voté est que j'essaie d'éviter de voter sur des réponses à des questions non constructives
moucher
1
@gnat ouais je suppose que je ne pensais pas quand j'ai utilisé le mot parfait , ce n'est pas ce que je voulais vraiment dire
tux91
3

Scrum en lui-même ne prescrit aucune pratique technique car il s'agit d'un cadre général.

Le développement logiciel agile requiert l'excellence technique de l'équipe. Cela vient des pratiques techniques suivantes de XP (programmation extrême). Par exemple, vous devez vous renseigner sur le refactoring, le tdd, toute l'équipe, la programmation par paires, la conception incrémentale, le ci, la collaboration, etc.

Le faire de cette façon permet de gérer le changement rapidement et en toute sécurité, ce qui est également la principale raison d'utiliser le développement agile en premier lieu.

La seule mesure de l'agilité qui compte, c'est si vous parvenez régulièrement (chaque semaine, toutes les deux semaines) à fournir à votre client un logiciel de travail précieux. Peux-tu faire ça? Alors tu es agile dans mon livre.

Martin Wickman
la source
Ce que je n'obtiens pas, c'est "la possibilité de gérer le changement rapidement et en toute sécurité", car cela implique qu'un projet basé sur une cascade est plus difficile à changer. Pourquoi donc? C'est juste une base de code. Spécifiez ce que vous devez changer, concevez cela et comment il s'intègre dans l'architecture, le code, le test et la version existants. N'appelez pas cela un sprint, appelez-le plutôt un jalon. Il ne semble pas que cela prendrait plus de temps ou présenterait plus de difficultés que l'agilité. La différence est que vous planifiez plus soigneusement mais n'avez pas besoin de faire des trucs XP aussi rigoureusement.
tux91
@ tux91 Mise à jour de ma réponse. En ce qui concerne l'architecture, je recommande de lire ceci ou de le regarder à 26h20 sur ce que nous appelons le "design incrémental".
Martin Wickman
2

Pour moi, le principal avantage de l'agile est de réduire les risques dans le projet.

En fournissant de manière itérative et en obtenant de nombreux commentaires de votre base d'utilisateurs, vous augmentez les chances que vous livriez quelque chose qu'ils veulent réellement, et vous le ferez en leur fournissant de manière pragmatique les fonctionnalités les plus importantes pour eux le plus tôt possible. En théorie, cela se fera avec de meilleures estimations et une meilleure planification. C'est évidemment très attrayant du point de vue des entreprises - bien plus que la version libérable.

Vous pourriez faire valoir que ce changement constant compromet votre système et réduit la qualité, mais je dirais deux choses. 1) Ce changement se produit de toute façon sur les projets de livraison de logiciels plus traditionnels - il n'est tout simplement pas pris en compte et se produit plus tard dans le projet, c'est-à-dire lorsque, comme vous l'avez souligné, les choses sont plus difficiles et plus coûteuses à modifier. 2) Agile a beaucoup à dire sur la manière de faire face à ce changement en termes de recours à des personnes motivées expérimentées et à des pratiques telles que le TDD, le jumelage et les revues de code. Sans ce changement de mentalité vers la qualité et l'amélioration continue, j'accepte que les changements fréquents qu'implique l'agile puissent commencer à causer des problèmes.

Benjamin Wootton
la source
Oui, c'est exactement ce que je pense du seul avantage de la cascade. Il y a des moments où vous ne voulez pas montrer votre produit à quelqu'un alors qu'il est en phase de développement, car il n'est tout simplement pas prêt, il n'a pas encore les arguments de vente. Ou si vous avez une idée assez ferme de ce que vous voulez construire à la fin. Les tests, la programmation des paires et les revues de code ne garantissent pas que vous vous retrouverez avec une bonne architecture globale du produit, ils ne sont effectués que pour garantir le bon fonctionnement des nouvelles fonctionnalités.
tux91
1

Dans de nombreux cas, l'architecture devra être modifiée de manière très significative, ce qui signifie également que vous devrez réimplémenter toutes les fonctionnalités qui reposaient sur l'ancienne architecture.

Si votre architecture doit être modifiée de manière significative à la suite d'un changement d'exigences, vous avez une mauvaise architecture ou une mauvaise exigence. Une bonne architecture vous permet de reporter autant de décisions que possible et de découpler les composants de votre système. Les bonnes exigences (utilisateur) ne sont pas des choses comme "utiliser une base de données différente".

Donc, fonctionnons sous l'hypothèse que nous avons une bonne architecture de travail. Si tel est le cas, les méthodologies de développement agiles perdent ce "lavage" avec les méthodologies de conception à grande échelle. Après tout, une caractéristique essentielle des méthodologies de développement agile est des pratiques comme TDD qui favorisent le couplage lâche dans le code, permettant au projet de continuer à grande vitesse, qu'il soit proche du début ou très mature.

Erik Dietrich
la source
0

Dans de nombreux cas, l'architecture devra être modifiée de manière très significative, ce qui signifie également que vous devrez réimplémenter toutes les fonctionnalités qui reposaient sur l'ancienne architecture. Donc, tout l'intérêt des coûts réduits disparaît un peu ici.

Suite à un processus agile, il y a de meilleures chances d'attraper cette exigence avant que trop de logiciels aient été développés (et doivent être modifiés.). Lorsque vous passez plusieurs mois sans travailler avec le client et lui donner quelque chose à regarder, vous n'attrapez ces problèmes architecturaux majeurs qu'après avoir "pensé" que vous êtes prêt à livrer.

Je préfère essayer d'implémenter ces changements dans une application qui a une couverture de test plutôt qu'une énorme pile de code qui ne compile même pas. Tout en étant responsable du support technique, on m'a remis un CD d'une application qui avait été en mois de développement et qui ne serait même pas installée. Nous aurions pu trouver ce problème la première semaine, mais au lieu de cela, il était temps de commander le dîner car c'était une longue nuit.

JeffO
la source