Entwicklungsprozeß bedarf der Unterstützung durch Tools und Verfahren, aber:

Ein Methodenkorsett bremst die Kreativität

30.01.1987

Oberstes Ziel des Software-Engineering ist es, den SW-Produktionsprozeß rationeller und damit wirtschaftlicher zu gestalten. Dabei dürfen jedoch produktivitätshemmende Methodenkorsetts und Werkzeugrepertoirs nicht die Kreativität des Entwicklers hemmen. Entscheidend ist deshalb der Einsatz geeigneter Tools und Verfahren, die dem Softwerker trotz aller Reglementierung genügend Freiraum lassen.

Die Entwicklung, Wartung und Pflege von Software verursacht beträchtliche Kosten. Jedes Softwareentwickelnde Unternehmen muß im Sinne der Wirtschaftlichkeit daran interessiert sein, seine Dienstleistung beziehungsweise sein Produkt möglichst kostengünstig herzustellen. Die Verbesserung der Produktionsmethoden durch geeignete Maßnahmen, wie sie im Fertigungsbereich allgemein eingesetzt werden, erweist sich bei der Softwareentwicklung als ein elementares Problem.

Einerseits handelt es sich bei der Softwareentwicklung um die Schaffung und Gestaltung komplexer Systeme. Die Komplexität der Softwaresysteme resultiert aus einer Vielzahl von Prozessen der Gewinnung, Verarbeitung und Ausgabe von Informationen, welche im Verlauf der Softwareentwicklung zu bewältigen sind. Komplexitätserhöhend kommt hinzu, daß es sich bei den meisten Entwicklungsarbeiten auf dem Gebiet der Softwareerstellung nicht um monopersonale Prozesse handelt, sondern daß bei der Bewältigung dieser Aufgaben meist eine Vielzahl von Personen zusammenarbeiten.

Hilfsmittel sind oft zu vage definiert

Andererseits gestaltet sich der Einsatz von Methoden, Techniken und Werkzeugen sehr schwierig. Häufig fehlen geeignete Maßnahmen zur Verbesserung des Softwareentwicklungsprozesses als Voraussetzung zur Erstellung kostengünstiger und qualitativ hochwertiger Software. Zwar existiert eine umfangreiche Palette von Softwareentwicklungswerkzeugen, doch die Auswahl des für einen bestimmten Zweck richtigen und erfolgversprechenden Werkzeugs stellt die am Engineering-Prozeß Beteiligten häufig vor Probleme. Teils sind die Hilfsmittel unvollständig oder vage formuliert und lassen mehrdeutige Interpretationen zu, teils sind die Methoden selbst im Hinblick auf ihre Zweckbestimmung unzulänglich.

Zusammenfassend lassen sich die Probleme der Softwareentwicklung auf zwei wesentliche Problemkreise zurückführen:

Das Problem der Komplexitätshandhabung und -reduzierung

Softwareentwicklungsprozesse sind gekennzeichnet durch Entwurfsprobleme, deren Komplexität die begrenzte Verarbeitungskapazität der Entwickler sehr stark beansprucht oder gelegentlich übersteigt. Der Beherrschung oder besser der Reduzierung der Komplexität muß durch geeignete Maßnahmen Rechnung getragen werden, um eine rationellere und schnellere Softwareproduktion zu gewährleisten.

Das Problem des Einsatzes von Methoden, Techniken und Werkzeugen

Das Arsenal an Hilfsmitteln zur Erzeugung hochwertiger Software ist unvollständig und lückenhaft. Methoden und Werkzeuge sind vielfach wenig praktikabel. Sie werden nicht selten falsch eingesetzt und erschweren somit den Softwareerstellungsprozeß, statt ihn zu unterstützen.

Der Prozeß der Softwareentwicklung kann als eine Reihe von zielgerichteten Aktivitäten und Tätigkeiten aufgefaßt werden. Als solcher ist er eingebunden in das Gesamtzielsystem der Unternehmung. Aus diesem Zielsystem leiten sich die Ziele ab, die mit der Softwareentwicklungstätigkeit erreicht werden sollen. Dabei gilt es festzuhalten, daß die Entwicklung von Software und damit auch der Softwareentwicklungsprozeß nicht das Unternehmensziel an sich sein kann, sondern immer nur ein Mittel zur Erreichung dieses näher zu definierenden Zieles.

Um die Vielzahl der Unternehmensziele zu systematisieren, bietet es sich an, die Zielbündel hierarchisch (top down) zu strukturieren. Das dargestellte Konzept einer Zielhierarchie (siehe Kasten) erhebt weder Anspruch auf Allgemeingültigkeit noch auf Vollständigkeit. Es soll lediglich versucht werden, eine Möglichkeit der Herleitung bestimmter Ziele zu verdeutlichen.

Zieldefinition ist der entscheidende Schritt

Ausgehend von einem gegebenen Oberziel (1. Ebene), sind schrittweise untergeordnete Ziele zur Konkretisierung des Zieles der ersten Hierarchieebene zu formulieren. Hierbei wird unterstellt, daß das Oberziel in einem politischen Entscheidungsprozeß formuliert wird.

Die Notwendigkeit einer hinreichend detaillierten Zielformulierung ergibt sich aus der Forderung globale Soll-Zustände oder vage Zielvorstellungen zu konkretisieren. Erst danach können geeignete Maßnahmen ergriffen werden, die effizient zur Zielerreichung beitragen.

Die Definition der Ziele ist zunächst bedeutsamer als die Bestimmung oder Auswahl von Lösungsalternativen. Werden nämlich Ziele nur vage definiert, besteht die Gefahr, daß sie falsch interpretiert werden. Zwangsläufig werden irrelevante Probleme und Aufgabenstellungen angegangen.

Aufbauend auf einem fundierten Zielfindungsprozeß sind die konkreten Problemstellungen zu formulieren. Die Forderung nach Verbesserungen bei der Softwareentwicklung muß sich an den beiden eingangs beschriebenen wesentlichen Problemen orientieren:

- Handhabung der Komplexität,

- Einsatz von Methoden, Techniken und Werkzeugen.

Die wirtschaftliche Herstellung von qualitativ hochwertiger Software erscheint nur möglich, wenn der Herstellungsprozeß in seiner Komplexität transparent gemacht wird. Ein Weg, dies zu erreichen, besteht darin, den Softwareproduktionsprozeß zeitlich zu strukturieren.

Dieser Ansatz zur Reduktion von komplexen Problemen hat sich in der Praxis der Softwareentwicklung, wie auch in anderen Disziplinen - insbesondere in den Konstruktions- und Ingenieurwissenschaften - bewährt. Er bildet heute in nahezu allen erfolgreichen Softwareentwicklungsprojekten den konzeptionellen Rahmen.

Bei der zeitlichen Strukturierung geht man davon aus, daß der Softwareentwicklungsprozeß mehrere Phasen durchläuft. Diese Art der Strukturierung äußert sich unter anderem darin, daß

- die einzelnen Phasen eindeutig voneinander abgrenzbar sind;

- in jeder Phase ein bestimmtes Ziel erreicht wird;

- für jede Phase Kriterien existieren, anhand derer der Grad der Zielerreichung ermessen werden kann.

Eine Phase kann dadurch charakterisiert werden, indem festgelegt wird,

- welches Ziel in dem Entwicklungsabschnitt ( = Phase) erreicht werden soll;

- welche Maßstäbe (Kriterien) zugrunde gelegt werden sollen, um das Ausmaß beziehungsweise den Grad der Zielerreichung festzustellen;

- welcher Input (Eingangsdokumente) in der Phase weiterverarbeitet werden soll.

Sobald geklärt ist, welche Resultate die einzelnen Phasen erbringen sollen, werden analog zum Prozeß der Zielkonkretisierung den angestrebten Zielen Tätigkeiten zugeordnet. Den verschiedenen Tätigkeiten wiederum werden geeignete Methoden und Techniken zugeordnet, welche durch spezielle Werkzeuge und Hilfsmittel zu unterstützen sind. Hierdurch entstehen hierarchische Beziehungen zwischen den Phasenzielen, den Tätigkeiten, den Methoden und Techniken sowie den Werkzeugen und Hilfsmitteln. Diese Art der Strukturierung dient dem Zweck, die Phasenziele zu operationalisieren. Das heißt, mit bestimmten Tätigkeiten, gestützt auf Methoden und Techniken und unterstützt durch Werkzeuge und Hilfsmittel, soll ein möglichst hoher Zielerreichungsgrad realisiert werden.

