Test schopnosti UML nástrojů pracovat s XMI

OMG nedávno provedla test vybraných nástrojů, ve kterém se zaměřila na jejich schopnost pracovat se standardizovaným formátem pro výměnu dat mezi modely (XMI). Celkem se provedlo na 16 testových scénářů v aplikacích firem Atego, IBM, NoMagic, Sodius, SOFTEAM a Sparx Systems (poslední jmenovaný dodává mnou používaný Enterprise Architect).

Předseda skupiny, která se formátem pro výměnu dat zabývá, mj. prohlásil: The ability to interchange models offers the potential to significantly improve productivity, quality, and the long term retention of models. Volně přeloženo s přihlédnutím mezi řádky: test dopadl katastrofálně. Výrobci musí vyvinout ještě mnoho úsilí, než dosáhnou uživateli požadovaného výsledku (totiž aby to fungovalo správně).

Ku dobru všech firem je ale nutné přičíst, že na testu spolupracovaly a všechny chyby, které se v průběhu testu našly, byly opraveny. Současně dodávané verze by tedy všemi scénáři nyní prošly bezchybně.

Důležitější je ale zřejmě ohlášení normativního XMI (Canonical XMI). XMI tak, jak je dnes definováno, nabízí poměrně dost volitelných možností, jak např. element či atribut zapsat. Proto vzniklo normativní XMI, které utahuje popuštěnou uzdu volnosti. Teď už jen, aby to všechny významné nástroje začaly plně podporovat.

Odkazy:

Změny v UML 2.4.1 oproti UML 2.3

V UML 2.4.1 ze srpna 2011 (betu 2.4 můžeme ignorovat) došlo k poměrně dosti změnám v diagramech. V mnoha se do diagramu přidaly (existující) třídy, takže je to obecně hůře čitelné a je třeba trávit více času nad jednotlivými diagramy. Obzvláště nečitelný je např. diagram strukturovaného uzlu (Activities::StructuredActivities). Připadne mi to značně kontraproduktivní. Opět uvádím změny především z Classes::Kernel.

  • Kapitola 7: Drobné změny v úvodní kapitole Reusing packages from UML 2 Infrastructure.
  • Kapitola 7: Změna v diagramu Expressions diagram of the Kernel package. Přibyla třída LiteralReal.
  • Kapitola 7: Změna v diagramu Classifiers diagram of the Kernel package. Jde především o pojmenování rolí tříd v asociacích.
  • Kapitola 7: Jinak zakreslen diagram Features diagram of the Kernel package. Jinak a mnohem hůř. Zobrazení několika tříd vícekrát „pro lepší čitelnost“ tu čitelnost naopak zhoršili. Navíc z obrázku vyhodili výčet ParameterDirectionKind a nedali nikam jinam. V textu knihy jsem jej v obrázku záměrně nechal. Dále zde není zakreslena třída ValueSpecification, která byla přesunuta do diagramu Operations diagram of the Kernel package.
  • Kapitola 7: Překreslen diagram Operations diagram of the Kernel package. Zásadní změna je v tom, že jsou zde více formalizované výchozí hodnoty všech atributů třídy Operation. Oproti předchozímu mi tento naopak připadne obsažnější než v předchozí verzi a to bez zhoršení čitelnosti.
  • Kapitola 7: Překreslen diagram Classes diagram of the Kernel package, přidání výchozích hodnot atributů tříd Property a Association.
  • Kapitola 7: V diagramu DataTypes diagram of the Kernel package přibyla vazba mezi třídami EnumerationLiteral a Enumeration
  • Kapitola 7: V diagramu The Packages diagram of the Kernel package došlo k pár drobným, nevýrazným změnám.
  • Kapitola 7: Překreslen diagram Contents of Dependency package. Jde ale o čuňárnu. V původních verzích bylo (zcela správně) používáno kvalifikovaných jmen u relevantních tříd. Dnes je tam pouze v závorce uvedeno, ze kterého balíku třída pochází. Není to dobrý příklad, jak kreslit diagramy podle UML. V textu používám lepší zápis. Jinak ale jde o zpřehlednění a při čtení se lépe hledají souvislosti. Vypadla (jen ze zápisu, nikoliv ze standardu) asociace mezi třídami NamedElement a Namespace.
  • Kapitola 7: Překreslen diagram Contents of Interfaces package.
  • Kapitola 7.3.38: Třída Package má nový atribut URI.
  • Kapitola 7.3.45: Třída Property má nový atribut isID.
  • Kapitola 7.3.55: Třída ValueSpecification má novou metoda realValue(). Ta souvisí s novou třídou LiteralReal.
  • Kapitola 7.3.39: Třída PackageableElement má opravenou výchozí hodnotu atributu visibility z false na public (původní hodnota byla chybou standardu).
  • Kapitola 7.3.29: Přibyla nová třída LiteralReal.
  • Až do UML 2.3 byla kapitola PrimitiveTypes součástí superstruktury. UML 2.4.1 ji však přesunulo do infrastruktury. Pro znalost primitivních datových typů je tedy třeba sáhnout do 13 kapitoly infrastruktury. Další novinkou v této oblasti je nový typ Real. V superstruktuře (balík Classes::Kernel) pak najdeme odpovídající třídu LiteralReal a dále novou motody třídy ValueSpecification nazvanou realValue().

