Variantenmanagement ist ein großes Thema bei der Entwicklung von Produkten. Die Lösungen dazu sind vielfach noch bescheiden. Es gibt Ansätze, wie sich bspw. die Anforderungen verschiedener Produktvarianten in DOORS verwalten lassen, aber spätestens beim Design von Lösungen stößt man an Grenzen. Beim Pflegen verschiedener Lösungsskizzen fängt man sich Inkonsistenzen ein oder die Verwaltung ist schlicht unhandlich und lästig.

Während wir auf die Veröffentlichung der SysML 1.3 warten, sind sich die Experten einig, dass in Version 1.4 eine Lösung für Variantenmanagement einfließen soll. Sobald Toolhersteller nach Veröffentlichung des Standards dann Variantenmanagement in ihre Tools integrieren, wird das Handling extrem vereinfacht, so meine Vermutung. Einer der Lösungskandidaten für Variantenmanagement in SysML ist der Ansatz von Tim Weilkiens, den ich hier kurz vorstellen möchte.

Erweitern des Profils für Variantenmanagement

Wir definieren uns dafür ein paar Stereotypen wie folgt:

  • «Variant» für ein Paket, das eine Variante zu einer bestimmten Variation enthält
  • «Variation» für ein Paket, das eine oder mehrere Varianten eines bestimmten Aspekts enthält, bspw. Variation von Anforderungen, Variation von Struktur, Variation des Systemkontextes
  • «Variation point» für das Element, das variiert wird. Es befindet sich in der Paket-Hierarchie des Kernsystems.
  • «Variation element» für das variierte Element. Es befindet sich innerhalb eines «Variant»-Pakets

Stereotypen für Variantenmanagement in SysML

Wie man im Bild sieht, erweitern «Variation» und «Variant» die UML-Metaklasse Package. Somit sind die beiden Stereotypen auf Pakete anwendbar. Wie wir später sehen werden kennzeichnen wir mit «Variation» die Variation eines bestimmten Aspekts und mit «Variant» die darin enthaltenen Varianten dieses Aspekts.

Die Stereotypen «Variation point» und «Variation element» hingegen können angewandt werden auf jedes “PackageableElement”, also auf jedes benannte Element, das sich in einem Paket befindet. «Variation point» bezeichnet dabei das Element, das konkret variiert wird, «Variation element» kennzeichet die Variation eines solchen Elements.

Beispiel zur Variation der Struktur eines Systems

Haben wir unser Profil wie beschrieben erweitert, lassen sich nun beliebige Aspekte variieren. So könnte es verschiedene Varianten des Systemkontexts geben, da etwa – je nach Variante – unterschiedliche externe Systeme mit dem System kommunizieren. Pflegt man Anforderungen im SysML-Modell lassen sich auch Anforderungsvarianten modellieren. Oftmals wird man aber wohl Varianten der Struktur des Systems bilden, um zu zeigen, wie sich das System aus unterschiedlichen Komponenten oder Subsystemen zusammensetzt. Betrachten wir mal so einen Fall.

Definition des «Variation point»

In SysML modellieren wir strukturelle Eigenschaften von System mit Blöcken (Stereotyp «block»). Um zu zeigen, aus welchen Elementen ein Block besteht, modelliert man einen Produktbaum (oder Breakdown) des Blocks, indem man die innenliegenden Komponenten mit einer gerichteten Kompositionsbeziehung hinzufügt. Lassen Sie uns zunächst den Teil des Systems modellieren, der in jeder Variante vorkommt; wir nennen den Block System Core und modellieren das folgende Blockdefinitionsdiagramm.

Das Kernelement besteht aus drei Teilen

Unser System Core besteht also aus den drei Blöcken Part A, Part B und Part C. Diese drei Teile sind in jeder Variante vorhanden, daher sind sie Teil des “Kernsystems”. Da wir gleich eine Variante mit weiteren Blöcken Part D und Part E hinzufügen wollen, geben wir dem Block System Core den Stereotyp «Variation point», denn dies ist der Punkt, den wir variieren wollen.

Wie die drei Parts des System Core miteinander kommunizieren kann man wie gewohnt in einem Internen Blockdiagramm des Blocks System Core darstellen. Das folgende Diagramm zeigt eine vereinfachte Darstellung ohne Ports.

Internes Blockdiagramm System Core

Ein «Variation»-Paket mit diversen «Variant»-Paketen

Der Übersicht halber sollte man sämtliche Variationen auslagern in ein Paket “Variations”. So lassen sich Variationen verschiedener Aspekte geordnet verwalten. Wir behandeln hier eine Variation der Struktur des Systems, so dass wir ein Paket Structure Variation erstellen und diesem den Stereotypen «Variation» zuweisen, im Bild erkenntlich an der veränderten Darstellung des Paket-Symbols.

Paketstruktur der Elemente

Wie man sieht, befinden sich in dem Paket Structure Variation verschiedene Varianten, die System Core mit zusätzlichen Blöcken erweitern sollen. Jede dieser Varianten-Pakete erhält zur Kennzeichnung den Stereotyp «Variant», wieder ersichtlich an einem eigenen Piktogramm für diesen Stereotyp.

