Réécriture de logiciels utilisant des méthodologies Agiles


13

Supposons que vous deviez réécrire une application entière en utilisant des méthodologies Agiles, comment feriez-vous?

Je suppose que vous pourriez écrire un tas d'histoires d'utilisateurs basées sur le comportement de votre système actuel. Et puis implémentez-les par petites itérations. Mais cela ne veut pas dire que nous avons les exigences HAUT FRONT ??

Aussi, quand commenceriez-vous à sortir? Agile dit que nous devrions publier tôt et souvent, mais cela n'a pas beaucoup de sens de sortir avant la fin de la réécriture.


4
Réécrire une application entière n'est jamais une bonne idée. Voir la réécriture de Netscape . Beaucoup est perdu en réécrivant une application entière. Les connaissances sont codifiées dans la source et devront être redécouvertes lors d'une réécriture. Il est facile de trouver du code et de déclarer "Pourquoi l'ont-ils fait de cette façon?" Je peux le faire mieux et en moins de lignes! La plupart du temps, une fois dans le code, le développeur comprend pourquoi il a été précédemment écrit de cette manière. Code Simplicity s'entretient avec
Chuck Conway

Poser la question indique que vous n'avez pas l'expérience d'Agile pour l'utiliser efficacement pour une si grande entreprise. Personnellement, comment je le ferais (en supposant que "s'enfuir" était hors de question) est de commencer par limiter mon exposition et mettre en œuvre des stratégies de contrôle des dommages au cas où (quand) ça prend la forme d'une poire.
mattnz

Vous ne pensez pas que de nouvelles exigences seront créées pendant tout ce processus de reconstruction?
JeffO


La réécriture de l'application entière ne serait-elle pas très agile?
Pieter B

Réponses:


15

Décomposez-le en épopées de haut niveau. Prenez chaque domaine fonctionnel de l'application, une étape à la fois.

Décomposez une épopée en un groupe d'histoires (morceaux utilisables - tout ce qui améliore l'application) et gérez-les comme vous le feriez si vous n'aviez pas d'application existante, à une exception près: si c'est possible, faites en sorte que vous peut implémenter cette seule fonctionnalité dans le cadre de, ou parallèlement, à l'application d'origine.

Quand les Agilistes disent "sortez tôt et souvent", cela ne signifie pas nécessairement pour la production. Si vous envisagez de remplacer une application existante, vous devez utiliser une zone de transfert pour effectuer des versions fréquentes et vous assurer que vos utilisateurs y testent le système. Cela leur donnera encore de la place pour prioriser le prochain travail et pour s'assurer que rien de ce que vous mettez en production ne déprécie le produit.

Une fois que vous avez mis un composant en production, passez au suivant.


Ce que @pdr a dit.
KodeKreachor

3
Pendant les périodes de sortie hors production, dogfood l'application, même si dans une machine virtuelle, pour avoir une idée de l'utilisation et de l'intégralité, car toutes les exigences sont connues à l'avance et, plus que probablement, il s'agit d'un domaine / BI significatif au sein de l'équipe de développement.
JustinC

10

nous venons de vivre une telle expérience (moi en tant que propriétaire de produit Scrum). Il nous a fallu deux ans pour arriver à quelque chose de libérable. Mais encore, l'agilité nous a apporté de nombreux avantages.

Premièrement: une réécriture totale n'est par nature pas agile du tout. Vous devriez plutôt envisager de refactoriser le produit existant pièce par pièce. Cela a été discuté dans une autre question. Supposons donc que ce soit une réécriture.

Ensuite, en effet, vous commencez avec un journal de bord qui couvre tous les cas d'utilisation pertinents du produit existant. Mais ne l'abordez pas comme des spécifications d'écriture. Ce serait trop de détails. Il doit être complet (sinon vous ne pouvez pas faire de planification de version). Et cela ne devrait pas être trop élaboré (sinon vous écrivez des spécifications à l'avance). Voici comment nous avons abordé cela:

  • catégoriser les utilisateurs de l'ancien produit. Identifiez les utilisateurs qui n'ont besoin que d'une petite partie de l'ancien produit tout en en tirant quelque chose d'utile. Ils définissent vos premières épopées.

  • Ajoutez ensuite des épopées qui permettraient à une autre catégorie d'utilisateurs de passer au nouveau produit. Etc. jusqu'à ce que vous ayez un journal de bord qui couvre tous les utilisateurs.

  • très probablement, ces épopées devront être divisées davantage. Si possible, essayez de diviser afin que chaque partie ait encore une certaine valeur. Si ce n'est pas faisable, assurez-vous au moins que chaque partie peut être démontrée.

  • lorsque vous avez 20 à 50 épopées, demandez à l'équipe de les estimer.

  • divisez les épopées les plus populaires en histoires d'utilisateurs que l'équipe estime réalisables dans un sprint. Ne le faites pas encore pour toutes les épopées, seulement celles en haut. Vous aurez tout le temps de partager le reste.

