Bővíthetőség

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

A bővíthetőség egy szoftverfejlesztési és rendszertervezési alapelv, amely biztosítja a jövőbeli növekedést. A bővíthetőség a rendszer kibővítési képességének és a kibővítéshez szükséges erőfeszítésnek a mértéke. A bővítések új funkciók hozzáadásával vagy a meglévő funkciók módosításával történhetnek. Az elv biztosítja a további fejlesztéseket anélkül, hogy a meglévő rendszerfunkciók károsodnának.

Egy kibővíthető rendszer belső struktúráját és adatáramlását minimálisan vagy egyáltalán nem befolyásolják az új és a módosított funkciók. Például az eredeti forráskód újrafordítása vagy megváltoztatása szükségtelen lehet a rendszer viselkedésének megváltoztatásához a programozók által.[1] Mivel a szoftverek hosszú életűek, és a felhasználó kérésére történnek benne változások az új funkciók hozzáadásával, a kibővíthetőség megengedi a fejlesztőnek a szoftver adottságainak kibővítését és megkönnyíti a szisztematikus újrahasznosítását. Néhány megközelítés magában foglalja a felhasználók saját programrutinjainak beillesztési lehetőségeit, valamint képességeket definiál az új adattípusok meghatározására és az új formázási jelölő címkék meghatározására.[2]

Kiterjeszthető tervezés[szerkesztés]

A szoftverfejlesztés kiterjeszthető tervezése az, hogy elfogadjuk, nem lehet mindent előre megtervezni. Ehelyett egy könnyű szoftverkeretet biztosít, amely lehetővé teszi a változtatásokat. Kisméretű parancsok készülnek annak elkerülése érdekében, hogy elveszítsék a kiterjeszthetőség elemét, követve azt az elvet, hogy a munkaelemeket érthető egységekre bontják, annak érdekében, hogy elkerülhetőek legyenek a hagyományos szoftverfejlesztési kérdések, ideértve az alacsony kohéziót és a nagy összekapcsolódást, valamint lehetővé tegyék a folyamatos fejlesztést. Az átfogó változás elengedhetetlen a kiterjeszthető formatervezéshez, amelyben a kiegészítések folyamatosak lesznek. A rendszer minden egyes darabja módosítható lesz minden változással, és a kiegészítés révén történő változtatás ötlete a teljes rendszer tervezésének központját képezi majd. A kibővíthető kialakítás támogatja a gyakori újrapriorizálást, és lehetővé teszi a funkcionalitás igény szerinti kis lépésekben történő megvalósítását, amelyeket az agilis módszertan és az iteratív fejlesztés támogat. A kiterjeszthetőség kevesebb és tisztább függőséget eredményez a fejlesztés során, továbbá csökkenti a koherensebb absztrakciókat, valamint jól definiált interfészeket biztosít.[3]

Fontosság[szerkesztés]

A rugalmasság az összes jelenlegi szoftver alapját képezi az új elvárások miatt, mivel a szoftver egy „fejlődő entitás”, amelyet az emberek fejlesztenek és karbantartanak, folyamatos rendszer-változásokat eredményeznek a szoftver specifikációjában és megvalósításában. A szoftver összetevőit gyakran független felek fejlesztik és telepítik. Az adaptálható szoftverösszetevőkre szükség van, mivel a külső gyártók alkatrészei valószínűleg nem illeszkednek egy speciális telepítési forgatókönyvhöz, a gyártótól eltérő harmadik fél felhasználókat figyelembe véve. Számos szoftverrendszer és szoftvertermék egy olyan alaprendszerből származik, amelyeknek közös szoftverarchitektúrája van, vagy néha a funkcionalitás és a megvalósítás nagy részei, de valószínűleg különféle alkatrészekkel vannak felszerelve, amelyek bővíthető alaprendszert igényelnek.[4]

Fontos kihívás az önállóan bővíthető szoftverrendszerek építése. Az önállóan bővíthető rendszer nemcsak lehetővé teszi két ember számára, hogy a rendszer kiterjesztéseit önállóan fejlessze, hanem lehetővé teszi a két kiterjesztés kombinálását is a globális integritás ellenőrzése nélkül.[5]

Kiterjeszthetőségi mechanizmusok osztályozása[szerkesztés]

A szoftver kiterjesztésének három különböző formája létezik: a white-box, a grey-box és a black-box kiterjeszthetőség, amelyek attól függnek, hogy mit valósítanak meg és hogyan változnak meg.

Fehérdobozos (white-box)[szerkesztés]

Ennek a kiterjeszthetőségnek a formájában a szoftverrendszert a forráskód módosításával lehet kibővíteni, és ez a legrugalmasabb és a legkevésbé korlátozó forma. A kiterjesztésnek két alformája létezik: nyitott doboz (open-box) kiterjesztés és az üvegdoboz (glass-box) kiterjesztés, a változások alkalmazásától függően.

Nyitott dobozos (open-box)[szerkesztés]

A változtatásokat invazív módon hajtják végre nyitott dobozos bővíthető rendszerekben, azaz az eredeti forráskódot közvetlenül beteszik. Szükséges a rendelkezésre álló forráskód és a módosított engedélyezett forráskódlicenc. A nyitott doboz kibővíthetősége a legfontosabb a hibajavítás, a belső kód refaktorálása vagy a szoftvertermék következő verziójának előállítása során.

