Ein Testverfahren für optimierende Codegeneratoren

Ingo Stürmer, Mirko Conrad
2005 Informatik - Forschung und Entwicklung  
Zusammenfassung: Die im Rahmen der Modell-basierten Entwicklung eingebetteter Steuerungs-und Regelungssoftware eingesetzten optimierenden Codegeneratoren müssen einer intensiven Qualitätssicherung unterzogen werden. Dem Einsatz von Testsuiten kommt dabei eine zentrale Rolle zu. Der Beitrag beschreibt den Aufbau einer modularen Testsuite für Codegeneratoren und schlägt einen Testansatz vor, der eine systematische Prüfung der vom Codegenerator angewendeten Optimierungstechniken ermöglicht. 1
more » ... hrung Als Reaktion auf die gestiegenen Herausforderungen bei der Entwicklung eingebetteter Software im Kraftfahrzeug [6] vollzieht sich seit Mitte der 1990er Jahre ein Paradigmenwechsel, der durch den Übergang von der klassischen Programmentwicklung hin zu Modell-basierten Techniken gekennzeichnet ist [19], [18], [11], [27]. Kennzeichnend für die Modell-basierte Entwicklung ist die frühzeitige Beschreibung der eingebetteten Software durch ausführbare Modelle unter Verwendung von Funktionsblockdiagrammen und erweiterten Zustandsautomaten. Ein für diese Zwecke gebräuchliches Modellierungs-und Simulationswerkzeug, das sowohl im akademischen als auch im industriellen Umfeld weite Verbreitung gefunden hat, ist MATLAB/Simulink/Stateflow 1 [15]. Während MATLAB als Basisumgebung fungiert, stellen die Erweiterungen Simulink und Stateflow graphische Editoren und Simulatoren für Blockschaltbilder bzw. Statecharts zur Verfügung. Derartige graphische Modelle dienen als Basis aller weiteren konstruktiven Entwicklungsschritte bis hin zur Implementierung der zu realisierenden Software. Während in der Vergangenheit eine manuelle Implementierung der Software die Regel war, existieren mittlerweile Codegeneratoren, wie z.B. TargetLink [25] oder der Real-Time Workshop [23], die automatisch effizienten Code direkt aus dem Softwaremodell generieren können (Modellbasierte Codegenerierung). Bei einem Codegenerator handelt es sich prinzipiell um einen Compiler, der eine Quellsprache (hier eine graphische Modellierungssprache wie Simulink/Stateflow) in eine Zielsprache (hier eine prozedurale Programmiersprache wie C oder ADA) übersetzt. In der automobilen Softwareentwicklung ist dabei der konsequente Einsatz 1 Weltweit ist von ca 100.000 Simulink/Stateflow-Anwendern auszugehen. von Optimierungstechniken durch die beschränkte Speicherkapazität auf der Zielhardware unverzichtbar. Die Modell-basierte Codegenerierung ermöglicht deutliche Effizienzgewinne bei der Implementierung der Modelle. Voraussetzung hierfür ist aber, dass der Codegenerator bei der Übersetzung bereits getesteter Modelle keine Fehler in die Software einbringt. Eine mögliche Fehlerquelle sind dabei eben jene Optimierungen, die die notwendige Effizienz des generierten Codes im Hinblick auf Ausführungsgeschwindigkeit und Speicherverbrauch gewährleisten. Codegeneratoren haben aber noch nicht die Betriebsbewährtheit von C-und ADA Compilern erreicht und müssen daher einer intensiven Qualitätssicherung durch Testen unterzogen werden. Der vorliegende Beitrag beschreibt ein praxisorientiertes und systematisches Testverfahren für Codegenerator-Optimierungen. Die Codegenerierung wird dabei über das erfolgreiche Durchlaufen einer Testsuite abgesichert. Vorgestellt werden sowohl der generelle Aufbau einer solchen Testsuite, als auch ein Ansatz zur systematischen Erzeugung von Testfällen. Letztere prüfen die vom Codegenerator verwendeten Optimierungen. Der weitere Aufbau des Artikels ist wie folgt gegliedert: Kapitel 2 führt in die Modell-basierte Codegenerierung, Kapitel 3 in die dabei verwendeten Optimierungstechniken ein. In Kapitel 4 wird der generelle Ansatz zum Test von Codegeneratoren erläutert. Dieser wird in Kapitel 5 am Beispiel des Tests von Optimierungen umgesetzt. Kapitel 6 beschließt den Beitrag mit einer Zusammenfassung. 2 Modell-basierte Codegenerierung Die Modell-basierte Entwicklung eingebetteter Steuerungs-und Regelungssoftware ist durch den durchgehenden Einsatz ausführbarer Modelle in allen Entwicklungsphasen charakterisiert [11]. Die zu realisierende Funktion tritt dabei in verschiedenen, aufeinander aufbauenden Repräsentationsformen auf (Modellevolution): Ein (physikalisches) Funktionsmodell wird dabei um Realisierungsaspekte ergänzt, überarbeitet und schließlich mittels Codegeneratoren in optimierten Programmcode einer imperativen Programmiersprache (meist C) überführt. Der generierte Code kann auf verschiedenen Ausführungsplattformen (Host-PC, Evaluation Bord) analysiert bzw. getestet und anschließend in das eingebettete System (im Automobilbereich auch elektronisches Steuergerät (ECU) genannt) integriert werden (Abb. 1).
doi:10.1007/s00450-005-0189-5 fatcat:bmbgebqr75frtehvuim4lla5m4