Skip to main content

Die drei wichtigsten Innovationen und ihre Anwendung für Excellence im Software- und Systems-Engineering

Warum liegen im Anforderungs-Management, Modellierung und Testautomation die drei derzeit wichtigsten Innovationen im Software- und Systems-Engineering?

Was sind die aktuell brennendsten Probleme im Software- und Systems-Engineering und wie können 80% mit den obigen Innovationen gelöst werden?

Warum ist die Kombination dieser Innovationen mehr als die Summe ihrer Teile?

Warum ist ein Wechsel der Methode (z.B: Prozedural zu OOP, Programmierung zu Modellierung ...) oder ein Wechsel der Notation (z.B: C zu C++, C++ zu UML ...) oder der Einsatz eines neuen Werkzeugs (z.B: MATLAB® , Rhapsody® , Test Realtime® , DOORS® Tessy® ...) häufig kontraproduktiv und führt zu noch mehr Problemen? Was muss berücksichtigt werden, damit die Produktivität wie erwartet gesteigert werden kann?

Warum erfordert die Einführung obiger Innovationen einen Paradigmenwechsel im Engineering und welche Probleme ergeben sich daraus, herkömmliche Software weiter zu verwenden? Wie können diese Probleme überwunden werden?

Warum werden Unternehmen am Standort Deutschland, die diese Innovationen nicht einsetzen, in den kommenden 10 Jahren Probleme bekommen?

Änderungen und Folgen

Betrachten wir einmal ein typisches Produkt einer Industrie, die in Deutschland eine herausragende Rolle spielt: ein Auto. Und stellen wir uns vor, es soll eine Änderung vorgenommen werden z.B. in Form eines Faceliftings der Scheinwerferpartie.

Schon auf den ersten Blick ist zu erkennen, dass mindestens vier Bauteile betroffen sind: Scheinwerfer, Stoßstange, Motorhaube und Kotflügel.

Doch spätestens der Blick in den Motorraum zeigt uns, dass wahrscheinlich dutzende weiterer Komponenten überarbeitet werden müssen.

Vor einigen Jahren hat ein Automobil-Hersteller die Entscheidung getroffen, eine Modellreihe optional mit Xenon-Licht auszustatten. Entsprechend der Vorschrift gemäß ECE-Regelung R48 und § 50 STVO, Absatz 10 sind Xenon Scheinwerfer nur in Kombination mit automatischer Leuchtweiten-Regulierung und Scheinwerfer-Reinigungsanlage erlaubt.

Die Einführung dieser Option hat dann in Folge über 100 Änderungen an dem Modell bedeutet, bei denen mehr als 40 Zulieferer involviert waren. Eine teure Entscheidung - wie sich im Nachhinein herausgestellt hat.

Die in heutigen Systemen explodierende Anzahl der Beziehungen stellen das Hauptproblem bei Änderungen, Erweiterungen oder Wiederverwendungen dar. In Abbildung Nr. 1 können Sie sehen, dass die Anzahl der Beziehungen exponentiell zur Anzahl der Elemente wächst.

Ähnliche Situationen haben wir heute auch in den meisten Software-Systemen. Nur ist hier die Komplexität und Beziehungsdichte nicht auf einen Blick zu erkennen. Sie wird erst offensichtlich, wenn für vermeintlich kleine Änderungen ein Mehrfaches der veranschlagten Zeit benötigt wird.

Dem Raumangebot unter der Motorhaube entspricht in der Software sehr häufig das Zeitverhalten, verbunden mit der Auslastung der CPU. In Abbildung Nr. 2 ist eine Zeitund Kommunikations-analyse eines Steuergerätes für das Motormanagement von zwei Zylindereinheiten dargestellt. Im übertragenen Sinn herrscht dort ähnlicher Platzmangel. Eine kleine Änderung kann sich verheerend auf das Timing auswirken und im Extremfall den ganzen Motor zerstören.

Was sind die daraus resultierenden Probleme im Software- und Systems-Engineering?

