SDL – OO jazyk pro návrh systémů reálného času

Libor Buš

bus@agit.cz

 

V současné době hýbou oblastí software nejrůznější metodiky návrhu SW podporované CASE (Computer Aided Software Engineering) nástroji. Cílem tohoto článku je čtenáře seznámit s u nás poměrně neznámým jazykem SDL (Specification and Description Language) a zdůraznit jeho vazbu na jazyk UML (Unified Modelling Language) ve vývojovém cyklu software.

Historie

Na počátku vývoje jazyka SDL byla snaha navrhnout jednoduchou a srozumitelnou metodiku pro popis komunikačních systémů. V roce 1976 vyšlo první vydání standardu Z.100 organizací CCITT (nyní ITU-T), obsahovalo však pouze doporučení jak malovat komunikující stavové diagramy. Postupem času se původní návrh SDL vyvinul v mocný grafický jazyk s objektově orientovanými vlastnostmi, který se v současné době těší ve světě velké oblibě zejména v oblasti telekomunikací. V současné době je podána již třetí verze návrhu jazyka UML 2.0 [10], která do jazyka UML přináší nově vlastnosti SDL - modelování architektur pomocí komponent s definovaným rozhraním či modelování chování pomocí stavového automatu.

Základní vlastnosti SDL

Jazyk SDL je jazyk založený na popisu modelovaného systému pomocí paralelně běžících konečných automatů (KA) rozšířených o řadu užitečných vlastností.

 

Základními prvky KA jsou stavy a přechody mezi nimi. Jeden stav je počáteční a v tomto stavu začíná činnost KA. Na základě splnění nějaké podmínky (typicky přijetí daného signálu) může přejít KA z jednoho stavu do druhého, případně svou činnost ukončit.

 

Podobně jako jazyk UML, i SDL se skládá z několika typů diagramů. Diagramy popisují buď hiearchii jednotlivých částí modelovaného systému a komunikačních cest mezi nimi, nebo modelují chování pomocí KA.

 

Struktura

Základní strukturální jednotkou v SDL je agent, který může být typu blok nebo proces. Hiearchie systému se vytváří vzájemným skládáním agentů.

 

Procesový agent se může skládat z dalších procesových agentů. Pokud ovšem obsahuje nějaké další agenty, je vždy pouze jeden z nich aktivní. Na druhé straně agenti, ze kterých se skládá blokový agent mohou být typu proces i blok a běží všichni nezávisle a najednou. Ačkoliv procesový agent může mít složitou vnitřní strukturu, obvykle obsahuje pouze jeden KA. Blokový agent naopak obvykle nebývá popsán přímo pomocí KA, ale jeho činnost je dána kompozicí dalších bloků či procesů. Nejvyšší blok vzniklé struktury se nazývá systém, jeho okolí se označuje jako prostředí.

 

Podobně jako v jiných programovacích jazycích mohou agenti obsahovat také deklarace procedur a jejich následné volání.

 

Komunikace

Agenti si vyměňují data pomocí posílání asynchronních zpráv, kterým se v terminologii SDL říká signály. Komunikační cesty mezi agenty se nazývají kanály.

 

Posílání zpráv není však jedinou možností vzájemné komunikace v SDL, procesy mohou vykonávat kód tzv. vzdálené procedury definované v jiném SDL procesů, případně číst či zapisovat veřejné proměnné jiného procesu.

 

Na obrázku 1 je příklad struktury systému AccessControl, který je tvořen bloky Local a Central. Mezi blokem Local a prostředím jsou komunikační kanály FromReader, ToDisplay a ToDoors, kterými lze posílat zprávy. Mezi oběma bloky je komunikační kanál umožňující volat vzdálené procedury definované v bloku Central z  bloku Local.

 

Obrázek 1

 

Chování

Mimo schopnosti vyslat signál nebo na základě příchozího signálu vykonat určitý přechod mají KA procesů celou řadu rozšíření. První z nich je práce s proměnnými. Každý agent může mít deklarovány vnitřní proměnné a pomocí jejich hodnot dále větvit svou strukturu. Další užitečnou vlastností je  dynamické vytváření nových paralelně běžících instancí procesů.

 

Na obrázku 2 je příklad procesového agenta.

 


Obrázek 2

 

Data

V SDL jsou definovány všechny základní datové typy známé z jiných programovacích jazyků (celé číslo, znak, řetězec, …). Uživatel si také může definovat vlastní objektové datové typy například pomocí diagramů tříd známých z UML (viz obrázek 3).

 


Obrázek 3

 

Čas

Čas je v SDL chápán jako bezrozměrná veličina umožňující diskrétní simulaci chování SDL systému. Navázání času na konkrétní časovou jednotku se provádí až při generování kódu z SDL návrhu.

 

Pro modelování časových prodlev se v SDL používají tzv. časovače. Každý časovač se svázán s konkrétním procesem. Nastavením časovače na konkrétní časovou hodnotu začne jeho odpočítávání. Po uplynutí nastaveného času se danému procesu automaticky vyšle signál. Reakci na příchod signálu časovače vypadá v SDL úplně stejně jako reakce na obyčejný signál.

Vývojový cyklus projektu v SDL

Vývojový cyklus softwarového projektu se typicky skládá z několika fází: zachycení požadavků na systém, tvorby analytického modelu, tvorby konkrétního návrhu, implementace návrhu a testování implementace a návrhu.

 

V první fázi vývojového cyklu se specifikují požadavky na modelovaný systém pomocí kombinace textového zápisu a scénářů chování (use case). Scénáře chování, které by měly vystihovat iterakci mezi uživateli a modelovaným systémem, se  modelují diagramy MSC (Message Sequence Chart). MSC diagramy (obrázek 4) umožňují především přehledně graficky zobrazit časovou posloupnost událostí, které by se měly v modelovaném systému vyskytovat, a velmi připomínají diagramy sekvencí jazyka UML. Jsou však mnohem obecnější.

 

