2. gyakorlat: Részletes tervek és forráskód ellenőrzése

Hasonló dokumentumok
A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

Az FMH weboldal megnyitásakor megjelenő angol nyelvű üzenetek eltüntetése

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

Automatikus tesztgenerálás modell ellenőrző segítségével

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

Modell alapú tesztelés mobil környezetben

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

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

Premier 412, 816, 816+ és 832 felhasználói útmutató. Kezelési útmutató. PREMIER 412, 816, 816+ és 832 központokhoz. RKP16+ kezelőegység használatával

Részletes tervek ellenőrzése

Premier 412, 816, 816+ és 832 felhasználói útmutató. Kezelési útmutató. PREMIER 412, 816, 816+ és 832 központokhoz

AZ N-WARE KFT. ÁLTAL ELEKTRONIKUSAN ALÁÍRT PDF DOKUMENTUMOK HITELESSÉGÉNEK ELLENŐRZÉSE VERZIÓ SZÁM: 1.1 KELT:

Magasabb szintű formalizmus: Állapottérképek (statecharts) dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Premier 412, 816, 816+ és 832 felhasználói útmutató. Kezelési útmutató. PREMIER 412, 816, 816+ és 832. központokhoz

Magasabb szintű formalizmus: Állapottérképek (statecharts) dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Zárthelyi mintapéldák. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Microsec Zrt. által kibocsátott elektronikus aláírás telepítése Windows 7 (x86/x64) Internet Explorer 9 (32 bites) böngészőbe

VBA makrók aláírása Office 2007 esetén

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

Alapszintű formalizmusok

A CAPICOM ActiveX komponens telepítésének és használatának leírása Windows 7 operációs rendszer és Internet Explorer 9 verziójú böngésző esetén

Navigációs GPS adatok kezelése QGIS programmal (1.4 verzió) Összeállította dr. Siki Zoltán

Netis vezeték nélküli, N típusú Router Gyors Telepítési Útmutató

Műveletek makrókkal. Makró futtatása párbeszédpanelről. A Színezés makró futtatása a Makró párbeszédpanelről

A program telepítése. A letöltés lépései: 1. nyissa meg a WEB-oldalt, majd válassza a Letöltés menüpontot: 2. Kattintson a DbérWIN 2017 hivatkozásra:

A program telepítése. A letöltés lépései: 1. nyissa meg a WEB-oldalt, majd válassza a Letöltés menüpontot a felső sorban:

VisualBaker Telepítési útmutató

Szoftver metrika Eclipse-plugin KÉSZÍTETTE: BARTA JÁNOS (SS4TCD)

BioAdmin 4.1 könnyű telepítés csak Kliens használatra

AZ N-WARE KFT. ÁLTAL ELEKTRONIKUSAN ALÁÍRT PDF DOKUMENTUMOK HITELESSÉGÉNEK ELLENŐRZÉSE VERZIÓ SZÁM: 1.3 KELT:

A SatAlarm AVA alkalmazás használata

A kontrolladat-szolgáltatás elkészítése

WordWall FELHASZNÁLÓI KÉZIKÖNYV

O365 és felhő szolgáltatások igénybevételéhez szükséges beállítások

Az importálás folyamata Felhasználói dokumentáció verzió 2.1.

Bérprogram és az abevjava kapcsolata

Szoftver-modellellenőrzés absztrakciós módszerekkel

Országos Területrendezési Terv térképi mel ékleteinek WMS szolgáltatással történő elérése, MapInfo program alkalmazásával Útmutató 2010.

Országos Területrendezési Terv térképi mel ékleteinek WMS szolgáltatással történő elérése, Quantum GIS program alkalmazásával Útmutató 2010.

A feladatok megoldásához felhasználandó annotációk leírásait az alábbi URL-en találja meg:

Távolléti díj kezelése a Novitax programban

Digitális aláíró program telepítése az ERA rendszeren

CGS Civil 3D Extensions 2012 telepítése

Verifikáció és validáció Általános bevezető

A FileZilla program beállítása az első belépés alkalmával

