Programmation par copier-coller

Laprogrammation par copier-collerest la production decode sourcepar de nombreuxcopier-coller. Elle est un palliatif de compétences insuffisantes enprogrammation informatiqueou d'un manque d'abstraction, mais peut être due à des limitations technologiques (par exemple, un environnement de développement peu expressif) là où desfonctionsou desbibliothèques logiciellesseraient normalement utilisées. Elle est considérée comme acceptable voire nécessaire, par exemple avec le code redondant (boilerplateen anglais), ledéroulage de bouclemanuel (quand le compilateur ne sait pas le faire automatiquement), ou avec certains idiomes de programmation. Dans ces cas, cette pratique est prise en charge, par leséditeurs de texteetenvironnements de développementsous la forme desnippets.
La programmation par copier-coller est souvent pratiquée par desdéveloppeursinexpérimentés ou des étudiants pour qui l’écriture de code à partir de zéro est difficile et qui préfèrent chercher une solution toute faite ou une solution partielle qu'ils peuvent adapter pour résoudre leur propre problème.
Les développeurs inexpérimentés qui copient souvent du code ne comprennent pas complètement le code qu'ils copient. Le problème vient plus de leur inexpérience et de leur manque decourage en programmationque du copier-coller en lui-même. Le code vient souvent de sources diverses telles que le code de leurs amis ou de leurs collègues, lesforums internet, le code produit par les professeurs ou assistants professeurs ou les livres sur la programmation. Le résultat est un assemblage de styles de code différents avec du code superflu.
Cette pratique est également la cause debugs: les décisions deconceptionprovenant du code copié peuvent ne plus s'appliquer là où le code est reproduit.
Le code collé peut êtreimpénétrablecar les noms des variables, classes, fonctions et autres sont rarement modifiés, même si leur utilisation peut être complètement différente dans le nouveau contexte.
Le copier-coller est aussi utilisé par des développeurs expérimentés qui disposent d'une bibliothèque de snippets bien testés et génériques qui sont faciles à adapter pour une tâche spécifique.
Étant une forme deduplication de code, la programmation par copier-coller hérite des mêmes problèmes : ces problèmes sont exacerbés si le code ne garde pas de lien sémantique entre la source et les copies. Dans ce cas, si des changements doivent être apportés, le développeur perd du temps à chercher les clones. Ce problème peut être amoindri si le code d'origine et/ou les copies sont commentés de manière appropriée; cependant il faut toujours répéter le même changement en de nombreux endroits. Par ailleurs, puisque les commentaires ne sont souvent pas mis à jour lors de lamaintenance, les commentaires précisant où trouver les clones ont la réputation de devenir caducs.)
Les tenants des méthodologiesorientées objetrejettent l'utilisation du copier-coller avec une bibliothèque de code. Au lieu de copier de manière répétée un algorithme générique, l'algorithme seraitabstraitdans uneclasseencapsuléeréutilisable. La classe est écrite d'une manière flexible, pour permettre l'héritageet lasurcharge, afin que tout le code appelant puisse utiliser ce code générique directement, au lieu de modifier le code original. Lorsque des fonctionnalités supplémentaires sont nécessaires, la bibliothèque est modifiée (tout en maintenantla compatibilité descendante). Ainsi, si un bug est corrigé dans l'algorithme originel ou bien s'il est amélioré, tous les logiciels qui l'utilisent en bénéficient. Laprogrammation génériqueoffre des outils supplémentaires à la programmation orientée objet.
Brancher le codeest une pratique classique dans les grandes équipes de développement, car cela permet de développer sur plusieurs branches en parallèle, ce qui réduit donc les cycles de développement. L'utilisation de branches implique :
Le copier-coller est une alternative moins formelle que l'utilisation de branches, souvent utilisée lorsque l'on s'attend à ce que les branches divergent de plus en plus avec le temps, comme lorsqu'un nouveau produit est créé à partir d'un produit existant.
Lorsque l'on crée un produit à partir d'un produit existant, la programmation par copier-coller présente des avantages évidents puisque les nouveaux développements n'affectent pas le code du produit existant :
Les désavantages sont :
Comme ci-dessus, l'alternative au copier-coller serait une approche modulaire :
Une des formes les plus néfaste de la programmation par copier-coller apparait dans du code exécutant une tâche répétitive, ou une variation de la même tâche qui dépend d'une variable. Chaque instance est copiée-collée depuis le code situé au-dessus, et des modifications mineures sont apportées. Les effets néfastes incluent :
La programmation par copier-coller est occasionnellement acceptée comme une pratique de développement appropriée. C'est le cas avec du code redondant (boilerplate en anglais) tel que les déclarations de classes ou l'import de bibliothèques standards, ou en utilisant un modèle de code existant (avec un contenu vide ou des ébauches de fonctions) en tant que guides à compléter.
L’utilisation d'idiotismes de programmation et depatrons de conceptionsont similaires au copier-coller, puisqu'ils utilisent un code convenu. Dans certains cas ils peuvent être capturés dans dessnippets, qui sont alors collés lorsqu'on en a besoin, même s'ils sont souvent écrits par le développeur d’après ses souvenirs. Parfois, ces idiomes ne peuvent pas être réduits à un snippet. Cependant, dans la plupart des cas, un idiome sera soit suffisamment long pour être abstrait dans une fonction, soit suffisamment court pour qu'il puisse être directement tapé au clavier.
Un exemple simple est une boucleforqui peut être écrite comme ceci:for(inti=0;i!=n;++i){}.
Voici un exemple de code utilisant une bouclefor:
La boucle pourrait avoir été générée avec le snippet suivant (qui spécifie les types et noms de variable):