Heute besteht das Vorgehen in der SoftwareEntwicklung längst nicht mehr aus reiner Codierung. Längst wurde begriffen, dass Anforderungen schriftlich fixiert werden sollten, dass Software dokumentiert werden muss ...

Betrachten wir das Vorgehen im Engineering auf Basis des V-Modells hinsichtlich des Informationsflusses, dann begegnen wir verschiedenen Dokumenten, wie Lastenheft, Pflichtenheft, Architekturbeschreibung, Software-Dokumentation, Testplänen, Normen, Prozessbeschreibungen ...

Verfolgen wir den Inhalt eines Dokumentes, zum Beispiel eine Anforderung aus dem Lastenheft, dann finden wir den Inhalt oder zumindest einen Bezug dazu auch im Pflichtenheft bzw. in der Architekturbeschreibung und sicher auch in den Testplänen (sollte es sie denn geben...).

Der Unterschied liegt in der Ausdrucksweise. Der Auftraggeber schreibt in seinem Lastenheft über die Qualität des Audio-Sounds eventuell, dass diese HiFiQualität haben soll. Dem Projektleiter ist diese Aussage zu vage, er spezifiziert etwas genauer und definiert das AudioSignal mit einer Abtastrate von 44,1 kHz Sampelfrequenz und 16 Bit und einem Verweis auf den RedBook Standard für Audio CD‘s.

Das geht so weiter, bis in der Software-Dokumentation der Reload-Wert eines Timers mit 0x3f mit Verweis auf die Takterzeugung von 44,1 kHz dokumentiert ist. 

In der Dokumentation findet sich zum Software-Modul Audio Sound Generation ein weiterer Hinweis mit Bezug auf die Soundqualität.

Wir treffen also auf mehrfach redundante Informationen. Abhängig von der fachspezifischen Ebene sind sie textuell evtl. anders ausgedrückt, aber inhaltlich gleichbedeutend.

Es gibt noch ein weiteres Merkmal, wenn wir eine Information verfolgen. Ausgehend von einer Kundenanforderung (Lastenheft) spreizen sich die Abhängigkeiten in den folgenden Ebenen in mehrfache Abhängigkeiten auf. (Siehe Abbildung Nr. 4).

In umgekehrter Richtung haben wir das gleiche Phänomen. Wird zum Beispiel in der Fertigung ein bestimmtes Gehäuse eingesetzt und der Lieferant kündigt diesen Gehäusetyp ab, dann gibt es sicher verschiedene Kundenanforderungen, die für die Auswahl genau dieses Types wichtig waren. Nun wäre es interessant zu wissen, welche Anforderungen das genau waren, z.B. Gewicht, Stabilität, Dampfdruck Dichte, Material ...

∨ mehr Text anzeigen

Die Redundanz von Informationen über die unterschiedlichen Engineering-Phasen und Disziplinen hinweg verbunden mit dokumentenzentrischem Vorgehen ist heute Ursache für ineffizientes Arbeiten im Software- und Systems-Engineering.

Bei meinen regelmäßigen Umfragen nach der Qualität der SoftwareDokumentation behaupten die Entwickler zu 95%, dass die Dokumentation grundsätzlich gar nicht schlecht ist. Das eigentliche Problem ist, dass die Inhalte an vielen Stellen nicht kongruent zum Source-Code sind und aus diesem Grund kann man sich nicht auf sie verlassen. Da wird lieber gleich auf Source-Code Ebene gearbeitet. Die Dokumentation ist wertlos, obwohl viel Zeit in die Erstellung gesteckt wurde.

Im Arbeitsalltag bleibt keine Zeit, bei Änderungen im Projekt die Dokumente aller Ebenen entsprechend anzupassen. Die textuellen Dokumente werden gegenüber dem Code vernachlässigt, und nach einigen Monaten sind die Inhalte inkonsistent und damit wertlos.

Entwickler in Testabteilungen stehen oft vor der Situation, dass sie als Ausgangsbasis für die Tests ein Pflichtenheft, einen Prototypen mit lauffähiger Software, den SoftwareSourcen und der Dokumentation der Software bekommen.