Quand sortir en externe! C'est une décision commerciale. Au moins, cette approche vous donne la possibilité de publier plus tôt dans certaines catégories d'utilisateurs. Cela peut être utile si la direction s'inquiète de ce projet apparemment sans fin.


4
A total rewrite is by nature not agile at all. You should instead consider refactoring the existing product piece by piece.Un mot plus vrai n'a jamais été prononcé.
maple_shaft

4

Libérez maintenant si vous le pouvez

Votre question sur le moment où vous commencez à publier le code est excellente. Je pense que deux réserves s'appliquent. Premièrement, que vous avez "une qualité suffisante", et deuxièmement que vous remplissez les conditions requises pour un MVP (produit minimum viable).

Rome (et Agile) n'a pas été construite en un jour

Peut-être que vous êtes prêt avec une équipe agile clé en main pour prendre le relais dès le premier jour. Pour la plupart des organisations, il y a le travail et les frais de formation, de réoutillage et du cycle habituel de formation, d'assaut, de normalisation et d'exécution de la constitution d'une équipe. Soyez à l'affût des risques et des coûts, veillez à définir des attentes réalistes, et soyez optimiste et prêt à défendre votre approche.

Soyez un Bootstrapper de réutilisation

Comme la puissance de fusion, la réutilisation du code est et sera toujours la solution future à nos problèmes économiques. Mon sentiment est que les développeurs disent souvent qu'ils croient à la réutilisation, mais seulement au type de réutilisation qui commence après avoir construit un nouveau framework, plutôt qu'au type où ils s'appuient sur ce que quelqu'un d'autre a déjà fait. Comment cela peut-il fonctionner jusqu'à ce que quelqu'un veuille choisir de s'appuyer sur les fondations de quelqu'un d'autre? Au mieux, cela signifie une réécriture toutes les quelques années lorsque le leadership de l'équipe change.

Pourquoi sortir tôt et souvent?

Communiquer tôt et souvent est un mantra pour de nombreuses raisons. Il donne vie à nos discussions sur ce que le produit devrait devenir, il rend réel où nous en sommes et il nous donne une base pour des changements itératifs / incrémentiels. Le rythme des versions est à peu près un invariant pour l'agile, la différence étant qui reçoit les versions (substituts clients ou utilisateurs finaux). Avant l'agilité, la maintenance représentait 60% du coût des systèmes logiciels. C'est une source de consternation pour les managers et autres, certains qui pensent que la sortie du produit est l'endroit où le logiciel va mourir. Pour eux, tout après la sortie est retravaillé et payé pour réparer un produit qu'ils ont déjà payé une fois.

La pré-version n'est pas naturelle

Kent Beck écrit que la pré-version est un état contre nature pour les produits logiciels. C'est certainement un moment gênant car c'est un moment où vous n'avez pas de clients et vous payez le produit plutôt que le produit qui vous paie.

Ne critiquez pas l'équipe précédente

Bien que cela puisse configurer les développeurs qui prennent en charge la réécriture en tant que héros et salut du projet, je pense qu'il y a un coût à critiquer les réalisations de l'équipe précédente.

  • Premièrement, si vous laissez les gens se faire leur propre opinion sur l'équipe précédente, vous avez plus de temps et d'énergie pour votre vraie mission.
  • Ce sera gênant si vous devez travailler avec des membres de l'équipe précédente, à la fois des développeurs et des parties prenantes comme les chefs de produit, les chefs de projet ou les clients.
  • Si vous pouvez le faire fonctionner, vous pourriez vous retrouver à recevoir (ou pire encore à prendre) le mérite de ce que l'équipe précédente a fait.
  • En moyenne, l'équipe précédente était probablement moyenne. En moyenne, vous pourriez être moyen. Vous avez plus de travail que l'équipe précédente car vous avez une nouvelle méthodologie à mettre en place en plus d'un projet.
  • Si l'ancienne équipe était horrible, à moins que vous ne soyez aussi horrible, vous finirez par obtenir le mérite d'être meilleur qu'horrible. S'ils étaient meilleurs qu'horribles, et vous n'êtes pas sensiblement meilleurs, dire qu'ils étaient horribles peut inviter à des comparaisons désagréables.
  • Si l'ancienne équipe était meilleure que vous ne le pensiez, et que vous avez des ennuis parce que l'organisation est en panne ou que le problème est mal défini ou très difficile, les choses iront mieux pour vous si vous n'avez pas considérablement augmenté les attentes.
  • S'ils s'attendent à ce qu'ils obtiennent, mais vous faites mieux, c'est une victoire pour vous.
  • S'abstenir de toute critique est à la fois de bonnes manières et montre que vous avez de la classe.