Obrázek 4

 

Ačkoliv jazyk SDL lze využít v celé šíři vývojového cyklu, je vhodné zejména v abstraktnější analytické části modelovat systém prostředky jazyka UML – diagramy tříd a stavových diagramů.

 

Díky stereotypům jednotlivých tříd lze plynule přejít z analýzy do návrhu v SDL – datové třídy se mapují na datové typy SDL, případně na perzistentní objekty v databázi, a třídy popisující chování se mapují na jednotlivé bloky nebo procesy SDL. Stavové UML diagramy tříd vytvořené během analýzy lze také přímo převést do KA popisující chování procesů v SDL. Takto získaná SDL struktura modelovaného systému je základem pro další rozvíjení návrhu již na úrovni SDL.

 

Další fáze vývojového cyklu bývají závislé na použitém CASE nástroji. První zajímavou možností, kterou se většina CASE nástrojů podporující jazyk SDL odlišuje od CASE nástrojů podporující jiné metodiky (např. UML), je možnost simulovat chování systému již během návrhu, čímž se většina chyb odstraní již v ranném stadiu. Simulátory SDL návrhu umožňují graficky ladit navržený systém podobně jako je tomu u vývojových prostředí jiných programovacích jazyků, tj. například krokovat simulaci, spustit simulaci k zarážce, sledovat hodnoty proměnných nebo generovat MSC odpovídající aktuálnímu stavu simulace.

 

Průběh simulace je nutno kontrolovat ručně. Některé nástroje umožňují i automatickou kontrolu správnosti návrhu procházením stavového prostoru SDL systému pomocí tzv. validace. Validací systému lze odhalit výskyt předem definovaných chybových situací např. zablokování procesů (deadlock) nebo neošetřený příjem konkrétního signálu. Chování systému lze také ověřovat podle scénářů chování popsaných diagramy MSC získaných ve fázi specifikování požadavků na modelovaný systém.

 

Cílem simulace a validace systému je odstranění veškerých chyb ve fázi návrhu ještě před vlastní implementací. Pokud je systém v SDL korektně namodelován, lze často vygenerovat téměř 100 % výsledného kódu automaticky. Implementační fázi tak za nás obstará generátor kódu do cílového programovacího jazyka (typicky C/C++). Na ruční kódování pak zbude pouze implementace uživatelských knihoven (rutiny pro manipulaci s daty, grafické API, rozhranní pro přístup do databáze, atp.), které byly v SDL návrhu použity.

 

SDL CASE nástroje

Závěrem uveďme přehled vlastností tří nejpoužívanějších CASE nástrojů podporující jazyk SDL – Telelogic SDL Suite, Cinderella SDL a LG OSD.

 

Telelogic SDL Suite

V současné době nejrozšířenějším SDL CASE nástrojem na trhu je SDL Suite švédské firmy Telelogic [5]. SDL Suite podporuje jak vlastní SDL, tak metodiku SOMT (SDL-oriented Object Modeling Technique), která je prvním výsledkem slučování UML a SDL.

 

SDL Suite obsahuje nejen všechny výše uvedené možnosti – editory diagramů MSC, UML a SDL, simulátor, validátor a konfigurovatelný generátor výsledného kódu pro danou platformu, ale i spoustu dalších.

 

Generátor SDL Suite generuje kód v jazyce C/C++ z vytvořeného  SDL modelu systému. Nastavením generátoru lze docílit tří typů integrace vygenerovaného kódu s cílovým OS – lehkou, těsnou a vláknovou. Rozdíl mezi těmito integracemi spočívá ve způsobu mapování SDL procesu na proces OS. V lehké integraci je celý SDL systém mapován na jeden proces OS a vygenerovaná aplikace obsahuje vlastní plánovač úloh. V těsné integraci lze jeden (nebo více) SDL procesů namapovat na jeden proces OS. Vláknová integrace se liší od těsné tím, že místo o procesech OS se mluví o vláknech (threads). Generátor SDL Suite v současné verzi 4.3 podporuje většinu RTOS: Posix kompatibilní Unix, OSE delta, VxWorks a Win32.

 

SDL Suite existuje ve verzi pro Windows,  Solaris a HP Unix.

 

Cinderella SDL

Zřejmě druhým nejrozšířenějším nástrojem je Cinderella SDL dánské firmy Cinderella [6]. V současné verzi 1.3 tento nástroj obsahuje editor diagramů SDL a simulátor. Existuje pouze ve verzi pro Windows.

 

OSD Case Tool

Posledním z trojice nejrozšířenějších SDL CASE nástrojů je OSD Case Tool ruské firmy LG Soft Lab [7]. Součástí tohoto nástroje jsou editory diagramů UML, SDL a MSC, dále simulátor a generátor kódu v jazyce C/C++ pro OS Windows, Linux a VxWorks. Tento nástroj existuje pouze ve verzi pro Windows.

 

 

Odkazy:

1.        ITU-T Recommendation Z.100 – Specification and Description Language

2.        ITU-T Recommendation Z.120 – Message Sequence Charts

3.        ITU-T Recommendation Z.109 – SDL in Combination with OMG UML 1.3

4.        SDL forum – www.sdl-forum.org

5.        Telelogic AB – www.telelogic.com

6.        Cinderella – www.cinderella.dk

7.        LG Soft Lab – www.lgsoftlab.ru

8.        Agit AB – www.agit.cz

9.        OMG – www.omg.org

10.     U2 partners – www.u2-partners.org