Sie fangen an zu testen und stellen fest, dass das Gerät in einer Situation nicht so reagiert, wie im Pflichtenheft beschrieben. Und jetzt ist die spannende Frage: was ist richtig? Handelt es sich um ein Change-Request, welches richtig implementiert, aber im Pflichtenheft nicht nachdokumentiert wurde, oder handelt es sich um einen Fehler in der Implementation? Das nachträgliche Herausfinden kann Stunden bis Tage dauern, weil sich niemand mehr erinnern kann, was genau vereinbart war.

1. Innovation: Traceability von Anforderungen

In Abbildung Nr. 5 ist die Abhängigkeit einzelner Dokumente (die so genannte Traceability Information) dargestellt. Anforderungs-Management zum Beispiel beinhaltet die Information, dass sich eine Anforderung im Pflichtenheft auf ein oder mehrere Anforderungen im Lastenheft bezieht und diese erfüllt.

Heute werden in ca. 90% der Fälle Anforderungen dokumentenzentrisch erstellt. Die Beziehungen werden dabei nicht definiert.

Es gibt aber auch Möglichkeiten das AnforderungsManagement mit einem geeigneten Werkzeug auf Basis eines Repository (Datenbank) durchzuführen und die gegenseitigen Beziehungen in Form von Verlinkungen mit anzugeben.

Es ergeben sich nach wie vor die einzelnen Dokumente, die wir in Abbildung 6 sehen, aber sie basieren nun auf einer Datenbank.

Stellen Sie sich einmal vor, der Kunde hat Änderungswünsche und hat sein Lastenheft entsprechend geändert.

Nun ist es Ihre Aufgabe, die Auswirkungen dieser Änderungen auf das bereits laufende Projekt heraus zu finden. Hierfür müssten Sie alle Dokumente gegenseitig vergleichen. Oft haben diese Dokumente 100 Seiten oder mehr. Ein aufwändiges und fehleranfälliges Unterfangen.

Mit einem AnforderungsManagement-Werkzeug ist eine Ansicht möglich, wie in Abbildung Nr. 6 (hier die Dokumente CR Customer Specification, SS Systems Specification, xxxR Modulbezogene Implementations Requirements) zu sehen ist. Dort stehen sich die jeweiligen Informationen, die zueinander in Bezug stehen, direkt gegenüber und es ist ein Leichtes, alle Informationen auf gegenseitige Konsistenz zu überprüfen.

Hier wünscht der Kunde z.B. den Klang eines Pianos, dem gegenüber sieht die Implementation den Klang einer elektronischen Orgel vor

Aber es geht noch einfacher mit so genannten Suspekt Links. Ändert sich eine Anforderung zum Beispiel im Lastenheft, dann werden in allen korrespondierenden Dokumenten, zum Beispiel dem Pflichtenheft, alle Textelemente mit einem Fragezeichen am Link dargestellt. Auf Mausklick kann die Änderung im vorherigen Dokument angezeigt werden. Ist dann eine Anpassung des Pflichtenheftes notwendig, wird der Suspekt Link weitergereicht in das nächste Dokument. (Abbildung Nr. 7)

Eine der wesentlichen Innovationen im AnforderungsManagement ist die Traceability (Rückverfolgbarkeit). Sie beinhaltet die folgenden Möglichkeiten:

  • Coverage Analyse - sind alle Anforderungen erfüllt
  • Impact Analyse - Analyse der Auswirkung möglicher Änderungen
  • Trace Analyse - Analyse der Ursache

Die Traceability-Analyse ist eine Innovation, ohne die sich komplexe Systeme in der Zukunft nicht mehr mit ausreichender Qualität und Planbarkeit entwickeln und implementieren lassen.

2. Innovation: Weniger Redundanzen durch Abstraktion

Bisher habe ich aufgezeigt, wie redundante Informationen im System sicher gemanagt werden können. Noch besser wäre es natürlich, man hätte grundsätzlich weniger redundante Informationen.

Und auch dafür gibt es eine Lösung: die Erhöhung von Abstraktionsebenen.

