Serie Software Engineering für Embedded Systeme, Teil 1

Einführung in das Software Engineering

10.05.2010 | Autor / Redakteur: Kai Breiner* / Martina Hafner

*Kai Breiner ist Diplom-Informatiker und wissenschaftlicher Mitarbeiter an der Arbeitsgruppe Software Engineering: Processes and Measurement der TU Kaiserslautern sowie dem Fraunhofer IESE. Dort ist er an der Lehre des Software Engineering beteiligt und erforscht modellgetriebene adaptive Benutzungsschnittstellen. Seit 2008 betreut er das Modul Software Engineering Introduction des Fernstudiengangs Software Engineering for Embedded Systems.
*Kai Breiner ist Diplom-Informatiker und wissenschaftlicher Mitarbeiter an der Arbeitsgruppe Software Engineering: Processes and Measurement der TU Kaiserslautern sowie dem Fraunhofer IESE. Dort ist er an der Lehre des Software Engineering beteiligt und erforscht modellgetriebene adaptive Benutzungsschnittstellen. Seit 2008 betreut er das Modul Software Engineering Introduction des Fernstudiengangs Software Engineering for Embedded Systems.

In vielen Unternehmen hinkt die Praxis der Softwareentwicklung dem Stand der Forschung hinterher. Um diese Lücke zu schließen, hat das Fraunhofer-Institut für Experimentelles Software Engineering den Master-Studiengang Software Engineering für Embedded Systeme geschafften. Ausgewählte Inhalte lesen Sie in dieser 5-teiligen Serie. Teil 1 erklärt, warum es ohne Software Engineering nicht mehr geht.

Viele moderne Produkte und Dienste basieren auf einem Zusammenspiel von Software- und Hardware-Komponenten. Dabei zeichnet sich klar der Trend ab, dass der Anteil an Software im Produkt signifikant ansteigen wird, um immer komplexere und flexiblere Systeme realisieren zu können. Doch nicht nur Anzahl und Art der Software-Systeme steigen stetig an: Auch die Größe der einzelnen Systeme nimmt permanent zu.

Zusätzlich etabliert sich eine Vielzahl an neuen Paradigmen, wie beispielsweise Ambient Intelligence sowie neue Anwendungsfelder wie intelligente Kraftfahrzeuge. Die so entstehenden Lösungen umfassen ganze Systemkomplexe, bestehend aus Einzelsystemen, den Systems of the Systems.

Moderne Produkte müssen u.a. kleiner, schneller, flexibler, effizienter, kostengünstiger, sicherer und robuster sein als ihre Vorgängergenerationen. Die Anwendung von eingebetteten Systemen bietet hier einen enormen Vorteil: Im Vergleich zu fest verdrahteten Hardwaresystemen können verschiedene Softwarelösungen auf einer Hardwarebasis entwickelt werden. Es ist auch möglich, ganze Produktlinien kostengünstig zu erstellen. Diese Entwicklungen haben dazu beigetragen, dass Software mittlerweile zu einem der wichtigsten Rohmaterialien avanciert ist. [2]

Software Engineering in der Theorie - Mängel in der Praxis

Leider treten in der Praxis immer noch vermeidbare Mängel bei der Entwicklung von Software auf. Der Abstand zwischen dem Stand der Technik bzw. der Forschung und dem Stand der Praxis ist deutlich erkennbar, d.h. es dauert zu lange, bis Konzepte aus der Forschung in der Praxis angewandt werden. Zwar existiert Software Engineering als wissenschaftliche Disziplin schon seit mehr als 40 Jahren, jedoch werden Grundlagen sowie neueste Erkenntnisse aus Wissenschaft und Forschung oft nicht umgesetzt.

Im Gegensatz zu traditioneller Hardwareentwicklung, die nur von hochqualifiziertem Fachpersonal durchgeführt werden kann, ermöglichen moderne Programmiersprachen sowie eine relativ einfache Werkzeugunterstützung die Entwicklung von Software sogar durch Laien. Dabei steht die Leichtigkeit der Entwicklung in keiner Relation zur benötigten Qualität der resultierenden Software; leider wird dies oftmals unterschätzt. Während z.B. beim Bau eines Hauses ein Laie offensichtliche Architektur- fehler erkennen kann, so sind (auch einfachste) Fehler in der Architektur einer Software ohne explizites Fachwissen nicht feststellbar.

