Introduction de l'article de wulin.com (www.vevb.com): Le mot refactoring a été initialement défini par Martin Fowler et Kent Beck. Il s'agit d'une modification qui rend la structure interne du logiciel plus facile à comprendre et facilite le changement du logiciel sans modifier le comportement visible du logiciel ... c'est un moyen restreint d'organiser le code et de minimiser les risques de génération de bogues.
Parfois, les programmeurs viennent me voir et disent qu'ils n'aiment pas la conception de quelque chose, et nous devons lui donner une reconstruction complète pour corriger les erreurs. Oh oh. Cela ne semble pas être une bonne idée. Et cela ne ressemble pas à un refactorisation ...Le mot refactorisation a été initialement défini par Martin Fowler et Kent Beck. Il s'agit d'une modification qui rend la structure interne du logiciel plus facile à comprendre et facilite le changement du logiciel sans modifier le comportement visible du logiciel ... c'est un moyen restreint d'organiser le code et de minimiser les risques de génération de bogues.
Le résultat de la reconstruction est que les méthodes de raccourci sont référencées, le code en double et le code mort sont supprimés, ce qui rend la conception et la logique plus claire. Il s'agit d'utiliser des langages de programmation mieux et plus intelligents. C'est l'avantage d'utiliser des informations que vous connaissez maintenant, mais le développeur à l'époque ne savait pas - ou ne les a pas utilisés. Simplifiez en continu le code pour les rendre plus faciles à comprendre. Rendez continuellement leurs changements futurs plus faciles et plus sûrs.
Au cours de ce processus, des bogues ont été trouvés et des bogues ont été modifiés, ce qui n'est pas une reconstruction. L'optimisation n'est pas une reconstruction. Le renforcement de la capture des exceptions et l'ajout de code préventif ne refactorise pas. Rendre le code plus facile à tester n'est pas un refactorisation - bien que le refactorisation puisse obtenir le même effet. Toutes ces choses sont bénéfiques. Mais aucun de ces éléments ne refactorise.
Les programmeurs, en particulier ceux qui font des travaux d'entretien, le code de nettoyage sont l'une de leurs tâches quotidiennes. Il s'agit d'un travail de base et doit être fait. La contribution de Martin Fowler et al. est de formater les méthodes de meilleure pratique de refactorisation du code et d'archiver les modèles de refactorisation efficaces communs et éprouvés - les objectifs de la refactorisation et les étapes de la refactorisation - pour la classification des archives.
Le refactorisation est simple. La rédaction de tests avant d'écrire du code possible peut vous empêcher de faire des erreurs. Ajustements structurels à petite échelle, indépendants et sécurisés au code et les tester après chaque ajustement pour vous assurer que vous ne modifiez pas les caractéristiques du comportement du code - les fonctions sont les mêmes qu'auparavant, mais le code semble différent. Le mode de refactorisation et les outils de refactorisation des IDE modernes facilitent la refactorisation, sécurisée et peu coûteuse.
Ne refactorant pas pour le refactorisation
Le refactorisation peut être considéré comme une mesure qui peut aider votre code. Le refactorisation de code doit être effectué avant d'apporter des modifications au code, ce qui vous permettra de vous assurer que vous comprenez le code et facilitera l'introduction de modifications dans le code. Effectuez un test de régression sur votre action de refactorisation. Effectuez ensuite des corrections ou des modifications. Tester à nouveau. Plus tard, plus de code pourraient être refactorisés pour rendre votre intention de changement de code plus claire. Test terminée à nouveau. Reconstruire et changer à nouveau. Ou changer, puis refactor.
Vous ne refactoriez pas pour le refactorisation, vous refactoring parce que vous voulez faire d'autres choses, et le refactorisation peut vous aider à accomplir ces choses.
La portée du refactorisation doit être déterminée par les modifications de code ou les corrections de code que vous devez implémenter - que devez-vous faire pour rendre les modifications de code plus sûres et plus concises? En d'autres termes: ne refactorise pas pour le refactorisation. Ne refactez pas le code que vous n'avez pas l'intention de modifier ou ne changera pas.
Scratch Refactoring pour la compréhension (refactorisation à gratter)
Le livre de Michael Feather "Working Effectivement avec Legacy Code" mentionne le concept de refactorisation de rayures; Martin Fowler l'appelle refactoring pour comprendre. Ceci est utilisé pour gérer (ou ne supporte pas) le code que vous ne comprenez pas, les nettoyez afin que vous puissiez mieux comprendre ce qu'ils font avant de le modifier, et cela vous aidera également à déboguer ces codes. Une fois que vous pouvez comprendre la véritable intention d'une variable ou d'une méthode, renommez-les, donnez-leur un nom plus approprié, supprimez le code que vous n'aimez pas lire (ou trouvez inutile), démontez des déclarations conditionnelles complexes et décomposez de longs programmes en plusieurs mini programmes faciles à comprendre.
Ne vous inquiétez pas d'examiner ou de tester ces modifications. Il s'agit de faire progresser rapidement votre reconstruction - cela permet à ces codes et comment ils fonctionnent pour produire un prototype rapide mais incomplet dans votre cerveau. Apprenez-en et jetez-les. Une brève reconstruction peut également vous permettre d'essayer diverses méthodes de reconstruction et d'apprendre plus de techniques de reconstruction. Michael Feathers suggère que vous devriez prêter attention aux choses qui semblent inutiles ou particulièrement utiles dans le processus, afin que vous puissiez faire les choses correctement après avoir terminé cet exercice et les modifier vraiment - faites un peu à peu près lorsque vous modifiez, faites attention à la méthode et modifiez et testez.
Qu'est-ce que la reconstruction à grande échelle?
Reconstruction simple mais évidente du code: éliminer la duplication, modifier et modifier les variables et les noms de méthode pour le rendre plus significatif, affiner les méthodes pour rendre le code plus facile à comprendre et à réutiliser, simplifier la logique conditionnelle, remplacer les nombres dénués de sens par des variables nommées et rassembler des codes similaires. Grâce à ces refactorings, vous pouvez obtenir d'énormes récompenses en termes de compréhensibilité du code et de maintenabilité.
Par rapport à ces reconstructions en ligne plus petites, les reconstructions de conception plus importantes sont significativement différentes d'eux - c'est ce que Martin Fowler appelle des reconstructions importantes. Des changements importants et coûteux sont livrés avec de nombreux risques techniques. Ce n'est pas un code de nettoyage et une amélioration de la conception dans votre processus de programmation: c'est une refonte fondamentale.
Certaines personnes aiment appeler la refonte, réécrire ou reconstruire un système ou retravailler un système appelé reconstruction à grande échelle. Parce que techniquement, ceux-ci ne modifient pas les caractéristiques fonctionnelles du logiciel - la logique métier, la saisie et la sortie du logiciel sont toujours les mêmes qu'auparavant, mais la conception et l'implémentation du code ont changé. La différence entre l'informatique et la reconstruction conventionnelle semble être la suivante: l'une consiste à réécrire un morceau de code, et l'autre consiste à réécrire un système. Tant que vous le faites étape par étape, vous pouvez appeler cela une reconstruction - que vous soyez piégé pour remplacer un ancien système par un nouveau code pour des années ou une transformation à grande échelle de l'architecture du système.
Le refactorisation à grande échelle sera horrible. Cela peut prendre des semaines, des mois (ou même des années) à terminer, et vous devez apporter des modifications à de nombreuses parties du logiciel. Le logiciel ne s'exécutera pas en conséquence, et ces modifications doivent être publiées plusieurs fois. Vous devez faire des échafaudages temporaires et des solutions de contournement - en particulier lorsque vous utilisez des méthodes de développement agile à cycle court. Pour le moment, une méthode pratique comme Branch by Abstract est utile, ce qui peut vous aider à gérer les changements dans votre code sur une longue période.
Et tout en développant un nouveau code, vous devez également maintenir l'ancien code, ce qui rend le contrôle de la version du code très gênant et gênant à changer, ce qui rend le code très fragile et facile à faire des erreurs - cela va à l'encontre du but prévu de la reconstruction. Parfois, cette situation se poursuit - ce processus d'alternance du code nouveau et ancien ne peut jamais être achevé parce que le meilleur avantage est effectué en premier, ou parce que le consultant qui a initialement apporté l'idée a fait autre chose, ou que le budget a été réduit, et vous détestez maintenir un tel projet de procrastination.
Ce sont des refactorisation - ceux qui ne sont pas
Il est faux d'incorporer le concept de reconstruction dans un tel développement de projets robustes. Ils sont fondamentalement un autre type de travail, avec des coûts de développement et des risques complètement différents. Il confond la compréhension des gens de ce qu'est la reconstruction et de ce que la reconstruction peut faire.
Le refactorisation peut et doit être intégré dans votre processus d'écriture ou de maintien de votre code - en tant que partie intégrante du développement quotidien / gestion de la qualité, tout comme les tests d'écriture et les avis de code. Le refactorisation doit être achevé tranquillement, continuellement et absolument. Il nous oblige à diviser notre énergie de travail et à prendre en compte son existence dans notre évaluation de la période de construction et notre évaluation des risques. Si cela fait correctement, vous n'avez pas besoin d'expliquer ou de vérifier cette partie du travail à des étrangers.
Prendre quelques minutes ou une heure ou deux à refactor est comme une modification de votre processus de développement et fait partie du travail. Si cela vous prend des jours ou plus, ce n'est pas un refactorisation; C'est une réécriture ou une refonte. Si vous devez réserver explicitement une partie du temps (ou de l'ensemble du cycle de sprint) pour refacter le code, si vous devez demander l'approbation pour nettoyer le code ou utiliser le code comme exigence de développement, alors vous ne refactoriez pas - même si vous utilisez les techniques et les outils de refactorisation, vous faites toujours un autre type de travail.
Certains programmeurs croient qu'il est leur droit et leur obligation de faire des modifications fondamentales et significatives du code, et ils les repenseront et les réécrivent au nom du refactorisation, afin qu'ils ne baissent pas leurs compétences à l'avenir. La refonte et la réécriture sont parfois la bonne chose à faire. Mais par franchise et clarté, ne donnez pas à ces activités le nom de la reconstruction.