3. gyakorlat Folyamatmodellek, kooperáló viselkedésmodellek Megoldások

Hasonló dokumentumok
3. gyakorlat Folyamatmodellek, kooperáló viselkedésmodellek Megoldások

3. gyakorlat Folyamatmodellek, kooperáló viselkedésmodellek Megoldások

Modellek ellenőrzése és tesztelése

5. gyakorlat Modellek ellenőrzése és tesztelése Megoldások

Alapszintű formalizmusok

Dr. Mileff Péter

2. gyakorlat Állapot alapú modellezés Megoldások. 1. feladat. Rendszermodellezés (BMEVIMIAA00), tavaszi félév

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Szekvencia diagram. Szekvencia diagram Dr. Mileff Péter

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

Használati utasítás.

Elérhetőségi probléma egyszerűsítése: Állapottér és struktúra redukció Petri-háló alosztályok

Rendszermodellezés 1. ZH, A csoport, nagyfeladatok

A programozás alapjai 1 Rekurzió

2. gyakorlat Állapot alapú modellezés Megoldások

Code review és continous integration toolok BME-MIT

Feladatgyűjtemény. 4. Modellek ellenőrzése Folyamat statikus analízise Dinamikus analízis teszteléssel... 7

Folyamatmodellezés. Budapesti Műszaki és Gazdaságtudományi Egyetem. Hibatűrő Rendszerek Kutatócsoport. Budapesti Műszaki és Gazdaságtudományi Egyetem

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

2. gyakorlat Állapot alapú modellezés Megoldások

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Szekvenciális hálózatok és automaták

2. gyakorlat Állapot alapú modellezés Megoldások

A SatAlarm AVA alkalmazás használata

Kód átvizsgálás. Irodalom. (Code review) code review,smart Bear Inc., ! Jason Cohen: Best kept secrets of peer

Véges automaták, reguláris nyelvek

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május)

iphone programozás alapjai IV. Gyakorlat

Mozgásvizsgálati mérések internetes megjelenítése. Zemkó Szonja - Dr. Siki Zoltán

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Bevezetés az informatikába

Osztott rendszer. Osztott rendszer informális definíciója

Szakdolgozati, TDK témajavaslatok

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

5. Hét Sorrendi hálózatok

A félév során előkerülő témakörök

Hungaropharma Zrt. WEB Áruház felhasználói útmutató. Tartalomjegyzék

IP150 frissítés 4.20-ra

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

2) Tervezzen Stibitz kód szerint működő, aszinkron decimális előre számlálót! A megvalósításához

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Kiegészítő segédlet szinkron sorrendi hálózatok tervezéséhez

Új technológiák az Ubuntuban. Új fejlesztések Amik egy éven belül jelenhetnek meg az Ubuntuban

Időzített átmeneti rendszerek

Gyakorló feladatok: Formális modellek, temporális logikák, modellellenőrzés. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Folyamatmodellezés. Rendszermodellezés Budapesti Műszaki és Gazdaságtudományi Egyetem. Hibatűrő Rendszerek Kutatócsoport

Folyamatmodellezés. Budapesti Műszaki és Gazdaságtudományi Egyetem. Hibatűrő Rendszerek Kutatócsoport. Budapesti Műszaki és Gazdaságtudományi Egyetem

Rekurzió. Dr. Iványi Péter

Java programozási nyelv

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Gyártórendszerek irányítási struktúrái

Nemzetközi team munka indítása

GPRS Remote. GPRS alapú android applikáció távvezérléshez. Kezelési útmutató

KIR-STAT internetes adatgyűjtő rendszer

Emlékeztető: LR(0) elemzés. LR elemzések (SLR(1) és LR(1) elemzések)

