Програмування методом копіювання-вставлення, C&P-програмування або копіпаста в програмуванні — процес створення програмного коду з часто повторюваними частинами, створений операціями копіювати-вставити. Зазвичай цей термін використовується в зневажливому розумінні для позначення недостатніх навичок комп'ютерного програмування або відсутності виразного середовища розробки, в якому, як правило, можна використовувати спільні бібліотеки.
Програмування методом копіювання-вставлення — поширений антипатерн, що приводить до появи дубльованого коду, зазвичай великого й складного для сприйняття. Повторювані фрагменти коду розмножують помилку, допущену в оригінальному коді, а багаторазові повтори ускладнюють виправлення цієї помилки в копіях.
Трапляється, коли копіпаста в програмуванні може бути прийнятна або необхідна: шаблони, розмотування циклу (коли немає автоматичної підтримки компілятором), а також у разі застосування деяких парадигм програмування або в разі підтримки редакторами початкового коду у вигляді сніпетів.
Плагіат
Копіювання-вставлення часто використовується досвідченим або початківцем-програмістом, який вважає шлях написання коду з нуля складним і намагається шукати написані раніше рішення або часткові рішення, які можна використовувати як основу для вирішення своєї проблеми.
Програмісти, які часто копіюють чужий програмний код, часто не розуміють його частково або повністю. Як така, проблема виникає скоріше через їх недосвідченість й відсутність наполегливості, ніж через сам факт копіювання. Скопійований код часто береться у друзів, колег, з інтернет-форумів, від викладачів або з книг із програмування. У результаті код ризикує бути незв'язним набором стилів і може містити надлишок, що вирішує вже відсутні проблеми.
Існує певна різниця між програмуванням методом копіювати-вставити і програмуванням типу карго-культ. Під першим мається на увазі сам факт багаторазового дублювання частин коду програми, другий тип може мати на увазі як копіювання коду для вирішення завдання, здійснюване з програми або зовнішніх джерел і без розуміння схеми роботи коду, так і копіювання частин коду без необхідності.
Додаткова проблема полягає в тому, що баги також можуть додаватися з копійованим кодом. Прийоми проєктування, використані в різних початкових кодах, можуть бути не прийнятні в разі їх комбінування в новому середовищі.
Такий код також ненавмисно може стати обфускованим, оскільки назви змінних, класів, функцій тощо після копіювання, зазвичай залишаються незмінними, навіть якщо їх призначення абсолютно відрізняється в новому контексті.
Дублювання
Як формі дублювання коду, C&P-програмуванню властиві деякі проблеми, що загострюються, якщо код не зберігає ніякого семантичного зв'язку між оригіналом і копією. У цьому випадку, якщо потрібні зміни, то час витрачається даремно на пошуки всіх частин, що дублюються. Цей процес може бути частково прискорений при добре коментованому коді, але все ж не скасовує необхідність здійснення кількох правок. Оскільки супровід коду часто опускає оновлення коментарів, коментарі, які описують, де знайти повторювані частини коду, свідомо застарівають.
Ерік Аллен в книзі «Типові помилки проєктування» використовує термін «Фальшива черепиця» для позначення помилок, що викликаються копіюванням фрагмента програми. Виокремлення повторюваного фрагмента в метод (основний «рецепт» позбавлення від такого роду проблем) може виявитися нетривіальним завданням.
Використання бібліотек
Програмування методом копіювання-вставлення також нерідко застосовується досвідченими програмістами, що мають свої бібліотеки добре протестованих і готових до використання сніпетів і загальних алгоритмів, що пристосовуються до конкретних завдань.
Замість створення декількох змінених копій узагальненого алгоритму, об'єктозорієнтований підхід пропонує абстрагування алгоритму в інкапсульований клас, який може бути використаний повторно. Такий клас створюється гнучким, з повною підтримкою успадкування і перевантаження, що дозволяє коду, який робить виклик, взаємодіяти з одним узагальненим кодом, а не з декількома або багатьма зміненими. У міру розширення необхідної функціональності, бібліотека також збільшується в розмірі (зі збереженням зворотної сумісності). Так, якщо в оригінальний алгоритм вносять виправлення багу, то все програмне забезпечення, що використовує цей алгоритм і бібліотеку, виграє.
Розгалуження
Розгалуження є нормальним процесом при розробці програмного забезпечення у великих командах. Він дозволяє здійснювати паралельну розробку на гілках і, отже, скорочувати цикли розробки. Класичне розгалуження володіє наступними особливостями:
- Управляється системою контролю версій, що підтримує розгалуження
- Гілки повторно об'єднуються після завершення розробки
Програмування методом копіювати-вставити — це менш формальна альтернатива класичному розгалуженню, часто використовувана в разі, якщо передбачається, що гілки будуть розходитися (різниця коду в гілках буде збільшуватися) з часом більше і більше, як у разі виділення нового програмного продукту з уже наявного.
Як спосіб відокремлення нового продукту, копіпаста має деякі переваги. Оскільки розробка нового продукту не вносить зміни у створений раніше, то:
- Немає необхідності регресивного тестування наявного продукту;
- Економиться час, пов'язаний із забезпеченням якості;
- Скорочується час виходу на ринок;
- Відсутній ризик внесення нових помилок в наявний продукт (що могло б порушити наявну базу користувачів).
Недоліки:
- У випадку, якщо новий і вихідний продукти розходяться не так сильно, як очікувалося, є ймовірність зіткнутися з необхідністю підтримки двох баз початкових кодів (збільшення вартості в два рази), які, по суті, є одним продуктом. Це може призвести до витратного рефакторингу й ручного злиття в подальшому;
- Існування двох баз кодів збільшує час, потрібний для здійснення змін, які бажані для обох продуктів, що свого часу збільшує час виходу на ринок. У реальних умовах це може знищити будь-який раніше виграний час.
Ще однією альтернативою C&P-підходу є модульний підхід:
- Спочатку в бібліотеки або модулі виноситься код, який буде спільним для обох продуктів;
- Використання створених бібліотек є основою для розробки нового продукту;
- Якщо передбачається існування третьої, четвертої, п'ятої і т. д. похідної версії продукту, то такий підхід набагато сильніше копіювання-вставлення, оскільки різко скорочує цикл розробки будь-якого додаткового продукту після другого.
Повторювані завдання або варіації завдання
Одна з найбільш шкідливих форм C&P-програмування виражається в появі дубльованого коду, що виконує повторювану задачу або варіацію основного завдання, залежно від деякої змінної. Кожен екземпляр копіює раніше створений, з внесенням незначних змін. Викликаються ефекти:
- Кожен екземпляр створює дублікат коду з усіма проблемами, описаними раніше, але в набагато більшому масштабі. Зазвичай існують десятки дублікатів, але можливі й сотні. Виправлення помилки стає дуже складним та дорогим завданням;
- У такого роду коді присутні питання зручності та прочитності. Проблеми, пов'язані з труднощами визначення відмінностей між повтореннями мають прямий вплив на ризики і витрати по внесенню правок в код;
- Модель процедурного програмування наполегливо не рекомендує застосовувати у вирішенні завдань, що повторюються, підхід програмування методом копіювати-вставити. Найкращим рішенням є створення функції або підпрограми, яка виконує один прохід через задачу. Така підпрограма потім викликається батьківською програмою повторно, або в деякій формі циклу. Такий код називається «добре декомпонованим» і рекомендується як легко читаємий і більш готовий до розширення;
- Основна емпірична закономірність для такого випадку: «Не повторюйся». Девід Парнас сформулював це правило так: «Копіювання і вставлення коду — наслідок помилки проєктування».
Навмисний вибір підходу
Копіпаста в програмуванні іноді приймається як нормальна техніка програмування. Зазвичай, це можна спостерігати в шаблонах, таких як оголошення класу, підключення стандартних бібліотек або у використанні шаблону наявного коду (з порожнім змістом або функціями-заглушками) як основи для заповнення.
Використання ідіом програмування і патернів проєктування схоже на підхід копіювати-вставити, оскільки вони теж використовують шаблонний код. В одних випадках це може бути виражено фрагментом, який на вимогу вставляється в код, хоча часто він просто «викликається» з розуму програміста. В інших випадках використання ідіом не може бути зведене до шаблонного коду. У більшості випадків, однак, навіть якщо ідіома може бути зведена до коду, він буде або занадто довгим (що буде виділено в функцію), або занадто коротким (таким, що його можна набрати безпосередньо).
Приклад
Простим прикладом допустимого застосування підходу може бути цикл for, який може виглядати як for (int i=0; i!=n; ++i) {}
. Прикладом коду, що використовує такий цикл може бути:
void foo(int n) { for (int i=0; i!=n; ++i) { } }
Код циклу може бути згенерований наступним сніпетом (визначаючи типи і імена змінних):
for ($type $loop_var = 0; $loop_var != $stop; ++$loop_var) { }
Багато програмістів часто використовують підхід, через небажання переписувати рядок, що відрізняється від попереднього лише кількома символами (наприклад, виклик однієї функції для двох однотипних об'єктів, імена яких розрізняються незначно). Дублювати попередню рядок (також за допомогою клавіатурних скорочень) виявляється швидше, ніж переписати його заново. Але ймовірність допустити помилку не зменшується, особливо для останнього рядку.
У випадку, якщо необхідно внести більше однієї правки в дубльований рядок, помилки виникають частіше. Як видно з прикладу, після дублювання автор виправив присвоюване значення, але не виправив індекс масиву в лівій частині:
mArray[12] = "a"; mArray[13] = "b"; mArray[14] = "c"; mArray[14] = "d";
Існує дослідження, спрямоване на «декриміналізацію» програмування методом копіювати-вставити — [en]. Слід зазначити, що в цій моделі, копіпаста — основна модель взаємодії і, отже, не розглядається як антипатерн.
Див. також
Джерела
- Miryung Kim; Lawrence Bergman, Tessa Lau, David Notkin (2004). Ethnographic Study of Copy and Paste Programming Practices in OOPL (PDF) (англ.). doi:10.1109/ISESE.2004.1334896. Процитовано 3 листопада 2013.
- Patricia Jablonski, Daqing Hou (2005). CReN: A Tool for Tracking Copy-and-Paste Code Clones and Renaming Identifiers Consistently in the IDE (PDF) (англ.). Нью-Йорк, США: ACM New York. doi:10.1145/1328279.1328283. Процитовано 3 листопада 2013.
- Chanchal Kumar Roy, James R. Cordy (26 вересня 2007). A Survey on Software Clone Detection Research (англ.). Ontario, Canada: Queen's University, Kingston. Процитовано 3 листопада 2013.
- Gavriel Yarmish. Danny Kopec (2007). Revisiting Novice Programmers Errors (PDF) (англ.). Нью-Йорк, США: ACM New York. doi:10.1145/1272848.1272896. Процитовано 4 листопада 2013.
- Jason Rogers, Chuck Pheatt (May 2009). Integrating Antipatterns into the Computer Science Curriculum. Journal of Computing Sciences in Colleges (англ.). Consortium for Computing Sciences in Colleges. с. 187. Процитовано 4 листопада 2013.
- Gordon Fletcher (2004). Cargo Cults in Java (англ.). University of Salford. с. 3. Процитовано 4 листопада 2011.
- Robert Pittenger (6 травня 2008). Building ASP.NET Web Pages Dynamically in the Code-Behind (англ.). codeproject.com. Процитовано 4 листопада 2013.
- Типові помилки проєктування, 2003.
- Principles of Object-Oriented Programming.
- Code Reuse In OO Development.
- The Benefits of Coding Standards.
- CS 106X.
- Досконалий код, 2005.
- Карпов, 2011.
- Карпов, 2014.
- Sub Text.
Література
- Raymond Wallen (19 липня 2005). 4 major principles of Object-Oriented Programming (англ.). codebetter.com. Процитовано 4 листопада 2013.
- Lisa Wold Eriksen (2004). Code Reuse In Object Oriented Software Development (PDF) (англ.). Norwegian University of Science and Technology, Department of Computer and Information Science. Процитовано 4 листопада 2011.
- The Benefits of Coding Standards, Richard Sharpe. The Benefits of Coding Standards (англ.). JAX Magazine. Процитовано 4 листопада 2011.
- Stanford University, CS 106X ("Programming Abstractions") Course Handout: "Decomposition" (PDF). Stanford University. 18 січня 2008. Процитовано 4 листопада 2013.
- Андрей Карпов (24 січня 2011). Последствия использования технологии Copy-Paste при программировании на Си++ и как с этим быть. PVS-Studio, Статический анализатор кода для C/C++/C++11. Процитовано 3 листопада 2013.
- Андрей Карпов (31 травня 2014). Эффект последней строки. PVS-Studio, Статический анализатор кода для C/C++/C++11. Процитовано 13 вересня 2014.
- Jonathan Edwards (2005). Subtext: Uncovering the Simplicity of Programming (PDF) (англ.). MIT CSAIL. Процитовано 3 листопада 2013.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Programuvannya metodom kopiyuvannya vstavlennya C amp P programuvannya abo kopipasta v programuvanni proces stvorennya programnogo kodu z chasto povtoryuvanimi chastinami stvorenij operaciyami kopiyuvati vstaviti Zazvichaj cej termin vikoristovuyetsya v znevazhlivomu rozuminni dlya poznachennya nedostatnih navichok komp yuternogo programuvannya abo vidsutnosti viraznogo seredovisha rozrobki v yakomu yak pravilo mozhna vikoristovuvati spilni biblioteki Programuvannya metodom kopiyuvannya vstavlennya poshirenij antipatern sho privodit do poyavi dublovanogo kodu zazvichaj velikogo j skladnogo dlya sprijnyattya Povtoryuvani fragmenti kodu rozmnozhuyut pomilku dopushenu v originalnomu kodi a bagatorazovi povtori uskladnyuyut vipravlennya ciyeyi pomilki v kopiyah Traplyayetsya koli kopipasta v programuvanni mozhe buti prijnyatna abo neobhidna shabloni rozmotuvannya ciklu koli nemaye avtomatichnoyi pidtrimki kompilyatorom a takozh u razi zastosuvannya deyakih paradigm programuvannya abo v razi pidtrimki redaktorami pochatkovogo kodu u viglyadi snipetiv PlagiatKopiyuvannya vstavlennya chasto vikoristovuyetsya dosvidchenim abo pochatkivcem programistom yakij vvazhaye shlyah napisannya kodu z nulya skladnim i namagayetsya shukati napisani ranishe rishennya abo chastkovi rishennya yaki mozhna vikoristovuvati yak osnovu dlya virishennya svoyeyi problemi Programisti yaki chasto kopiyuyut chuzhij programnij kod chasto ne rozumiyut jogo chastkovo abo povnistyu Yak taka problema vinikaye skorishe cherez yih nedosvidchenist j vidsutnist napoleglivosti nizh cherez sam fakt kopiyuvannya Skopijovanij kod chasto beretsya u druziv koleg z internet forumiv vid vikladachiv abo z knig iz programuvannya U rezultati kod rizikuye buti nezv yaznim naborom stiliv i mozhe mistiti nadlishok sho virishuye vzhe vidsutni problemi Isnuye pevna riznicya mizh programuvannyam metodom kopiyuvati vstaviti i programuvannyam tipu kargo kult Pid pershim mayetsya na uvazi sam fakt bagatorazovogo dublyuvannya chastin kodu programi drugij tip mozhe mati na uvazi yak kopiyuvannya kodu dlya virishennya zavdannya zdijsnyuvane z programi abo zovnishnih dzherel i bez rozuminnya shemi roboti kodu tak i kopiyuvannya chastin kodu bez neobhidnosti Dodatkova problema polyagaye v tomu sho bagi takozh mozhut dodavatisya z kopijovanim kodom Prijomi proyektuvannya vikoristani v riznih pochatkovih kodah mozhut buti ne prijnyatni v razi yih kombinuvannya v novomu seredovishi Takij kod takozh nenavmisno mozhe stati obfuskovanim oskilki nazvi zminnih klasiv funkcij tosho pislya kopiyuvannya zazvichaj zalishayutsya nezminnimi navit yaksho yih priznachennya absolyutno vidriznyayetsya v novomu konteksti DublyuvannyaYak formi dublyuvannya kodu C amp P programuvannyu vlastivi deyaki problemi sho zagostryuyutsya yaksho kod ne zberigaye niyakogo semantichnogo zv yazku mizh originalom i kopiyeyu U comu vipadku yaksho potribni zmini to chas vitrachayetsya daremno na poshuki vsih chastin sho dublyuyutsya Cej proces mozhe buti chastkovo priskorenij pri dobre komentovanomu kodi ale vse zh ne skasovuye neobhidnist zdijsnennya kilkoh pravok Oskilki suprovid kodu chasto opuskaye onovlennya komentariv komentari yaki opisuyut de znajti povtoryuvani chastini kodu svidomo zastarivayut Erik Allen v knizi Tipovi pomilki proyektuvannya vikoristovuye termin Falshiva cherepicya dlya poznachennya pomilok sho viklikayutsya kopiyuvannyam fragmenta programi Viokremlennya povtoryuvanogo fragmenta v metod osnovnij recept pozbavlennya vid takogo rodu problem mozhe viyavitisya netrivialnim zavdannyam Vikoristannya bibliotek Programuvannya metodom kopiyuvannya vstavlennya takozh neridko zastosovuyetsya dosvidchenimi programistami sho mayut svoyi biblioteki dobre protestovanih i gotovih do vikoristannya snipetiv i zagalnih algoritmiv sho pristosovuyutsya do konkretnih zavdan Zamist stvorennya dekilkoh zminenih kopij uzagalnenogo algoritmu ob yektozoriyentovanij pidhid proponuye abstraguvannya algoritmu v inkapsulovanij klas yakij mozhe buti vikoristanij povtorno Takij klas stvoryuyetsya gnuchkim z povnoyu pidtrimkoyu uspadkuvannya i perevantazhennya sho dozvolyaye kodu yakij robit viklik vzayemodiyati z odnim uzagalnenim kodom a ne z dekilkoma abo bagatma zminenimi U miru rozshirennya neobhidnoyi funkcionalnosti biblioteka takozh zbilshuyetsya v rozmiri zi zberezhennyam zvorotnoyi sumisnosti Tak yaksho v originalnij algoritm vnosyat vipravlennya bagu to vse programne zabezpechennya sho vikoristovuye cej algoritm i biblioteku vigraye Rozgaluzhennya Rozgaluzhennya ye normalnim procesom pri rozrobci programnogo zabezpechennya u velikih komandah Vin dozvolyaye zdijsnyuvati paralelnu rozrobku na gilkah i otzhe skorochuvati cikli rozrobki Klasichne rozgaluzhennya volodiye nastupnimi osoblivostyami Upravlyayetsya sistemoyu kontrolyu versij sho pidtrimuye rozgaluzhennya Gilki povtorno ob yednuyutsya pislya zavershennya rozrobki Programuvannya metodom kopiyuvati vstaviti ce mensh formalna alternativa klasichnomu rozgaluzhennyu chasto vikoristovuvana v razi yaksho peredbachayetsya sho gilki budut rozhoditisya riznicya kodu v gilkah bude zbilshuvatisya z chasom bilshe i bilshe yak u razi vidilennya novogo programnogo produktu z uzhe nayavnogo Yak sposib vidokremlennya novogo produktu kopipasta maye deyaki perevagi Oskilki rozrobka novogo produktu ne vnosit zmini u stvorenij ranishe to Nemaye neobhidnosti regresivnogo testuvannya nayavnogo produktu Ekonomitsya chas pov yazanij iz zabezpechennyam yakosti Skorochuyetsya chas vihodu na rinok Vidsutnij rizik vnesennya novih pomilok v nayavnij produkt sho moglo b porushiti nayavnu bazu koristuvachiv Nedoliki U vipadku yaksho novij i vihidnij produkti rozhodyatsya ne tak silno yak ochikuvalosya ye jmovirnist zitknutisya z neobhidnistyu pidtrimki dvoh baz pochatkovih kodiv zbilshennya vartosti v dva razi yaki po suti ye odnim produktom Ce mozhe prizvesti do vitratnogo refaktoringu j ruchnogo zlittya v podalshomu Isnuvannya dvoh baz kodiv zbilshuye chas potribnij dlya zdijsnennya zmin yaki bazhani dlya oboh produktiv sho svogo chasu zbilshuye chas vihodu na rinok U realnih umovah ce mozhe znishiti bud yakij ranishe vigranij chas She odniyeyu alternativoyu C amp P pidhodu ye modulnij pidhid Spochatku v biblioteki abo moduli vinositsya kod yakij bude spilnim dlya oboh produktiv Vikoristannya stvorenih bibliotek ye osnovoyu dlya rozrobki novogo produktu Yaksho peredbachayetsya isnuvannya tretoyi chetvertoyi p yatoyi i t d pohidnoyi versiyi produktu to takij pidhid nabagato silnishe kopiyuvannya vstavlennya oskilki rizko skorochuye cikl rozrobki bud yakogo dodatkovogo produktu pislya drugogo Povtoryuvani zavdannya abo variaciyi zavdannya Odna z najbilsh shkidlivih form C amp P programuvannya virazhayetsya v poyavi dublovanogo kodu sho vikonuye povtoryuvanu zadachu abo variaciyu osnovnogo zavdannya zalezhno vid deyakoyi zminnoyi Kozhen ekzemplyar kopiyuye ranishe stvorenij z vnesennyam neznachnih zmin Viklikayutsya efekti Kozhen ekzemplyar stvoryuye dublikat kodu z usima problemami opisanimi ranishe ale v nabagato bilshomu masshtabi Zazvichaj isnuyut desyatki dublikativ ale mozhlivi j sotni Vipravlennya pomilki staye duzhe skladnim ta dorogim zavdannyam U takogo rodu kodi prisutni pitannya zruchnosti ta prochitnosti Problemi pov yazani z trudnoshami viznachennya vidminnostej mizh povtorennyami mayut pryamij vpliv na riziki i vitrati po vnesennyu pravok v kod Model procedurnogo programuvannya napoleglivo ne rekomenduye zastosovuvati u virishenni zavdan sho povtoryuyutsya pidhid programuvannya metodom kopiyuvati vstaviti Najkrashim rishennyam ye stvorennya funkciyi abo pidprogrami yaka vikonuye odin prohid cherez zadachu Taka pidprograma potim viklikayetsya batkivskoyu programoyu povtorno abo v deyakij formi ciklu Takij kod nazivayetsya dobre dekomponovanim i rekomenduyetsya yak legko chitayemij i bilsh gotovij do rozshirennya Osnovna empirichna zakonomirnist dlya takogo vipadku Ne povtoryujsya Devid Parnas sformulyuvav ce pravilo tak Kopiyuvannya i vstavlennya kodu naslidok pomilki proyektuvannya Navmisnij vibir pidhoduKopipasta v programuvanni inodi prijmayetsya yak normalna tehnika programuvannya Zazvichaj ce mozhna sposterigati v shablonah takih yak ogoloshennya klasu pidklyuchennya standartnih bibliotek abo u vikoristanni shablonu nayavnogo kodu z porozhnim zmistom abo funkciyami zaglushkami yak osnovi dlya zapovnennya Vikoristannya idiom programuvannya i paterniv proyektuvannya shozhe na pidhid kopiyuvati vstaviti oskilki voni tezh vikoristovuyut shablonnij kod V odnih vipadkah ce mozhe buti virazheno fragmentom yakij na vimogu vstavlyayetsya v kod hocha chasto vin prosto viklikayetsya z rozumu programista V inshih vipadkah vikoristannya idiom ne mozhe buti zvedene do shablonnogo kodu U bilshosti vipadkiv odnak navit yaksho idioma mozhe buti zvedena do kodu vin bude abo zanadto dovgim sho bude vidileno v funkciyu abo zanadto korotkim takim sho jogo mozhna nabrati bezposeredno Priklad Prostim prikladom dopustimogo zastosuvannya pidhodu mozhe buti cikl for yakij mozhe viglyadati yak span class k for span span class w span span class p span span class kt int span span class w span span class n i span span class o span span class mi 0 span span class p span span class w span span class n i span span class o span span class n n span span class p span span class w span span class o span span class n i span span class p span span class w span span class p span Prikladom kodu sho vikoristovuye takij cikl mozhe buti void foo int n for int i 0 i n i Kod ciklu mozhe buti zgenerovanij nastupnim snipetom viznachayuchi tipi i imena zminnih for type loop var 0 loop var stop loop var Bagato programistiv chasto vikoristovuyut pidhid cherez nebazhannya perepisuvati ryadok sho vidriznyayetsya vid poperednogo lishe kilkoma simvolami napriklad viklik odniyeyi funkciyi dlya dvoh odnotipnih ob yektiv imena yakih rozriznyayutsya neznachno Dublyuvati poperednyu ryadok takozh za dopomogoyu klaviaturnih skorochen viyavlyayetsya shvidshe nizh perepisati jogo zanovo Ale jmovirnist dopustiti pomilku ne zmenshuyetsya osoblivo dlya ostannogo ryadku U vipadku yaksho neobhidno vnesti bilshe odniyeyi pravki v dublovanij ryadok pomilki vinikayut chastishe Yak vidno z prikladu pislya dublyuvannya avtor vipraviv prisvoyuvane znachennya ale ne vipraviv indeks masivu v livij chastini mArray 12 a mArray 13 b mArray 14 c mArray 14 d Isnuye doslidzhennya spryamovane na dekriminalizaciyu programuvannya metodom kopiyuvati vstaviti en Slid zaznachiti sho v cij modeli kopipasta osnovna model vzayemodiyi i otzhe ne rozglyadayetsya yak antipatern Div takozhDublyuvannya kodu Zapahi kodu Antipatern Povtorne vikoristannya koduDzherelaMiryung Kim Lawrence Bergman Tessa Lau David Notkin 2004 Ethnographic Study of Copy and Paste Programming Practices in OOPL PDF angl doi 10 1109 ISESE 2004 1334896 Procitovano 3 listopada 2013 Patricia Jablonski Daqing Hou 2005 CReN A Tool for Tracking Copy and Paste Code Clones and Renaming Identifiers Consistently in the IDE PDF angl Nyu Jork SShA ACM New York doi 10 1145 1328279 1328283 Procitovano 3 listopada 2013 Chanchal Kumar Roy James R Cordy 26 veresnya 2007 A Survey on Software Clone Detection Research angl Ontario Canada Queen s University Kingston Procitovano 3 listopada 2013 Gavriel Yarmish Danny Kopec 2007 Revisiting Novice Programmers Errors PDF angl Nyu Jork SShA ACM New York doi 10 1145 1272848 1272896 Procitovano 4 listopada 2013 Jason Rogers Chuck Pheatt May 2009 Integrating Antipatterns into the Computer Science Curriculum Journal of Computing Sciences in Colleges angl Consortium for Computing Sciences in Colleges s 187 Procitovano 4 listopada 2013 Gordon Fletcher 2004 Cargo Cults in Java angl University of Salford s 3 Procitovano 4 listopada 2011 Robert Pittenger 6 travnya 2008 Building ASP NET Web Pages Dynamically in the Code Behind angl codeproject com Procitovano 4 listopada 2013 Tipovi pomilki proyektuvannya 2003 Principles of Object Oriented Programming Code Reuse In OO Development The Benefits of Coding Standards CS 106X Doskonalij kod 2005 Karpov 2011 Karpov 2014 Sub Text LiteraturaRaymond Wallen 19 lipnya 2005 4 major principles of Object Oriented Programming angl codebetter com Procitovano 4 listopada 2013 Lisa Wold Eriksen 2004 Code Reuse In Object Oriented Software Development PDF angl Norwegian University of Science and Technology Department of Computer and Information Science Procitovano 4 listopada 2011 The Benefits of Coding Standards Richard Sharpe The Benefits of Coding Standards angl JAX Magazine Procitovano 4 listopada 2011 Stanford University CS 106X Programming Abstractions Course Handout Decomposition PDF Stanford University 18 sichnya 2008 Procitovano 4 listopada 2013 Andrej Karpov 24 sichnya 2011 Posledstviya ispolzovaniya tehnologii Copy Paste pri programmirovanii na Si i kak s etim byt PVS Studio Staticheskij analizator koda dlya C C C 11 Procitovano 3 listopada 2013 Andrej Karpov 31 travnya 2014 Effekt poslednej stroki PVS Studio Staticheskij analizator koda dlya C C C 11 Procitovano 13 veresnya 2014 Jonathan Edwards 2005 Subtext Uncovering the Simplicity of Programming PDF angl MIT CSAIL Procitovano 3 listopada 2013