Mělo úsilí vložené do UML 2.5 smysl?

Dlouho jsem se odhodlával k tomu, abych sepsal nejen to, jaké změny UML 2.5 přináší, ale také to, zda tyto změny mají smysl. Konečně jsem se k tomu dostal, takže se na to nyní pojďme společně podívat.

Trocha historie

Konečná podoba standardu UML 2.0 byla vydána sdružením OMG v roce 2005, tedy dva roky poté, co se s ní seznámilo. Od té doby docházelo pouze k dílčím změnám a opravám, které se ve standardu postupně nacházely (ostatně sám na některé poukazuji v přípravném textu pro certifikaci OCUP). UML standard se skládal ze dvou částí: infrastruktury a superstruktury. První jmenovaná byla především pro vývojáře UML nástrojů a blázny, druhá pak pro uživatele UML jako takového.

Dlouhou dobu se mluvilo o tom, zda připravit UML verze 3.0 nebo zda udělat jen dílčí změny. Bohužel OMG je složeno mj. z několika mezinárodních společností, a kdo v nějaké takové korporaci pracuje, tak ví, že dosáhnout seriosního výsledku je téměř nemožné. A teď si představte, že se takových firem sejde více a každá vnitřně přemýšlí, co do UML zavést a pak ještě musí komentovat návrhy dalších zainteresovaných stran. Je tedy jasné, že výsledek nemůže být ani v rozumné době, a často ani přínosný. Jen opravy drobných chyb trvají roky! Možná právě proto se začalo hovořit pouze o zjednodušení standardu jako takového, ovšem tak, aby koncový uživatel nic nepoznal. Původní termín byl několikrát posunut, jeden z posledních takových byl květen loňského roku. Ačkoliv se OMG probudilo, bohužel zjistilo, že letos, tj. v roce 2014, bude slavit 25 let své byrokratické existence, a tak vše šlo stranou a začaly se připravovat zákusky, šampaňské a dortíky na oslavu. Kvůli tomu tedy máme první beta verzi UML 2.5 vydanou v říjnu 2012, druhou beta verzi v září 2013 a od té doby je ticho po pěšině (zřejmě lemované výsledky bujarých oslav).

Ale abych jim úplně nekřivdil, alespoň v certifikační zkoušce se něco událo (viz dále). Kdy ovšem bude konečná verze UML 2.5, tak o tom se můžeme zatím jen dohadovat. Můj osobní názor je takový, že brzy někomu bouchnou saze a dle úsloví z nouze cnost se druhá beta prohlásí za onu kýženou finální (s opravdu minoritními úpravami).

Změny v UML

Nyní ale již k vlastním změnám. Tou první zásadní a viditelnou je sloučení superstruktury a infrastruktury do jediného dokumentu (což je úspora cca 150 stran) nazvaného čistě a prostě OMG Unified Modeling Language. Druhou, už ne tolik viditelnou, ale zcela nejzásadnější změnou je, že se pro definici UML nepoužívá spojování balíků (třída PackageMerge), ale každá metatřída je definovaná na jednom místě jako jeden celek.

Tuto druhou změnu považuji za poměrně velkou podpásovku a nesmysl. Hned na začátek musím na rovinu uznat, že operace spojení balíků je hodně náročná a k pochopení si musíte pár věcí načíst. To je jediný argument, který pro vypuštění akceptuji. Na druhou stranu UML nepoužívalo všechna pravidla této operace, jen ty nejjednodušší. A teď to hlavní: dříve stačilo nastudovat balík Classes::Kernel (případně přidat velmi jednoduché Classes::Dependencies, Classes::Interfaces a Classes:: AssociationClasses) a uměli jste základ, jádro UML. Mohli jste modelovat třídy, vazby mezi nimi, a jakmile bylo třeba naučit se něco dalšího, stačilo stavět na již naučených dovednostech. Ne však tak již dnes. Např. hned po první kapitole, kde se dozvíte o třídách Element, Relationship, DirectedRelationship a Comment, na vás čekají šablony. Tj. téma, které jednak je např. obsaženo až v poslední úrovni testu znalosti UML a jednak téměř nikdo nepoužívá. U hodnot se pak již standard zmiňuje např. o TimeExpression či Duration (opět, zřídkakdy používaná část UML) či o chování. A mohl bych pokračovat. Nelze tedy jednoduše studovat UML po logicky ucelených blocích postupně a na znalostech stavět. Jestli tím chtělo OMG podpořit prodej knih o UML, těžko říct. Ale dle standardu se již UML těžko naučíte. Hodně těžko.

Pojďme ale dál. Snahou tvůrců nové verze bylo maximálně omezit nutnost mít tzv. dopředné znalosti, tedy ve výkladu použít něco, co se teprve bude probírat v pozdější kapitole. Musím uznat, že tohle se vcelku povedlo. Jako důsledek toho je nejen jiné členění kapitol, ale i jiné rozdělení UML do jednotlivých balíků (viz následující obrázek, kde je náhled na část UML 2.4.1 a 2.5 načteného do Enterprise Architekta).

Ve standardu již nenajdete úrovně shody s UML dle úrovní L0 až L3 čistě proto, že to nikdo nepotřeboval a nepoužíval. Jestliže totiž některý současný nástroj chce podporovat UML, tak ho podporuje celý. Tedy… snaží se. Ne však vždy zcela správně.

Změn doznala i struktura základního vysvětlování dané oblasti, tedy notace, sémantika, pravidla a další potřebné věci. V UML od 2.0 až do 2.4.1 včetně byla za začátku každého celku (např. balík Classes) kapitola nazvaná Abstract syntax, kde byly diagramy vztažených elementů. Poté následoval popis každého elementu (tj. elementy, ze kterých je odvozen, popis, atributy, asociace, omezení, sémantika a notace), který byl touto částí definován. Na závěr pak byla souhrnně zobrazena notace. Výhoda byla, že když jste potřebovali něco vědět o konkrétním elementu, měli jste to na jednom místě. Pokud jste potřebovali znát, jak tyto elementy fungují dohromady (např. kompozitní struktury), museli jste hodně listovat.

UML 2.5 se k tomu staví jinak. Každý balík má krátké shrnutí na začátku a poté je rozdělen do podoblastí (např. balík Simple Classifiers popisuje v jedné části datové typy, v jedné signály a v jedné rozhraní). Každá takováto podoblast ukazuje diagram relevantních prvků, popisuje sémantiku, notaci a uvádí příklady. Velkou výhodou je, že vidíte, jak tyto prvky spolu souvisí a jak se případně doplňují. Poté následuje část nazvaná Classifier Descriptions, ve které jsou již formálně uvedeny diagramy, kde se prvek nachází (paráda!), prvky, od který je ten popisovaný nejen odvozený, ale i další, které z něj vycházejí (paráda!), asociační konce a omezení. Jestliže však chcete mít popis elementu na jednom místě, máte smůlu, což je neskutečný průser. UML standard má fungovat jako reference a tento způsob to neumožňuje! Sám tedy používám pro hledání informací jak UML 2.4.1, tak i 2.5, a to na základě toho, co potřebuji zjistit.

Dosud jsme se bavili jen o změnách ve struktuře dokumentu, ale verze 2.5 přináší i pár drobných změn, které postřehne málokdo (a pro málokterého z uživatelů má nějaký sebemenší význam). Takže jen ve zkratce:

  • Autoři se snažili opravit všechny chyby v omezeních (constraints) definovaných pomocí OCL. Konečně!
  • Několik násobností s dolní hranicí 1 bylo posunuto na 0.
  • Informace {ordered} byla někam přidána a někde naopak odebrána, aby to jako celek dávalo smysl.
  • Vlastnost LoopNode::loopVariable je nyní kompozitní.
  • NamedElement::clientDependency je nově odvozená vlastnost (derived).

Změny v certifikačních zkouškách OCUP

O změnách v certifikační zkoušce jsem toho už napsal poměrně dost, stačí se podívat na mé první informace o změnách a o průběhu testu. Zde tedy jen pár základních bodů, které jsou důležité či které mě zaujaly z přechodu z OCUP na OCUP 2:

  • Zkouška první úrovně se přejmenovala z Fundamental na Foundation.
  • Prozatím lze skládat pouze úroveň Foundation a pokud máte úroveň Fundamental, pak i další dvě úrovně (více v článku o certifikační schizofrenii, časem se snad to srovná).
  • Konečně je test zaměřen mnohem víc na praktické znalosti uživatele UML nežli na akademické znalosti standardu.
  • Platnost certifikátu OCUP2 bude pět let. Certifikáty OCUP platí na doživotí, ale jsou již označovány jako zastaralé (obsolete).

Podrobnější informace pak najdete již v uvedených článcích.

Mělo to tedy smysl?

Co se UML jako takového týče, tak rozhodně ne. Nebýt vypuštění používání třídy PackageMerge ze standardu, změnu bych uvítal. Ale takhle to byla zbytečná práce. Vynaložené úsilí se mělo věnovat na opravu chyb a definování některých požadovaných změn.

U zkoušek OCUP (2) jsem naopak moc rád, že ke změně došlo (a to bez ohledu na to, že já vynaložil mnoho času na text pro zkoušku úrovně Advanced a teď evidentně bude mnohé jinak). Konečně to prověří nejen teoretickou znalost UML, ale prokáže, že nad tím umíte přemýšlet, že UML dokážete použít a koneckonců to něco vypoví i o vašich znalostech objektově orientovaného světa. A to je dobře.