Die jeweiligen Phasenergebnisse werden als Zwischenergebnisse autorisiert und dokumentiert. Durch die Autorisierung erhalten diese Zwischenergebnisse für den weiteren Verlauf des Entwicklungsprozesses verbindlichen Charakter. Mit dem Begriff "Meilenstein" wird die Bedeutung der einzelnen Phasenergebnisse im gesamten Entwicklungsprozeß treffend formuliert. Derartige Meilensteine bilden den wichtigsten Output einer Phase und zugleich den wichtigsten Input der Folgephase.

Das Verbindlicherklären von Zwischenergebnissen als Output einer Phase darf jedoch nicht dazu führen, daß Rückkopplungen zwischen den einzelnen Phasen verhindert werden. Die Möglichkeit von Rückkopplungen muß erhalten bleiben, damit Änderungsanforderungen oder neuen Erkenntnissen in angemessener Weise Rechnung getragen werden kann. Auch die Korrektur der Teilergebnisse aus früheren Phasen wird über diesen Mechanismus ermöglicht. Die Modifikation der in vorhergehenden Phasen produzierten Zwischenergebnisse darf freilich nicht beliebig gehandhabt werden, da sonst die Forderung nach verbindlichen und damit verläßlichen Meilensteinen unterlaufen wird.

Zur Verbesserung des Softwareerstellungsprozesses genügt es nicht, die Komplexität dieses Prozesses zu reduzieren. Die Arbeitsaufgabe muß zusätzlich durch geeignete Arbeitsmittel erleichtert werden. Für das Aufgabengebiet der Softwareentwicklung bedeutet dies, daß die einzelnen Entwicklungsabschnitte sowohl methodisch als auch durch die Verwendung von Werkzeugen zu unterstützen sind.

Der Stand der Softwaretechnologie weist jedoch gerade in diesem Bereich bemerkenswerte Defizite auf. Es liegen zur Zeit wenige wissenschaftliche Erkenntnisse vor, die für die Entwicklung von Methoden zur Produktivitätssteigerung der Softwareerstellung von Bedeutung sind. Vielmehr wird die Softwaregestaltung und -entwicklung durch das Können beziehungsweise Nichtkönnen der Entwickler geprägt. Hierin ist ein wesentlicher Grund für den Einsatz von Methoden zu sehen.

Der Einsatz von Methoden gestattet es generell, die Qualität der Softwareproduktion und damit der Software von individuellen Erfahrungen und Kenntnissen weitgehend zu entkoppeln. Vorausgesetzt, die Methoden sind hinsichtlich des zu lösenden Problems effizient einsetzbar und die Entwickler im Umgang damit entsprechend geschult. Das Ziel des Methodeneinsatzes ist es unter anderem, eine personenunabhängige Entwicklung qualitativ hochwertiger Software zu gewährleisten.

Der Einsatz von effizienten Methoden bereitet in der Praxis jedoch erhebliche Schwierigkeiten. Einerseits verhindert das Fehlen von Methoden deren Einsatz, andererseits behindert die fehlende oder zumindest ungenügende Werkzeugunterstützung den Einsatz von Methoden. Damit hängt die Akzeptanz einer Methode neben anderen Faktoren in starkem Maße von der Verfügbarkeit von Werkzeugen und Hilfsmitteln ab.

Es ist davon auszugehen, daß die Produktivität von Engineering-Prozessen erheblich durch den Einsatz von Werkzeugen und Hilfsmitteln beeinflußt wird. Deutlich wird dies insbesondere in den Ingenieurdisziplinen, wo zum Beispiel die Verwendung von CAD-Systemen zu Produktivitätssteigerungen bei der Entwicklung von Maschinenteilen geführt hat. In der Datenverarbeitung sind als Beispiele anzuführen:

