Informationstransfer von UML nach ASCET - ETAS
Informationstransfer von UML nach ASCET - ETAS
Informationstransfer von UML nach ASCET - ETAS
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