(Forrás:

8. Komponens elvű programfejlesztés. Ágens, akció, cél, kontraktus.

Frissítések, letöltések

Objektumorientált Programozás III.

Gyakorló feladatok az 1. nagy zárthelyire

Kedvenc Linkek a témakörben: MySQL mindenkinek Vizuális adatbázis tervezés

Szoftver fő funkciói. Diszpécser rádió GPS nyomkövetés Adatátvitel és tárolás Telefonhívások kezelése 1 / 7

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Occam 1. Készítette: Szabó Éva

Aszinkron sorrendi hálózatok

ShopRenter Kulcs-Soft beállítás

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Interaktív, grafikus környezet. Magasszintû alkalmazási nyelv (KAL) Integrált grafikus interface könyvtár. Intelligens kapcsolat más szoftverekkel

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Verziókövető rendszerek használata a szoftverfejlesztésben

KSHXML2 adatgyűjtési rendszer

1. Alapfogalmak Algoritmus Számítási probléma Specifikáció Algoritmusok futási ideje

Számítógépes Hálózatok. 6. gyakorlat

Internetes térkép publikálási technikák, szabványok, trendek, nyílt forráskódú megoldások

Modellellenőrzés. dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Kombinációs hálózat. sorrendi hálózat. 1. ábra

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

Iványi László ARM programozás. Szabó Béla 1. Óra Verziókövetés

Regionális forduló november 18.

Dokumentáció az 1. feladatsorhoz (egyszerű, rövidített kivitelben)

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

ANDROID ALKALMAZÁS FEJLESZTÉS

III. Alapfogalmak és tervezési módszertan SystemC-ben

Tartalom Tervezési egység felépítése Utasítások csoportosítása Értékadás... 38

Szoftver Tervezési Dokumentáció. Nguyen Thai Binh

Adatbiztonság PPZH május 20.

micron s e c u r i t y p r o d u c t s EzeProx proximity kártyaolvasó és kódbillentyűzet

III. Felzárkóztató mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

C programozási nyelv

Szoftverminőségbiztosítás

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Matlab alapok. Baran Ágnes. Baran Ágnes Matlab alapok Elágazások, függvények 1 / 15

1. Felhasználói név és jelszó

Budapesti Műszaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar Irányítástechnika és Informatika Tanszék. Önálló laboratórium

Rendszermodellezés. Modellellenőrzés. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Dr. Oniga István DIGITÁLIS TECHNIKA 8

A Novitax ügyviteli programrendszer első telepítése

Számítógépes Hálózatok. 5. gyakorlat

Átírás:

3. gyakorlat Folyamatmodellek, kooperáló viselkedésmodellek ok 1. Összetett rendszer modellezése Felhő alapú adattárolást modellezünk (ld. Dropbox, Google Drive, Tresorit), egyetlen állományra szorítkozva. Az állománynak a szerveren és a kliensnél (pl. laptop) is elérhető egy-egy replikája, kezdetben tartalommal. A fájl módosításai szinkronizálás során továbbítódnak a példányok között. Ha szinkronizáció előtt mindkét példányt módosítják, akkor ütközés lép fel, amelyet a felhasználónak kell feloldania a kliensen. Lokálisan a kliensnél, illetve (pl. másik kliens tevékenységének hatására) módosulhat a szerveren is. Felhasználói utasításra, valamint időről időre spontán módon a kliens és a szerver szinkronizálhat; ilyenkor az esetleges módosítás eljut a másik példányhoz is, és újra lesz a két másolat. Ha a legutóbbi szinkronizáció óta egymástól függetlenül mindkét replikát módosították, akkor viszont konfliktushelyzet (ütközés) áll fenn. Ilyenkor a kliens a saját és a szerverről letöltött változatot összehasonlítja, és a felhasználóra bízza az ütközés feloldását. a) Modellezzük először a kliens (részleges) működését állapotgéppel! A kliens kezdetben állapotú (a lokális fájlmásolat egyezik azzal, ami a szerveren a legutóbbi szinkronizációkor volt / lett), ám bemenet hatására a állapotba kerül (és további hatására is ottmarad). Az bemenet hatására tetszőleges állapotból újra állapotba kerül. {, } b) A szerver lehetséges állapotai (csupán az adott klienssel való szinkronizációt vizsgálva) az és a. Előfordulhat, hogy a megfelelő i jog birtokában egy másik felhasználó (vagy ugyanazon felhasználó egy másik kliens, pl. a telefonja segítségével) frissíti a szerveren található állományt. Itt annyi az érdekesség, hogy spontán állapotátmenet lesz (már ha a lokális felhasználótól érkezett bemenetekre figyelünk csak és nem modellezzünk másik klienst, pl. kliens2 ). 1

c) Ha a szerver állapotban van, akkor a kliens a bemenet hatására feltölti az esetleges lokális módosításokat a szerverre, és szintén állapotba kerül. A bemenetet a szerver is megkapja. Hol kooperál a két automata? A automata két új átmenetére [.] őrfeltételt rakunk. Érdekesség, hogy ez a másik automata pillanatnyi állapotától függ ez tehát kooperáció! A modell absztrahálja a valóságot, itt ténylegesen nyilván üzenetcsere van a kliens és a szerver között, ahol kicserélik ezt az információt, ill. a fájlt is fel kell tölteni. {,, } [Sz.] [Sz.] {sz.} d) Ha a szerver állapotban van, akkor a kliensnek adott bemenet hatására a szerver állapotba kerül; a kliens pedig állapotból nem mozdul, de állapotból ütközés állapotba megy. Mit jelent ez? Mi történjen az ütközés állapotban? Hol kooperál a két automata? Itt egyszerre lép a két automata, tehát a bemenet mindkét automatát befolyásolja! (Ilyenkor azt mondjuk, hogy nem aszinkron, hanem vegyes szorzatban van a két komponens automatája: főleg aszinkron lépnek, de néha szinkron, mert mindkettő egyszerre lép.) A kliens állapotgép új élei [.] őrfeltételt kapnak. Vegyük észre, hogy a. állapotból két hasonló átmenet megy ki ellentétes őrfeltétellel: ([.], ill. [.]), amik összevonhatóak egyetlen őrfeltétel nélküli éllé (a lenti ábrán ez nem szerepel). Ez nyilván az az eset, amikor a kliens detektálja az ütközést. Ilyenkor a szerver állapotba megy, mivel őnála a legutolsó szinkronizáció óta nincs újabb. A kliensen kell feloldani a konfliktust. Az ütközés állapotban az eseményekre például így léphetünk:,, szinkronizál ütközés. 2