- der Einsatz höherer Programmiersprachen,

- der Einsatz von Entscheidungstabellengeneratoren,

- der Einsatz von Data-Dictionaries,

- der Einsatz von Maskengeneratoren.

Freilich mangelt es zur Zeit an Untersuchungen, die genauen Aufschluß darüber geben, welchen konkreten Einfluß die einzelnen Werkzeuge auf die Produktivitäts- und Qualitätsverbesserungen ausüben. Dies sollte jedoch nicht Anlaß sein, die Entwicklung und den Einsatz von Tools und Methoden in der Datenverarbeitung zu vernachlässigen.

Vielmehr muß die Entwicklung von brauchbaren und wirksamen Werkzeugen intensiv betrieben werden, will man den Software-Engineering-Prozeß wirksam unterstützen. Gleiches gilt für den Einsatz bereits vorhandener Werkzeuge und Hilfsmittel. Diese müssen allerdings so beschaffen sein, daß sie den erwarteten Nutzen weitgehend realisieren. Andernfalls finden sie bei den Entwicklern keine Chance auf Akzeptanz.

Methoden, Techniken und Werkzeuge haben letztlich die Aufgabe, konkrete Verbesserungen bei der Software-Entwicklung zu bewirken. Dem kann unter anderem Rechnung getragen werden durch:

- Einsatz einheitlicher Methoden und Werkzeuge,

- Standardisierung des Methoden- und Werkzeugeinsatzes,

- Operationalisierung methodischer und technischer Innovationen,

- rasche Umsetzung neuer Erkenntnisse in die Entwicklungsarbeit,

- Verbreitung und Einführung zeitgemäßer Software-Entwicklungs-Tools,

- Erarbeitung von Orientierungsrichtlinien und Empfehlungen zum Software-Engineering.

Der Einsatz von Methoden und Werkzeugen darf keinesfalls um ihrer selbst willen erfolgen, sondern muß sich immer an den vorgegebenen Problemen und Zielsetzungen orientieren. Darüber hinaus müssen sowohl Methoden wie auch Werkzeuge in ihrer Mächtigkeit (Funktionsumfang) den zu lösenden Problemen angemessen sein. Ferner muß für den Entwickler die Verwendbarkeit, die Tauglichkeit und der Nutzen der Methoden und Werkzeuge im Hinblick auf das von ihm zu lösende Problem ersichtlich sein.

Die Entwicklung von Software zum Zweck der Automatisierung von Arbeitsprozessen ist nicht das primäre Ziel einer Unternehmung oder einer Organisation. Sie ist lediglich ein untergeordnetes Ziel und hat sich an den gegebenen oder geforderten Hauptzielen zu orientieren. Die Softwareentwicklung ist somit eingebettet in das Zielsystem der Organisation. Bemühungen, den Entwicklungsprozeß effizienter zu gestalten, das heißt die Produktivität des Software-Engineering zu verbessern, müssen folglich dazu beitragen, die Leistungsfähigkeit, Wirtschaftlichkeit und Arbeitsqualität des Unternehmens zu steigern.

Im Bestreben, den Software-Engineering-Prozeß zu verbessern, gilt es, zwei Problemkreise zu bewältigen:

- Reduzierung der Komplexität,

- Einsatz von geeigneten Methoden, Techniken und Werkzeugen.

Reduktion von Komplexität heißt, die Komplexität auf die sie erzeugenden Komponenten und Faktoren zurückzuführen. Auf diese Weise lassen sich Probleme strukturieren und leichter lösen. In der Praxis der Softwareentwicklung hat sich die zeitliche Strukturierung bewährt. Es existiert heute eine Vielzahl von sogenannten "Phasenmodellen", die den Engineering-Prozeß als eine Folge von untereinander abgrenzbaren Phasen auffassen. Mit diesen Phasenkonzepten liegen Ansätze vor, die es gestatten, den einzelnen Entwicklungsabschnitten Teil- oder Zwischenergebnisse zuzuordnen. Diese wiederum sind zu operationalisieren, indem Tätigkeiten und Aktivitäten herausgearbeitet werden, mit deren Hilfe die betreffenden Phasenergebnisse zu realisieren sind.

