Refactorisation - Définition et Explications

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs est disponible ici.

La refactorisation (anglicisme venant de refactoring) est une opération de maintenance du code informatique. Elle consiste à retravailler le code source non pas pour ajouter une fonctionnalité supplémentaire au logiciel mais pour améliorer sa lisibilité, simplifier sa maintenance, ou changer sa généricité (En programmation, la généricité d'une fonction repose sur son indépendance vis-à-vis du type, et éventuellement du nombre, de ses arguments. C'est un concept important pour un langage de...) (on parle aussi de remaniement). Une traduction plus appropriée serait réusinage. C'est donc une technique qui s'approche de l'optimisation du code, même si les objectifs sont radicalement différents.

Pourquoi refactoriser ?

Au fur (Fur est une petite île danoise dans le Limfjord. Fur compte environ 900 hab. . L'île couvre une superficie de 22 km². Elle est située dans la Municipalité...) et à mesure de la vie (La vie est le nom donné :) d'un logiciel (En informatique, un logiciel est un ensemble d'informations relatives à des traitements effectués automatiquement par un appareil informatique. Y sont inclus les instructions de traitement, regroupées sous forme de programmes,...) on est amené à implémenter de nouvelles fonctions ou à corriger des bugs. Or ces modifications ne s'imbriquent pas toujours avec élégance dans l'architecture (L’architecture peut se définir comme l’art de bâtir des édifices.) du logiciel.

Le code source (Le code source (ou les sources voire le source) est un ensemble d'instructions écrites dans un langage de programmation informatique de haut niveau, compréhensible par un...) d'un programme tend donc à devenir de plus en plus complexe au fur et à mesure de son existence.

Cela est notamment vrai avec les techniques modernes de développement itératif incrémental où le logiciel entre en phase (Le mot phase peut avoir plusieurs significations, il employé dans plusieurs domaines et principalement en physique :) de modification pratiquement dès le début de son existence.

Il est donc important de mettre en œuvre des techniques qui permettront de toujours conserver un code aussi simple que possible. Cela consiste à :

  • S'assurer que toute l'information nécessaire est disponible
  • Supprimer toute information redondante ou duplication de code
  • Simplifier l'algorithmique (L'algorithmique est l’ensemble des règles et des techniques qui sont impliquées dans la définition et la conception d'algorithmes, c'est à dire de processus systématiques de résolution, par...) des méthodes
  • Limiter la complexité (La complexité est une notion utilisée en philosophie, épistémologie (par exemple par Anthony Wilden ou Edgar Morin), en physique, en biologie (par exemple par Henri Atlan), en sociologie, en...) des classes
  • Limiter le nombre (La notion de nombre en linguistique est traitée à l’article « Nombre grammatical ».) de classes

Les niveaux de refactorisation (La refactorisation (anglicisme venant de refactoring) est une opération de maintenance du code informatique. Elle consiste à retravailler le code source non pas pour ajouter une fonctionnalité...)

On peut distinguer plusieurs niveaux de refactorisation, selon l'impact des modifications sur le déroulement du programme et les risques rencontrés. En pratique, durant une même session de refactorisation on jonglera souvent entre ces divers niveaux.

Modification de la présentation

À ce niveau on cherche à simplement améliorer la présentation du code source sans modifier le code exécuté. Ce type d'amélioration concerne donc essentiellement les commentaires (suppression des commentaires superflus, ou ajout de commentaires sur des sections complexes) et la mise en page (indentation du code, passages à la ligne).

Modification de l'algorithmique

Ce type de modification est destiné à conserver des méthodes aussi simples que possible. Cela est le plus souvent réalisé en scindant une méthode ou un algorithme en plusieurs parties ou en confiant à un objet (De manière générale, le mot objet (du latin objectum, 1361) désigne une entité définie dans un espace à trois dimensions, qui a une fonction précise, et qui peut être...) annexe une partie du traitement.

Dans ce type de modification, il est tout (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou l'univers.) à fait possible (et fréquent) d'introduire des bugs, il est donc fortement conseillé de construire une batterie de tests unitaires et de l'exécuter après chaque modification.

Relocalisation de procédures

C'est un cas particulier de la modification de l'algorithmique. Cela consiste à déplacer une procédure dans une autre procédure ou dans le corps principal de la classe. (à compléter).

Refonte du design (Le design (la stylique en français) est un domaine visant à la création d'objets, d'environnements ou d'œuvres graphiques, à la fois fonctionnels, esthétiques et conformes aux impératifs d'une production industrielle....)

C'est le type de modification le plus radical puisqu'il consiste à modifier la hiérarchie de classes composant l'application. Il est là aussi préférable de procéder par petites modifications et d'exécuter une suite de tests à chaque fois. Il est par ailleurs très difficile de réaliser une refonte en profondeur sans outil (Un outil est un objet finalisé utilisé par un être vivant dans le but d'augmenter son efficacité naturelle dans l'action. Cette augmentation se traduit par la...) spécialisé comme un explorateur de classes.

Des activités de refactorisation

Suppression du code mort (La mort est l'état définitif d'un organisme biologique qui cesse de vivre (même si on a pu parler de la mort dans un sens cosmique plus...)

Le code mort est du code qui ne sert à rien car il n'est jamais appelé par une autre partie du programme. Il ne sert donc qu'à rendre le code source plus complexe et à provoquer des risques de confusion.

Le plus difficile est bien entendu de détecter le code mort, on peut pour cela utiliser plusieurs techniques:

  • recherche (La recherche scientifique désigne en premier lieu l’ensemble des actions entreprises en vue de produire et de développer les connaissances scientifiques. Par extension métonymique, la recherche...) statique (Le mot statique peut désigner ou qualifier ce qui est relatif à l'absence de mouvement. Il peut être employé comme :) par l'outil grep sur le code source pour vérifier qu'une méthode est bien appelée quelque part
  • analyseur de références croisées (par exemple l'outil objxref livré avec le compilateur turbo C de Borland)
  • outil de mesure de couverture de code. C'est sans doute la méthode la plus pratique puisqu'elle permet également de vérifier des portions de méthodes. Elle est également la plus risquée puisque du code peut être marqué comme non couvert simplement parce que la suite de test n'est pas complète (ce qui est en pratique toujours le cas).

Il existe une autre forme de code mort: le code commenté. Il arrive souvent que suite à des modifications, on laisse des pans entiers de l'ancien code pour pouvoir éventuellement revenir à la version antérieure facilement. Ce type de code devrait également être supprimé à la fin de la session de développement.

Dans tous les cas, il n'est jamais recommandé de conserver du code qui pourrait servir un jour. Il est toujours préférable de le supprimer de la version de travail et d'utiliser un outil de gestion de versions (La gestion de version (en anglais revision control) est une activité qui consiste à maintenir l'ensemble des versions d'un logiciel. Essentiellement utilisée dans le domaine de la création de logiciels, elle est...) pour archiver ce type de code.

Ajout d'assertions

Les assertions sont une technique de programmation (La programmation dans le domaine informatique est l'ensemble des activités qui permettent l'écriture des programmes informatiques. C'est une étape importante de la...) qui consiste à vérifier qu'un certain nombre de conditions sont vérifiées. Elles sont très intéressantes d'une part car elles permettent de simplifier le déboggage en détectant les erreurs au plus tôt, mais également parce qu'elles sont placées à l'intérieur du code qu'elles contrôlent et peuvent donc aider à la compréhension de l'état du système.

Renommage

Au fur et à mesure du développement d'un logiciel, le rôle des classes et des méthodes devient plus clair. Il est donc souvent utile de modifier les noms de classes ou de méthodes pour bien indiquer ce rôle.

Commentaires

Les commentaires sont un sujet assez controversé de documentation du logiciel. Il est de toute façon important de toujours garder les commentaires synchronisés avec le code.

Cet article vous a plu ? Partagez-le sur les réseaux sociaux avec vos amis !
Page générée en 0.045 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique