Comment justifier le temps de refactoring du code?

17

Avoir un très grand projet de plus de 70k LOC.

Le projet a certainement besoin d'une refactorisation de code dans Core Framework et dans d'autres parties également. AUCUN délai n'a été fixé au début du projet pour la refactorisation. Cependant avec le temps et plus de 40 développeurs se sont joints et ont quitté le projet. De mon point de vue est indispensable.

Quels seraient vos principaux points pour défendre et défendre un principe de développement logiciel approprié?

Jackie Chan
la source
9
70k LOC n'est pas un très grand projet. Je dirais que c'est petit
BЈовић
@ BЈовић C'est vrai, j'ai hérité de fichiers source uniques qui avaient plusieurs multiples de 10k LoC
James
1
Aie. Lire un fichier LOC 10k, c'est comme lire un gros livre. Une fois arrivé à la fin, vous avez oublié le début. J'ai une classe héritée de 10 000 LOC dans mon projet, et chaque changement est pénible. Impossible d'imaginer comment c'est d'avoir plusieurs!
BЈовић

Réponses:

19

Lorsque vous travaillez sur une application existante ou une friche industrielle, il est tentant de faire un "nettoyage de printemps" dans l'espoir de remettre le tout en forme. Il ne s'agit en aucun cas d'une utilisation justifiée des ressources. Après tout, comment l'arrêt du développement d'un logiciel fonctionnel (seul le code fonctionnel peut être refactorisé) est-il justifiable? Pouvez-vous garantir que le temps consacré à la grande phase de refactoring sera rentable plus tard et ne causera pas de dégénérescence du projet?

Comment manges tu un éléphant? Une bouchée à la fois. Chaque fois que vous devez implémenter une nouvelle fonctionnalité ou corriger un bogue, vous voyez si cette partie a besoin d'être améliorée. Comme le dit la règle du boy-scout: "Laissez toujours le terrain de camping plus propre que vous ne l'avez trouvé." Le refactoring ne doit pas être une phase distincte, il fait partie du développement quotidien.

Lorsque vous obtenez cette culture de la qualité présentée à l'équipe de développement, la qualité s'améliore. Après cela, il n'y a plus rien à justifier auprès de la direction.

simoraman
la source
Uff, n'a jamais essayé un éléphant
Jackie Chan
J'essaie également de mettre en place cet état d'esprit dans mon projet. Nous devons faire de grands changements pour les changements à venir, mais je veux faire le refactoring nécessaire pendant que nous y allons. Il ne sert à rien d'essayer de tirer la * grosse phase de refactoring sans aucune carte de développement ".
grincer des dents le
3
Nous avons fait la règle du boy-scout. Fonctionne jusqu'à ce qu'il ne reste plus de petites piqûres. Il y a des parties qui sont tellement enchevêtrées qu'il n'y a pas d'autre moyen que d'y consacrer du temps.
atoth
13

En général, la refactorisation doit être effectuée afin de permettre une autre modification que vous devez apporter au code ou comme une étape de nettoyage naturel après qu'une modification a été apportée au code. Dans ce cas, il n'y a rien à justifier. La refactorisation fait simplement partie du processus de travail sur le projet. Le temps est facturé à la tâche sur laquelle vous travailliez lors de la refactorisation.

Si ce n'est pas fait par petits incréments, alors ce n'est pas vraiment du refactoring, hein?

Steve Jorgensen
la source
8

Toutes les bonnes réponses ici - mais puis-je ajouter une dimension commerciale à cela. Permettez-moi de vous demander POURQUOI / Alors quoi? (pensez à votre patron de cheveux pointu (PHB) :)

PHB: pourquoi?
Vous: Cela rendra les choses plus faciles à réparer
PHB: Alors quoi?
Vous: Cela augmentera le débit - nous obtiendrons de nouvelles versions plus rapidement?
PHB: Alors quoi?
Vous: Euh ... Des clients plus heureux?
PHB: WTF?
Vous: je veux dire des recommandations accrues, une plus grande satisfaction, 
     plus de bénéfices plus tôt en raison du faible taux de rotation
PHB: Oh! Ça a l'air sympa. Mais ça ne "sonne" bien que je peux le voir?
Vous: WTF?
PHB: Montrez-moi l'argent! (c'est-à-dire les chiffres s'il vous plaît)
Vous: Oh! Brb ... (allez mettre quelques chiffres dans une simple feuille de calcul pour faire votre cas)

Fondamentalement, vous devez faire une analyse de rentabilisation - exécutez quelques chiffres pour clarifier votre processus de réflexion et obtenir les chiffres pour refléter objectivement le «bénéfice». Vous saurez également combien de temps cela prendra, les coûts approximatifs, etc. Cela devrait avoir du sens. Si cela en vaut la peine, vous obtiendrez le signal vert et serez peut-être le fer de lance de l'initiative aussi :)

Si vous pensez comment puis-je tout mesurer, essayez ce livre

Doctorat
la source
6

La refactorisation, comme toute autre activité, doit avoir un objectif clair défini pour elle. Une fois cet objectif clairement défini, vous devriez considérer l'état actuel du projet et l'étape du cycle de vie. Pour un projet de développement achevé à 80%, avec 30% de retard, vous devez justifier l'effort de refactoring en fonction de l'objectif fixé précédemment. Dans cet exemple, si les éléments de code ont été testés à l'unité et fonctionnent correctement dans un environnement de développement, il est difficile de justifier la refactorisation.

Le fait que 40 développeurs soient partis n'est peut-être pas aussi dramatique que cela puisse paraître. Je m'attends à ce que ces développeurs aient livré du code de travail qui a été examiné et testé. Donc, à moins qu'il n'y ait des problèmes connus dans ce code, je le laisserais tel quel. L'idée est que dans un grand projet comme le vôtre, je m'attendrais à ce qu'il y ait des normes et des procédures et que le code ne soit pas un gâchis complet.

N'oubliez pas que le refactoring entraînera la répétition de nombreux, sinon tous les tests effectués. De plus, comme le refactoring de cette taille ne peut pas être effectué par un ou deux membres seniors, le refactoring peut introduire des problèmes qui n'existaient pas. C'est un risque à ne pas négliger.

Cela dit, il n'est pas rare d'ajouter des tâches à un projet lorsque l'imprévu se produit. Donc, si les développeurs disparaissaient pour une raison quelconque, cela serait considéré comme un événement de nature spéciale et quelles que soient les mesures à prendre pour remédier à la situation. Il serait traité comme un incendie ou un tremblement de terre, etc.

En résumé, je ne refactoriserais pas un grand code de travail dans un grand projet sans bonne raison technique solide, surtout que nous savons tous que la plupart des projets sont généralement en retard.

Aucune chance
la source
3
On ne peut qu'espérer que votre projet a des tests qui échouent ...
Rig
2
@Rig s'il n'y en a pas, je commencerais par en écrire. Chaque bug que vous trouvez, écrivez un test qui capturera la correction de celui-ci. Vous devez commencer quelque part. Il est inutile de refactoriser quoi que ce soit si vous n'êtes pas en mesure de dire objectivement "Je n'ai rien cassé".
John Lyon
6

Imaginez que vous êtes devant un long et immense mur. Vous devez aller de l'autre côté.

Soit vous refaites le mur pour construire une porte, soit vous le contournez.

Estimez le temps pour les deux solutions et vous obtenez votre justification pour la refactorisation.

N'oubliez pas de multiplier le temps dans la deuxième solution par le nombre de personnes devant se rendre de l'autre côté du mur.

mouviciel
la source
1

Comme je l'ai lu dans l'une des autres réponses, mangez cet éléphant une bouchée à la fois. Je participe à l'audit d'un grand projet international, où les membres de l'équipe sont dispersés géographiquement. Après avoir construit les deux premières versions du logiciel, l'équipe a convenu que leurs approches, leur style de codage et leurs solutions de construction n'étaient pas cohérents. Ils ont accepté d'écrire de nouvelles parties de la demande en suivant les nouvelles règles et convention et quand (et alors seulement) ils doivent changer une partie de l'ancien code, ils l'ont d'abord refactorisé pour respecter la nouvelle convention. Tout fonctionne plutôt bien. Le processus de refactoring est presque dans son 5ème mois, une partie du code est refactorisé, d'autres ne le sont toujours pas. De nouvelles fonctionnalités sont apportées à temps, les clients sont satisfaits, les développeurs sont heureux, l'équipe QA est également heureuse. Une situation gagnant-gagnant :)

Andrzej Bobak
la source
1

Le principal objectif de la refactorisation est de faciliter les choses à l'avenir. Vous ne pouvez pas montrer les bénéfices de la refactorisation à moins de comparer plusieurs projets à long terme avec peu de projets avec et peu sans refactoring constant. Il est généralement admis parmi les développeurs que le refactoring diminue les coûts de maintenance et de mise en œuvre des changements, mais ceux-ci sont difficiles à prouver du point de vue commercial. La principale raison de mettre en œuvre le refactoring est de réduire la dette technique .

En outre, la refactorisation doit être un processus continu et le temps consacré à la refactorisation doit être inclus dans la tâche de développement elle-même. Avoir une "tâche de refactoring" spéciale n'est pas une bonne idée.

Euphorique
la source