Ferner bieten diese Konzepte die Möglichkeit, die einzelnen Tätigkeiten sowohl methodisch als auch mit Werkzeugen zu unterstützen. Es erscheint daher sinnvoll und geboten, die Aufgaben der Software-Entwicklung im Rahmen eines Phasenmodells zu bewerkstelligen.

Der Einsatz von Methoden, Techniken und Werkzeugen bereitet dagegen wesentlich größere Schwierigkeiten. Hierfür sind hauptsächlich zwei Gründe zu nennen: Erstens die unübersichtliche Methodenvielfalt sowie das Sammelsurium an Werkzeugen (SW-Tools, Standard-SW, HW-Systeme), die eher dazu angetan sind, die Entwickler zu verwirren, als sie zu unterstützen. Zweitens das Arsenal an ineffizienten, unzureichenden Methoden und Werkzeugen, die aufgrund ihrer Unzulänglichkeit den Prozeß der Softwareentwicklung nicht in gewünschter Weise unterstützen.

Es ist deshalb erforderlich, die Auswahl und den Einsatz geeigneter Methoden, Techniken und Werkzeuge zu systematisieren, das heißt transparent zu machen. Sinnvollerweise sollten nur solche Hilfsmittel eingesetzt werden, die den Softwareentwicklungsprozeß wirksam unterstützen. Erkenntnisse aus anderen Disziplinen - in erster Linie aus den Konstruktionswissenschaften - sollten in den Software-Engineering-Prozeß integriert werden. Anleihen in benachbarten Fachgebieten zu tätigen oder Analogien zu bilden, kann unter Umständen dazu beitragen, die Entwicklung von Software zu verbessern.

Werkzeugvielfalt muß systematisiert werden

Die Methoden- und Werkzeugvielfalt muß außerdem systematisiert und geordnet werden. Bestehende Lücken auf diesem Gebiet sind aufzuzeigen und nach Möglichkeit zu schließen. Zu diesem Zweck sind Empfehlungen, Konventionen, Richtlinien, Normen und dergleichen zu erarbeiten. Wegen der Widerstände, die allgemein gegen solche Vorschriften vorhanden sind, ist dabei großer Wert auf Konsens mit den Betroffenen zu legen. Es nutzt wenig, derartige Regelwerke zu formulieren, wenn dies nicht gemeinschaftlich erfolgt.

Das Aufstellen von Regeln allein bringt noch keinen Nutzen. Erst ihre Anwendung führt zu den gewünschten Verbesserungen. Dies setzt jedoch voraus, daß die Regelungen tatsächlich effizient einzusetzen sind und daß ihre Zweckmäßigkeit von den Entwicklern positiv beurteilt wird.

Konventionen, Normen und Richtlinien haben unter anderem eine Ordnungsfunktion. Ihre Aufgabe besteht darin, durch eine angemessene und sinnvolle Verringerung der Typenvielfalt zur Rationalisierung beizutragen. Auch sollen sie durch "genormte" Lösungsmöglichkeiten die Qualität der Software sicherstellen.

Derartige Richtlinien sollten nicht aufoktroyiert, sondern von allen interessierten Bereichen gemeinsam getragen werden. Nur eine im Konsens erarbeitete Konvention hat in der Praxis Aussicht auf breite Akzeptanz und damit Aussicht auf Erfolg. Sie darf die Kreativität der Entwickler nicht im Keim ersticken und die individuelle Gestaltungsfreiheit nicht über Gebühr einschränken. Statt dessen sollen Konventionen und Richtlinien das Kreativitätspotential in geordnete Bahnen lenken und in zielorientiertes Handeln umsetzen. Der Vorteil von Orientierungsrichtlinien liegt hauptsächlich darin, daß einmal "Genormtes" nicht wieder erfunden werden muß und die kreativen Kräfte sich dank der "Normung" auf neue Ziele konzentrieren können.