Das ist ein altbekannter Engineering-Schritt. Stellen Sie sich vor, Sie müssten Programmsprünge noch absolut auf Programmadressen adressieren, wie früher bei der Programmierung in Assembler. Bei jeder Änderung, bei der Code eingefügt würde, müssten alle Sprungziele entsprechend den verschobenen Adressen angepasst werden. Diese Aufgabe überlassen wir heute dem Linker/ Locator. Wir adressieren so genannte Label (Stellvertreter für die Adressen), die wir symbolisch benennen können. Das hat zwei Vorteile, wir können sinngebende Namen vergeben und durch Änderungen verursachte Adressverschiebungen werden automatisch angepasst.

Symbolische Namen dokumentieren sich selber, die redundante Information, dass ein symbolischer Name einer bestimmten Adresse zugeordnet ist und beides konsistent hält, erledigt der Linker automatisch für uns. Wir haben weniger redundante Informationen in unserer Software.

Heute gibt es die Möglichkeit der Modellierung. Hier wirkt der gleiche Mechanismus. Grafische Modelle dokumentieren sich selber und die Überführung in Code geht automatisch. Auch andersherum können Änderungen im Code automatisch ins Modell überführt werden. So wird nicht mehr ein Timer mit einem Hexadezimal programmiert und der Bezug zur Zeit dokumentiert, sondern im Modell direkt auf Basis einer Zeit modelliert. Die Dokumentation, dass ein hexadezimaler Reload-Wert einer bestimmten Zeiteinheit entspricht, kann entfallen.

Aber es geht noch einen Schritt weiter. Heutige Modellierungs-Werkzeuge haben in der Regel Schnittstellen zu Anforderungs-Management-Werkzeugen.

Damit lassen sich Anforderungen aus dem AnforderungsManagement direkt im Modellierungswerkzeug weiter verwenden. (wie in Abbildung Nr. 8 zu sehen).

Die Anforderungen lassen sich dann mit Modellelementen verbinden und die Traceability wird damit bis in das Modell erweitert. In der Regel können bei Modellelementen, die sich auf Code auswirken, die Anforderungen auch als Kommentar mit in den Code übernommen werden und dienen dort als Dokumentation. Damit ist die Traceability bis in den Code möglich.

Modellierung auf einem höheren Abstraktionsgrad in Kombination mit Codegenerierung und RoundtripEngineering reduzieren redundante Informationen auf verschiedenen Ebenen im Software Engineering. Dokumentation und Codierung fließen zusammen. Modelle sind die Dokumentation in sich und können direkt mit den Anforderungen verlinkt werden.

Das ist einer der wichtigsten Innovationen im SoftwareEngineering, um Verstehbarkeit und Änderbarkeit effizienter zu machen.

3. Innovation: Regression Tests

Regression-Tests (Automatisch wiederholte ausführbare Tests) sind an sich keine neue Innovation. Der Gedanke Tests automatisch durchzuführen ist so alt, wie das Testen selbst.

Nur war die Erstellung und Pflege derartiger Tests bisher im Software-Engineering so aufwändig, dass sich ein „Return of Invest“ oft nicht ergeben hat.

Dabei ist der grundlegende Gedanke dahinter sehr einleuchtend. Es gibt keinen Schritt im Software-Engineering, der so häufig in gleichförmiger Weise wiederholt werden kann, wie die Ausführung von Tests.

Jede Änderung in einem System setzt kreative Denkarbeit eines Mitarbeiters voraus. Bisher gibt es noch kein Werkzeug, das automatisch Änderungen durchführen kann (von „Suchen“ und „Ersetzen“ einmal abgesehen).

Beim Testen ist das anders. Dort haben wir einen großen Hebel für Effizienzsteigerung.

Selbst kleine Änderungen, die in wenigen Minuten durchgeführt wurden, können das Potential für Fehler in ganz anderen Bereichen des Systems beinhalten. (Siehe dazu auch NL Ausgabe 21 + 23) Um sicher zu sein, dass eine Änderung keine fehlerhaften Auswirkungen provoziert, sind dann eventuell stundenlange Testläufe notwendig. Diese sehen jedoch immer identisch aus und bieten ideales Potential für Automatisierung.