Üvegdobozos (glass-box)[szerkesztés]

Az üvegdoboz bővíthetősége (más néven építészeti alapú keretek) lehetővé teszi a szoftverrendszer kibővítését a rendelkezésre álló forráskóddal, de előfordulhat, hogy nem engedélyezi a kód módosítását. A kiterjesztéseket el kell választani az eredeti rendszertől oly módon, hogy az ne érintse az eredeti rendszert. A kiterjeszthetőség ilyen formájának egyik példája az objektumorientált alkalmazási keretek, amelyek általában az öröklés és a dinamikus kötés használatával érik el a kiterjeszthetőséget.

Feketedobozos (black-box)[szerkesztés]

A feketedoboz kiterjesztésében (más néven adatvezérelt keretként) a rendszer megvalósításának részleteit nem használják a telepítések vagy bővítmények megvalósításához, csak az interfészspecifikációk biztosítottak. Az ilyen típusú megközelítés korlátozottabb, mint a különféle white-box megközelítések. A feketedoboz kiterjesztéseket rendszerint rendszer-konfigurációs alkalmazásokkal vagy alkalmazásspecifikus szkriptnyelvek használatával érik el az összetevők interfészeinek meghatározását.

Szürkedobozos (gray-box)[szerkesztés]

A szürkedoboz kiterjeszthetősége kompromisszum a tisztafehérdoboz és a tisztafeketedoboz megközelítés között, amely nem támaszkodik teljesen a forráskód expozíciójára. A programozók megkaphatnák a rendszer specializációs felületét, amely felsorolja az összes finomításra szolgáló absztrakciót és a kiterjesztések fejlesztésének módját.[6]

Kiterjeszthetőség vs. újrahasználhatóság[szerkesztés]

A kiterjeszthetőségnek és az újrafelhasználhatóságnak számos hangsúlyos tulajdonsága van, köztük az alacsony kapcsolhatóság, a modularitás és a magas kockázatú elemek építési képessége sok különböző szoftverrendszer számára, amelyet a gyakran közös elemeket megosztó szoftverrendszerek megfigyelése motivál. Az újrafelhasználhatóság és a kiterjeszthetőség lehetővé teszi egy technológia átvitelét egy másik projektbe, kevesebb fejlesztési és karbantartási idővel, valamint fokozott megbízhatósággal és következetességgel.[7]

Biztonság[szerkesztés]

A modern operációs rendszerek eszközmeghajtók és betölthető kernelmodulok révén támogatják a bővíthetőséget. Számos modern alkalmazás támogatja a bővíthetőséget plug-inek, kiterjesztési nyelvek, appletek stb. révén. a bővíthetőség növekedése negatív hatással van a szoftver biztonságára.[8]

A CGI az egyik elsődleges eszköz, amellyel a webszerverek kibővíthetőségét segítik. Viszont vannak, akik úgy gondolják, hogy a CGI-szkriptek "óriási biztonsági lyukat" eredményeznek.[9]

Források[szerkesztés]

  1. Johansson, Niklas, and Anton Löfgren. Designing for Extensibility: An Action Research Study of Maximizing Extensibility by Means of Design Principles. N.p.: n.p., n.d. University of Gothenburg Department of Applied Information Technology, 29 May 2009. Web. 26 Apr. 2014. https://gupea.ub.gu.se/bitstream/2077/20561/1/gupea_2077_20561_1.pdf
  2. Rouse, Margaret. "Extensible." SearchSAO. N.p., Mar. 2007. Web. 27 Apr. 2014. http://searchsoa.techtarget.com/definition/extensible Archiválva 2016. december 6-i dátummal a Wayback Machine-ben
  3. Kelly, Allan. "The Philosophy of Extensible Software." ACCU-Professionalism in Programming (2002): Web. 27 Apr. 2014. http://accu.org/index.php/journals/391
  4. Zenger, Matthias. "1.2 Characteristics of Extensibility Mechanisms." Programming Language Abstractions for Extensible Software Components. Lausanne: Swiss Federal Institute of Technology, 2004. N. pag. Web. 26 Apr. 2014. http://zenger.org/papers/thesis.pdf
  5. Martin Rytter and Bo Nørregaard Jørgensen. "Independently Extensible Contexts". Published in https://books.google.hu/books?id=z89qCQAAQBAJ&redir_esc=y 2010. p. 327.
  6. Zenger, Matthias. "1.3 Classification of Extensibility Mechanisms." Programming Language Abstractions for Extensible Software Components. Lausanne: Swiss Federal Institute of Technology, 2004. N. pag. Web. 26 Apr. 2014.
  7. Zenger, Matthias. "1.1.1 Reusability." Programming Language Abstractions for Extensible Software Components. Lausanne: Swiss Federal Institute of Technology, 2004. N. pag. Web. 26 Apr. 2014.
  8. Gary McGraw."Software Security: Building Security in". 2006. p. 9. https://books.google.hu/books?id=HCQdypbpZXgC&redir_esc=y
  9. Len Bass, Paul Clements, Rick Kazman. "Software Architecture in Practice". 2003. p. 339. https://books.google.hu/books?id=mdiIu8Kk1WMC&redir_esc=y

Fordítás[szerkesztés]

Ez a szócikk részben vagy egészben az Extensibility című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.