Mit Hilfe von Empfehlungen, Normen und Konventionen soll unter gegebenen wirtschaftlichen und technischen Bedingungen die beste Lösung sich wiederholender Aufgaben erreicht werden. Voraussetzung dafür ist, daß die optimale Lösung einer Aufgabe in Gemeinschaftsarbeit ermittelt wird. Die Lösungsfindung ist zu dokumentieren und für weitere Anwendungen bereitzustellen.

Nicht zuletzt müssen die getroffenen Regelungen permanent auf ihre Zweckmäßigkeit hin überprüft werden, um technischen wie auch methodischen Innovationen Rechnung zu tragen und um eine schnelle Umsetzung neuer Erkenntnisse zu gewährleisten.

Hierarchische Ebenen der unternehmerischen Ziele

Das gesamte Zielsystem ist so lange zu verfeinern, bis die Zielvorstellungen in einer operationalen Form vorliegen. Dies ist dann der Fall, wenn einem Ziel konkrete Tätigkeiten oder Maßnahmen zugeordnet werden können, die in einem direkten Ursache-Wirkungs-Verhältnis zu dem betreffenden Ziel stehen.

1. Ebene:

- Verbesserung der Wirtschaftlichkeit

- Verbesserung der Leistungsfähigkeit

- Verbesserung der Arbeitsqualität

- Verbesserung der Produktivität

2. Ebene:

- Senkung der Kosten

3. Ebene:

- Senkung der Einzelkosten

- Senkung der Gemeinkosten

4. Ebene:

- Beschleunigung der Durchlauf- und Bearbeitungszeiten

- Optimierung der Arbeitsabläufe

- Optimierung der Arbeitsgestaltung

5. Ebene:

- Verbesserung der Arbeitsbedingungen

- Standardisierung der Arbeitsabläufe

- Automatisierung von Arbeitsabläufen

- Nutzung/Integration von Arbeitsmitteln

- Unterstützung von Engineering-Prozessen

6. Ebene:

- Einsatz einheitlicher Methoden und Werkzeuge, Anpassung der Arbeit an neue Erkenntnisse, Methoden, Systeme und Geräte

- Operationalisierung methodischer, technischer Innovationen und alternativer Lösungsmöglichkeiten

- Schnelle Umsetzung neuer Erkenntnisse in die Tagesarbeit

- Verbreitung und Durchsetzung zeitgemäßer Software-Entwicklungsmethoden

7. Ebene:

- Erarbeitung von Leitlinien Konventionen und Empfehlungen zur Verfahrens-, Prozeß- und Systemtechnik

Begriffsdefinitionen

Methoden:

Methoden sind ein Mittel, gesteckte Ziele zu realisieren. Sie geben den Weg an zur Erreichung von Zielen. Methoden sind immer zielgerichtet. Sie beruhen auf Theorien, die Aussagen über einen Zusammenhang machen zwischen den Ausgangssituationen und den durch Anwendung der Methoden angestrebten Resultaten. Eine Methode beschreibt in recht allgemeiner Form Wege zur Erreichung von Zielen. Eine Methode ist zum Beispiel die datenstrukturorientierte Entwurfsmethode von Jackson.

Modell:

Ein Modell ist ein vereinfachtes Abbild der Realität. Mit anderen Worten: Ein Modell ist ein System, das in vereinfachender, abstrahierender Weise ein anderes (reales) System abbildet.

System:

Kaum ein Begriff findet in nahezu allen Bereichen (Disziplinen) soviel Verwendung wie der Begriff "System". Unter einem System versteht man eine Menge von (beliebigen) Elementen, zwischen denen Beziehungen bestehen. Komplexe Systeme können nur analysiert werden, indem man sogenannte "Subsysteme" bildet, diese für sich analysiert um sie dann - sobald ihre Funktion geklärt ist - als "Black box" und undifferenzierte Elemente des Systems höherer Ordnung zu betrachten.

Technik:

Techniken unterstützen die Anwendung von Methoden und Verfahren. Sie geben Arbeits- und Darstellungsmittel zur Beschreibung eines methodischen Lösungsweges. Als Beispiele können die Diagrammtechnik und die Entscheidungstabellentechnik angeführt werden.