11.10.2013 Aufrufe

Informationstransfer von UML nach ASCET - ETAS

Informationstransfer von UML nach ASCET - ETAS

Informationstransfer von UML nach ASCET - ETAS

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Von Marcel<br />

Hachmeister,<br />

Robert Bosch<br />

GmbH<br />

24<br />

RT 1.2007<br />

Informations-<br />

transfer <strong>von</strong> <strong>UML</strong><br />

<strong>nach</strong> <strong>ASCET</strong><br />

Jede Entwicklungsphase wird<br />

unterstützt: Von der Software-Architektur<br />

bis zur Implementierung<br />

Die Durchgängigkeit <strong>von</strong> der Software-Architektur bis zur Implementierung ist ein zentrales<br />

Element im Software-Entwicklungsprozess der Getriebesteuerung. Der Artikel zeigt,<br />

wie jede Entwicklungsphase durch aufeinander abgestimmte Tools unterstützt und die<br />

Durchgängigkeit des Entwicklungsprozesses gewährleistet wird.<br />

D ie<br />

immer umfangreicher und<br />

komplexer werdenden Software-<br />

Umfänge verlangen <strong>nach</strong> abstrakteren<br />

Beschreibungssprachen. Nach Assembler<br />

und C-Programmierung werden<br />

jetzt grafische Beschreibungssprachen<br />

eingesetzt, sagt doch ein Bild mehr als<br />

tausend Worte.<br />

Zur Erreichung eines effizienten Software-Entwicklungsprozesses<br />

setzt die<br />

Robert Bosch GmbH bei der Software-<br />

Entwicklung der Getriebesteuerung<br />

daher eine aufeinander abgestimmte<br />

Kombination aus grafischen Designund<br />

Entwicklungstools ein.<br />

Die Spezifikation der Software-Architektur<br />

oder des Grobdesigns erfolgt in<br />

<strong>UML</strong> (Ameos <strong>von</strong> Aonix), das Feindesign<br />

und die Eingabe der Implementierungsinformation<br />

erfolgen in <strong>ASCET</strong><br />

<strong>von</strong> <strong>ETAS</strong>. Dabei werden alle notwendigen<br />

Informationen des <strong>UML</strong>-Modells<br />

automatisch <strong>nach</strong> <strong>ASCET</strong> übertragen.<br />

Diese Transformation erfolgt durch das<br />

Tool aquintos.M2M der auf Modelltransformationen<br />

spezialisierten Firma<br />

aquintos (siehe Bild 1).<br />

Die Ergebnisse der einzelnen Phasen<br />

stehen in einem festen Bezug zueinander.<br />

Dieser Bezug darf nicht verloren<br />

gehen und wird durch geeignete Toolkopplung<br />

sichergestellt. Dadurch wird<br />

eine hohe Produktqualität erreicht<br />

und die Anzahl der Rekursionen auf<br />

ein Minimum beschränkt. Das in früheren<br />

Entwicklungen entstandene Eigenleben<br />

der einzelnen Entwicklungsphasen<br />

und die damit einhergehende<br />

Inkonsistenz wird wirkungsvoll ausgeschlossen<br />

(z. B. Designdokumentation<br />

passt nicht mehr zum Code etc.).<br />

Dieser Artikel befasst sich mit der<br />

Erstellung des Grobdesigns mittels<br />

<strong>UML</strong> (Unified Modeling Language),<br />

dem Transfer der statischen Softwarestruktur<br />

<strong>nach</strong> <strong>ASCET</strong> mit dem anschließenden<br />

Feindesign sowie der<br />

Implementierung.<br />

Software-Architektur/Grobdesign<br />

eines Softwareteils<br />

In der Getriebesteuerung der Robert<br />

Bosch GmbH wird die Beschreibungssprache<br />

<strong>UML</strong> eingesetzt. Durch diese<br />

normierte und international anerkannte<br />

Beschreibungssprache werden<br />

Missverständnisse vermieden und die<br />

Lesbarkeit sichergestellt. Die grafische<br />

Notation erlaubt es, komplexe Sachverhalte<br />

übersichtlich darzustellen. Die<br />

<strong>UML</strong> ist besonders für objektorientierte<br />

Software-Entwicklung ausgelegt.<br />

Aufgrund der notwendigen hohen<br />

Code-Effizienz bei Embedded Realtime-Systemen<br />

wird die Software der<br />

Getriebesteuerung in C programmiert.<br />

Daher werden die Möglichkeiten der<br />

