Refactorisation
Qu'est-ce que le refactoring (ou refactorisation) ?
Le refactoring est le processus de restructuration d'un code, tout en ne modifiant pas sa fonctionnalité d'origine. L'objectif du refactoring (refactorisation) est d'améliorer le code interne en apportant de nombreuses petites modifications sans altérer le comportement externe du code.
Les programmeurs informatiques et les développeurs de logiciels remanient le code pour améliorer la conception, la structure et la mise en œuvre du logiciel. Le remaniement améliore la lisibilité du code et réduit sa complexité. Le remaniement peut également aider les développeurs de logiciels à trouver des bogues ou des vulnérabilités cachés dans leur logiciel.
Le processus de remaniement comporte de nombreuses petites modifications du code source d'un programme. Une approche du remaniement, par exemple, consiste à améliorer la structure du code source à un moment donné, puis à étendre systématiquement les mêmes changements à toutes les références applicables dans l'ensemble du programme. L'idée est que tous les petits changements qui préservent le comportement d'un corps de code ont un effet cumulatif. Ces changements préservent le comportement original du logiciel et ne le modifient pas.
Martin Fowler, considéré comme le père du refactoring, a regroupé de nombreuses meilleures pratiques de l'industrie du développement logiciel dans une liste spécifique de refactorings et a décrit les méthodes pour les mettre en œuvre dans son livre Refactoring : Improving the Design of Existing Code.
Quel est l'objectif du remaniement ?
Le refactoring permet d'améliorer le code en le transformant :
- Plus efficace grâce à la prise en compte des dépendances et des complexités.
- Plus facile à maintenir ou à réutiliser grâce à l'amélioration de l'efficacité et de la lisibilité.
- Plus propre, il est plus facile à lire et à comprendre.
- Il est plus facile pour les développeurs de logiciels de trouver et de corriger les bugs ou les vulnérabilités dans le code.
La modification du code se fait sans changer les fonctions du programme lui-même. De nombreux environnements d'édition de base prennent en charge des remaniements simples tels que le renommage d'une fonction ou d'une variable dans l'ensemble d'une base de code.
Quand faut-il remanier le code ?
Le remaniement peut être effectué après le déploiement d'un produit, avant l'ajout de mises à jour et de nouvelles fonctionnalités au code existant, ou dans le cadre de la programmation quotidienne.
Lorsque le processus est effectué après le déploiement, il est normalement réalisé avant que les développeurs ne passent au projet suivant. Une organisation peut être en mesure de remanier davantage de code à ce stade du cycle de livraison du logiciel, où les développeurs disposent d'une plus grande disponibilité et de plus de temps pour travailler sur les modifications du code source nécessaires.
Il est toutefois préférable de procéder à un remaniement avant d'ajouter des mises à jour ou de nouvelles fonctionnalités à un code existant. Lorsqu'il est effectué à ce stade, le refactoring permet aux développeurs de s'appuyer plus facilement sur le code existant, car ils reviennent en arrière et simplifient le code, le rendant plus facile à lire et à comprendre.
Lorsqu'une organisation maîtrise bien le processus de refactorisation, elle peut en faire un processus régulier. Chaque fois qu'un développeur doit ajouter quelque chose à une base de code, il peut examiner le code existant pour voir s'il est structuré d'une manière qui rendrait le processus d'ajout de nouveau code plus simple. Si ce n'est pas le cas, le développeur peut remanier le code existant. Une fois le nouveau code ajouté, le développeur peut à nouveau remanier le même code pour le rendre plus clair.
Quels sont les avantages du remaniement ?
Le remaniement peut apporter les avantages suivants :
- Rend le code plus facile à comprendre et à lire, car l'objectif est de simplifier le code et de réduire les complexités.
- Améliore la maintenabilité et facilite la détection des bogues ou les modifications ultérieures.
- Encourage une compréhension plus approfondie du code. Les développeurs doivent réfléchir davantage à la manière dont leur code se mêlera au code déjà présent dans la base de données.
- L'accent est mis uniquement sur la fonctionnalité. Le fait de ne pas modifier la fonctionnalité d'origine du code garantit que le projet initial ne perdra pas de sa portée.
Quels sont les défis de la refonte ?
Le processus n'est toutefois pas exempt de difficultés. En voici quelques-uns :
- Le processus prendra plus de temps si l'équipe de développement est pressée et que le remaniement n'est pas prévu.
- Sans objectifs clairs, le remaniement peut entraîner des retards et du travail supplémentaire.
- Le remaniement ne peut pas résoudre les défauts des logiciels en soi, car il est conçu pour nettoyer le code et le rendre moins complexe.
Techniques de refonte du code
Les organisations peuvent utiliser différentes techniques de remaniement dans différents cas. En voici quelques exemples :
- Rouge, vert. Cette méthode de remaniement largement utilisée dans le cadre du développement Agile comporte trois étapes. Premièrement, les développeurs déterminent ce qui doit être développé ; deuxièmement, ils font en sorte que leur projet passe les tests ; et troisièmement, ils remanient ce code pour y apporter des améliorations.
- Inline. Cette technique vise à simplifier le code en éliminant les éléments inutiles.
- Déplacement de fonctionnalités entre objets. Cette technique permet de créer de nouvelles classes, tout en déplaçant des fonctionnalités entre les nouvelles et les anciennes classes de données.
- Extraire. Cette technique consiste à décomposer le code en petits morceaux, puis à déplacer ces morceaux dans une autre méthode. Le code fragmenté est remplacé par un appel à la nouvelle méthode.
- Refonte par abstraction. Cette technique permet de réduire la quantité de code dupliqué. Elle est utilisée lorsqu'il y a une grande quantité de code à remanier.
- Composer. Cette technique permet de rationaliser le code afin de réduire les doublons à l'aide de plusieurs méthodes de remaniement, notamment l'extraction et la mise en ligne.
Meilleures pratiques de refactorisation du code
Les meilleures pratiques à suivre pour le remaniement sont les suivantes :
- Planifiez le remaniement. Il peut être difficile de trouver du temps pour cette pratique chronophage autrement.
- Refondre d'abord. Les développeurs devraient le faire avant d'ajouter des mises à jour ou de nouvelles fonctionnalités au code existant afin de réduire la dette technique.
- Procéder à une refonte par petites étapes. Cela permet aux développeurs d'avoir un retour d'information dès le début du processus afin de trouver les éventuels bogues et d'inclure les demandes des entreprises.
- Fixer des objectifs clairs. Les développeurs doivent déterminer la portée et les objectifs du projet dès le début du processus de remaniement du code. Cela permet d'éviter les retards et le travail supplémentaire, car le remaniement est censé être une forme de nettoyage, et non une occasion de modifier des fonctions ou des caractéristiques.
- Tester souvent. Cela permet de s'assurer que les modifications apportées au remaniement n'introduisent pas de nouveaux bogues.
- Automatiser chaque fois que cela est possible. Les outils d'automatisation facilitent et accélèrent le remaniement, améliorant ainsi l'efficacité.
- Corrigez les défauts du logiciel séparément. Le remaniement n'est pas destiné à corriger les défauts du logiciel. Le dépannage et le débogage doivent être effectués séparément.
- Comprendre le code. Examinez le code pour comprendre ses processus, méthodes, objets, variables et autres éléments.
- Remanier, corriger et mettre à jour régulièrement. Le remaniement génère le meilleur retour sur investissement lorsqu'il permet de résoudre un problème important sans prendre trop de temps et d'efforts.
- Se concentrer sur la déduplication du code. La duplication ajoute de la complexité au code, ce qui augmente l'empreinte du logiciel et gaspille les ressources du système.