Vous avez oublié une autre chose. L'ancienne équipe a défini les attentes des clients. Vous devez les réinitialiser en le faisant beaucoup mieux, ou faire les choses exactement de la même manière. Combien de pression a Windows 8 pour ne pas avoir de bouton Démarrer, mais iOS et Android ne l'ont jamais fait et personne n'a pensé à le mentionner.
mattnz

2

Invité par les commentaires de @Chuck et les références à Netscape disant essentiellement de ne pas réécrire, et les réponses valides rétorquant qu'il OP ne demande pas s'il le devrait. - Un cycle de développement logiciel vraiment agile empêche la réécriture. La réécriture rompt presque toujours bon nombre des principes qui se cachent derrière Agile. En utilisant le logiciel actuel comme ligne de base, ces principes Agiles (du Manifeste Agile ) ne peuvent pas être satisfaits par une réécriture.

  • Livraison précoce et continue de logiciels précieux . - le client n'obtiendra pas de valeur précoce par rapport à ce qu'il a déjà
  • Fournissez fréquemment des logiciels fonctionnels - des semaines à des mois - quelle est la taille du projet, pouvez-vous honnêtement dire que le client obtiendra quelque chose de plus utile pour lui de sitôt.
  • Le logiciel de travail est la principale mesure des progrès - travailler par rapport à la référence ne se fera pas à la hâte
  • Les processus agiles favorisent le développement durable. - Étant donné que le client dispose d'une base de travail, la pression sera exercée pour offrir des fonctionnalités améliorées. Il est peu probable que cela se fasse à un rythme
  • La simplicité - l'art de maximiser la quantité de travail non effectuée - est essentielle. cela dit tout vraiment ...

"Supposons que vous deviez réécrire une application entière en utilisant les méthodologies Agile, comment feriez-vous?"

La question est basée sur une fausse prémisse - Qu'une réécriture peut être considérée comme Agile.


2

Demandez-vous si vous pouvez publier l'application réécrite un morceau à la fois et la faire cohabiter avec l'ancienne.

Pour les applications Web en particulier, il peut être assez facile de déplacer une seule partie de l'application vers une nouvelle plate-forme et de faire acheminer vos demandes d'équilibrage de charge vers le système approprié. Ensuite, écrivez les histoires qui vous permettront de mettre votre première page en production et de les livrer de manière agile.

Les applications de bureau peuvent être plus compliquées, mais ce sera souvent possible.

Vous cherchez des coutures - des endroits où il est possible pour l'ancien système d'avoir ses responsabilités reprises par le nouveau, sans avoir besoin d'une réécriture complète.

Peut-être existe-t-il une logique métier autonome qui peut être déplacée dans un nouveau service Web ou une nouvelle infrastructure, et l'ancienne application peut être modifiée en utilisant cela au lieu de son ancien code. Continuez à découper des morceaux sur les coutures jusqu'à ce que ce qui reste soit gérable en une seule bouchée.

Si vous ne trouvez aucune couture, vous devrez peut-être en effet rechercher le type d'approche big bang suggérée dans certaines des autres réponses. Mais préparez-vous à une longue marche avant d'arriver à destination, surtout si vous devez continuer à développer l'ancien système en parallèle ...


1

Agile dit que nous devrions publier tôt et souvent, mais cela n'a pas beaucoup de sens de sortir avant la fin de la réécriture.

En fait, à mon humble avis, c'est le point clé - plus tôt vous obtenez des parties de l'application réécrite en production (et, idéalement, en remplaçant les fonctionnalités de l'ancien système), plus les chances sont grandes que votre projet réussisse. Si vous pensez que cela n'a pas beaucoup de sens, réfléchissez bien - il y a presque toujours des possibilités de libérer des pièces.

Cela signifiera probablement que quelqu'un doit changer quelque chose dans l'ancienne application, par exemple, ajouter de nouvelles interfaces pour interagir avec l'application réécrite pendant que la réécriture n'est pas terminée. Mais d'après mon expérience, un tel travail supplémentaire est toujours rentable.

Une fois les premières parties de la nouvelle application en production, l'approche agile et itérative deviendra évidente. Les exigences changeront, vos histoires d'utilisateurs changeront ou obtiendront de nouvelles priorités, et nous espérons que vous remplacerez de plus en plus de fonctionnalités de l'ancien système par petites étapes.

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.