Je suis un fervent partisan de la règle du scoutisme :
Vérifiez toujours un module plus propre que lorsque vous l'avez vérifié. "Quel que soit l'auteur d'origine, nous ferions toujours des efforts, aussi petits soient-ils, pour améliorer le module. Quel serait le résultat? Je pense que si tous suivaient cette règle simple, nous verrions la fin de la détérioration incessante de nos systèmes logiciels, mais nos systèmes s’amélioreraient progressivement au fil de leur évolution, et nous verrions également des équipes s’occuper du système dans son ensemble. que de simples personnes prenant soin de leur propre petite petite partie.
Je suis également un fervent partisan de l'idée connexe de la refactorisation opportuniste :
Bien qu'il existe des endroits pour certains efforts de refactorisation programmés, je préfère encourager la refactorisation en tant qu'activité opportuniste, à effectuer quand et où le code doit être nettoyé - par qui que ce soit. Cela signifie qu'à tout moment, quelqu'un verra du code qui n'est pas aussi clair qu'il le devrait, il devrait en profiter pour le corriger immédiatement - ou du moins dans quelques minutes.
Notez en particulier l'extrait suivant de l'article de refactoring:
Je me méfie des pratiques de développement susceptibles de créer des frictions lors de la refactorisation opportuniste ... Mon sentiment est que la plupart des équipes ne font pas assez de refactorisation. Il est donc important de faire attention à tout ce qui décourage les gens. Pour vous aider à résoudre ce problème, soyez conscient de chaque fois que vous vous sentez découragé de procéder à une petite refactorisation, celle-ci ne vous prendra que quelques minutes. Une telle barrière est une odeur qui devrait déclencher une conversation. Alors, prenez note du découragement et soulevez-le avec l'équipe. À tout le moins, cela devrait être discuté lors de votre prochaine rétrospective.
Là où je travaille, il existe une pratique de développement qui provoque de fortes frictions - la révision de code (CR). Chaque fois que je change quelque chose qui n'entre pas dans le cadre de ma "tâche", mes critiques me reprochent de rendre le changement plus difficile à contrôler. Cela est particulièrement vrai en cas de refactorisation, car cela rend difficile la comparaison "ligne par ligne" des diff. Cette approche est la norme ici, ce qui signifie que la refactorisation opportuniste est rarement effectuée et que seule la refactorisation "planifiée" (qui est généralement trop petite, trop tard) a lieu, voire pas du tout.
J'affirme que les avantages en valent la peine, et que 3 réviseurs travailleront un peu plus fort (pour comprendre réellement le code avant et après, plutôt que de regarder l'étendue des lignes qui ont changé - la révision elle-même serait meilleure à cause de cela ) afin que les 100 prochains développeurs qui lisent et gèrent le code en tirent profit. Lorsque je présente cet argument à mes relecteurs, ils me disent qu'ils n'ont aucun problème avec mon refactoring, tant que ce n'est pas dans le même CR. Cependant, je prétends que c'est un mythe:
(1) La plupart du temps, vous réalisez seulement quoi et comment vous voulez procéder à une refactorisation lorsque vous êtes au milieu de votre mission. Comme le dit Martin Fowler:
Au fur et à mesure que vous ajoutez la fonctionnalité, vous réalisez que le code que vous ajoutez contient une certaine duplication avec du code existant. Vous devez donc refactoriser le code existant pour nettoyer les choses ... Vous pouvez obtenir quelque chose de fonctionnel, mais vous devez réaliser mieux si l’interaction avec les classes existantes était modifiée. Profitez de cette occasion pour le faire avant de vous considérer comme fait.
(2) Personne ne vous considérera comme favorable à la publication de "refactoring" de CR que vous n'étiez pas censés faire. Un CR a un certain surcoût et votre responsable ne veut pas que vous perdiez votre temps en refactoring. Lorsque le changement que vous êtes censé apporter est intégré, le problème est minimisé.
La question est exacerbée par Resharper, car chaque nouveau fichier que j’ajoute au changement (et je ne sais pas à l’avance quels fichiers seront modifiés) est généralement semé d’erreurs et de suggestions - la plupart d’entre elles sont parfaitement justes et méritent totalement. fixation.
Le résultat final est que je vois un code horrible, et je le laisse là. Paradoxalement, j’estime que la correction de ce code non seulement n’améliorera pas mon classement, mais le diminuera et me présentera comme le type "flou" qui perd son temps à réparer des choses qui ne s’intéressent pas à la place de son travail. Je me sens mal parce que je méprise vraiment le mauvais code et que je ne supporte pas de le regarder, encore moins de l'appeler avec mes méthodes!
Des idées sur la façon dont je peux remédier à cette situation?
your manager doesn't want you to "waste your time" on refactoring