Sažetak | Objektno-orijentirana (OO) paradigma je dominantna paradigma za modeliranje i razvoj velikih i kompleksnih softverskih sustava. Kao što njeno ime implicira, centralni pojam ove paradigme je "objekt" - entitet koji ucahuruje podatke (atribute, svojstva) i pridruženo ponašanje (metode) koncepata problemske domene. Objekti u OO aplikaciji medusobno surađuju kako bi zajednicki ostvarili cilj aplikacije, i na taj na čin postaju ovisni jedni o drugima. Ovisnosti unutar i izmedu objekata mogu biti okarakterizirane kao reaktivne, tj. takve da, na primjer, promjena stanja jednog objekta zahtjeva ažuriranje stanja ostalih (izravno ili neizravno) ovisnih objekata. Drugim rijecima, ovisni objekti bi trebali moči prepoznati da se nešto bitno za njih dogodilo, i reagirati na odgovarajuci način. Primjere takvih reaktivnih ovisnosti možemo naći u različitim softverskim sustavima, kao što su sustavi sa bogatim grafickim sučeljem, tablični kalkulatori, animacije, sustavi za modeliranje, razvojna okruženja i sl. Objektno-orijentirana paradigma izvorno ne sadrži apstrakcije za upravljanje reaktivnim ovisnostima. Stoga se kao najcešće rješenje koristi Observer - jedan od najpoznatijih uzoraka dizajna u objektno-orijentiranom programiranju. Njegova svrha "Definirati jedan-prema-više ovisnost izmedu objekata tako da kada jedan objekt promijeni stanje svi ovisni objekti budu o tome obaviješteni i automatski ažurirani" dobro odgovara ideji reaktivnih ovisnosti. Medutim upotreba ovog uzorka je izvorno zamišljena za odvajanje i sinkroniziranje podataka i grafickog sucelja u MVC (engl. Model-View-Controller) arhitekturi. U slučaju kada reaktivne ovisnosti tvore velike i složene grafove ovisnosti, ovaj pristup zahtjeva ogroman trud da bi se izbjegle greške i redundancije, te da bi se razumjele i održavale reaktivne ovisnosti. Reaktivno programiranje s druge strane izvorno sadrži apstrakcije za upravljanje reaktivnim ovisnostima u obliku signala i dogadaja, međutim predstavlja jednu sasvim drugu paradigmu, različitu od OO programiranja. Stoga je jedan od glavnih pravaca istraživanja u ovom podrucju pomirenje reak- tivne i OO paradigme. Ovo istraživanje je motivirano prakticnim problemom upravljanja reaktivnih ovisnosti u OO aplikacijama, koje se još uvijek dominantno odvija neadekvatnim pristupima, uzrokujuci brojne probleme u kvaliteti, performansama i održavanju takvih aplikacija. Uz to, i pregled znanstvene literature ukazuje na prisutnost tog problema, kao i na nastojanja znanstvenika da ponude razlicite pristupe rješavanju tog problema. Slijedeći trendove istraživačke zajednice, ali i potreba iz prakse, ovo istraživanje takoder ima za cilj približavanje reaktivne i OO paradigme, i to na nacin da se određeni koncepti i ideje iz reaktivne paradigme ali i iz drugih relevantnih podrucja kao što je AOP, ugrade u OO aplikacije i unaprijede rad sa reaktivnim ovisnostima. Stoga je formalni cilj ovog istraživanja: Unaprijediti i olakšati upravljanje reaktivnim ovisnostima u objektno-orijentiranim aplikacijama oblikovanjem i evaluacijom softverskog okvira REFRAME, koji ce omogućiti specificiranje, propagaciju, vizualizaciju i analizu reaktivnih ovisnosti. U svrhu ostvarenja ovog cilja, postavljeno je glavno istraživacko pitanje (MRQ), 6 sporednih istraživackih pitanja (RQ1 do RQ6), te jedna hipoteza (H1). U ovoj disertaciji se bavimo problemom upravljanja reaktivnim ovisnostima u OO aplikacijama na nacin da uvodimo reaktivne mogućnosti u OO programski jezik u obliku softverskog okvira. Pri tome se vodimo pragmaticnom, na rješenje usmjerenom istraživačkom paradigmom zvanom znanstveno oblikovanje (engl. design science). Za nju je karakteristicna izrada korisnih artefakata i njihova primjena u problemskoj domeni. Kao što je navedeno u samom cilju, u okviru ove disertacije mi predlažemo i izgradujemo model i instancu softverskog okvira REFRAME za upravljanje reaktivnim ovisnostima. Sam proces znanstvenog oblikovanje je proveden kroz 5 aktivnosti odabranog metodološkog okvira. Prva aktivnost, je podrazumijevala provodenje detaljne analize relevantnih istraživanja, što je uz iskustvo samog istraživaca rezultiralo razjašnjavanjem problema, ukljucujući prepoznavanje izazova koje problem sa sobom nosi, uzroka problema i njegovih posljedica. Navedeno, opisano prvenstveno u poglavljima 2 i 4, nam je omogucilo bolje razumijevanje prostora problema, te potvrdu prakticne i istraživačke relevantnosti. Uz to, pregled literature na temu softverskih okvira nam je omogucio potvrdu softverskog okvira kao valjanog kandidata za rješenje, te sukladno tome pocetak tranzicije prema prostoru rješenja. Kroz prvu aktivnost je i odgovoreno na istraživacka pitanja RQ1 i RQ2. Nakon što smo analizirali problem, te identificirali potencijalno rješenje, mogli smo zapoceti sa aktivnošću definiranja zahtjeva. Na pocetku poglavlja 5 ocrtali smo osnovne budućeg softverskog okvira REFRAME, te smo osmislili 5 zahtjeva više razine. Ti zahtjevi su zatim detaljizirani u obliku dokumenta Specifikacija zahtjeva za softver (SRS), koji je sadržavao ukupno 34 funkcionalna zahtjeva i 4 nefunkcionalna zahtjeva. Na taj nacin smo izravno odgovorili na istraživačko pitanje RQ3. Na temelju zahtijeva iz SRS dokumenta, u sklopu trece aktivnosti oblikovani i izradeni su vec spomenuti model i instanca softverskog okvira REFRAME. U poglavlju 6 je detaljno opisana ova visoko-iterativna aktivnosti, koja je ukljucivala korake prikupljanja ideja, isprobavanje i ocjenu tih ideja, i na kraju odabir i implementaciju ideja koju su ocijenjene kao prikladne. Dok je model softverskog okvira dokumentiran u poglavlju 6, implementacija softverskog okvira je dostupna na službenom GitHub repozitoriju (https://github.com/MarkoMijac/ REFRAME.git). Dokumentiranjem procesa izrade, ali i karakteristika samog softverskog okvira, pružili smo vrijedno znanje i iskustvo, i na taj nacin doprinijeli odgovoru na istraživacko pitanje RQ4. Znanstvena evaluacija (aktivnosti 4 i 5) je provedena u obliku 4 medusobno komplementarne evaluacijske epizode. U prvoj epizodi, kroz prototipiranje i obilno testiranje (oko 1000 jedinicnih testova), ponudili smo dokaz da je softverski okvir REFRAME tehnički izvediv (engl. technical feasibility), i da predstavlja efikasno rješenje za upravljanje reaktivnim ovisnostima (engl. efficacy). Na taj nacin je prva epizoda doprinijela odgovoru na istraživačko pitanje RQ4. Tehnicka izvedivost i efikasnost je dodatno potvrđena demonstriranjem uporabe softverskog okvira na 15 ilustrativnih scenarija. I ova epizoda je takoder doprinijela odgovoru na istraživacko pitanje RQ4, ali je uz to i u potpunosti ponudila odgovor na pitanje RQ5. Kako bismo ponudili dokaz da je izradeni softverski okvir koristan u realnom uvjetima, u sklopu evaluacijskih epizoda III i IV, provedeno je istraživanje fokus grupom, te tehnicko akcijskog ˇ istraživanje. Sudionici obje epizode su bili jasni u ocjeni REFRAME-a kao korisnog za upravljanje reaktivnim ovisnostima, što nam je omogucilo da odgovorimo i na posljednje sporedno ´ istraživacko pitanje (RQ6). ˇKonacno, odgovaranjem na 6 sporednih istraživačkih pitanja dovelo nas je u poziciju da ponudimo sljedeci odgovor na glavno istraživa ´ cko pitanje: Upravljanje reaktivnim ovisnostima ˇ u razvoju objektno orijentiranih aplikacija možemo unaprijediti oblikovanjem i implementacijom softverskog okvira, koji nudi dedicirane apstrakcije i mehanizme za specificiranje pojedinacnih reaktivnih ovisnosti, izradu grafa ovisnosti, te provodenje procesa ažuriranja grafa. Takoder, mogu ćnosti takvog softverskog okvir se mogu obogatiti izradom pratećih alata, koji bi ´ omogucili analizu i vizualizaciju grafova ovisnosti, te generiranje dijelova ponavljajućeg koda. S obzirom da smo u disertaciji potvrdili prakticnu i znanstvenu relevantnost postavljenog problema i izradenog rješenja, te da smo opisani proces proveli rigorozno i uz uporabu znanstvenih metoda, možemo i potvrditi postavljenu hipotezu H1: Oblikovan i implementiran softverski okvir (REFRAME) za upravljanje reaktivnim ovisnostima u razvoju objektno-orijentiranih aplikacija će ispuniti zahtjeve relevantnosti i rigoroznosti znanstvenog oblikovanja. |
Sažetak (engleski) | In object-oriented (OO) applications objects collaborate through message passing, which results in these objects being coupled and mutually dependent. These dependencies can be of a reactive nature, i.e. such that, for example, change in state of one object, requires other, (directly or indirectly) dependent objects to update their state. The examples of such reactive dependencies can be found in various software systems, including rich graphical interfaces, spreadsheet systems, animation, robotics etc. Unlike the reactive paradigm, OO paradigm lacks abstractions and mechanisms for management of reactive dependencies. Instead, developers are left to handle this manually, e.g. by implementing Observer or similar design patterns. However, for large and complex dependency graphs it takes huge effort to avoid errors, redundancies, and to understand and maintain dependency graphs. In this dissertation we address the problem of managing reactive dependencies in OO applications, by introducing reactive capabilities into OO programming languages in a form of software framework. We do this by conducting pragmatic, problem solving research called design science, which advocates building useful artifacts and applying them to problem context. The artifacts we propose and build are the model and instantiation of REFRAME software framework. All efforts and activities directed at building these artifacts are conducted and documented with necessary scientific rigor. In first process activity, by analyzing literature and utilizing personal experience, we explicate the stated problem and challenges it brings, and also reflect on its causes and effects. Through literature review we were also able to legitimize software frameworks as potential solutions for the problem. The second activity started with outlining the basic characteristics of REFRAME software framework, and then proceeded to create Software Requirements Specification document with detailed requirements for the framework. In accordance to these requirements, aforementioned model and instantiation of REFRAME software framework were designed and implemented. Through evaluation activities that followed we provided evidence of software framework’s worth in the context of managing reactive dependencies. First, by building and testing REFRAME software framework we showed that such an artifact is technically feasible, that it works under certain assumptions, and that it has potential to solve or mitigate the stated problem. Demonstration on several illustrative scenarios provided further support for this. Finally, focus group and technical action research showed that potential users perceive REFRAME software framework as useful artifact. |