Comment gérez-vous le design dans Scrum?


26

Comment gérez-vous le design dans Scrum? Avez-vous encore des documents de conception bien écrits pour chaque itération de mêlée? Faites-vous juste des notes de conception comportant des diagrammes UML? Ou avez-vous juste du code bien commenté?

Chaque itération peut impliquer un changement de conception, donc je voulais juste savoir comment les gens capturaient cela afin que les nouveaux développeurs puissent facilement comprendre le domaine et intégrer le plus rapidement possible.


La conception doit être traitée progressivement par l'équipe, à la fois avant le sprint et pendant. La plupart des équipes intègrent l'amélioration du carnet de commandes en tant qu'activité continue pour examiner les éléments du carnet de commandes à venir. C'est le moment idéal pour l'équipe de concevoir et de concevoir suffisamment la solution pour estimer l'effort. Tous les artefacts créés doivent être joints à l'histoire. Pendant le sprint, des activités d'architecture et de conception à grains plus fins devraient avoir lieu. Attachez également ces artefacts. Lorsque l'histoire est terminée, il devrait y avoir une grande quantité d'informations sur la solution fournie.
Treefiddy

Réponses:


11

ce n'est pas parce que c'est de la mêlée que tout change à chaque sprint!

Scrum consiste à faire ce qui est nécessaire (mais pas plus) . Vous devez toujours faire la conception et vous devez toujours documenter. Son juste le montant n'est pas fixe ni comment le faire.

Une partie de la planification de chaque sprint consiste à décider ce qui doit être fait. Si quelque chose dans le backlog doit être conçu car il a un impact sur d'autres choses, vous devez ajouter une tâche spécifique pour les processus de conception et le faire avant la tâche d'implémentation.


9

J'ai beaucoup à dire sur ce sujet. J'ai vu de nombreux cas où des entreprises / équipes / personnes disent utiliser une approche Agile des logiciels mais en réalité, ils veulent récolter les fruits promis par les méthodes Agiles sans adhérer aux principes.

Pour que l'itération rapide fonctionne, vous devez faire un développement piloté par les tests (je me suis arrêté de dire que vous devez faire TDD à contrecœur). Dans TDD, vos tests expriment la conception et l'intention du code (quand ils disent "le code est la documentation" ce qu'ils devraient dire est "les tests sont la documentation"). En écrivant des tests unitaires qui expriment votre compréhension de la fonctionnalité à portée de main, vous déclarez explicitement ce que vous pensez que le code doit faire. Ensuite, vous écrivez le code qui le fait. Ensuite, vous refactorisez ce code afin qu'il adhère aux bons principes architecturaux "Red-Green-Refactor".

L'exécution de vos tests unitaires à chaque archivage (ou même avant chaque archivage) vérifie que le nouveau code que vous avez écrit ne rompt pas les fonctionnalités attendues dans un autre domaine de l'application. Cela fournit un filet de sécurité qui vous permet de changer le code avec un abandon sans faille. À mesure que votre compréhension des exigences augmente, vous pouvez modifier le test pour refléter ces nouvelles connaissances. La vraie conception réside dans les tests unitaires. Tout le reste (y compris le code non couvert) est un mensonge.

Voici quelques lectures recommandées

Ce sont de bons endroits pour commencer à chercher à vraiment aborder le développement agile.


4
@Murph: L'idée est que l'architecture est émergente, que vous devriez la trouver à travers des tests plutôt que de la définir à l'avance.
Martin Wickman

5
@Martin, je vois en quelque sorte - mais il y a encore d'horribles problèmes d'échelle. Je suis à l'aise avec cela jusqu'à un certain niveau, mais au-delà de cela ... eh bien je suppose que vous auriez probablement dû le faire (ou au moins avoir une structure initiale) avant d'arriver au niveau de développement Scrum (dans lequel on pourrait s'attendre à ce que le pour affiner et faire évoluer l’architecture de haut niveau comme la basse).
Murph