Objektorientierung und der <strong>UML</strong>-<br />

Beschreibungselemente nur eingeschränkt<br />

benutzt.<br />

Das OMOS-Konzept <strong>von</strong> der Robert<br />

Bosch GmbH wurde entwickelt, um<br />

wesentliche Elemente der Objektorientierung<br />

zu nutzen und in C-Code<br />

abzubilden (OMOS = Objektorientiertes<br />

Modellierungskonzept für Steuergerätesoftware).<br />

OMOS ist als Zusatz in Ameos verfügbar.<br />

Hinter dem OMOS-Konzept verbergen<br />

sich dabei zwei wesentliche Strategien:<br />

• Variantenhandling und Konfiguration<br />

• Anbindung vom Grobdesign an das<br />

Feindesign/Implementierung (z. B.<br />

Abbildung <strong>von</strong> objektorientierten<br />

Methoden auf C durch C-Coderahmengenerierung)<br />

Die Umsetzung dieser Strategien mit<br />

<strong>UML</strong> wird im Folgenden kurz beschrieben.<br />

Auf detaillierte Umfänge<br />

<strong>von</strong> OMOS kann an dieser Stelle nicht<br />

eingegangen werden.<br />

Zur Beschreibung <strong>von</strong> Varianten wird<br />

die Vererbung eingesetzt. Ziel ist, die<br />

gemeinsamen Software-Anteile für<br />

verschiedene Projekte in der „Elternklasse“<br />

zu modellieren. Die projektspezifischen<br />

Anteile werden in der<br />

„Kindklasse“ modelliert. Dieses Stilmittel<br />

wird auch dazu benutzt, um<br />

komplette Funktionen auszublenden<br />

(für unterschiedliche Projektanforderungen),<br />

siehe Bild 2.<br />

Bild 1:<br />

Phasen in der<br />

Software-<br />

Entwicklung.<br />

Bild 2:<br />

<strong>UML</strong>-Klassendiagramm.<br />

Architektur des SW-Systems<br />

Architektur/Grobdesign<br />

eines SW-Teils (Subsystems)<br />

Feindesign<br />

eines SW-Teils (Subsystems)<br />

<strong>ASCET</strong> Editor<br />

«1-Class»<br />

CL_TSiCnr<br />

«1-Class»<br />

CL_TSiDhl<br />

«1-Class»<br />

CL_TSiFo<br />

«1-Class»<br />

CL_TSiHil<br />

Ameos<br />

Implementierung & Codegenerierung<br />

eines SW-Teils (Subsystems)<br />

«1-Class»<br />

CL_TSi_Bas<br />

«1-Class»<br />

CL_TSiHot<br />

Teilobjektdiagramm ----><br />

Strukturierung der Software<br />

«1-Class»<br />

CL_TSiWu<br />

«1-Class»<br />

CL_TSiWtr<br />

«1-Class»<br />

CL_TSiStgo<br />

Die Objekte werden im <strong>UML</strong>-Klassendiagramm<br />

festgelegt. Im vorliegenden<br />

Beispiel handelt es sich um eine<br />

Klasse, sodass die Objekte nicht explizit<br />

ausgewiesen werden. Klassendiagramme<br />

sind das zentrale <strong>UML</strong>-<br />

Element des OMOS-Konzepts.<br />

Die Konfiguration der Software erfolgt<br />

im Konfigurationseditor. Er legt fest,<br />

<strong>von</strong> welcher Klasse die Objekte instantiiert<br />

werden und definiert die Zugehörigkeit<br />

der Klassen zu einem (Kunden-)<br />

Projekt.<br />

Transformation<br />

des Ergebnisses<br />

des Grobdesigns/<br />

Formulierung der<br />

Transferregeln<br />

«1-Class»<br />

CL_TSiStgo<br />

«1-Class»<br />

CL_TSiStgo_Bas<br />

-bActv : bool<br />

-sDet: uint8<br />

-bDwnShft21: bool<br />

-ctDwnShft21: uint8<br />

-swtPlrTab_C: bool<br />

-tTraMax_C: uint8<br />

-rAccPedCst_C: uint8<br />

-drAccPedRngB_C:<br />

sint16<br />

-rAccPedRngA_C: uint8<br />

-rAccPedRngB_C: uint8<br />

-nTosRngA_C: uint16<br />

-nTosRngB_C: uint16<br />

-ctDwnShft21_C: uint8<br />

+CalcSituation()<br />

+Is_bActv() : bool<br />

«1-Class»<br />

CL_TloTra<br />

