À la recherche de la meilleure façon de combiner une refactorisation profonde de l'architecture avec un développement basé sur les fonctionnalités

9

Énoncé du problème:

Donné:

  • TFS comme contrôle de source
  • Application client de bureau lourde avec des tonnes de code hérité avec une conception d'architecture mauvaise ou presque absente.
  • Clients exigeant constamment de nouvelles fonctionnalités avec une qualité sonore, une
    livraison rapide et se plaignant constamment d'une interface utilisateur peu conviviale.

Problème:

L'application nécessite sans aucun doute une refactorisation profonde. Ce processus rend inévitablement l'application instable et une phase de stabilisation dédiée est nécessaire.

Nous avons essayé:

Refactorisation dans le maître avec des fusions périodiques du maître (Mo) vers la branche de fonction (FB). (mon erreur) Résultat: Beaucoup de branches instables.


Ce que l'on nous conseille:

Lien vers l'article (pdf)
Créez une branche supplémentaire pour la refactorisation (RB) en la synchronisant périodiquement avec MB via la fusion de MB en RB. Une fois RB stabilisé, nous remplaçons master par RB et créons une nouvelle branche pour une refactorisation supplémentaire. C'est le plan. Mais ici, je m'attends à l'enfer réel de la fusion de MB à RB après la fusion de n'importe quel FB à MB.

Le principal avantage: un maître stable la plupart du temps.

Existe-t-il de meilleures alternatives aux procédures?

Pavel Voronin
la source
1
Améliorations possibles (plutôt que des alternatives) à votre processus proposé: L'outil de fusion TFS est assez lourd par rapport à divers utilitaires de diff alternatifs. Si vous ne l'avez pas déjà fait, vous pouvez trouver la fusion manuelle moins douloureuse si vous configurez le client TFS pour utiliser un utilitaire de différenciation plus agréable, plutôt que l'outil intégré. Vous pouvez également trouver l'utilitaire TFS Power Tools de Microsoft utile. Il offre la possibilité d'exécuter un diff entre des ensembles de modifications ou des branches, plutôt qu'entre des fichiers individuels.
Brian

Réponses:

1

J'ai eu une situation similaire dans le passé. Ce que j'ai fait:

  • évaluer l'état actuel du projet; dans la plupart des situations, l'architecture (ou son absence) est le principal problème => repenser
  • il y a généralement des éléments fonctionnels, le problème étant le couplage élevé entre les différentes parties du projet; J'ai évalué quelles sont les fonctionnalités de travail et je les ai réutilisées, mais dans ma propre architecture
  • parler au client; Je ne sais pas ce que dit votre manager, mais je pense qu'il est important de parler au client et d'être franc; il a besoin de savoir que vous travaillez sur la qualité de son produit. J'ai fait un accord pour un plan de sortie:

  • dans la phase de fusion des 2 solutions (faire l'architecture + réutiliser les fonctionnalités de l'ancien projet) les seules choses qui ont été publiées (nouvelles fonctionnalités) ont été faites sur l'ancien produit; cependant, les nouvelles versions ne contenaient que des corrections de bogues importantes. Donc, très peu de versions ont été faites sur l'ancien produit. Par conséquent, les choses modifiées ont été facilement fusionnées dans la nouvelle solution.

  • la première nouvelle version (sortie du nouveau produit) ne contenait que ce que contenait l'ancien produit (pas de nouvelles fonctionnalités); après l'avoir stabilisé (la stabilisation n'a pas pris longtemps) j'ai travaillé avec un seul projet

Je pense que vous ne pouvez pas échapper à une période (raisonnablement courte) de sorties sporadiques. Il est important que vous en conveniez avec votre client.

Paul Ianas
la source