Genbrug af kode - Code reuse

Genbrug af koder , også kaldet genbrug af software , er brugen af ​​eksisterende software eller softwareviden til at opbygge ny software efter genbrugsprincipperne .

Oversigt

Ad hoc- kode genbrug er blevet praktiseret fra de tidligste dage med programmering . Programmører har altid genbrugt sektioner med kode, skabeloner, funktioner og procedurer. Genanvendelse af software som et anerkendt studieområde inden for softwareteknik stammer dog kun fra 1968, da Douglas McIlroy fra Bell Laboratories foreslog at basere softwareindustrien på genanvendelige komponenter.

Kodegenbrug har til formål at spare tid og ressourcer og reducere redundans ved at udnytte aktiver, der allerede er oprettet i en eller anden form inden for softwareproduktudviklingsprocessen. Hovedideen ved genbrug er, at dele af et computerprogram, der er skrevet på én gang, kan eller skal bruges til konstruktionen af ​​andre programmer, der er skrevet på et senere tidspunkt.

Genbrug af koder kan antyde oprettelse af en separat vedligeholdt version af genbrugsaktiverne. Mens kode er den mest almindelige ressource, der vælges til genbrug, kan andre aktiver, der genereres under udviklingscyklussen, tilbyde muligheder for genbrug: softwarekomponenter, testpakker, designs, dokumentation osv.

Den software Biblioteket er et godt eksempel på genbrug af kode. Programmører kan beslutte at oprette interne abstraktioner, så visse dele af deres program kan genbruges, eller de kan oprette brugerdefinerede biblioteker til eget brug. Nogle egenskaber, der gør software lettere genanvendelig, er modularitet , løs kobling , høj samhørighed , skjult information og adskillelse af bekymringer .

For at nyskrevet kode skal bruge et stykke eksisterende kode , skal der defineres en form for interface eller kommunikationsmidler. Disse inkluderer almindeligvis et "opkald" eller anvendelse af en subrutine , objekt , klasse eller prototype . I organisationer formaliseres og standardiseres sådan praksis af domæneteknik , også kendt som software produktlinjeteknik .

Den generelle praksis med at bruge en tidligere version af et eksisterende program som udgangspunkt for den næste version er også en form for genbrug af kode.

Nogle såkaldte kode "genbrug" indebærer simpelthen at kopiere en del eller hele koden fra et eksisterende program til et nyt. Mens organisationer kan indse tid til at markedsføre fordele for et nyt produkt med denne tilgang, kan de efterfølgende sadles med mange af de samme kodedubletteringsproblemer forårsaget af klipning og indsæt programmering .

Mange forskere har arbejdet for at gøre genbrug hurtigere, lettere, mere systematisk og en integreret del af den normale programmeringsproces. Dette er nogle af hovedmålene bag opfindelsen af objektorienteret programmering , som blev en af ​​de mest almindelige former for formaliseret genbrug. En noget senere opfindelse er generisk programmering .

Et andet, nyere middel er at bruge software " generatorer ", programmer, der kan oprette nye programmer af en bestemt type, baseret på et sæt parametre, som brugerne vælger. Studieområder om sådanne systemer er generativ programmering og metaprogrammering .

Typer af genbrug

Med hensyn til motivation og kørselsfaktorer kan genbrug være:

  • Opportunistisk - Mens teamet gør sig klar til at starte et projekt, indser teamet, at der er eksisterende komponenter, som de kan genbruge.
  • Planlagt - Et team designer strategisk komponenter, så de kan genbruges i fremtidige projekter.

Genbrug kan kategoriseres yderligere:

  • Intern genbrug - Et team genbruger sine egne komponenter. Dette kan være en forretningsbeslutning, da teamet måske vil kontrollere en komponent, der er kritisk for projektet.
  • Ekstern genbrug - Et hold kan vælge at licensere en tredjepartskomponent. Licensering af en tredjepartskomponent koster typisk teamet 1 til 20 procent af, hvad det ville koste at udvikle internt. Teamet skal også overveje den tid det tager at finde, lære og integrere komponenten.

Med hensyn til form eller struktur for genbrug kan kode være:

  • Refereret - Klientkoden indeholder en henvisning til genbrugt kode, og de har således forskellige livscyklusser og kan have forskellige versioner.
  • Forked - Klientkoden indeholder en lokal eller privat kopi af den genbrugte kode, og de deler således en enkelt livscyklus og en enkelt version.

