130 votes

Pourquoi "copier et coller" du code est-il dangereux?

Parfois, mon patron va se plaindre à nous:

Pourquoi avons-nous besoin de si longtemps pour mettre en œuvre une fonctionnalité?

En fait, la fonctionnalité a déjà été implémentée dans une autre application, il vous suffit de copier et coller des codes à partir de là. Le coût devrait être faible.

C'est vraiment une question difficile, car copier et coller des codes n'est pas si simple à mon point de vue.

Avez-vous de bonnes raisons d’expliquer cela à votre patron non technique?

169voto

Oded Points 271275

Si vous trouvez un bug dans votre copier-coller le code, vous aurez besoin de le fixer à chaque endroit que vous avez fait et espérons que vous pouvez vous souvenir d'eux tous (cela vaut aussi pour les besoins de changement).

Si vous gardez la logique dans un endroit, il est plus facile de changer quand c'est nécessaire (donc, si vous décidez que les besoins de l'application de la mise à jour, vous ne le faites qu'en un seul lieu).

Votre patron lire sur le principe DRY (Don't Repeat Yourself).

Ce que vous décrivez ressemble à l'utilisation parfaite pour les bibliothèques, où vous partager du code et de ne garder dans un seul endroit.

Je n'en ai jamais copier-coller le code si j'avais l'intention de refactoriser peu de temps après - faire en sorte que je plus tard sur l'extrait de code commune afin que je puisse réutiliser autant que possible la logique. Et en peu de temps après, je veux dire des minutes et des heures plus tard, ne sont pas des jours et des semaines.

25voto

CResults Points 4309

Il serait préférable de partager le code en construisant une bibliothèque plutôt que de copier le code à l'aide de la fonction copier-coller.

Vous obtiendrez toujours un avantage de vitesse par rapport à la réécriture (recherchez DRY), mais vous ne pourrez conserver que le même emplacement.

12voto

Kilian Foth Points 8619

La raison évidente est que vous prenez sur une "dette" pour l'avenir: tout changement vous devez jamais faire dans le code (et pas seulement des corrections de bogues, de tout changement) sera désormais deux fois plus cher à faire parce que vous devez mettre à jour deux lieux - et de plus en plus risqué, parce que vous oubliez l'un d'eux par la suite. En d'autres termes, faire fonctionner plus vite maintenant pour rendre votre travail encore plus lente dans l'avenir, qui peut être de bon sens, mais n'est généralement pas le cas.

Mais la raison plus importante est que l'hypothèse "c'est le même" qui est le plus souvent subtilement mal. Chaque fois que votre code dépend de non dits, les hypothèses sont correctes, la copier dans un autre lieu à des résultats erronés, à moins que ces hypothèses aussi tenir dans le nouveau lieu. Par conséquent, l'collé le code est souvent mal depuis le début, et pas seulement après le prochain changement.

11voto

Ziv Points 642

Conception-sage, copie-collé le code est certainement une catastrophe, avec le potentiel de causer beaucoup de problème à l'avenir. Mais vous vous demandez pourquoi il vous faut beaucoup de travail maintenant, la réponse est: parce que c'est jamais juste de copier et de coller.

Si le code original a été écrit en vue de les réutiliser, relativement indépendant de la bibliothèque, avec la flexibilité et l'usage du client à l'esprit - très bien, mais ce n'est pas de copier-coller, c'est à l'aide d'une bibliothèque de code. Réel de code à copier-coller va généralement de plus comme ceci:

  • "Bien sûr, j'ai déjà le code qui fait exactement cela!"
  • "Attendez, laquelle de ces cinq versions de code est celui que je veux utiliser comme source?"
  • "Hmmm, que faire de tous ces" util_func_023 fonctions? N'ai-je pas le document? Qui dois-je maintenant?"
  • "Oh, oui, ce code utilise une Base de Code Y. Suppose que j'ai besoin de [choisir une: copie de l'ensemble de la Base de Code en Y dans mon nouveau projet / passer une journée à dégager une fonction je veux de la Base de Code d'Y passer une semaine dégager une fonction que je veux à partir de la Base de Code Y]."
  • "J'ai copié le tout, yay!"
  • "Pourquoi n'est-ce pas de travail?"
  • C'est le point où vous passez des heures/jours/semaines de débogage de code existant qui est similaire à ce que vous voulez, au lieu d'écrire le code que vous voulez vraiment commencer.

En résumé, le code existant qui ne peut pas être utilisé directement, peut, au mieux, servir comme une bonne référence pour l'écriture de code similaire. Il ne peut certainement pas être soulevée à l'ensemble et on s'attend à travailler dans un système complètement différent. En général, il y a fort à présumer que tout le code qui a été écrit et complété, doivent être manipulés aussi peu que possible - même si c'est une copie et non l'original lui-même.

Si vous souhaitez baser votre projet sur le copier-coller, vous avez le code pour commencer de manière à permettre une réutilisation facile, sans copier le code d'origine et de déconner avec elle. Qui en vaut la peine, et si c'est ce que votre patron attend, alors vous devez vous assurez-vous que c'est la façon dont vous concevez et le travail en premier lieu.

9voto

Stefano Borini Points 36904

copier-coller est un désastre qui se produit. Votre patron devrait évaluer le prix de la livraison anticipée par rapport au prix de la livraison du code cassé à l'utilisateur final très bientôt.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X