Mobil Telefonon Keresztüli Felügyelet Felhasználói Kézikönyv

FITNESS SYSTEM Telepítési útmutató

Valószínűségi modellellenőrzés Markov döntési folyamatokkal

Gyakorlat és házi feladat tájékoztató

Guarding Vision Beállítása

Digitális aláíró program telepítése az ERA rendszeren

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

Felhasználói segédlet a Scopus adatbázis használatához

Tortoise SVN használata. Képes útmutató

A program telepítése. A letöltés lépései: 1. nyissa meg a WEB-oldalt, majd válassza a Letöltés menüpontot: 2. Kattintson a DbérWIN 2015 hivatkozásra:

Országos Területrendezési Terv térképi mellékleteinek WMS szolgáltatással történő elérése, MapInfo program alkalmazásával

"Eseményekre imm/connection Server scriptek futtatása

Kormányzati Elektronikus Aláíró és Aláírás-ellenőrző Szoftver

Pénzintézetek jelentése a pénzforgalmi jelzőszám változásáról

A belső hálózat konfigurálása

Tagi nyilatkozat elektronikus aláírás folyamata MicroSigner alkalmazás használatával

Tartalom Kontextus modellek Viselkedési modellek Adat-modellek Objektum-modellek CASE munkapadok (workbench)

MA-RK32 riasztóközpont Használati útmutató a Multialarm Riasztókezelő mobilalkalmazáshoz

Az alábbiakban szeretnénk segítséget nyújtani Önnek a CIB Internet Bankból történő nyomtatáshoz szükséges böngésző beállítások végrehajtásában.

TÁJÉKOZTATÓ a MicroSigner alapú alkalmazás használatáról

E-Freight beállítási segédlet

Vizsgalap létrehozása az ETRben

4. Válasszuk ki a dolgozót, majd nyomjuk meg az gombot. Megjelenik a dolgozó adatlapja. 5. Nézzük át, hogy minden adat helyesen van-e kitöltve, szüksé

A Wireshark program használata Capture Analyze Capture Analyze Capture Options Interface

A nyomtatókkal kapcsolatos beállításokat a Vezérlőpulton, a Nyomtatók mappában végezhetjük el. Nyomtató telepítését a Nyomtató hozzáadása ikonra

Magasabb szintű formalizmus: Állapottérképek (statecharts) dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Felhasználói kézikönyv

Netlock Kft. által kibocsátott elektronikus aláírás telepítése Windows XP SP3 Internet Explorer 8 böngészőbe

15.4.2a Laborgyakorlat: Böngésző beállítása

TÁJÉKOZTATÓ a MicroSigner alapú elektronikus aláírás használatáról

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Bevezetés a QGIS program használatába Összeálította dr. Siki Zoltán

Android Commander Felhasználói kézikönyv

Modellellenőrzés a vasút automatikai rendszerek fejlesztésében. XIX. Közlekedésfejlesztési és beruházási konferencia Bükfürdő

Samsung Universal Print Driver Felhasználói útmutató

Elektronikus pályázati űrlap (eform) létrehozása - Útmutató

INFORMATIKAI SEGÉDLET AZ ELEKTRONIKUS BEADVÁNYOK BENYÚJTÁSÁHOZ

QGIS tanfolyam (ver.2.0)

1. Origin telepítése. A telepítő első képernyőjén kattintson a Next gombra:

InCash számlázó program és a Webshop Hun rendszer összekötése

OO rendszerek jellemzői

é rtésí té sék szű ré sé

IP150 frissítés 4.20-ra

RAJZ1. vezetett gyakorlat

Kormányzati Elektronikus Aláíró és Aláírás-ellenőrző Szoftver

TvNetTel Internet Kapcsolat Beállítása

Importálás. más típusú (pl:.imp,.xml,.xkr,.xcz) állomány beimportálása a nyomtatványkitöltő programba

Molnár Mátyás. Bevezetés a PowerPoint 2010 használatába. Csak a lényeg érthetően!

K&H token tanúsítvány megújítás

(ArcCatalog, ArcMap)

MEDIAKLIKK.HU. Főoldal:

StartÜzlet online számlázó modul Használati Útmutató

munkafüzet open eseményéhez

Dokumentum létrehozása/módosítása a portálon:

Átírás:

2. gyakorlat: Részletes tervek és forráskód ellenőrzése A gyakorlaton a részletes tervek ellenőrzésével és a forráskód verifikációját végző statikus ellenőrző eszközökkel fogunk foglalkozni. Részletes tervek ellenőrzése A feladat kidolgozása során egy előre elkészített UML állapottérkép modell ellenőrzését fogjuk elvégezni. Az ellenőrzés alapja, hogy az UML modellt az UPPAAL modellellenőrző bemeneti formátumára transzformáljuk (ez a modellellenőrző a Formális módszerek tárgyból már ismerős), majd az UPPAAL eszközben temporális logika segítségével formalizálunk és vizsgálunk egyszerű követelményeket. Az UML modell megtekintéséhez indítsuk el a Papyrus eszközt. Válasszuk ki a felajánlott workspace könyvtárat. A megnyíló felületen a bal felső ablakban találhatók a modell fájlok, a bal alsó ablakban a modell elemei között lehet navigálni. A jobb felső (nagy) ablakban látható a modell egy diagramja, a jobb alsó ablakban pedig egyes kiválasztott elemek tulajdonságai. Válasszuk ki bal oldalon az AlarmSystem.di2 modellt (diagramot). Ez egy gépkocsi riasztóberendezésének modelljét tartalmazza. A modell kiválasztása után a fő panel alján nézzük végig a következő nézeteket: o Az osztályok a Context and Classes nézeten láthatók. A vizsgálandó vezérlő az AlarmSystem osztály. A külső (környezetből érkező) eseményeket <<signal>> sztereotípiával azonosítottuk (Open és Close: ajtó nyitása és zárása, Lock és Unlock: riasztó indítása és leállítása). Ezek mint stimulusok a Requirements nézeten is láthatók. 1. ábra: A modell osztályai (Context and Classes nézet) o A modell konkrét objektumai az Initialisation nézeten találhatók. 2. ábra: A modell objektumai (Initialisation nézet) o Az SM_AlarmSystem nézeten látszik a vezérlő állapottérképe az állapotok és trigger események intuitív elnevezésével. Tanulmányozzuk az állapottérképet! A TimeEvent_* elnevezések egy-egy időzítő eseményre utalnak, az akciók és őrfeltételek egy 1

implementáció-független AGSL (Action and Guard Specification Language) nyelven vannak megadva (ezt egy akcióval ellátott állapotátmenet, entry avagy exit esemény kiválasztásakor a lenti tulajdonság ablakban figyelhetjük meg). 3. ábra: Az AlarSystem osztály állapottérképe (SM_AlarmSystem nézet) A modell átnézése után transzformáljuk a modellt az UPPAAL által elfogadott formális modellé, azaz időzített automatává. 1. Ehhez az AlarmSystem.uml fájlon a jobb egérgombot lenyomva válasszuk ki a State Machines / Build SMTE Model menüpontot. Így keletkezik egy AlarmSystem.smtef fájl (ez egy belső modell reprezentáció). 2. Ezután ezen az AlarmSystem.smtef fájlon a jobb egérgombbal már a State Machines / Transform to Uppaal menüpontot választhatjuk ki, és a formális modell előáll (a felbukkanó ablakban nem szükséges a coverage analysis related code generálását kérni ez majd teszteléshez lesz fontos)! Az ellenőrzéshez nyissuk meg a keletkezett AlarmSystem.xml modellt (a Papyrus workspace com.ford.mogentes.cas könyvtárából) az UPPAAL eszközben, és gondoljuk végig a válaszokat a következő kérdésekre, illetve végezzük el a feladatokat: 1. Az UML állapottérkép modell nem rögzíti a környezet viselkedését (hogyan érkezhetnek a külső események). A modellellenőrzéshez viszont ennek megadására is szükség van. A modelltranszformáció egy alapértelmezett környezeti modellt illeszt a rendszer modellje mellé; ez látható az UPPAAL EnvironmentTemplate automatájában: a környezet az eqinserttail funkcióval illeszt egy-egy újabb eseményt az eseménysor végére. Mit határoz meg ez az automata, milyen sorrendben érkezhetnek a külső események? 2. Nézzünk rá a vezérlőt leíró AlarmSystemTemplate automatára! Vajon miért ilyen bonyolult? Tipp: Gondoljunk az UML állapottérképek szemantikájára. Miért szükséges olyan sok DROP akcióval ellátott átmenet, ami egy-egy esemény eldobását modellezi? Hogyan oldhatók fel egy olyan alacsony szintű formalizmusban, mint ez az automata, a hierarchikus állapotok és konkurens régiók? 2

3. Az UPPAAL Verifier ablakába írjuk be az A[] not deadlock követelményt, ami a modell holtpontmentességét fogalmazza meg. Végezzük el az ellenőrzést! 4. Írjuk be és ellenőrizzük az E<> thealarmsystemprocess.stable_openandlocked követelményt! Ennek értelmezéséhez vegyük figyelembe a következőket: Az UPPAAL modellben az állapotokat precízen kell megadni, ehhez a következő elnevezési konvenció tartozik: szükséges az objektumhoz tartozó automata példány neve (thealarmsystemprocess), majd annak megadása, hogy stabil állapotkonfigurációról van szó (STABLE), majd maga az állapotkonfiguráció az állapottérkép modell alapján (itt egyszerűen az OpenAndLocked állapot). Ezek után fogalmazzuk meg természetes nyelven, mit ír elő ez a követelmény! Az UML állapottérkép modellre nézve ellenőrizzük, hogy a riasztó csak azután lesz élesítve (Armed állapot), ha becsukják az ajtót. 5. Egy összetett állapotkonfiguráció esetén ennek nevét az egyes alállapotok _ jellel elválasztott egymás után írásával állítja elő a transzformáció. Így például egy összetett állapotkonfiguráció a thealarmsystemprocess.stable_armed_quiet_armedclosed keressük meg ezt az állapotkonfigurációt az állapottérkép modellen! 6. Formalizáljuk és ellenőrizzük a következő lehetőséget: A vezérlő képes-e eljutni a kezdőállapotból abba az állapotba, ahol a riasztás már élesítve van, nem szól a riasztó, pedig az ajtó nyitva? 7. Nézzük meg az állapottérkép modellt, és válaszoljuk meg, hogy az előző pontban ellenőrzött állapotkonfiguráció elérhetősége miért nem jelenti azt, hogy a vezérlő terve hibás! 3

Forráskód ellenőrzése Forráskód ellenőrzéséhez két, Java forrásokhoz való statikus ellenőrző eszközt, a FindBugs-ot és a PMD-t fogjuk használni. 1. Indítsuk el az Eclipse-et, és nyissuk meg a C:\code\GYAK2 workspace-t. Ebben az Eclipse példányban már fel lett telepítve a FindBugs és PMD Eclipse plugin verziója. Ezek elérhetősége: a. FindBugs - http://findbugs.cs.umd.edu/eclipse b. PMD - http://sourceforge.net/projects/pmd/files/pmd-eclipse/update-site/ 2. A gyakorlat során a json.simple nevű nyílt forrású projektet fogjuk megvizsgálni. FindBugs a. A forráskódban már a fordító is talál problémákat, amiket warningok segítségével megjelöl, pl. nem elérhető kód, soha nem olvasott változó. 3. Futtassuk le a FindBugs ellenőrzését: jobb gomb a projekt nevén > FindBugs > Find Bugs. a. A FindBugs esetén cél volt, hogy kevés téves hibát (false positve) jelezzen, így általában kevés dolgot jelöl, de azokkal érdemes is mindenképp foglalkozni. b. Váltsunk át a FindBugs nézetre, és nézzük meg a hibák leírását, majd keressük ki a hozzájuk tartozó kódot. Valóban hibák ezek? c. Nézzük meg a projekt tulajdonságainál a FindBugs beállításait. Itt kapunk egy részletes listát arról, hogy milyen ellenőrzéseket hajt végre. Engedélyezzük, hogy ezt projekt szinten tudjuk szabályozni, állítsuk magasabbra a jelentés szintjét, hogy a kevésbé súlyosabb hibákat is jelezze. (Ezek a beállítások ilyenkor bekerülnek a.settings könyvtárban lévő FindBugs prefs fájlba, amit akár berakhatunk a verziókezelő rendszerbe, így minden fejlesztő ugyanazokat a szabályokat fogja használni.) Talált-e a FindBugs újabb hibát? d. Ha végeztünk, akkor jobb gomb a projekt nevén > FindBugs > Clear Bug Markers menüponttal rejtsük el a FindBugs hibajelzéseit. 1. ábra: A FindBugs Eclipse nézete 4

PMD 4. Futtassuk le a PMD ellenőrzését is: jobb gomb a projekt nevén > PMD > Check code a. A PMD általában nagyszámú problémát jelez. Ezek egy része nem biztos, hogy gondot jelent az adott projektben, így érdemes testreszabni a szabálykészletét mindig az adott projekthez. Ezért nagyon fontos, hogy már a fejlesztés legelején használjuk a statikus ellenőrző eszközt. Ha 1000 sor forrás megírása után indítjuk el először, akkor már sokkal nehezebb az 50-100 hiba kijavításának nekiállni. 2. ábra: A PMD Eclipse nézete b. Váltsunk át a PMD nézetbe, és nyissuk meg az org.json.simple.parser.jsonparser fájlt. i. Nézzük meg, hogy milyen típusú hibákat talált a fájlban! ii. Nézzük meg az Avoid instantiating Integer objects hiba részletes leírását (jobb gomb > Show Details). A hibák leírásánál mindig találunk egy rövid indoklást és példát, valamint egy URL-t a hibatípus hivatalos leírására. Miért javasolja a forrás módosítást ebben az esetben? iii. Ha megnéztünk egy adott hibát, és úgy döntünk, hogy az adott esetben nem gond, akkor lehet a Mark as reviewed opcióval lehet ezt külön jelölni (ilyenkor bekerül egy speciális //NOPMD komment az adott sorhoz). Jelöljük meg az egyik hibát így, azonban ne felejtsünk el indoklást is írni hozzá! iv. Ha úgy gondoljuk, hogy egy szabályt egyáltalán nem akarunk használni, akkor azt a projekt tulajdonságainál ki lehet kapcsolni. Példaként kapcsoljuk ki az egyik szabály! v. A PMD képes az egy az egyben átmásolt kódrészletek azonosítására. Keressünk ilyen kódrészleteket a projektben (PMD > Find Suspect Cut and Paste)! 5

További információ vi. Nézzük át a többi fájlban szereplő hibatípusokat, hogy pontosabb képet kapjunk arról, hogy milyen hibák megtalálásában segíthet minket egy ilyen eszköz! vii. Nézzük meg a projekt beállításainál a PMD-re vonatkozó részt. Itt lehetne egyesével ki- és bekapcsolni az egyes ellenőrzési szabályokat. Fussuk át, hogy miket tud vizsgálni a PMD! viii. Az eddigiek a PMD-nek még csak egy kis szeletét mutatták. Kapcsoljuk be az összes szabályt (ez jelenleg több mint 300 szabály!), és így is futtassunk egy ellenőrzést. Az következő cikk egy érdekes összefoglaló, hogy a Google belül hogyan használja a FindBugs eszközt: N. Ayewah et al. Experiences Using Static Analysis to Find Bugs, IEEE Software, vol. 25 (2008), pp. 22-29, URL: http://research.google.com/pubs/pub34339.html Ebben a cikkben pedig a Coverity statikus analízis eszköz fejlesztői osztják meg a tapasztalataikat: Bessey et al. A Few Billion Lines of Code Later: Using Static Analysis to Find Bugs in the Real World, Comm. of the ACM, Vol. 53 No. 2, pp. 66-75. DOI: 10.1145/1646353.1646374 6