Nun kommt die positive Nachricht. Wird zum Beispiel auf Basis der UML modelliert, dann können automatische Tests mit wesentlich weniger Aufwand auf Basis von SequenzDiagrammen erstellt werden.

„Automatisches Testen“ ist die 3. Innovation im Engineering. An sich ist es keine wirkliche Innovation, aber im Rahmen der Modellierung mit UML sinkt der Aufwand zur Erstellung von Regression-Tests erheblich, so dass hierin die eigentliche Innovation liegt.

Die Kombination dieser Innovationen ist mehr, als die Summe der Teile

Bleiben wir gleich bei den Sequenz-Diagrammen. In ablauforientierten Systemen (Embedded Systeme sind i.d.R. zu 98% ablauforientiert) bietet es sich an, funktionale Anforderungen auf Basis von Szenarien zu beschreiben. Sehr häufig ist die textuelle Beschreibung eines Szenarios wesentlich aufwändiger, als die Erstellung einer Grafik.

Wenn nun die Grafik einem Standard entspricht, und Elemente besitzt, die von einem Werkzeug interpretiert werden können, z.B. Schnittstellen, und diese Schnittstellen in der Architektur der Software verwendet werden, dann können auf Basis dieser Grafik die Modelle automatisch getestet werden.

In der Abbildung Nr. 10 ist sehr vereinfacht dargestellt, welches Vorgehen die üblichen Normen vorschreiben, um eine bestimmte Qualität zu sichern. Hier interessiert uns im Wesentlichen der linke Kasten. Dort ist ersichtlich, dass die durchzuführenden Inhalte der Tests direkt von den Anforderungen abgeleitet werden müssen.

Eine weitere Forderung der Norm ist die Traceability der einzelnen Anforderungen zu den Tests, um die Testabdeckung der Anforderungen sicherzustellen.

Auf Basis von Word- oder Excel-Dokumenten ein aufwändiges Unterfangen...

Auf Basis von UML Sequenz-Diagrammen allerdings sehr einfach möglich. Die Anforderung kann mit sehr wenig Aufwand direkt in einen Testtreiber umgewandelt werden. Besitzen Anforderungs-Management-Werkzeuge und Modellierungs-Werkzeuge ein Interface, können das Sequenzdiagramm und die Ergebnisse der Testläufe mit wenigen Mausklicks verlinkt werden und die TraceabilityInformationen stehen zur Verfügung.

Ich selber arbeite momentan mit an der Entwicklung eines UML Target Debuggers, der ein Interface zum IBM® Rational® TestConductor bekommt.

Damit wird es zukünftig auch möglich sein, Tests auf Basis von UML Sequenz-Diagrammen direkt auf dem Zielsystem durchzuführen.

Eine Verbindung zu Werkzeugen, wie z.B. National Instruments® LabVIEW, wird sicher in den kommenden Jahren folgen.

Damit ist die Technik nicht mehr all zu weit entfernt von einem HIL (Hardware in the Loop) Teststand, der direkt aus den Anforderungen angetrieben wird. Und das auf Basis von Standard-Werkzeugen zu erschwinglichen Preisen.

> Zur Fortsetzung des Artikels: ESE-Report 25

 

Autor:

Andreas Willert
Haben Sie noch Fragen oder Anregungen zum Thema? Dann freue ich mich über eine E-Mail: awillert@willert.de

Herausgeber:

WILLERT SOFTWARE TOOLS GMBH
Hannoversche Straße 21
31675 Bückeburg
E-Mail: info@willert.de
Tel.: +49 5722 9678 - 60

Alle ESE-Reports im Überblick

Aktuelles Know-how und neueste Entwicklungen und Trends rund um das Thema Emedded Software Engineering

> zu den ESE-Reports

Hinweis: Unsere Webseite nutzt Cookies. Wenn Sie fortfahren, nehmen wir an, dass wir Ihre Erlaubnis haben Cookies zu setzen. Informationen zum Einsatz von Cookies sowie unsere Datenschutzbestimmungen finden Sie in unserer Datenschutzerklärung und über unser Impressum.