Modellierung des «Variation element»

In so einem Varianten-Paket legt man nun ein weiteres Blockdefinitiondiagramm an, in dem wir den Produktbaum unserer Variante modellieren. Für System Variant X fügen wir zwei weitere Blöcke mit einer Kompositionsbeziehung zu: Part D und Part E. System Variant X und alle Parts dessen erhalten den Stereotyp «Variant element», um zu kennzeichnen, dass diese Blöcke nur Teil einer bestimmten Variante sind und nicht Teil des Kernsystems.

Zusätzliche Parts der Variante X

Und nun kommt der Trick: Wir lassen den Block System Variant X von dem zuvor modellierten Block System Core erben (siehe Bild). Somit erbt System Variant X auch alle Parts von System Core.

Erzeugt man nun ein Internes Blockdiagramm des Blocks System Variant X, erhält man nicht nur Part D und Part E, sondern durch die Vererbungsbeziehung auch die Parts des Variationspunktes System Core.

Detailmodellierung der Variante

Auf diese Weise lassen sich nun Varianten mit unterschiedlichen Parts modellieren. Durch die Vererbungsbeziehung, erhält man für zumindest für Blöcke der SysML eine elegante Möglichkeit, Elemente eines für alle Varianten geltenden Kerns wieder zu verwenden.

Für alle Modellelemente, die nicht über eine Vererbungsbeziehung verfügen, bleibt derzeit nur die Möglichkeit, die Elemente des Kerns in die Diagramme der Varianten hineinzuziehen und mit dem «Variation element» explizit in Beziehung zu setzen.

Falls jemand weitergehende oder andere Erfahrungen gemacht hat mit der Modellierung von Varianten, freue ich mich über Ihren Kommentar.

, , ,

Begriffe Systemkontext

Ein zu entwickelnde System interagiert immer in irgendeiner Art und Weise mit seiner Umwelt. Es bietet Benutzern und externen Systemen bestimmte Funktionalitäten an und fordert Daten von diesen ab.

Das Abstecken der Systemgrenze sollte früh im Projekt passieren durch die Erstellung eines Systemkontext-Diagramms. Neben den Interaktionspartnern liefert die Modellierung des Systemkontextes die Antwort auf die Frage, was zum System gehört und was nicht. Als Faustregel kann dabei gelten: Alles, was im Verantwortungsbereich des Systems liegt, gehört zum System. So wird klar, dass dies unabhängig von der Tatsache ist, ob eine Komponente extern entwickelt wird oder nicht.

Bsp. Systemkontext Mobiltelefon

Bei der Modellierung wird für das Systemkontext-Diagramm ein SysML Use Case Diagram verwendet. In der Mitte steht das System (Block vom Stereotyp «System»). Um das System herum gruppieren sich die sog. Akteure. Das sind die Benutzer oder externen Systeme, die mit dem System interagieren. Ein Akteur wird dabei als Rolle verstanden (engl. actor).

Das Standard-Symbol für einen Akteur ist das Strichmännchen – auch für Systeme. Es macht aber durchaus Sinn, sich eigene Stereotypen zu definieren, die mit anderen Symbolen kennlich machen, um was es sich handelt. Ein Symbol für ein externes System ist dabei sehr empfohlen.

Je nach Bedarf lassen sich noch Symbole für Sensoren, Aktuatoren oder Umwelteinflüsse (Wetter, Wärme und dergleichen) einführen. Die SysML definiert diese Typen bereits in den Non-Normative Extensions, also Erweiterungen, die nicht zum Standard selbst gehören. Auch ein Akteur «Mechanical element» kann für viele Projekte Sinn machen.

Akteur Stereotypen

Anregungen entnommen aus

, , , , ,

Diese Woche findet in Hamburg die Konferenz der Gesellschaft für Systems Engineering statt. Am heutigen Tag startete das Event mit halbtägigen Tutorials. Den Vormittag hielt Tim Weilkiens zum Thema “Modellbasiertes Systems Engineering erleben”.

Auch wenn ich durch Tims Consulting-Tätigkeiten bei uns das Vorgehensmodell schon kenne, habe ich ich doch wieder einige Best Practices und Infos notieren können. Teilweise waren es Details, die mir noch nicht so klar waren, teilweise aber auch nur Dinge, die ich vielleicht noch deutlicher in unserer eigenen MBSE-Guideline klarstellen könnte.

Nach einem zügigen Durchlaufen über den Sinn und Zweck von MBSE (schließlich war es ein Anfänger-Tutorial), haben wir als Beispiel ein Waldbrandmelde-System in MagicDraw modelliert.