Gaffel-genbrug frarådes ofte, fordi det er en form for kodekopiering, som kræver, at enhver fejl rettes i hver kopi, og forbedringer, der foretages med genbrugt kode, skal flettes manuelt i hver kopi, ellers bliver de forældede. Gaffelgenbrug kan dog have fordele som isolering, fleksibilitet til at ændre den genbrugte kode, lettere emballage, implementering og versionstyring.

Systematisk

Systematisk genbrug af software er en strategi til at øge produktiviteten og forbedre kvaliteten af ​​softwareindustrien. Selvom det er enkelt i konceptet, er succesfuld implementering af software-genbrug vanskelig i praksis. En årsag til dette er afhængigheden af ​​genbrug af software på den kontekst, hvori det implementeres. Nogle problematiske problemer, der skal løses i forbindelse med systematisk genbrug af software, er:

  • en klar og veldefineret produktvision er et vigtigt fundament for en softwareproduktlinje (SPL).
  • en evolutionær implementeringsstrategi ville være en mere pragmatisk strategi for virksomheden.
  • der er behov for kontinuerlig ledelsessupport og ledelse for at sikre succes.
  • en passende organisationsstruktur er nødvendig for at understøtte SPL engineering.
  • tankegangen fra en projektcentreret virksomhed til en produktorienteret virksomhed er vigtig.

Eksempler

Softwarebiblioteker

Et meget almindeligt eksempel på genbrug af kode er teknikken til at bruge et softwarebibliotek . Mange almindelige operationer, såsom konvertering af information mellem forskellige velkendte formater, adgang til ekstern lagring, grænseflade med eksterne programmer eller manipulation af information (tal, ord, navne, placeringer, datoer osv.) På fælles måder er nødvendige af mange forskellige programmer. Forfattere af nye programmer kan bruge koden i et softwarebibliotek til at udføre disse opgaver i stedet for "at genopfinde hjulet" ved at skrive helt ny kode direkte i et program for at udføre en operation. Biblioteksimplementeringer har ofte fordelen ved at være velafprøvede og dække usædvanlige eller uklar sager. Ulemper inkluderer manglende evne til at finjustere detaljer, som kan påvirke ydeevne eller den ønskede output, og tid og omkostninger ved at erhverve, lære og konfigurere biblioteket.

Design mønstre

Et designmønster er en generel løsning på et tilbagevendende problem. Designmønstre er mere konceptuelle end håndgribelige og kan ændres for at passe til det nøjagtige behov. Imidlertid kan abstrakte klasser og grænseflader genbruges til at implementere visse mønstre.

Rammer

Udviklere genbruger generelt store stykker software via tredjepartsapplikationer og rammer. Skønt rammer normalt er domænespecifikke og kun gælder for applikationsfamilier.

Funktion med højere ordre

I funktionel programmering kan funktioner i højere orden bruges i mange tilfælde, hvor designmønstre eller rammer tidligere blev brugt.

Genberegning

Retrocomputing omfatter genbrug af kode, simpelthen fordi retro-programmer køres på ældre computere eller emulatorer til dem.

Computersikkerhed

I computersikkerhed bruges genbrug af kode som en metode til softwareudnyttelse. Når en hacker ikke er i stand til direkte at indtaste kode for at ændre kontrolflowet for et program, for eksempel i nærvær af kodeinjektionsforsvar, såsom W ^ X , kan han eller hun omdirigere kontrolflowet til kodesekvenser, der findes i hukommelsen.

Eksempler på kode-genbrugsangreb er return-to-libc-angreb , returorienteret programmering og springorienteret programmering.

Komponenter

En komponent repræsenterer i et objektorienteret omfang et sæt samarbejdsklasser (eller kun en klasse) og dets grænseflader. Grænsefladerne er ansvarlige for at muliggøre udskiftning af komponenter. Genanvendelige komponenter kan også isoleres og synkroniseres mellem SCM-lagre ved hjælp af komponentkildestyringsteknologier ( CSCM ).

Udenfor computere

Hele begrebet "genbrug af kode" kan også omfatte tekniske applikationer uden for software. For eksempel giver parametrisk modellering i computerstøttet design mulighed for at skabe genanvendelige designs. Standardisering resulterer i oprettelse af interoperable dele, som derefter kan genbruges i mange sammenhænge.

Kritik

Genbrug af koder resulterer i afhængighed af den komponent, der genbruges. Rob Pike mente, at "lidt kopiering er bedre end lidt afhængighed". Da han kom til Google , lagde virksomheden stor vægt på genbrug af koder. Han mener, at Googles codebase stadig lider under resultaterne af den tidligere politik med hensyn til kompileringshastighed og vedligeholdelse.

Se også

Referencer

eksterne links