«1-Class»<br />

CL_TloTcp<br />

«1-Class»<br />

CL_TloPed<br />

«1-Class»<br />

CL_TloW<br />

Vererbungsdiagramm ----><br />

Darstellung <strong>von</strong> Varianten.<br />

Die Klasse CL_TSiStgo_Bas<br />

kann wegkonfiguriert<br />

werden.<br />

In dieser ersten Phase werden die<br />

Grundlagen für die spätere Erweiterbarkeit<br />

und Varianz der Software gelegt.<br />

Der Entwickler wird besonders<br />

durch folgende Eigenschaften unterstützt:<br />

• grafische Beschreibung<br />

• Mechanismen für variantenreiche<br />

Software (Reuse, Projektausprägungen)<br />

Direkte Auswirkung auf Feindesign/<br />

Implementierung hat ausschließlich<br />

das Klassendiagramm. Alle übrigen<br />

Diagrammtypen haben lediglich beschreibenden<br />

und damit ergänzenden<br />

Charakter (z. B. Sequenz-, State-,<br />

Activity-Diagramme).<br />

Transformation des Grobdesigns<br />

zur Implementierung<br />

Für Softwareteile, die sich nur bedingt<br />

für eine grafische Programmierung<br />

eignen (z. B. das Speichermanagement<br />

eines Steuergeräts mit seinem<br />

hohen Anteil an Tabellen und Verzeigerungen),<br />

steht eine C-Coderahmengenerierung<br />

zur Verfügung (siehe<br />

OMOS). Die C-Coderahmen erhalten<br />

automatisch alle wesentlichen<br />

<strong>UML</strong>-Modellinformationen (z. B. Messund<br />

Applikationsgrößen aus Attributen,<br />

Include-Anweisungen aufgrund<br />

<strong>von</strong> Kommunikationsbeziehungen, Programmrümpfe<br />

für Methoden). Das<br />

Implementieren der Funktionalität in<br />

den Programmrümpfen erfolgt dann<br />

in einem Standard C-Code-Editor (z. B.<br />

CodeWright). Auf die Coderahmengenerierung<br />

wird nicht weiter eingegangen.<br />

Bei allen anderen Softwareteilen wird<br />

ein grafisches Entwicklungstool mit<br />

Autocodegenerierung eingesetzt. Die<br />

Effizienz und Qualität der Software-<br />

Entwicklung wird dadurch noch einmal<br />

gesteigert. Die Getriebesteuerung<br />

setzt <strong>ASCET</strong> ein.<br />

Das Tool aquintos.M2M zur Modelltransformation<br />

<strong>von</strong> <strong>UML</strong> <strong>nach</strong> <strong>ASCET</strong><br />

bietet die Möglichkeit, Regeln für die<br />

Transformation zu spezifizieren.<br />

Aktuell entwickelt die Getriebesteuerung<br />

eine Abbildung der <strong>UML</strong>-/<br />

OMOS-Modelle <strong>nach</strong> <strong>ASCET</strong> V5.1. Die<br />

Abbildung benutzt derzeit nur Module<br />

in <strong>ASCET</strong>, da zum Zeitpunkt der<br />

Pilotphase eine durchgängige Verwendung<br />

<strong>von</strong> Klassen in <strong>ASCET</strong> nicht möglich<br />

war. Ursache war ein internes Tool<br />

zur Verwaltung <strong>von</strong> Mess- und Applikationsgrößen,<br />

auf das hier nicht<br />

weiter eingegangen wird.<br />

Die erste Version ist als Prototyp ausgelegt,<br />

um Erfahrungen im Entwicklungsprozess<br />

zu sammeln. Zukünftig<br />

werden die Transformationsregeln<br />

auch auf <strong>ASCET</strong>-Klassen ausgeweitet<br />

werden.<br />

Das Bild 3 zeigt eine Transformation<br />

mit M2M. Die <strong>ASCET</strong>-Modellierung<br />

erfolgt in Modulen.<br />

Für die Klassen der <strong>UML</strong>-Modelle<br />

wurden Abbildungsregeln unter Berücksichtigung<br />

des OMOS-Konzepts<br />

definiert. Die Aggregationen, die<br />

Kommunikationsbeziehungen und die<br />

Vererbungsbeziehungen werden abgebildet.<br />

■➔<br />

25<br />

2007.1 RT


Bild 3:<br />

Transformation<br />

mit M2M<br />

<strong>von</strong> aquintos.<br />

Bild 4:<br />

Auszug aus der<br />