{,, } [Sz.] [Sz.] [Sz.] {sz.} ütközés [Sz.] e) A kliens időnként magától is szinkronizál a szerverrel, felhasználói bemenet nélkül. Mit jelent ez? Hol kooperál a két automata? Ugyanaz, mint előbb, csak külső bemeneti esemény helyett közös, belső randevú esemény (legyen pull és push) hatására. Opcionális változtatás lehet, pl. konfliktust ilyenkor sose idézzen elő. {,, } [Sz.] pull [Sz.] push [Sz.] {sz.} {push, pull} randevú push pull ütközés [Sz.] f) Fejtsük ki a teljes összetett állapotgépet a vegyes szorzatban részt vevő két automata alapján. Az összetett állapotgép állapotát egy kételemű vektor ( kliens, szerver ) írja le. A kezdőállapotból (, ) indulva minden eseményre rögzítjük egy táblázatban, hogy mi a következő állapot. andevú eseményen csak akkor lép az összetett automata, ha mindkét automata tud lépni az adott eseményre. (A táblázatban jelöli a hurokéleket.) 3

aszinkron (egyedi) közös (osztott) randevú spontán események események események átmenet push pull, p, a a, f, a, a a, a a, a p, f, p, f a, a a, a, a, f ü, a ütközés, a, a p, a ü, f ütközés, a, f p, f ü, a <a,a> push <p,a> <p,f> pull <ü,a> <ü,f> <a,f> Vegyük észre, hogy az összetett automatán pirossal jelölt éleken a belső randevú események helyett spontán átmenet szerepel, mivel a randevú célja a két automata szinkronizálása volt, amely az összetett automatában megvalósul. (Az átláthatóság érdekében a hurokélek nem szerepelnek a gráfon.) g) (Kiegészítő feladat.) Ebben a modellben a szerver és a kliens közvetlenül figyelembe tudják venni egymás belső állapotát, és a szinkronizáció is pillanatszerűen végbemegy közöttük. Egy valódi elosztott rendszerben azonban üzenetváltással kell a kliens és a szerver közötti kommunikációt megvalósítani; a küldés és a válasz megérkezte között pedig huzamosabb idő eltelhet. Gondoljuk végig, hogy lehetne finomítani a modellt, hogy ezeket a részleteket is tükrözze! Otthoni feladat. 2. Folyamat lefutása Egy folyamat végrehajtása során az összes lépést megfigyeltük. A következő eseménysor bekövetkeztét észleltük: Folyamat indul, elkezdődik, befejeződik, elkezdődik, elkezdődik, befejeződik, befejeződik, Folyamat befejeződik. 4

a S b c d Az a, b, c, d folyamatmodellek közül melyek lehetnek helyes modelljei a rendszernek? A b és a c folyamatmodellek. Ahol nem illeszkedik, ott mutassuk meg, hogy az eseménysor hol tér el a folyamatmodelltől. 3. Vezérlési folyam (forráskód alapján) Tekintsük az alábbi C nyelvű függvényt. 1 unsigned long long f(int n) 2 { 3 if (n <= 0) { 4 return 0; 5 } else if (n == 1) { 6 return 1; 7 } else { 8 unsigned long long a = f(n - 1); 9 unsigned long long b = f(n - 2); 10 return a + b; 11 } 12 } a) Milyen vezérlési folyamot határoz meg a függvény? A rekurzív hívást egy hívás elemmel ábrázoljuk (a doboz sarkában van egy nyíl). [n 0] return 0 [n==1] return 1 [else] [else] Fibonacci(n-1) Fibonacci(n-2) return a+b b a b) Ellenőrizzük, hogy jólstrukturált-e ez a folyamat! A jólstrukturáltság definícióját lásd a jegyzetben. 1 A folyamataink jólstrukturáltak. Ezt úgy tudjuk megmutatni, hogy az egyes tevékenységektől indulva, belülről kifelé haladva megmutatjuk minden részfolyamatra, hogy jólstrukturált. Utolsóként a teljes folyamatmodellt kell ellenőriznünk: Egy teljes folyamatmodell jólstrukturált, ha egyetlen belépési pontja (Flow begin) és kilépési pontja (Flow end) egy jólstrukturált blokkot zár közre. A folyamatmodellünk jólstrukturált, mert a fenti feltételeknek megfelel. c) Azonosítsuk az adatfüggőségeket (adatáramlást) a tevékenységek között! 1 http://docs.inf.mit.bme.hu/remo-jegyzet/folyamatmodellezes.pdf 5

