Kód-újrafelhasználás

A Wikipédiából, a szabad enciklopédiából

A kód-újrafelhasználás, más néven szoftver-újrafelhasználás egy már meglévő szoftver vagy szoftverismeretek felhasználása új szoftver létrehozására, az újrafelhasználhatóság elveit követve.

Áttekintés[szerkesztés]

A kód újrafelhasználását a programozás kezdetétől kezdve gyakorolják. A programozók újrafelhasználták a kódrészleteket, sablonokat, funkciókat és eljárásokat. A szoftver újrafelhasználása mint a szoftverfejlesztés elismert tanulmányi területe azonban csak 1968-tól alkalmazott széles körben, mikor Douglas McIlroy a Bell Laborotoriesból azt javasolta, hogy a szoftveripart az újrafelhasználható komponensekre alapozzák.

A kód-újrafelhasználásnak a célja, az idő és erőforrások megtakarítása, valamint a redundancia csökkentése az eszközök által adott lehetőségek kiaknázása révén, melyeket a szoftver fejlesztés folyamatában már létrehoztak valamilyen formában.

A kód újrafelhasználhatósága az újrafelhasználható eszközök külön karbantartott verziójának létrehozását vonhatja maga után. Habár maga a kód a leggyakoribb erőforrás az újrafelhasználáshoz, a fejlesztési ciklus során előállított egyéb eszközök újbóli felhasználást kínálhatnak: szoftver-összetevők, tesztkészletek, tervek, dokumentációk és így tovább.

A szoftver könyvtár jó példa a kód újrafelhasználására. A programozók dönthetnek úgy, hogy belső absztrakciót hoznak létre annak érdekében, hogy programjaik egyes részeit újrafelhasználhassák, vagy létrehozhatnak egyedi könyvtárakat saját használatra. Néhány olyan jellemző, amely a szoftvert könnyebben újrafelhasználhatóvá teszi, a modularitás, a laza kapcsolat, a nagy összetartó erő, az információ elrejtése és az ügyek szétválasztása.

Ahhoz, hogy az újonnan írt kód létező kóddarabot használjon, meg kell határozni valamilyen interfészt vagy kommunikációs eszközt. Ez általában egy „meghívnak” egy alprogramot, objektumot, osztályt vagy prototípus felhasználást. A szervezetekben az ilyen gyakorlatokat formalizálják és szabványosítják a domain-tervezést, más néven szoftvertermék-tervezést.

Általánosságban az a gyakorlat, hogy a fennmaradó program korábbi verzióját használja a következő verzió kiindulópontjának, szintén a kód-újrafelhasználásnak egyik formája.

Néhány úgynevezett „kód-újrahasznosítás” szimplán azt jelenti, hogy lemásoljuk néhány részét, ha nem a teljes kódot egy mást meglévő kódból az újba. Míg cégek időt és pénzt nyerhetnek új projektek előállítása során ezzel a módszerrel, úgy ezután szembe kell nézzenek a sok másolási hibával, amit a "kivágás és beillesztés" alapú programozás okozott.

Sok kutató dolgozott rajta, hogy hogyan lehetne a kód újrafelhasználása könnyebb, gyorsabb még rendszerezettebb, valamint, hogyan lehetne beleépíteni ezt a szoftverfejlesztés folyamatába. Ez az OOP egyik fő célja, amely a formalizált újrafelhasználás egyik leggyakoribb formájává vált. Valamivel későbbi „találmány” a generikus programozás.

Egy másik újabb eszköz a „szoftvergenerátorok” használata, amelyek olyan programokat hozhatnak létre, amelyek egy bizonyos típusú, a felhasználók által választott paraméternek megfelelnek. Az ilyen rendszerek vizsgálati területei a generatív programozás és a metaprogramozás.

Az újrafelhasználhatóság fajtái[szerkesztés]

A motivációt és ösztönzést tekintve az újrafelhasználás lehet:

  • Opportunista: Míg a projekt elkezdésére készülnek, a csapat rájön, hogy vannak már létező komponensek amiket fel tudnak használni.
  • Tervezett: A csapat stratégiailag tervet olyan komponensekkel amiket fel fognak használni jövőbeli projektekre.

Az újrafelhasználás további kategóriája:

  • Belső újrafelhasználás: A csapat újra felhasználja a saját komponenseit. Ez lehet üzleti döntés, mivel a csapat szeretné a projekt tekintetében kritikus komponenseket maguk kontrollálni.
  • Külső újrafelhasználás: A csapat megvásárolhatja egy harmadik féltől származó komponens jogát(licencét). Egy harmadik féltől való licenc megvásárlása 1-től 20 százalékába kerülhet a komponenst belső fejlesztésének. A csapatnak figyelembe kell vennie a komponens megtaláláshoz, megtanulásához és felhasználásához szükséges időt.

Eldönteni az újrafelhasznált kód alakját és felépítését az alábbi módokon lehet:

  • Hivatkozott: A kliens kód tartalmaz egy hivatkozást az újrafelhasznált kódhoz, és így lehetnek különböző életciklusai és különböző verziói.
  • Villázott: A kliens kód tartalmat helyi vagy privát másolatot az újrafelhasznált kódról és így meg tudnak osztani egyetlen életciklust és egyetlen verziót.