Gerade Unternehmen, die als so genannte Sekundärindustrie Software entwickeln, d.h. die zwar Software herstellen, dies jedoch nicht als primäres Geschäftsfeld des Unternehmens betreiben, sind sich häufig nicht über den kausalen Zusammenhang zwischen der Qualität der Software und dem Erfolg des fertigen Produkts bewusst, obwohl der Effekt deutlich wahrgenommen wird. Zum Beispiel zeigen jüngste Untersuchungen wieder einmal, dass nur ca. 30% der Softwareentwicklungsprojekte erfolgreich beendet werden. [4][5]

Damit ein Unternehmen konkurrenzfähig bleibt, sieht es sich gleichzeitig immer höheren Investitionskosten für den Entwicklungsprozess korrekter und zuverlässiger Software ausgesetzt. Gerade bei der Entwicklung von eingebetteten Systemen, bei denen es teilweise unmöglich ist, die Software nach der Auslieferung noch zu verändern, existieren strikte Qualitätsanforderungen, welche durch die adäquate Anwendung von Software-Engineering-Techniken, -Methoden und -Werkzeugen erreicht werden können. Voraussetzung ist dabei, mit den Grundlagen des Software Engineering, aber auch mit den Besonderheiten von eingebetteten Systemen vertraut zu sein.

Software Engineering als wissenschaftliche Disziplin

Um diese Qualitätsanforderungen zu gewährleisten untersucht die wissenschaftliche Disziplin des Software Engineering das zielorientierte und systematische Anwenden von empirisch validierten Prinzipien, wohldefinierten Methoden und unterstützenden Werkzeugen [3]. An der Arbeitsgruppe Software Engineering der TU Kaiserslautern sowie dem Fraunhofer IESE wird permanent an einer Erweiterung der Wissensbasis gearbeitet. Aufbauend auf den beschreibenden Modellen, welche in etablierten Prozessen unter Anwendung spezieller Gesetze eingesetzt werden, entsteht Software, die dann nachweisbar der geforderten Qualität entspricht.

Software Engineering: mehr als nur Programmieren

Um korrekte und zuverlässige Software zu entwickeln, sind gut ausgebildete Software-Ingenieure mit Kenntnissen über Techniken, Methoden und Werkzeuge sowie über Modelle, die abbilden, „was“, „wie“ und „wie gut“ entwickelt wird, unverzichtbar. Diese Modelle beschreiben nicht nur die einzelnen zu entwickelnden Produkte (z.B. Anforderungen, Architektur oder Design). Sie beschreiben ebenfalls die nötigen Prozesse zur Vorgabe der Produktentwicklung und geben Skalen und Metriken zur Messung der Produkt- und Prozessqualität vor.

Illustration 1: Das virtuelle Produktmodell – es beinhaltet die wichtigsten Entwicklungsprodukte, die bei der Entwicklung von Software entstehen.
Illustration 1: Das virtuelle Produktmodell – es beinhaltet die wichtigsten Entwicklungsprodukte, die bei der Entwicklung von Software entstehen.

Die reine Programmierung ist dabei ein relativ einfacher Prozess der Softwareentwicklung, die jedoch noch zu oft als reine Programmierung verstanden wird. Dadurch wird der gesamte Entwicklungsprozess unterschätzt, was sich verdeutlichen lässt, wenn man, wie in Illustration 1 skizziert, den Prozess in drei Schichten unterteilt. Die Programmierung ist dabei die Haupttätigkeit der Schicht Unit Engineering, in der Programmierer auf Grundlage klar spezifizierter und atomarer Unit-Anforderungen den Quellcode implementieren.

Inhalt des Artikels:

Kommentar zu diesem Artikel abgeben

Schreiben Sie uns hier Ihre Meinung ...
(nicht registrierter User)

Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
Kommentar abschicken
copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 345757 / Projektmanagement)