Architektur/<br />

Grobdesign des<br />

Softwareteils<br />

Gangauswahl.<br />

26<br />

RT 1.2007<br />

«1-Class»<br />

CL_FZGG<br />

«1-Class»<br />

CL_FZGG_KOMP<br />

«1-Class»<br />

CL_TDpDyn<br />

«1-Class»<br />

CL_TDpDyn_Bas<br />

-idRdoAct : uint8<br />

+GetGearReq( xGear:uint8 ) : uint8<br />

TDpDynDUsp<br />

TDpDynUsp<br />

TDpDynDsp<br />

«N-Class»<br />

CL_TDpDynTab<br />

-idAct : uint8<br />

-xCtlTab_C : uint8<br />

«1-Class»<br />

CL_SIWA<br />

«1-Class»<br />

CL_SIWA_CUST<br />

Ameos<br />

«RAM_Groesse» -FWA : uint8<br />

«RAM_Groesse» -CMO : uint8<br />

«Kennwert» -HDK : uint8<br />

«Kennwert» -CMOMIN : uint8<br />

«Kennlinie» -ECMO : uint16<br />

+IstWarmlauf( uint8 )<br />

+IstWaBew( uint8 )<br />

+ErmittleWarmlauf()<br />

+DetermineWarmUp()<br />

+ExitCondition( uint8 )<br />

<strong>ASCET</strong><br />

+IsActive( idSp:uint8 ) : bool<br />

+Reset()<br />

«1-Class»<br />

CL_MOT_LL<br />

«1-Class»<br />

CL_FSIT<br />

XMI-Interface<br />

COM API<br />

«1-Class»<br />

CL_MOT<br />

«1-Class»<br />

CL_MOT_AHK<br />

«1-Class»<br />

CL_MOT_ERW<br />

«1-Class»<br />

CL_FSIT_DEV<br />

«1-Class»<br />

CL_TloTra<br />

«1-Class»<br />

CL_TRcAdm<br />

Die Implementierung mit <strong>ASCET</strong> erfolgt<br />

in mehreren sinnvollen Teilumfängen<br />

des <strong>UML</strong>-Modells (Auswahl einzelner<br />

Klassen). Die ausgewählten Klassen<br />

werden als „Reference Classes“<br />

bezeichnet und im <strong>UML</strong>-Modell entsprechend<br />

markiert.<br />

Da in <strong>ASCET</strong> keine Vererbung bekannt<br />

ist, gilt bei Vererbungsbeziehungen<br />

z. B. die Regel: „Gehe durch den Vererbungsbaum<br />

der „Reference Class“<br />

zur so genannten Elternklasse und<br />

sammle alle Attribute ein, die geerbt<br />

werden.”<br />

Anschließend werden sie <strong>nach</strong> <strong>ASCET</strong><br />

in die „Reference Class“ transferiert.<br />

Mehrfachinstanziierungen<br />

mit <strong>ASCET</strong><br />

Wie erwähnt, wird die Verwendung<br />

<strong>von</strong> <strong>ASCET</strong>-Klassen bei der Transformation<br />

noch nicht unterstützt. Damit<br />

die Mehrfachinstanziierung (N-Klassen)<br />

in <strong>ASCET</strong> verwendet werden<br />

kann, wird an der Erweiterung der<br />

Transformationsvorschrift gearbeitet.<br />

Die Erweiterung wird anhand des folgenden<br />

Klassendiagramms erläutert<br />

(Bild 4). Das Diagramm beschreibt Zusammenhänge<br />

zwischen Klassen und<br />

definiert die Instanznamen sowie die<br />

Anzahl der Instanzen.<br />

Man erkennt die drei Instanzen der<br />

Klasse CL_TDpDynTab und die Kommunikationsbeziehungen<br />

zu den<br />

Nachbarklassen. Die Mehrfachinstanziierung<br />

muss in <strong>ASCET</strong> eine Entsprechung<br />

finden, um das Feindesign und<br />

die Implementierung vornehmen zu<br />

können, siehe Bild 5.<br />

In <strong>ASCET</strong> wird dafür die Klasse<br />

CL_TDpDynTab angelegt. Die Methoden<br />

und Attribute werden <strong>von</strong> dem<br />

Klassendiagramm übernommen. Die<br />

drei Instanzen der Klasse CL_TDpDyn-<br />

Tab werden als lokale Attribute in<br />

der Klasse CL_TDpDyn_Bas angelegt,<br />

siehe Bild 6.<br />

Feindesign, Implementierung und<br />

