Software Engineering Vom Zufallsprodukt zum planbaren Prozess

Embededd-Software-Engineering im globalen Wettbewerb.
Embededd-Software-Engineering im globalen Wettbewerb.

Ingenieurleistungen aus Deutschland bedeuten im globalen Wettbewerb immer noch einen Vorsprung. Deren bewährte Prinzipien werden allerdings in der Embedded-Software-Entwicklung noch nicht adäquat eingesetzt. Doch was macht erfolgreiches Software Engineering aus?

Durch das ingenieurmäßige Vorgehen im Software Engineering gewinnt der Entwickler ein besonderes Maß an Sicherheit. Im Kern geht es um Systematik, Disziplin und Messbarkeit, die bei der Projektdurchführung immer wieder wichtige Orientierungspunkte für alle Beteiligten im Entwicklungsteam liefern. Diese Tugenden gilt es auch in der Software-Entwicklung ernst zu nehmen, um die gewünschten Ziele zu erreichen.

Engineering-Prinzipien für die Software-Entwicklung

Wie bei jedem Produkt aus der Ingenieursleistung muss auch die Software-Entwicklung mit ingenieursmäßigen Vorgaben den Prinzipien von Zuverlässigkeit, Reproduzierbarkeit, Lernbarkeit, Rationalität und Anwendbarkeit folgen. Zuverlässigkeit ergibt sich durch Prozesse, die dem Entwickler eine gewisse Garantie geben, dass die gesteckten Ziele erreicht werden. Diese beziehen sich nicht bloß auf ein einzelnes Projekt, sondern erfüllen ein ganzheitliches Unternehmensziel. Im Bereich der Software-Entwicklung ist eines der wichtigsten Ziele eine hohe innere und äußere Qualität, die sich positiv auf alle Bereiche der Produktentwicklung auswirkt, in erster Linie, weil sich ein bestehender Code effizienter debuggen, warten und weiterentwickeln lässt und damit letztlich die Innovationsfähigkeit gesichert wird.

die Innovationsfähigkeit gesichert wird.

Mit der Reproduzierbarkeit der Prozesse kann der Entwickler seine bisherigen Leistungen überprüfen. Die positiven, aber auch negativen Schlüsse, die er daraus zieht, helfen ihm dabei, den Entwicklungsprozess weiter zu optimieren, sodass gute Ergebnisse des Schaffens nicht rein zufällig entstehen. Teilt er sein Wissen und seine Erfahrungen mit den Kollegen, profitiert das gesamte Team. Daraus ergibt sich auch eine Lernbarkeit: Durch die zuverlässigen und reproduzierbaren Prozesse können neue Mitglieder im Entwicklungsteam schneller produktiv werden. Lernbarkeit bedeutet aber auch, dass die Prozesse so formuliert sein sollten, dass selbst Mitarbeiter mit weniger Fachkenntnis – etwa auf Managementebene – die Vorgänge nachvollziehen können. Alle Prozesse gilt es auf der Basis von Fakten und Regeln objektiv zu erarbeiten. Diese Rationalität schützt davor, ein Projekt durch intuitive, emotionale oder andere schwer erfassbare Aspekte negativ zu beeinflussen. Gleichzeitig muss für den Entwickler eine praktische Anwendbarkeit der Prozesse garantiert sein, selbst wenn natürlich alle Vorgehensweisen theoretisch bereits fundiert sind. Für die Unterstützung dieser Engineering-Prinzipien lassen sich einige bekannte Lösungsansätze heranziehen, die als Stand der Technik gelten und auch in der Entwicklung von Embedded-Software Anwendung finden.

Systematik durch Architekturen und Standards

Für eine klare Systematik sorgt im ersten Schritt die Planung der Produkte: Das Unternehmen legt zur Planung und Steuerung der Projektaufgaben zum Beispiel dezidierte Software-Produktlinien fest, die konsequent verfolgt werden müssen. Allen Produkten wird eine gemeinsame Software-Architektur zugrunde gelegt, deren Einhaltung im Entwicklungsprozess kontinuierlich und fortwährend überprüft wird. Im Rahmen dieser Planung werden weiterhin Komponenten, Plattformen und Frameworks identifiziert, die wiederverwendbar und teamübergreifend nutzbar sind. Daraus ergeben sich auch positive Kosteneffekte und ein sinkender Schulungsbedarf.

In vielen Bereichen des Engineering ist die Verwendung von Standards anerkannt und üblich. Entsprechende Vorgaben sind mittlerweile auch im Software-Bereich vorhanden, wie zum Beispiel Misra C/C++ oder Normen wie zum Beispiel ISO 26262 oder IEC 62304. Die Prüfung der Einhaltung der Standards muss in den Entwicklungsablauf integriert werden. Spezielle Entwicklungswerkzeuge prüfen mit Hilfe von Protokollen oder Reports die Einhaltung von Codierungsvorschriften und Architekturvorgaben und stellen sie übersichtlich für die Weiterbearbeitung dar.

Disziplin durch Automatisieren und Testen

Gerade angesichts des anhaltenden Fachkräftemangels muss in der Software-Entwicklung verstärkt auf Automatisierung geachtet werden. Repetitive und langweilige Aufgaben muss der Entwickler nicht mehr manuell durchführen. Stattdessen werden diese maschinell und in vorgegebenen Takten abgearbeitet. Insbesondere für die mittlerweile von allen gängigen Normen geforderten Reviews und statischen Analysen ist es sinnvoll, mit Hilfe von Software-Analyse-Tools automa-tisierte Tests durchzuführen, deren Ergebnisse erst im zweiten Schritt wieder von Entwicklern geprüft werden. So werden nicht nur teure Entwicklerstunden gespart, sondern auch Ressourcen freigesetzt, die wiederum für Kreativität und Innovation bei der Entwicklung von Funktionen und Produkten sinnvoll eingesetzt werden können.

Software-Werkzeuge bieten auch eine effiziente und effektive Waffe, wenn es darum geht, die Architektur zu wahren. Ohne eine Überprüfung von Plan und Implementierung entfernen sich in der Praxis die Baupläne der Systeme immer mehr von der tatsächlichen Software-Struktur (Bild 1). Dadurch gerät die gesamte Statik des Systems in Gefahr und der Aufwand für Software-Wartung und -Weiterentwicklung steigt. Entsprechende Tools sind am Markt mittlerweile verfügbar und damit entspricht deren Einsatz dem Stand der Technik.