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é?
refactoring
Jackie Chan
la source
la source
Réponses:
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.
la source
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?
la source
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) :)
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
la source
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.
la source
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.
la source
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 :)
la source
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.
la source