Hier mal in Kurzform meine Notizen, vielleicht hilft es jemandem:

  • Um Pakete global unterscheidbar zu machen, sollten sie immer den Systemnamen enthalten. Für das Forest Fire Detection System (FFDS) also bspw.  FFDS_Requirements, FFDS_Structure usw.
  • So wie ein Buch ein Inhaltsverzeichnis hat, sollte jedes Paket ein Content-Diagramm haben. Das ist ein Package-Diagramm, das den Inhalt des Pakets aufzeigt. In MagicDraw gibt es übrigens ein spezielles Content Diagram, das auch Inhalte der eingebunden Diagramme anzeigen kann.
  • SysML kennt als Akteur nur die Strichmännchen. Man sollte sich eigene Kategorien (Akteur-Stereotypen) definieren, mindestens aber «External System», um zwischen menschlichen und nicht-menschlichen Akteuren unterscheiden zu können.
  • Bei der Definition des Systemkontextes ist es oft schwierig abzugrenzen, ob es zum System gehört oder zum Systemkontext, also als Akteur modelliert wird. Als Faustregel kann gelten: Alles, was im Verantwortungsbereich des Systems liegt, gehört zum System. So wird klar, dass dies unabhängig von der Tatsache ist, ob eine Komponente extern entwickelt wird oder nicht.
  • Es ist zu beachten, dass es sich bei der Modellierung des Systemkontexts um eine logische Systemgrenze handelt, nicht um eine physikalische.
  • Als Akteure modelliert man die eigentlichen Fachadressaten, also im Beispiel das Fire Department und nicht etwa Internet.
  • Stakeholder werden in der Regel nicht als Akteure des Systemkontextes modelliert, da sie nicht mit dem System interagieren. Dennoch kann es Sinn machen, wichtige Stakeholder zu modellieren, dann aber als Akteure in einem eigenen Diagramm.
  • Die «include»-Beziehung zwischen Use Cases sollte nur verwendet werden, wenn der referenzierte Anwendungsfall von mehr als einem Anwendungsfall eingebunden wird, wenn als Redundanz vermieden wird.
  • Beim Modellieren von Anwendungsfällen identifiziert man zunächst alle Anwendungsfälle zu einem bestimmten Akteur und assoziiert dann zu jedem gefundenen Anwendungsfall die anderen beteiligten Akteure.
  • Das Modellieren von Aktivitätsdiagrammen ist eine Gradwanderung der Abstraktionsebene. Gewisse Design-Entscheidungen sind an dieser Stelle schon notwendig, damit die Aktivitäten nicht zu abstrakt und somit nutzlos bleiben. Andererseits befindet man sich bei der Modellierung von Anwendungsfällen immer noch in der Analyse, so dass die Aktivitäten nicht zu konkret werden dürfen, um sich spätere Design-Entscheidungen nicht zu verbauen.
  • Nicht jeder Use Case muss durch ein Aktivitätsdiagramm verfeinert werden. Überlegen, was wirklich hilft!
  • Anwendungsfälle können in Ausnahmefällen auch durch Zustandsdiagramme beschrieben werden. In der Regel passen aber Aktivitätsdiagramme besser. Zustandsdiagramme nur verwenden, wenn der Use Case sehr zustands-fokusiert ist.
  • Use Cases sind eine Verfeinerung von funktionalen Anforderungen, so dass man eine «refine»-Beziehung vom Use Case zum Requirement zieht.
  • Die SysML hat drei Abstraktionsebenen: (1) die Typebene in den Blockdefinitionsdiagrammen, (2) die Rollenebene in den Internen Blockdiagrammen, (3) die Instanzebene in den Parametrischen Diagrammen.
  • In den bald erscheinenden SysML 1.3 sind einige Verbesserungen zum Einheitensystem (bspw. Umrechnung zwischen Einheiten) sind zu erwarten.
  • In SysML sind für Anforderungen nur Name, ID und Text definiert. Alles andere (wie Priorität und dergleichen) wären Vorgaben, die dem SysML-Standard nicht zustehen.
  • Im Produktbaum stellt man die Blöcke, aus denen das System besteht, mit einer gerichteten Kompositionsbeziehung dar. Im internen Blockdiagramm des System-Blocks werden diese Blöcke dann als Part Properties dargestellt. Diese entsprechen im bdd den Pfeilen (Assoziationsende) der gerichteten Komposition und bedeutet, dass das Part Property  nach dem Bauplan des entsprechenden Blocks gebaut ist.
  • Die Konnektoren im Internen Blockdiagramm (ibd) stehen für Kommunikation im weitesten Sinne zwischen den beteiligten Parts.
  • Man sollte für jeden Aspekt (information, electrical, mechanical) ein Internes Blockdiagramm erstellen.
  • Der Name “Standard Port” ist eigentlich unglücklich, “Service Port” wäre netter gewesen, denn die Ports bieten Dienste an.
  • Das SysML-Interface (Lolli-Darstellung) steht für eine Liste von Funktionen und hängt an einem Standard-Port.
  • Um die drei Aspekte (information, electrical, mechanical) entsprechend darzustellen, erhält man auch drei Ports. Damit man weiß, dass diese zusammen gehören, sollten diese alle auf einem Standard Port liegen. Solche Nested Ports sind in SysML explizit erlaubt.
  • In SysML 1.3 sind die Interfaces (Lollies) nicht mehr notwendig. Funktionen stehen dann in der Port-Definition selbst.

Ich werde bestimmt einige der Punkte in Zukunft nochmal aufgreifen.

 

, ,