Copiere-pastrare de programare

Programarea prin copiere-pastă este un antipattern comun. ceea ce duce la apariția unui cod duplicat, de obicei mare și complex pentru percepție. Fragmentele codului repetabil propagă eroarea comisă în codul original, iar repetările multiple complică corectarea acestei erori în copii [1] [3].







Programatorii care copiază adesea codul de programare al altui utilizator deseori nu îl înțeleg parțial sau complet. Ca atare, problema apare mai mult din cauza lipsei de experiență și a lipsei de perseverență decât din cauza faptului că a fost copiat. Codul copiat este adesea preluat de la prieteni, colegi, din forumuri on-line. de la profesori sau de la cărți despre programare. Rezultatul riscă să fie un set incoerent de stiluri și poate conține cod redundant care rezolvă probleme inexistente.

O problemă suplimentară este faptul că bug-urile pot fi pur și simplu incluse în codul care este copiat. Tehnici de proiectare folosite în diferite coduri sursă. Este posibil ca acestea să nu fie acceptabile dacă sunt combinate într-un mediu nou.

De asemenea, acest cod poate deveni obosit în mod accidental. deoarece numele variabilelor, clasei, funcțiilor etc., după copiere, rămân de obicei neschimbate, chiar dacă scopul lor este absolut diferit într-un context nou [4].

Întrebuințările repetate uitate sunt una dintre cele mai neplăcute și comune probleme de programare prin metoda copy-paste

Utilizarea bibliotecilor

Copiați și programare pasta este, de asemenea, de multe ori folosit de programatori cu experienta care au biblioteca lor bine testate și gata de utilizare, fragmente de cod de algoritmi și generale, adaptate la sarcini specifice. [2]

În locul creării mai multor copii modificate ale algoritmului generalizat, abordarea orientată pe obiecte sugerează că abstractizarea algoritmului se face într-o clasă încapsulată care poate fi refolosită. Această clasă este creată în mod flexibil, cu un sprijin complet pentru moștenire și suprasarcină. Acest lucru permite codului de apel să interacționeze cu un singur cod generalizat, mai degrabă decât cu mai multe sau multe modificate [9]. Pe măsură ce funcționalitatea necesară este extinsă, biblioteca crește, de asemenea, în mărime (cu compatibilitatea înapoi conservată). Deci, în cazul în care algoritmul original este corectat bug, atunci toate software-ul care utilizează acest algoritm și biblioteca câștigă.

Brancharea este un proces normal atunci când se dezvoltă software în echipe mari. Aceasta permite dezvoltarea paralelă a ramurilor și, prin urmare, scurtarea ciclurilor de dezvoltare. Ramificația clasică are următoarele caracteristici:

  • Acesta este controlat de sistemul de control al versiunii. sprijinirea ramificării
  • Sucursalele sunt reintegrate după finalizarea dezvoltării






Metoda de programare de copy-paste - o alternativă mai puțin formală la branșării clasic, folosit de multe ori în acest caz, în cazul în care se presupune că ramura se va abate (diferența de cod în ramurile vor crește) în timp, mai mult și mai mult, la fel ca în cazul alocării unui nou produs software de pe cel existent.

Ca o modalitate de a izola un produs nou, copapastul are câteva avantaje. Deoarece dezvoltarea unui nou produs nu face o schimbare la una existentă:

  • Nu este necesară testarea prin regresie a unui produs existent;
  • Timpul este economisit în legătură cu asigurarea calității;
  • Timp redus la piață;
  • Nu există riscul producerii unor noi greșeli în produsul existent (care ar putea încălca baza de utilizatori existentă).
  • Dacă un nou produse originale nu diferă la fel de mult cum era de așteptat, este probabil să se confrunte cu necesitatea de a sprijini două surse de baze de date (creștere a costurilor de două ori), care sunt în esență același produs. Acest lucru poate duce la refactorizarii costurilor și manualul de contopire in continuare;
  • Existența a două baze de coduri mărește timpul necesar pentru punerea în aplicare a modificărilor care sunt de dorit pentru ambele produse, ceea ce la rândul lor crește timpul de comercializare. În condiții reale, acest lucru poate distruge orice timp câștigat anterior.

O altă alternativă la abordarea CP este abordarea modulară:

  • Inițial, codul sau codul care va fi distribuit între cele două produse apare în biblioteci sau module;
  • Utilizarea bibliotecilor create reprezintă baza pentru dezvoltarea unui nou produs;
  • În cazul în care sunt avute în vedere versiunile al treilea, al patrulea, al cincilea, etc. derivate ale produsului, această abordare este mult mai puternică decât copiați-pastă, deoarece scurtează în mod dramatic ciclul de dezvoltare al oricărui produs suplimentar după al doilea [10].

Sarcinile sau variațiile repetitive ale problemei

Una dintre cele mai dăunătoare forme de programare CP este apariția codului duplicat. efectuarea unei sarcini repetate sau a unei variații a sarcinii principale, în funcție de o anumită variabilă. Fiecare copie a fost creată anterior cu modificări minore. Efectele sunt:

Alegerea deliberată a abordării

Utilizarea idiomurile de programare și modele de design ca abordare copy-paste, deoarece acestea sunt utilizate, de asemenea, codul de șabloane. În unele cazuri, acest lucru poate fi exprimat printr-un fragment. că la cerere este introdusă în codul, deși de multe ori este pur și simplu „numit“ din mintea programatorului. În alte cazuri, utilizarea de idiomuri nu poate fi redusă la codul formulaic. În cele mai multe cazuri, cu toate acestea, chiar și în cazul în care graiul poate fi redus la codul, acesta este fie prea lung (care va fi alocată o funcție) sau prea scurt (astfel încât este posibil să se apela direct).

Un exemplu simplu al unei aplicații acceptabile a unei abordări poate fi o buclă pentru forță, care poate să arate ca (int i = 0; i! = N; ++ i) <>. Un exemplu de cod care utilizează această buclă poate fi:

Codul bucla poate fi generat de următorul fragment (definind tipurile și numele variabilelor):

Mulți programatori folosesc adesea abordarea deoarece nu doresc să rescrie linia, care diferă de cea anterioară doar cu câteva simboluri (de exemplu, apelând o funcție pentru două obiecte similare ale căror nume diferă ușor). Duplicarea liniei anterioare (de asemenea, cu comenzi rapide de la tastatură) este mai rapidă decât rescrierea din nou. Dar probabilitatea de a face o greșeală nu scade [14]. în special pentru ultima linie [15].

Există un studiu [16]. îndreptată spre "dezincriminarea" programării prin metoda copy-paste - Limba de programare subtext. Trebuie remarcat faptul că în acest model copy-paste este modelul de bază al interacțiunii și, prin urmare, nu este considerat antipattern.







Articole similare

Trimiteți-le prietenilor: