Ugrás a tartalomhoz

Szoftverfejlesztés

Ficsor Lajos, Krizsán Zoltán, Mileff Péter

Bevezetés. A szoftverfejlesztés életciklus modelljei. A szoftver fejlesztés mint modellezési tevékenység. Fejlesztési módszertanok. Követelmény analízis. A szoftvertervezés folyamata. A Unified Modeling Language (UML). A használati eset modell. Strukturális diagramok. Viselkedés diagramok. Az analízis modell. A tervezési modell. Az implementációs modell. Tervezési minták. További fejlesztési tevékenységek áttekintése. Esettanulmány.

Aktivitás diagram

Aktivitás diagram

Az aktivitás diagram feladata időben lezajló változások, folyamatok ábrázolása a végrehajtandó tevékenységek és azok sorrendjének megadásával. Elődjei között megtalálható például a munkafolyamat (workflow) diagram és a folyamatábra, bár az UML-ben definiált diagram leginkább a Petri-hálókra támaszkodik.

Az aktivitás diagramokat gyakran használjuk a használati esetekben leírt forgatókönyvek működésének leírására, vagy akár egy operáció implementálási módjának definiálására, de alkalmas egy alrendszer vagy az egész rendszer működésének a szemléltetésére is.

A tevékenység diagram az állapotgép diagram egyfajta duálisaként is felfogható: míg az állapotgép esetén az állapotok állnak a középpontban, és az átmenetek alárendeltek, itt az átmeneteket megvalósító tevékenységeké a fő szerep. Ezért nem véletlen a két diagram típus jelöléseinek hasonlósága – bár ez néha problémát is okoz, amikor az egyes jelölések tartalma nem teljesen azonos.

Az aktivitás diagram alapelemei

A diagram alapelemei:

  1. tevékenységek (jelölése lekerekített sarkú téglalap)

  2. átmenetek (jelölése nyíl),

  3. döntési pont (jelölése rombusz,)

  4. kezdő- és végállapot (jelölése azonos az állapotgép diagraméval).

A tevékenység (aktivitás) valamilyen végrehajtandó műveletsorozat. Ez lehet néhány utasítással megoldható, de akár nagyon bonyolult, összetett tevékenység is. A tevékenységek részleteit újabb aktivitás diagrammal is meg lehet adni, ezáltal a tevékenységek egymásba ágyazhatók.

Az egymás után végrehajtandó, egymástól függő tevékenységeket nyíllal kötjük össze. Ha az A tevékenységtől nyíl vezet B-be, az azt jelenti, hogy az A tevékenység teljes befejeződése után kell elkezdeni a B végrehajtását.

A nyilakkal tevékenységek szekvenciáját lehet kijelölni. Döntési pont közbeiktatásával alternatív végrehajtási utakat hozhatunk létre. A döntési pontba legalább egy nyíl vezet a döntést megelőző tevékenység(ek)től, és legalább két nyíl az alternatív tevékenységekhez. A döntési pontból kiinduló nyilakhoz szögletes zárójelben meg kell adni azt a feltételt, amelynek teljesülése esetén az adott irányban folytatódik a végrehajtás. Az alternatív ágak összefutásánál szintén egy rombuszt helyezhetünk el.

Az eddigi jelöléseket szemlélteti az alábbi diagram, amely egy egyetemi kurzus meghirdetéséhez kapcsolódó tevékenységeket foglalja össze, a meghirdető tanszék szempontjából.

10.11. ábra - Egyetemi kurzus meghirdetésének aktivitás diagramja

Egyetemi kurzus meghirdetésének aktivitás diagramja

Konkurens tevékenységek

Gyakran előfordul, hogy bizonyos tevékenységcsoportok egymástól függetlenül, vagy párhuzamosan végezhetők. Ezért a végrehajtási szálakat szétválaszthatjuk. A szétválasztás jele egy vastag vonal, legalább egy nyíl vezet a megelőző tevékenység(ek)től, és legalább két nyíl a párhuzamos tevékenységekhez. A szétválasztáshoz logikai kifejezés (őrszem, guard) kapcsolható, a szokásos szögletes zárójelpárral jelölve. Az alapértelmezés szerinti őrszem: [és].

A párhuzamos tevékenységsorozat végét ugyanilyen vonallal jelölhetjük (összeolvasztás). Az összeolvasztás vonala egy szinkronizációs pontot jelez: az azt követő tevékenység csak akkor kezdődhet, ha mindegyik párhuzamos tevékenység sorozat véget ért.

A párhuzamos ágak szinkronizációs vonal nélkül is összefuthatnak. Ennek az a jelentése, hogy az első befejeződő szál megszakítja a többi szálat, és a vezérlés halad tovább.

Az aktivitás digrammon megjelenő végrehajtási szálak nem azonosak a programok „szál” fogalmával, mert kétféle jelentéssel bírnak:

  1. Az egyes szálakba foglalt tevékenységek egymástól függetlenek, végrehajtásuk sorrendje lényegtelen, vagy akár párhuzamosan is végrehajtódhatnak. (Nem lényegi konkurencia.)

  2. Az egyes szálakba foglalt tevékenységeket párhuzamosan kell végrehajtani. (Lényegi konkurencia.)

Az UML nem ad eszközt a kétféle konkurencia megkülönböztetésére, tehát ezt mindig a tevékenységek jellegének vizsgálatával kell eldönteni.

Példaként visszatérve a kurzus kezelésre, a tanszék mellett a hallgatóknak is van feladatuk. Ezt fejezi ki a következő ábra.

10.12. ábra - Aktivitás diagram párhuzamos tevékenységekkel

Aktivitás diagram párhuzamos tevékenységekkel

A két szikronizációs pont között a tanszék és a hallgatók tevékenysége párhuzamosan kell fusson. A kurzus megtartására csak az után kerülhet sor, ha mind a tanszék, mind a hallgatók befejezték a kurzus választáshoz tartozó tevékenységeiket.

Sávos aktivitás diagram

Az aktivitás diagramban jelölhetjük az egyes tevékenységek végrehajtóit is. Ehhez a diagramot sávokra osztjuk. Minden sáv tetejére egy végrehajtó nevét írjuk. Az egyes tevékenységek attól függően kerülnek valamelyik sávba, hogy ki a felelős a végrehajtásukért.

A tevékenységek végrehajtói lehetnek aktorok, objektumok vagy akár nagyobb architekturális egységek.

A fenti példában a végrehajtók aktorok: a tanszéki adminisztrátor, a hallgató és a tárgy előadója. A felelősöket is feltüntető sávos diagram az alábbi ábrán található.

10.13. ábra - Sávos aktivitás diagram

Sávos aktivitás diagram

Adatfolyam és adattárolás

Az aktivitás diagramokon jelölhetjük a tevékenységek között áramló adatelemeket is. Az adatelemet téglalap jelöli, és a tevékenységeket összekötő nyilakhoz tartozik. Két lehetséges jelölési módját mutatja az alábbi ábra.

10.14. ábra - Adatfolyam jelölése

Adatfolyam jelölése

A diagramon jelölhetjük azt is, ha az adatokat tárolni kell. Kétféle tárolási módot jelölhetünk:

  1. Tranziens tárolás: adatpuffer (CentralBUfferNodes). Az adatelemeket időlegesen helyezhetjük ide. Az adatelemekre való hivatkozás törli azokat a pufferből.

  2. Perzisztens tárolás: adattár (DataStores). A bejövő adat tárolásra kerül, a lekérdezett adatok másolatként kerülnek visszaadásra. Ha egy már eltárolt objektumot helyezünk be újra, az előzőleg tárolt objektum felülíródik.

Az alábbi ábra a kétféle adattárolás jelölését mutatja. Az alternatív kurzusok listája egy tranziens tárolóba kerül. Ha valamelyikre jelentkezik a hallgató, a jelentkezését perzisztens módon kell eltárolni.

10.15. ábra - Adattárolás jelölése

Adattárolás jelölése

Szignál küldése és fogadása

Az aktivitás diagram tevékenységei összetett tevékenységek, feltételezésünk szerint időt vesz igénybe a végrehajtásuk. Szükséges lehet azonban, hogy a tevékenység végrehajtása során más tevékenységnek jelzést küldjünk. Az ilyen jelzéseket akcióknak, vagy szignálnak nevezzük. A tevékenységekkel ellentétben ezek pillanatnyi történések, végrehajtási idő nélkülinek tekinthetők.

Az aktivitás diagramon lehetőség van jelölni egy jelzés küldését és a jelzés fogadását. A jelzéshez objektum folyam is tartozhat, mert a szignállal adatokat is küldhetünk

A jelölésre mutat példát az esettanulmányból kiemelt diagram, amely egy felhasználói bejelentkezési folyamatot ábrázol. A bejelentkezés tényét egy szignál jelzi, és további szignálokat kell küldeni azoknak a moduloknak, amelyeknek a bejelentkezésről tudomást kell szerezniük.

10.16. ábra - Szignál küldése és fogadása

Szignál küldése és fogadása

Kivételek

Gyakran előfordul, hogy a tevékenységeket bizonyos feltételek bekövetkezése esetén meg kell szakítani. Ezt jelölhetjük egy kivétellel. A kivételeket a tevékenységen kívül kell lekezelni. A kivétel valójában egy speciális szignál. Jelölése egy szimbolikus villám. A kivételhez gyakran objektum folyam is tartozik, amely a kivétel keletkezésének okát és körülményeit írja le. Egyszerű példa: felhasználó bejelentkezése. Ha a felhasználó a jelszó megadása helyett az „Elfelejtettem a jelszavamat” gombot nyomja meg, ez kivételt vált ki, aminek lekezelése ebben az esetben egy jelszó emlékeztető szöveg megjelenítése. Ha nem keletkezik kivétel (azaz a bejelentkezés sikeres), a főmenü jelenik meg.

10.17. ábra - Kivétel jelölése

Kivétel jelölése