Kopioi ja liitä ohjelmointi - Copy-and-paste programming

Kopioi ja liitä-ohjelmointi , jota joskus kutsutaan vain liittämiseksi , on erittäin toistuvien tietokoneohjelmointikoodien tuottaminen, joka on tuotettu kopiointi- ja liittämistoiminnoilla . Se on pääasiassa pejoratiivinen termi; termiä käyttävät viittaavat usein ohjelmointitaidon puutteeseen. Se voi johtua myös tekniikan rajoituksista (esim. Riittämätön ilmeikäs kehitysympäristö), koska niiden sijaan normaalisti käytettäisiin aliohjelmia tai kirjastoja. On kuitenkin olemassa tilanteita, jolloin copy-ja-liitä ohjelmointi pidetään hyväksyttävänä tai tarpeellista, kuten pohjatekstiä , silmukka kääritään auki (kun ei tue automaattisesti kääntäjä), tai tiettyjä ohjelmia sanontojen, ja se tukee joitakin lähdekoodin toimittajat sisään katkelmien muodossa .

Alkuperä

Kopioi ja liitä-ohjelmoinnin tekevät usein kokematon tai opiskelija-ohjelmoija, jonka mielestä koodin kirjoittaminen alusta alkaen on vaikeaa tai ärsyttävää ja haluavat etsiä ennalta kirjoitettua ratkaisua tai osittaista ratkaisua, jota he voivat käyttää perustana omalle ongelmalleen. ratkaiseminen. (Katso myös rahtikultin ohjelmointi )

Kokemattomat ohjelmoijat, jotka kopioivat koodia, eivät usein ymmärrä täysin ennalta kirjoitettua koodia. Sellaisena ongelma syntyy enemmän heidän kokemattomuudesta ja rohkeuden puutteesta ohjelmoinnissa kuin kopioimisesta ja liittämisestä sinänsä. Koodi tulee usein erilaisista lähteistä, kuten ystävien tai työtovereiden koodista, Internet-foorumeista , opiskelijan professoreiden / teknisten asiantuntijoiden tarjoamasta koodista tai tietojenkäsittelytieteen oppikirjoista. Tulos voi olla erillinen tyylien yhteenotto, ja sillä voi olla tarpeeton koodi, joka käsittelee ongelmia, joihin uusia ratkaisuja ei enää tarvita.

Lisäongelma on, että virheitä voidaan helposti tuoda esille erillisissä lähteissä tehdyillä oletuksilla ja suunnitteluvalinnoilla, jotka eivät enää sovellu uuteen ympäristöön.

Tällainen koodi voi myös itse asiassa olla tahattomasti hämärtynyt , koska muuttujien, luokkien, funktioiden ja vastaavien nimet jätetään tyypillisesti muuttumattomiksi, vaikka niiden tarkoitus voi olla täysin erilainen uudessa tilanteessa.

Kopioi ja liitä-ohjelmointi voi myös olla seurausta huonosta tietämyksestä tietokonekielillä yleisistä ominaisuuksista, kuten silmukkarakenteista, toiminnoista ja aliohjelmista.

Kopiointi

Image
Toistuva koodi uudistetaan käyttämällä abstraktiomekanismia , kuten toiminto .

Kirjastokoodia käytetään

Kopioinnin ja liittämisen tekevät myös kokeneet ohjelmoijat, joilla on usein omat kirjastot hyvin testatuista, käyttövalmiista koodinpätkistä ja yleisistä algoritmeista, jotka on helppo mukauttaa tiettyihin tehtäviin.

Koodin kopioinnin muodossa kopiointi ja liittäminen-ohjelmoinnilla on joitain sisäisiä ongelmia; tällaiset ongelmat pahenevat, jos koodi ei säilytä mitään semanttista linkkiä lähdetekstin ja kopioiden välillä. Tässä tapauksessa, jos muutoksia tarvitaan, aika tuhlataan kaikkien kaksoiskohteiden metsästyksessä. (Tätä voidaan lieventää osittain, jos alkuperäistä koodia ja / tai kopiota kommentoidaan asianmukaisesti; silloinkin ongelmana on kuitenkin samat muokkaukset useita kertoja. Koska koodin ylläpito jättää usein kommenttien päivittämisen huomiotta, kommentit, joissa kuvataan, mistä löytää etäkoodikoodit ovat tunnetusti vanhentuneita.)