A két rekurzív hívásból megy adatáramlás az összeg return lépésébe (az ábrán szaggatott vonalakkal). A lényeg, hogy a második híváshoz voltaképp nem kell az első eredménye. d) Ha a programozási nyelv vagy a futtatókörnyezet megengedi, hol van lehetőség párhuzamosításra? A c) feladat megoldása alapján ez triviális. e) (Kiegészítő feladat.) Mi biztosítja azt, hogy a függvény előbb-utóbb terminál? Az n változó értéke minden hívás során csökken, így előbb-utóbb teljesül az n <= 0 feltétel. 4. Folyamatmodell szöveges specifikáció alapján Egy nagy szoftveralapítvány kódtára (pl. Git) számos nyílt forráskódú szoftver fejlesztésének ad otthont. A megbízható belsős fejlesztőkön kívül külsősök is gyakran küldenek be hibajavításokat vagy újonnan megvalósított képességeket. Oda kell figyelni arra, hogy a kiadott szoftverben csak jogszerűen (pl. munkaadó beleegyezésével) bekerült forráskód szerepeljen. a) Ha egy fejlesztő hozzá szeretne járulni egy projekthez az általa készített forráskóddal, akkor a saját státuszától függő lépéseket kell tennie. Belsős fejlesztők közvetlenül írhatnak a kódtár adott projekt részére fenntartott területére. Külsős fejlesztőknek először átvizsgálásra (code review) be kell nyújtaniuk a kódjukat; ezután egy belső fejlesztőnek ellenőriznie kell azt, és utána vagy elutasítania, vagy elfogadnia. Ha a kívülről érkező kód egy bizonyos küszöbértéknél rövidebb (pl. néhány soros hibajavítás), akkor az elfogadás után a készítőjének már csak egy rövid hozzájárulási nyilatkozatot kell tennie, hogy beolvasztható legyen a kódtárba. A nagyobb lélegzetű külső hozzájárulások (pl. egy teljesen új modul beépítése) esetében azonban az elfogadást követően az alapítvány jogi osztálya egy külön adminisztratív eljárásban tisztázza a változtatások szellemi tulajdonának jogállását, és csak ennek sikeres lezárása után olvaszthatja be a belső fejlesztő a kódot. Frissen indított, első hivatalos kiadásuk előtt álló projekteknél itt tesznek egy kivételt: az elfogadott külső hozzájárulás kódtárba beolvasztásával nem kell megvárni ezt az adminisztratív eljárást. Készítsünk folyamatmodellt az itt leírt tevékenységekből! [belső] Közvetlen [külső] Benyújt Code review [-1] [1] [kis változtatás] Nyilatkozat Beolvasztás [nagy változtatás] [nem friss] Jogi ellenőrzés Beolvasztás [friss] Jogi ellenőrzés Beolvasztás 6

b) A szoftver fejlesztési projektje abból áll, hogy újabb és újabb módosításokat végeznek a forráskódon, amíg a projekt vezetése úgy nem látja, hogy a szoftver kellően stabil egy hivatalos kiadáshoz (release). Amikor eljött ez a pont, akkor közzétesznek egy új stabil verziót a szoftverből, majd ismét a fejlesztésen a sor, és így tovább. Készítsünk folyamatmodellt az itt leírt tevékenységekből! [nem stabil] Módosítás Kiadás jóvahagyása [stabil] Közzététel Az Módosítás tevékenység alatt azt értjük, amikor a fejlesztők a kódot készítik és benyújtják az újabb kiadást. Vegyük észre, hogy a modell csak a folyamatra fókuszál, nem jelennek meg benne (a szöveges specifikációban még szereplő) szereplők (aktorok). c) (Kiegészítő feladat.) Ellenőrizzük, hogy jólstrukturáltak-e a folyamataink! A b) feladatrész megoldásának folyamatmodellje nem jólformált, mert hiányzik a Flow end csomópont. d) (Kiegészítő feladat.) Milyen viszonyban állnak egymással az a) és b) feladatokban elkészített folyamatmodellek? A két folyamatmodell két külön dolognak új forráskódok kontributálásának és új verziók kiadásának az életútját ábrázolja egyazon rendszerben. A kettő nagyjából diszjunkt, de lehetnek furcsa átlapolódások, pl. kiadási cikluson átívelő code review. Az ehhez hasonló egymásra hatások ellenőrzése nem témája ennek a gyakorlatnak (ld. Modellek ellenőrzése témakör). 7