A villás-újrafelhasználás általában nem ajánlott, mivel egy formája kód átfedésnek, amihez szükséges minden hiba kijavítása minden másolatban, és a fejlesztéseket az újrafelhasznált kódhoz kézzel kell egybeolvasztani minden másolatban, vagy különben elavultá válnak. Viszont a villás-újrafelhasználásnak lehetnek előnyei is mint például elkülönülés, a kód megváltoztatásához kellő rugalmasság, egyszerűbb csomagolás, felhasználás és karbantartás.

Szisztematikus újrafelhasználás[szerkesztés]

A szoftver szisztematikus újrafelhasználása a szoftveripar termelékenységének és a minőségének javítására irányuló stratégia. Bár a koncepció egyszerű, a szoftver sikeres újrafelhasználásának végrehajtása, a gyakorlatban nehéz. Ennek egyik oka az, hogy a szoftver újrahasznosítása attól függ, hogy mely környezetben valósul meg. Néhány problémás kérdés, melyeket szoftver szisztematikus újrahasználatával meg kell oldani:

  • egy tiszta és jól definiált üzleti elképzelés elengedhetetlen alapja az SPL-nek
  • egy evolúciós implementációs stratégia gyakorlatibb stratégia lenne a vállalat számára
  • szükség van folyamatos irányítási támogatásra és vezetésre a siker biztosítása érdekében
  • megfelelő szervezeti struktúrára van szükség az SPL tervezésének támogatásához
  • elengedhetetlen a gondolkodásmód megváltoztatás egy projektközpontú vallattról egy termékorientált vállaltra

Példák[szerkesztés]

Program könyvtárak[szerkesztés]

Egy nagyon elterjedt módja a kód újbóli felhasználásának a program könyvtárak használata. Sok általános műveletre van szükség, mint például adatok konvertálása a közismert formátumok között, külső tárolóhoz való hozzáférés, külső programokhoz való kapcsolódás vagy az információk (számok, szavak, nevek, helyek, dátumok stb.) manipulálására egy általános módon, ezeket sok program igényli. Az új programok szerzői felhasználhatják a szoftver könyvtárában található kódot ezeknek a feladatoknak a végrehajtására, ahelyett, hogy „újra feltalálnánk a kereket” és egy már meglévő modult írnának meg újra. A könyvtári megvalósítások gyakran azzal az előnnyel járnak, hogy jól teszteltek, és kiterjednek a szokatlan vagy különös esetekre is. A hátrányokhoz tartozik a részletek megváltoztatásának lehetetlensége, ami kihatással lehet a teljesítményre vagy az elvárt végkimenetelre, és a könyvtár elsajátításához, megtanulásához és konfigurálásához szükséges időre és költségre.

Tervezési minták[szerkesztés]

A tervezési minták egy általános megoldások az ismétlődő problémákra. A tervezési minták inkább elviek mintsem megfoghatóak, és a pontos igényekhez szabhatjuk őket. Az absztrakt osztályok és interfészek azonban újra felhasználhatók bizonyos minták megvalósításához.

Keretrendszerek[szerkesztés]

A fejlesztők általában nagyméretű szoftvereket használnak harmadik féltől származó alkalmazások és keretek révén. Bár a keretek általában domain-specifikusak és csak az alkalmazások családjára vonatkoznak.

Higher-order function[szerkesztés]

A funkcionális programozásban a magasabb rendű funkciók sok esetben felhasználhatók, ahol korábban tervezési mintákat vagy keretrendszereket használtak.

Retrocomputing[szerkesztés]

A retrocomputing magában foglalja a kód újrahasználatát, egyszerűen azért, mert a retro programokat régebbi számítógépeken vagy emulátorokon futtatják.

Számítógép biztonság[szerkesztés]

A számítógépes biztonsági rendszerekben a programkód újrafelhasználását szoftverkihasználási módszerként használják. Ha a támadó nem képes közvetlenül kódot bevinni egy program vezérlési folyamatának módosítására, például olyan kódinjekciós védelem esetén, mint például olyan kódinjekciós védelem esetén, mint a W ⊕ X, akkor a vezérlőáramot átirányíthatja a memóriában lévő kódszekvenciára.

Komponensek[szerkesztés]

A komponens, egy objektumorientált kiterjedésben, egy adag kollaboratív osztály (vagy csak egy osztály) és azok interfészeit képviseli. Az interfészek felelősek a komponensek kicserélésének engedélyezéséért. Újrafelhasználható komponensek lehetnek izoláltak és szinkronizáltak SCM repozitorik között amik komponens forráskód-karbantartó technológiákat használnak.

A számítógépeken túl[szerkesztés]

A teljes koncepciója a "Kód újrafelhasználásnak" felölelhet mérnöki alkalmazásokat a szoftvereken kívül. Például: paraméteres modellezés számítógéppel segített tervezésben lehetővé teszi újrafelhasználható tervek készítését. A szabványosítás lehetőséget nyújt interoperábilis alkatrészek létrehozására, amik ezután több kontextusban is újra felhasználhatóak.

Kritika[szerkesztés]

A kód újrafelhasználása függ a kód újrafelhasználásától. Rob Pike úgy vélekedett, hogy "Egy kis másolás jobb, mint egy kis függőség." Amikor csatlakozott a Google-hoz, a cég nagy hangsúlyt fektetett a kód újrafelhasználására. Ő azt vallotta, hogy a Google kódtára még mindig szenved ennek a régi vezérelvnek a végeredményétől összeállítási sebesség és karbantarthatóság tekintetében.

Jegyzetek[szerkesztés]

További információk[szerkesztés]