Kannattajia olio menetelmiä edelleen vastustaa "koodikirjaston" käyttöä kopioi ja liitä. Kohdekeskeinen lähestymistapa abstraktioisi algoritmin uudelleenkäytettäväksi kapseloiduksi luokaksi sen sijaan, että se tekisi useita mutatoituja kopioita yleisestä algoritmista . Luokka kirjoitetaan joustavasti, perimisen ja ylikuormituksen täydellä tuella , jotta kaikki kutsukoodit voidaan liittää käyttämään tätä yleistä koodia suoraan sen sijaan, että mutatoitaisiin alkuperäinen. Koska lisätoimintoja tarvitaan, kirjastoa laajennetaan (säilyttäen taaksepäin yhteensopivuus ). Jos alkuperäisessä algoritmissa on korjattavissa oleva vika tai sitä voidaan parantaa, kaikki sitä käyttävät ohjelmistot ovat hyödyllisiä.

Haaroituskoodi

Haarakoodi on normaali osa suuren joukkueen ohjelmistokehitystä, joka mahdollistaa rinnakkaisen kehityksen molemmilla haaroilla ja siten lyhyemmät kehitysjaksot. Klassisella haarautumisella on seuraavat ominaisuudet:

Kopiointi ja liittäminen on vähemmän muodollinen vaihtoehto klassiselle haarautumiselle, jota käytetään usein silloin, kun haarojen ennakoidaan vaihtelevan enemmän ja enemmän ajan myötä, kuten kun uutta tuotetta kehrätään olemassa olevasta tuotteesta.

Kopioimis- ja liittämisohjelmoinnilla on joitain etuja uuden tuotteen kehräämiseksi. Koska uusi kehityshanke ei koske nykyisen tuotteen koodia:

  • Olemassa olevan tuotteen regressiotestausta ei tarvitse tehdä , mikä säästää uuden tuotteen lanseeraukseen liittyvää laadunvalvonta-aikaa ja vähentää markkinoille tuloaikaa .
  • Olemassa olevassa tuotteessa ei ole vaaraa käyttöönotetuista virheistä, jotka saattavat häiritä asennettua käyttäjäkantaa.

Haittoja ovat:

  • Jos uusi tuote ei poikkea niin paljon kuin odotettiin olemassa olevasta tuotteesta, saatetaan joutua tukemaan kahta koodipohjaa (kaksinkertaiseen hintaan), jos yksi olisi tehnyt. Tämä voi johtaa kalliin refaktorointiin ja manuaaliseen sulautumiseen.
  • Kahtena koodi emäs kaksinkertaistaa aika, joka tarvitaan muutosten toteuttamiseksi, joka voi olla haluttu molemmissa tuotteissa; tämä pidentää markkinoiden saapumisaikaa tällaisille muutoksille ja voi itse asiassa pyyhkiä kaikki haaran, joka saavutetaan haaroittamalla koodi ensin.

Kuten edellä, vaihtoehto copy-and-paste-lähestymistavalle olisi modulaarinen lähestymistapa:

  • Aloita jakamalla koodi, jonka molemmat tuotteet jakavat kirjastoihin.
  • Käytä näitä kirjastoja (koodikannan toisen kopion sijaan) uuden tuotteen kehityksen perustana.
  • Jos tuotteen kolmannen, neljännen tai viidennen version suunnitellaan olevan linjassa, tämä lähestymistapa on paljon vahvempi, koska valmiit koodikirjastot lyhentävät dramaattisesti muiden tuotteiden kehityksen elinkaarta toisen jälkeen.

Toistuvat tehtävät tai tehtävän muunnelmat

Image
Vaikeus ja riski ylläpitää copy-paste-ohjelmoinnilla kirjoitettua koodia