2
@Murph: Oui, l'amorçage est un problème. Vous devez sélectionner au moins le langage de programmation. Les exigences non fonctionnelles telles que l'évolutivité et les performances influencent beaucoup l'architecture et doivent être prises en compte dès que possible. Mais en dehors de cela, j'aime commencer aussi simple que possible, puis ajouter progressivement et de manière itérative les fonctionnalités de travail (yagni) tranche par tranche. Concentrez-vous sur la refactorisation pour garder la base de code propre et extraire des éléments jusqu'à ce que la conception apparaisse.
Martin Wickman

1
La raison pour laquelle Scrum est itératif est que la nature même du logiciel signifie que nous ne réussissons jamais du premier coup. Dans de nombreux cas, les parties prenantes ne savent pas ce qu'elles veulent vraiment tant qu'elles n'ont pas quelque chose devant elles. Quoi de mieux: passer des heures à créer une conception pour une fonctionnalité (qui devra être affinée ou très probablement jetée lorsque le caoutchouc heurtera la chaussée) et à communiquer cette conception à l'implémenteur; ou passer ces heures à implémenter un premier passage à la fonctionnalité et à l'affiner par des tests et une refactorisation.
Michael Brown

3
Soit dit en passant, vous ne réaliserez jamais la vraie valeur de TDD tant que vous n'aurez pas subitement passé le test au rouge. Ce fut mon grand moment "aha" avec TDD. En regardant le test qui vient de devenir rouge, je me suis rendu compte que sans le test, le bogue aurait été très difficile à retrouver après que le code était entre les mains des testeurs. Si vous avez besoin de voir une architecture descendante de haut niveau, il existe de nombreux outils qui peuvent générer des diagrammes de séquence et de classe à partir de votre code. Utilisez-les pour obtenir un rapport instantané et éliminez-les car ce n'est pas la loi.
Michael Brown

2

Scrum est une méthodologie de gestion de projet, pas une méthodologie de développement logiciel. Scrum est généralement utilisé en conjonction avec une méthodologie Agile. C'est là que réside votre réponse.


4
Scrum est une méthodologie agile et se concentre sur l'équipe de développement et les parties prenantes et sur l'obtention de livraisons itératives de code de travail. La gestion de projet descendante et Scrum sont comme le pétrole et l'eau.
Michael Brown

1
@Mike a accepté, mais j'ai toujours pensé que Scrum est la méthodologie agile d'un chef de projet tandis que Extreme Programming est la méthodologie agile d'un développeur. Cela dit, j'ai vu Scrum appliqué à de nombreux projets autres que logiciels. Il est intéressant de noter que Wikipédia fournit cette définition de Scrum: Scrum est une méthodologie itérative et incrémentielle de gestion de projet souvent utilisée dans le développement logiciel agile, un type d'ingénierie logicielle: en.wikipedia.org/wiki/Scrum_(development) .
ahsteele

2
Je viens de réaliser que j'ai accidentellement rétrogradé votre commentaire ... ne le voulait pas. Ils ne me laisseront pas supprimer ce vote, sauf si vous effectuez une modification mineure. Je n'ai jamais vu Scrum décrit comme une méthode de gestion de projet auparavant. Intéressant. Cela étant dit, je pense que s'attendre à ce que Scrum fonctionne pour les logiciels sans appliquer TDD est la raison pour laquelle de nombreuses tentatives de "faire de l'agile" échouent.
Michael Brown

1

Il n'y a pas autant de conception initiale que les exigences changent fréquemment. La conception au niveau de la classe est donc généralement une perte de temps. Cependant, il peut être utile d'esquisser des décisions architecturales de niveau supérieur.

Le problème avec les documents de conception lourds est qu'ils sont obsolètes presque dès leur création. Donc, ce qui fonctionne le mieux, c'est généralement une documentation de haut niveau qui ne changera probablement pas complètement en peu de temps.


1
Je ne dirais pas que les exigences changent constamment. Enfait pendant un sprint, les exigences sont statiques et inchangées. Après chaque sprint, la priorité des exigences peut être réévaluée. Achetez votre objectif global ne changera pas.
Martin York

