WEBALKALMAZÁSOK MODELLVEZÉRELT KÉSZÍTÉSE MODEL-DRIVEN APPROACH OF THE DEVELOPMENT OF WEB APPLICATIONS Kollár Lajos Debreceni Egyetem, Informatikai Kar, Információ Technológia Tanszék Összefoglaló A webalkalmazások esetében a hagyományos szoftverfejlesztési életciklus némiképpen módosul. Az elosztott, heterogén működési környezet, a felhasználók sokfélesége, az általuk létrehozott közös "információs tér" kezelésének, újrafelhasználhatóságának, valamint a különböző eszközökről történő hozzáférés biztosításának igénye szintén mind-mind új kihívások elé állítják a fejlesztőket. A fejlesztésre rendelkezésre álló idő drasztikusan lecsökkent, így új megoldásokra van szükség ahhoz, hogy tartani lehessen a lépést a gyorsan változó követelményekkel a rohamosan fejlődő technológiák útvesztőjében. A modellvezérelt megközelítés alkalmazása több előnyt is biztosít, amelyek megkönnyítik az alkalmazásfejlesztés folyamatát: az alkalmazás tervét leíró modellekből gyorsan lehet működő (bár nem feltétlenül teljes funkcionalitással bíró) prototípusokat generálni, amely a megrendelőkkel történő kapcsolattartásban is nagy segítséget nyújthatnak, illetve ezen modellek alapjául szolgálhatnak modellellenőrzéseknek, valamint megfelelő modellmetrikák kialakítása esetén akár statisztikai alapú minőségvizsgálatnak is. Előadásomban bemutatom, hogy hol tart ma a kutatási terület, hogyan zajlik a gyakorlatban egy ilyen modellvezérelt tervezési/fejlesztési folyamat (UML2 és XML alapokon), illetve kitekintést nyújtok az esetleges további kutatási irányokra is. Kulcsszavak Web Engineering, XML, XForms, MDA Abstract The traditional software development lifecycle cannot be applied directly to Web applications. The distributed, heterogeneous operational environment, high diversity of users, the need for providing the creation, manipulation and reusability of their common information space, and the permit of accessing the system using various devices bring developers to subsequent challenges. The available time for development has been dramatically reduced so there is a need for new solutions in order to be in steps with the rapidly changing requirements in the maze of the growing technologies. Applying a model-driven approach to development has several advantages: besides they ease the development process, rapid prototypes of applications can be generated that might be not fully functional but could play an important role in the communication among various stakeholders, especially between the development team and the future users. Furthermore, these prototypes might be starting points for model checking or statistics-based quality control in case of the development of appropriate model metrics. Keywords Web Engineering, XML, XForms, MDA 1
1. Bevezetés Az adatintenzív webalkalmazások amelyek feldolgozási idejük nagy részében adatkezelést végeznek az utóbbi években mindennapjaink részévé váltak. Számtalan ilyen alkalmazás jelent meg a világhálón: webáruházak, on-line jegyfoglaló rendszerek, stb. Ezeket emberek milliói használják a világ legkülönbözőbb pontjain. Ezen rendszerek építése során igen sok esetben a munka kezdetekor eldől a célplatform, valamint meghatározásra kerülnek azok a technológiák, amelyek segítségével a fejlesztés zajlik (ezek ráadásul igen gyakran platformfüggő megoldások). A fejlesztés befejeztével, az üzembe állítás után azonban előfordulhat, hogy alkalmazásunk kinövi az eredetileg tervezett kereteket. 1.1. Problémák Ilyenkor azzal a problémával találhatjuk magunkat szemben, hogy jó esetben hosszú évekre tervezett rendszerünk könnyen skálázhatósága érdekében a költségvetési szempontok figyelembe vételével esetleg platformot kellene váltani, amely akár az egész alkalmazás átírását is magával vonhatja. Szerencsésebb esetben a platformcsere szükségessége nélkül is megtörténhet, hogy az egyes alkalmazott technológiák eltűnnek a technológiai süllyesztőben, vagyis új, a korábbiakkal nem, vagy csak részben kompatibilis technológiák kerülnek előtérbe. Ez több problémát is felvet: egyrészt, a kifutó megoldások támogatása egy idő után megszűnhet, másrészt, a fejlesztőcsapatban tapasztalható fluktuáció, valamint a technológiák változásának sebessége együttesen azt okozhatja, hogy az újabb kollégák nem ismerik a régi technológiákat, amely nagymértékben megnehezíti az esetleges továbbfejlesztést. (Arról nem beszélve, hogy az újabb technológiák sok esetben hatékonyabb munkavégzést tennének lehetővé, tehát ebből a szempontból sem volna célszerű a régebbiekhez történő ragaszkodás.) 2. Követelmények Egy korszerű és időtálló tervezési/fejlesztési folyamatnak az alábbi irányelvek szerint kell(ene) elkészülnie. Mindez persze nem jelenti azt, hogy ezen elvek együttes alkalmazása nélkül ne lehetne jó rendszert készíteni, azonban a későbbi könnyebb módosíthatóság szempontjából ezek mind fontosak. 2.1. MVC Az 1.1 szakaszban említett problémák kiküszöbölése érdekében a tervezési folyamat során nagy hangsúlyt kell fektetni az adatok (vagyis a tartalom), az üzleti logika, valamint a megjelenítés különválasztására, amely lehetővé teszi ezen komponensek újrafelhasználását. Ez a jól ismert Model View Controller architekturális minta (Burbeck, 1992), amely azonban önmagában nem ad választ a fenti problémákra, hiszen egy adott platform egy adott technológiája esetén is alkalmazható (és alkalmazandó) módszer. 2.2. Modellvezérelt fejlesztés A modellvezérelt fejlesztés (Schmidt, 2006) legfontosabb alapvetése, hogy a tervezési/fejlesztési folyamatot különböző absztrakciós szintű modellek sorozatának előállításaként tekintjük. Ezek a modellek egymástól az általuk hordozott platforminformációkban térnek el. Elsőként az üzleti elemzők létrehoznak egy gépfüggetlen 2
modellt (Computational Independent Model, CIM), amely az üzleti logikát számítógéptől függetlenül reprezentálja, és ekképpen nem hordoz platforminformációt. Ennek alapján egy rendszerépítő előállítja azt a platformfüggetlen modellt (Platform Independent Model, PIM), amely az általános szoftverarchitektúrát írja le (ez lehet például egy szolgáltatásorientált architektúra is). Ez lesz majd az alapja a platformspecifikus modellre (Platform Specific Model, PSM) történő transzformációnak. A PSM-nek már minden, a telepíthető szoftverrendszer leírásához szükséges információt tartalmaznia kell. Végül kód és egyéb termékek generálása segítségével juthatunk a futtatható rendszerhez. Ez egy igen rugalmas, könnyen bővíthető architektúrát biztosít számunkra, hiszen egy-egy újabb technológiai platform megjelenése esetén az adott célplatformnak megfelelő PIM PSM és PSM kód transzformációkkal kell kibővítenünk a rendszert. 2.3. Szolgáltatásorientált architektúra Az egyes üzleti (rész)folyamatokat szolgáltatásokként kell tekinteni és megvalósítani. Ez egyrészt biztosítja a komponensek újrafelhasználhatóságának lehetőségét, másrészről pedig megengedi, hogy az egyes részfolyamatok akár különböző nyelveken íródjanak. Az ily módon létrejött szolgáltatásokból aztán egyre komplexebb szolgáltatások építhetők össze (Erl, 2008). Az üzleti logika leírására egy külön erre a célra kialakított szakterület-specifikus nyelv (Domain-Specific Language, DSL) segítségét vehetjük igénybe (Fowler, 2008). Egy ilyen nyelv a modellvezérelt fejlesztés terminológiája szerint a metamodellnek felel meg (hiszen segítségével az alkalmazásunk szakterületi modelljét adjuk meg), ezen nyelv nyelvtana pedig a meta-metamodell szerepét játssza. 2.4. Ontológia alapú szoftverfejlesztés Az újrafelhasználhatóságnak sok esetben egyik legnagyobb gátja az, hogy a már rendelkezésre álló komponensek között nehéz keresni: a rendelkezésre álló komponenstárakban gyakran csak kulcsszavak alapján lehet keresni, és az egyes szolgáltatások (leggyakrabban természetes nyelvi) leírásából sem derül ki pontosan, hogy az adott komponens megfelel-e az adott célnak, amely miatt fel szeretnénk használni. Ontológiák segítségével megfelelően dokumentálva az egyes komponenseket, lehetőség nyílik a szemantikus keresésre is. Az ontológiák szoftverfejlesztésben betöltött további potenciális szerepeiről bővebben (Happel, Seedorf, 2006) ír. 3. Szükségletek Mi mindenre van szükség egy, a fentebb felvázolt összetevőkből álló tervezési/fejlesztési folyamat előállításához? 3.1. Modellfajták A webalkalmazások tervezése során a CIM elkészítése után az alábbi modellek létrehozására van szükség: Szerkezeti modell, amely a szakterületi fogalmak objektumait és a közöttük lévő strukturális kapcsolatokat írja le; Navigációs modell, amely a webalkalmazás hálószerű szerkezetét hivatott reprezentálni; 3
Komponens modell, amelyben a funkcionálisan összetartozó fogalmakat reprezentáló osztályok nagyobb (újrafelhasználható ill. lecserélhető) logikai egységbe szervezését írja le; Megjelenítési modell, amely a felhasználói felület egy absztrakciója, és elemei kapcsolatban állnak a megjelenítendő komponensekkel. Minderről bővebb felvilágosítást (Adamkó, Kollár, 2008) nyújt. 3.2. Nyelvek A modellek leírásához szükségünk van egy modellező nyelvre: az UML igen elterjedt, és különféle diagramtípusaival az alkalmazást különböző szempontok szerint (pl. statikus és dinamikus modell) is leírhatjuk. Azonban az UML-lel kapcsolatban nem kerülhetünk meg egy igen fontos problémát: a benne leírt modellek gyakran csak informálisak, ráadásul sok esetben hiányosak. Ezek alapján pedig nehéz generálást végezni. Éppen ezért van szükség a 2.3 szakaszban leírtak szerint a szakterületi nyelv pontos definiálására, hiszen ekkor az abban megfogalmazott szakterületi modell (az MDA terminológiája szerint CIM) az összes lényeges és szükséges fogalmat leírja. A transzformációs folyamat eredményéül kapott (generált) webalkalmazás azonban szintén többféle technikával (PSM) készülhet: az üzleti objektumok EJB-k formájában tárolhatják a háttéradatokat, a megjelenítés pedig történhet akár szervletek vagy JSP-k segítségével, de az adattároló objektumok lehetnek akár POJO-k, a megjelenítés alapja pedig akár JavaFX is lehet. Mivel cél, hogy ne legyünk platformhoz kötve, ezért az egyes technológiák közé szükség van az XML nyelvre, amely az Internet lingua francajaként az adatreprezentációs köztes réteg szerepét tölti be. Mivel az UML nyelvhez rendelkezésre áll az XMI (XML Metadata Interchange) szabvány, amelynek segítségével UML modellek, metamodellek és metametamodellek is XML formátumban cserélhetők. Sajnos jelenleg ez a megoldás még az egyes fejlesztőeszközök inkompatibilitása miatt inkább elvi, mint gyakorlati szereppel bír, azonban az elkövetkező években alighanem előrelépést tapasztalhatunk majd ezen a területen. Az XML nyelvet azonban nemcsak a modellek reprezentációjára kell használnunk. Az üzleti réteg objektumai által hordozott adatokat szintén célszerű XML-ben tartanunk, hiszen így egyrészt a háttérben lévő adatbázissal kommunikáló adatelérést végző réteg szintén transzparensen cserélhető, valamint a webalkalmazások esetén a platform modell, vagyis maga a végső kód is XML formátumú, vagy XML nyelvek kompozíciójaként áll elő (pl. XHTML+XForms+SVG). Ez esetben technikai értelemben pusztán XML dokumentumok transzformációsorozataként (némi injekcióval) előállítható a kész webalkalmazás. 3.3. Eszközök A fejlesztés során szükség van egy integrált fejlesztői környezetre is, amelyben egyrészt a kiindulási modellek definiálhatók, másrészt támogatják a modelltranszformációk végrehajtását (ide értve a kódgenerálás lehetőségét is). Bár éppen a korábban említett XMI alkalmazása miatt akár más fejlesztőeszköz mellett is dönthetünk a modell elkészítésekor, választásunk mégis az Eclipse platformra esett, amely azon túl, hogy az egyik legszélesebb körben elterjedt ingyenes fejlesztőeszköz, plug-inek segítségével könnyen bővíthető. 4
4. Megoldások A fent említettek értelmében a tervezési folyamat tehát a szakterületi nyelv elkészítésével kezdődik, azonban ennek nem mindig kell így történnie. Olyan szakterületek esetében, amelyek leíró nyelvét már korábban elkészítették/elkészítettük, természetesen az adott nyelv újrafelhasználható más kérdés, hogy a szakterület fogalmainak pontos szemantikai értelmezéséhez nem árt, ha ontológiák segítségével pontosítjuk az egyes fogalmakat. Esetünkben a szakterületi nyelv leírására, ill. az az alapján történő modellezőeszközgenerálásra a Generic Eclipse Modeling System (White et al., 2007) alkalmas. Az ily módon létrejött modellezőeszköz (amely maga is egy Eclipse plug-in) segítségével a szakterületi modell leírása következik. Ez tulajdonképpen nem más, mint egy sztereotipizált UML osztálydiagram, vagyis ezzel a módszerrel gyakorlatilag egy UML profilt definiáltunk, amelynek példánya lesz a szerkezeti modellt leíró PIM. Ebből a modellből egy újabb Eclipse plug-in (hypermodel) segítségével a szakterületi viszonyokat ábrázoló W3C XML Schema dokumentumhoz jutunk. Az alkalmazásfejlesztés során szükséges gyors prototípusgenerálást az ezekből képzett XHTML-be ágyazott XForms űrlapok segítségével végezzük (PSM). Ennek segítségével olyan űrlapokat állítunk elő, amelyek kitöltésével és elküldésével a felhasználók könnyen a megadott szerkezetnek megfelelő XML dokumentumokat tudnak előállítani, anélkül, hogy észlelnék, hogy XML valójában XML dokumentumot szerkesztenek. Így kényelmesen megvalósítható az adatfelvitel, amelynek az adatintenzív alkalmazások esetén igen nagy szerepe van. (Mindemellett ezzel a módszerrel könnyedén lehet meglévő webszolgáltatások fölé grafikus felhasználói felületet húzni, és ilyen módon is növelni az újrafelhasználhatóságot). A későbbi terveink között szerepel egyéb PSM-ekre történő konverzió megvalósítása is, ám ennél lényegesebb feladat a navigációs modell kialakítása: ehhez a korábban PIM-ként létrejött modellből (ill. az mögötte meghúzódó Ecore-ból) a navigációhoz, mint szakterülethez tartozó szakterületi nyelv segítségével juthatunk el. 5. Lehetőségek Végeredményként tehát egy az alkalmazott alapelvek erejéhez és lehetőségeihez mérten meglehetősen egyszerű, XHTML-be ágyazott XForms alapú prototípust kapunk. Ez azonban csak a fejlesztés eme korai szakaszára igaz, hiszen az erős elméleti alapokra helyezett gondos tervezésnek köszönhetően a rendszer könnyen bővíthető. Újabb PIM PSM transzformációk segítségével újabb célplatformok válnak elérhetővé. Az itt felvázolt webalkalmazás-tervezési megközelítés azonban több egyéb irányba is kiterjeszthető. Az ontológiák felhasználásának szükségszerűsége manapság egyre égetőbb, ugyanis nélkülük csaknem lehetetlenné válik egy adott szakterületen a metametamodell szinten a szakterületi nyelvek összehasonlítása, amely gátja a szakterületi modellek, modellrészletek újrafelhasználhatóságának is. Itt mindenképpen érdemesnek tűnik további kutatásokat végezni az ontológia alapú szoftvertervezési módszerek témakörében. Egy másik fontos, de jelenleg általunk még nem vizsgált terület a modellellenőrzés (Müller-Olm et al., 1999). Amikor egy modellt előállítunk, biztosak szeretnénk lenni abban, hogy megfelel a vele szemben támasztott követelményeknek (amelyeket pl. logikai formulák segítségével állíthatunk elő). Ez a megközelítés az ontológiák alkalmazásával karöltve igen ígéretes lehet, ugyanis, amíg a jelenlegi modellellenőrző rendszerek csak a formális modellen 5
ellenőrzik a formalizált módon leírt követelmények teljesülését, az ontológiák alkalmazásával szemantikus információkat adhatunk meg modelleinkről, amelyek alapján következtető rendszerek segítségével akár az indirekt módon teljesített követelmények ellenőrzését is elvégezhetjük. Egy harmadik, de szintén ígéretes kutatási irány a minőségbiztosítással kapcsolatos: amíg a klasszikus szoftverfejlesztési módszerek esetén a szoftver minőségét a kód attribútumainak segítségével próbáltuk értelmezni (pl. kódsorok száma, ciklomatikus komplexitás, osztályok száma, stb.), addig modellvezérelt környezetben hasonló állításokat kell a modellekkel, ill. a modelleket újabb modellekké finomító transzformációkkal szemben megfogalmaznunk annak érdekében, hogy az elkészült termék minőségét valahogyan számszerűsíteni lehessen (Adamkó et al., 2007). Kidolgozásra várnak tehát azok a technikák, mérőszámok, amelyek hasznos információt képesek közölni egy-egy modell minőségéről. Irodalomjegyzék [1] Adamkó A., Arató M., Fazekas G., Juhász I. (2007) Performance Evaluation of Large- Scale Data Processing Systems. Proc. of the 7 th International Conference on Applied Informatics. [2] Adamkó A., Kollár L. (2008) MDA-based development of data-driven Web apllications. Proc. of the 4 th International Conference on Web Information Systems and Technologies, 252 255. [3] Burbeck S. (1992) Applications Programming in Smalltalk-80: How to use Model-View- Controller (MVC). http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html. [4] Erl T. (2008) SOA: principles of service design. Prentice-Hall, ISBN: 978-0132344821. [5] Fowler M. (2008) Domain Specific Languages. In preparation. http://martinfowler.com/dslwip/ [6] Happel H-J., Seedorf S. (2006) Applications of Ontologies in Software Engineering. Proc. of the 2 nd International Workshop on Semantic Web Enabled Software Engineering (SWESE 2006). [7] Müller-Olm M., Schmidt D.A., Steffen B. (1999) Model checking: a tutorial introduction. Proc. of the 6 th Static Analysis Symposium, G. File and A. Cortesi, eds., Springer LNCS 1694, 330 354. [8] Schmidt D.C. (2006) Model-Driven Engineering, IEEE Computer, 39 (2), 25 31. [9] White J., Schmidt, Nechypurenko, Wuchner (2007) Introduction to the Generic Eclipse Modelling System. Eclipse Magazine, 6, 11 18. 6