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