@Martin bon point. Je suppose que je devrais reformuler leur passage de mêlée à mêlée.
Vadim

1

Scrum est un modèle itératif et incrémentiel basé sur des valeurs agiles . Cela signifie que vous n'avez pas de phase de conception distincte. L'idée est que vous devez constamment vous occuper de la conception, tout comme vous traitez constamment de l'analyse, de la mise en œuvre, des tests et de l'intégration tout au long du projet.

Vous avez besoin d'un peu de planification pour que cela fonctionne. Entrez dans la réunion de planification du sprint , où l'équipe estime les tâches pour le sprint à venir. La plupart des gens ne réalisent pas que ce n'est pas seulement une réunion d'estimation, mais aussi un effort de conception. Par exemple, une tâche peut être «Ajouter du code pour un nouveau modèle de voiture». Vous ne pouvez pas encore estimer cela, vous devez en savoir un peu plus. L'équipe discute donc de la conception et propose une solution globale ("sous-classe voiture?") Et ajoute cela en guise de rappel à la tâche. Vous avez rarement besoin de plus de formalité que cela. Vous avez maintenant une idée de la façon de résoudre le problème. Vous n'avez pas encore tous les détails et c'est bien, vous en savez assez sur le design pour pouvoir faire une estimation confortable. Sans avoir à créer de diagrammes (à ce stade).

Pour la documentation physique réelle , je recommande de créer un diagramme de vue d'ensemble des systèmes sur un mur pour que tous puissent le voir. L'aperçu n'a besoin que des classes et modules les plus importants inclus et devrait rarement être mis à jour. De plus, la création de quelques diagrammes d'état pour les classes les plus importantes du système est très utile. Saupoudrez de quelques diagrammes de séquence sélectionnés de cas d'utilisation typiques pour permettre aux gens de voir rapidement comment les choses sont connectées. Je suppose que vous pouvez générer des diagrammes de hiérarchie de classes à partir de votre code, afin que ce problème soit facilement résolu.

Notez que tous les diagrammes sont créés après l'implémentation réelle. Cela est conforme au «logiciel de travail sur une documentation complète» et à une conception juste à temps.

Et oui, le code lisible est définitivement de la documentation.


1

L'architecture globale du projet et la conception de haut niveau se feraient en dehors des équipes Scrum lorsque les propriétaires du projet créeraient les histoires.

Il doit y avoir suffisamment de conception globale écrite sous quelque forme que ce soit pour aider à voir la relation entre les histoires et les attentes du client.

Une partie de la conception nécessaire pour chaque histoire serait effectuée lors de la planification et de la négociation avec le propriétaire du produit lors de la planification.

La majeure partie de l'effort de conception d'une histoire se ferait au cours du sprint.

Si l'histoire n'est pas suffisamment définie pour être estimée, alors une zone de temps peut être mise de côté dans le sprint actuel pour effectuer suffisamment de travail de conception pour qu'une histoire appropriée puisse être créée pour un sprint ultérieur.


0

Ma compréhension est que vous effectuez une conception de niveau supérieur avec les exigences initiales que vous rassemblez au début du projet. Vous documentez bien cette conception.

Ensuite, lorsque vous allez réellement implémenter l'exigence, vous modifiez la conception de niveau inférieur selon vos besoins, mais vous évitez de modifier la conception de niveau supérieur.

Eh bien, c'est comme ça qu'on m'a expliqué il y a cinq minutes de toute façon ...


0

Il existe aujourd'hui une division au sein de la communauté Eclipse entre les outils UML traditionnels axés sur MDD dans lesquels le modèle pilote le code / développement et Omondo qui considère que les itérations devraient conduire le processus de développement et certainement pas seulement le modèle.

Je suis d'accord avec eux parce que MDD est de la merde alors que UML est vraiment un excellent moyen car standardiser pour communiquer avec les autres membres de l'équipe. texte alternatif

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.