Načtení standardu UML 2.4.1 do Enterprise Architecta 9.2

Jak jsem před pár dny slíbil, napsal jsem postup, jak si importovat UML standard 2.4.1 do Enterprise Architecta. Zde překládám všechny jeho kroky.

  1. Je nutné mít Enterprise Architect verze 9.2.
  2. Stáhněte si XMI podobu specifikace, konkrétně tyto soubory:
    1. PrimitiveTypes.xmi
    2. Infrastructure.xmi
    3. Superstructure.xmi
  3. V EA si zvolte balík, do kterého chcete standard importovat.
  4. V kontextovém menu balíku zvolte možnost Import Model from XMI…
  5. Zadejte soubor PrimitiveTypes.xmi (věcí v Options si všímat nemusíte, pokud si s tím chcete pohrát, můžete).
    Dialog Import Package from XMI
  6. Stiskněte tlačítko Import.
  7. Čekejte. Aplikace bude chvíli chroupat, během čehož vytvoří požadované elementy.
  8. Zopakujte kroky 5. až 7. pro soubory Infrastructure.xmi a Superstructure.xmi.
  9. Stiskněte tlačítko Close.

A je hotovo. Ve vybraném balíku máte tři další: PrimitiveTypes, InfrastructureLibrary a UML (což je superstruktura).

Importovaný UML standard

Co importem získáte? Budete mít v modelu všechny třídy včetně vazeb, jejich atributy a metody a umístění v balících. U atributů a metod dostanete krátký popis jejich významu.

Co naopak mít nebudete? Nedostanete hlavně diagramy. Pokud chcete i je, musí bohužel nastoupit ruční práce (ta vaše). Dále nebudete mít základní popis významu tříd, nebudou tam omezení a další.

Změny v UML 2.3 oproti UML 2.2

Při pročítání UML verze 2.3 a psaní nových textů pro OCUP.CZ jsem narazil na pár změn v UML 2.3 proti předchozí verzi. Nejsou tu samozřejmě vypsány všechny, ale jen takové, které mě (jakkoliv) zaujaly. Nejvíce se starám o balík Classes::Kernel.

  • Kapitola 5: Byla odstraněna původní relativně bezvýznamná věta a nyní se zabývá významem slov typu „musí“, „nesmí“, „měl by“, apod. Jde o odkaz na RFC 2119. Dále se zabývá anotacemi v některých příkladech uvedených ve standardu.
  • Kapitola 7, Diagram 7.9
    • Role u Property již neobsahuje subsets feature.
    • Třída Classifier má nový atribut isFinalSpecialization: Boolean
    • Třída Generalization má nový atribut isSubstitutable: Boolean [0..1] = true
  • Kapitola 7.3.3: V třídě Asociation přibyla věta v úvodním popisu: A link is a tuple with one value for each end of the association, where each value is an instance of the type of the end.
  • Kapitola 7.3.4: Změněn popis asociační třídy a sémantika.
  • Kapitola 7.3.8: Třída Classifier má nový atribut isFinalSpecialization (viz popis klasifikátoru).
  • Kapitola 7.3.11: V popisu sémantiky třídy DataType je místo slovíčka „equal“ používáno „same“. Jde tedy o drobné zmírnění podmínek, v mém českém překladu bez dopadu na význam.
  • Kapitola 7.3.35: Rozšíření definice atributů třídy OpaqueExpression.
  • Kapitola 7.3.40: Změny v pravidlech třídy PackageMerge. Je vhodné si pročíst, ale stále platí to, co je uvedeno v textu.
  • Kapitola 7.3.46: Popsán vliv atributu isLeaf třídy RedefinableElement na operaci spojení balíků (třída PackageMerge).