automatische Codegenerierung<br />

Das Feindesign und die Implementierung<br />

wird mit der grafischen Programmierung<br />

durchgeführt, eines der Kernelemente<br />

<strong>von</strong> <strong>ASCET</strong>. Die Blockdiagrammrahmen<br />

für die grafische Programmierung<br />

werden durch die<br />

Transformation vorgegeben. Bild 5<br />

zeigt ein Beispiel für grafische Programmierung<br />

im Blockdiagramm.<br />

Die Implementierungsinformationen<br />

für Mess- und Applikationsgrößen (Attribute)<br />

werden in <strong>ASCET</strong> ergänzt. Damit<br />

kann die automatische Codegenerierung<br />

gestartet werden.<br />

Für die Codegenerierung wird der<br />

Standard-Codegenerator <strong>von</strong> <strong>ASCET</strong><br />

mit kundenspezifischen Anpassungen<br />

eingesetzt. Der Codegenerator erzeugt<br />

wohl definierten C-Code. In<br />

der Getriebesteuerung wird für jede<br />

Klasse ein C-File generiert, Optimierungen<br />

für 1-Klassen werden durch<br />

<strong>ASCET</strong> automatisch berücksichtigt.<br />

Das ausführbare Programm (HEX-File)<br />

wird außerhalb <strong>von</strong> <strong>ASCET</strong> mit der<br />

Standard-Entwicklungsumgebung generiert.<br />

Die Mess- und Applikationsgrößen<br />

(Attribute) müssen über ein Applikationstool<br />

messbar sein. <strong>ASCET</strong> generiert<br />

zu den Modulen und Klassen<br />

zugehörige Files <strong>nach</strong> dem MSRSW-<br />

Standard. In dem Standard sind auch<br />

Implementierungsinformationen für<br />

C-Code enthalten, die die Generierung<br />

<strong>von</strong> c- und h-files erlauben.<br />

So werden die Mess- und Applikationsgrößen<br />

im Anwenderprogramm<br />

zur Verfügung gestellt, siehe Bild 7.<br />

<strong>ASCET</strong> wird mit Codegenerierung in<br />

mehreren Bereichen der Robert Bosch<br />

GmbH erfolgreich eingesetzt.<br />

Zusammenfassung<br />

Der vorgestellte Entwicklungsprozess<br />

gibt dem Entwickler die Möglichkeit,<br />

seine Software <strong>von</strong> der Architektur<br />

bis zur Implementierung grafisch zu<br />

beschreiben. Das in der Automobilbranche<br />

notwendige Variantenhandling<br />

ist in dem Prozess integriert. Jede<br />

Prozessphase besitzt ein optimales<br />

Tooling. Die Informationen der einzelnen<br />

Phasen sind fest miteinander verknüpft,<br />

ein Auseinanderlaufen bzw.<br />

Eigenleben der einzelnen Entwicklungsphasen<br />

ist ausgeschlossen.<br />

Komplexe Sachverhalte werden im<br />

Design durch die grafische Notation<br />

der <strong>UML</strong> eindeutig beschrieben.<br />

<strong>ASCET</strong> ermöglicht es, auch die Funktionsentwicklung<br />

auf grafischer Ebene<br />

durchzuführen. Die grafische<br />

Modellierung der Algorithmen stellt<br />

gleichzeitig eine gute Dokumentation<br />

dar. Durch den Entwicklungsprozess<br />

werden Rekursionen vermieden und<br />

die Entwicklungseffizienz deutlich gesteigert.<br />

3 Instanzen<br />

der Klasse CL_TDpDynTab<br />

CL_TDpDynTab PAR_idTyp<br />

PAR_idRdo IsActive<br />

Usp<br />

CL_TDpDynTab<br />

PAR_idTyp<br />

PAR_idRdo IsActive<br />

DUsp<br />

CL_TDpDynTab<br />

PAR_idTyp<br />

PAR_idRdo IsActive<br />

Dsp<br />

Bild 5:<br />

Klasse<br />

CL_TDpDynTab<br />

in <strong>ASCET</strong> mit<br />

Feindesign/<br />

Implementierung.<br />

Bild 6:<br />

Lokale Instanzen<br />

in der Klasse<br />

CL_TDpDynTab.<br />

Bild 7:<br />

Auszug der <strong>von</strong><br />

<strong>ASCET</strong> generierten<br />

Files für<br />

den Build-<br />

Prozess.<br />

C-File MSRSW-File<br />

27<br />

2007.1 RT

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!