Yksi haitallisimmista kopioi ja liitä-ohjelmoinnin muodoista esiintyy koodissa, joka suorittaa toistuvan tehtävän, tai saman perustehtävän muunnelmista riippuen joistakin muuttujista. Jokainen instanssi kopioidaan ylhäältä ja liitetään uudelleen pienillä muutoksilla. Haitallisia vaikutuksia ovat:

  • Kopioi ja liitä -lähestymistapa johtaa usein suuriin menetelmiin (huono koodihaju ).
  • Jokainen esiintymä luo koodikopion, jossa kaikki ongelmat on käsitelty edellisissä osioissa, mutta paljon laajemmalla. Useita päällekkäisyyksiä ovat yleisiä; satoja on mahdollista. Erityisesti virhekorjauksista tulee erittäin vaikeita ja kalliita tällaisessa koodissa.
  • Tällainen koodi kärsii myös merkittävistä luettavuusongelmista, koska on vaikea havaita tarkalleen, mikä eroaa jokaisen toiston välillä. Tällä on suora vaikutus koodin tarkistamisen riskeihin ja kustannuksiin.
  • Menettelyyn ohjelmoinnin malli haittaa selvästi kopio-ja-liitä lähestymistapa toistuvia tehtäviä. Menettelymallin mukaan ensisijainen lähestymistapa toistuviin tehtäviin on luoda funktio tai aliohjelma, joka suorittaa yhden läpikäynnin tehtävän läpi; tätä aliohjelmaa kutsutaan sitten vanhemman rutiinina joko toistuvasti tai vielä paremmalla tavalla jonkinlaisella silmukointirakenteella. Tällaista koodia kutsutaan "hyvin hajoavaksi", ja sitä suositellaan helpommin luettavaksi ja helpommin laajennettavaksi.
  • Yleistä nyrkkisääntö soveltaa tässä tapauksessa " älä toista itseäsi ".

Tarkoitettu suunnitteluvalinta

Kopioi ja liitä -ohjelmointi hyväksytään toisinaan kelvollisena ohjelmointitekniikkana. Tämä näkyy yleisimmin kattilapohjassa, kuten luokkailmoituksissa tai vakiokirjastojen tuonnissa, tai olemassa olevan koodimallin (tyhjällä sisällöllä tai tynkätoiminnoilla) käyttämisessä kehyksenä täytettäväksi.

Ohjelmointidionien ja suunnittelumallien käyttö on samanlainen kuin kopioi ja liitä-ohjelmointi, koska niissä käytetään myös kaavakoodia. Joissakin tapauksissa tämä voidaan ilmaista katkelmana , joka voidaan liittää tarvittaessa, kun tällainen koodi on välttämätön, vaikka se muistetaan usein yksinkertaisesti ohjelmoijan mielestä. Muissa tapauksissa idiomeja ei voida vähentää koodimalliksi. Useimmissa tapauksissa, vaikka idioomi voidaan supistaa koodiksi, se on joko riittävän pitkä, jotta se voidaan tiivistää funktioksi, tai tarpeeksi lyhyt, jotta se voidaan näppäillä suoraan.

Subtext ohjelmointikieli on tutkimushanke, jonka tavoitteena on "dekriminalisoinnista" leikkaa ja liimaa. Tämän kielen käyttäminen leikkaa ja liitä on ensisijainen vuorovaikutusmalli, eikä sitä siksi pidetä anti-mallina.

Esimerkki

Yksinkertainen esimerkki on for for -silmukka, joka voidaan ilmaista muodossa . for (int i=0; i!=n; ++i) {}

Esimerkkikoodi, joka käyttää tällaista for-loopia, voi olla:

void foo(int n) {
    for (int i=0; i!=n; ++i) {
       /* body */
    }
}

Tällöin silmukakoodi olisi voitu luoda seuraavalla katkelmalla (määrittelemällä tyypit ja muuttujien nimet):

    for ($type $loop_var = 0; $loop_var != $stop; ++$loop_var) {
        /* body */
    }

Katso myös

Viitteet

Ulkoiset linkit