Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

150
Diplomarbeit vorgelegt im Rahmen der Diplomprüfung zum Diplom- Informatiker (FH) an der Fachhochschule für Ökonomie und Management Thema der Diplomarbeit Der „Duct Tape Programmer― Mentalität als Einflussgröße des Software- Engineerings Betreuer Dr.-Ing. Torsten Finke Autor Jens Krahe Ubierstr. 81 53173 Bonn [email protected] http://twitter.com/krahe Datum Bonn,

description

Die vorliegende Arbeit beschäftigt sich mit dem „Duct Tape Programmer“ nach Spolsky. Der Begriff des „Duct Tape Programmers“ wurde in Rahmen eines Weblog-Artikels von Joel Spolsky geprägt (Spolsky, 2009). Dieser Artikel beschreibt, abgeleitet aus einem Interview, das Peter Seibel im Buch „Coders at Work“ (Seibel, 2009) mit Jamie Zawinski führt, einen bestimmten Stereotypen eines Programmierers. Das Buch „Coders at Work“ beinhaltet insgesamt 15 Interviews mit bekannten Persönlichkeiten aus der Programmierszene. Diese Arbeit untersucht anhand der von Peter Seibel geführten Interviews, ob eine Mentalität, wie es Spolsky in seinem Artikel beschreibt, festgestellt werden kann und ob sie einen Einfluss auf das Software-Engineering haben könnte. Besonders erwähnt werden muss, dass diese Arbeit zwar wissenschaftlich erarbeitet wurde, es jedoch aufgrund der geringen Grundgesamtheit mit N = 15 davon ausgegangen wird, dass sie nicht repräsentativ ist.

Transcript of Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

Page 1: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

Diplomarbeit vorgelegt im Rahmen der Diplomprüfung zum Diplom-

Informatiker (FH) an der Fachhochschule für Ökonomie und Management

Thema der Diplomarbeit

Der „Duct Tape Programmer― – Mentalität als Einflussgröße des Software-

Engineerings

Betreuer

Dr.-Ing. Torsten Finke

Autor

Jens Krahe

Ubierstr. 81

53173 Bonn

[email protected]

http://twitter.com/krahe

Datum

Bonn,

Page 2: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

Ehrenwörtliche Erklärung

Hiermit versichere ich, dass die vorliegende Arbeit von mir selbstständig und ohne

unerlaubte Hilfe angefertigt worden ist, insbesondere dass ich alle Stellen, die

wörtlich oder annähernd wörtlich aus Veröffentlichungen entnommen sind, durch

Zitate als solche gekennzeichnet habe. Ich versichere auch, dass die von mir

eingereichte schriftliche Version mit der digitalen Version übereinstimmt. Weiterhin

erkläre ich, dass die Arbeit in gleicher oder ähnlicher Form noch keiner anderen

Prüfungsbehörde vorgelegen hat. Ich erkläre mich damit einverstanden, dass die

Arbeit der Öffentlichkeit zugänglich gemacht wird. Ich erkläre mich damit

einverstanden, dass die Digitalversion dieser Arbeit zwecks Plagiatsprüfung auf die

Server externer Anbieter hochgeladen werden darf. Die Plagiatsprüfung stellt keine

Zurverfügungstellung für die Öffentlichkeit dar.

Bonn,

Page 3: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

I

Vorwort

Ich möchte mich bei der Firma triplesense GmbH für ihre Geduld bedanken und bei

Nils Hagemann, der mich als waschechter „Duct Taper“ zu diesem Thema inspiriert

hat. Zudem möchte ich auch meiner Frau danken, die mich in dieser Zeit unterstützt

hat.

(http://geekandpoke.typepad.com/)

Page 4: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

II

Inhaltsverzeichnis

Vorwort ........................................................................................................................ I

Inhaltsverzeichnis ..................................................................................................... II

Abkürzungsverzeichnis ........................................................................................... IV

Abbildungsverzeichnis ............................................................................................ VI

Tabellenverzeichnis ................................................................................................ VII

1 Einleitung ............................................................................................................. 1

1.1 Problemstellung ............................................................................................ 1

1.2 Ziel der Arbeit............................................................................................... 2

1.3 Vorgehensweise ............................................................................................ 2

1.4 Leserkreis ...................................................................................................... 4

1.5 Buchempfehlungen ....................................................................................... 5

1.6 Hinweise zu Formatierungen und „Creative Commons“-Lizenz ................. 5

2 Softwaretechnik ................................................................................................... 6

2.1 Grundlagen ................................................................................................... 6

2.2 Vorgehensmodelle und Prozessmodelle ..................................................... 27

2.3 Softwarequalität .......................................................................................... 63

3 Duct Tape Programmer .................................................................................... 75

3.1 Begriffsherkunft .......................................................................................... 76

3.2 Besondere Problemstellung ........................................................................ 78

3.3 Vorgehen..................................................................................................... 78

3.4 Analyse der Fragestellungen in „Coders at Work“..................................... 79

3.5 Charakteristiken .......................................................................................... 81

Page 5: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

III

3.6 Mentalität .................................................................................................. 105

3.7 Kritische Würdigung ................................................................................ 107

4 Mentalität als Einflussgröße des Software-Engineerings ............................ 109

4.1 Interviewfragen mit Relevanz für das Software-Engineering .................. 110

4.2 Aussagen, die Themenfelder des Software-Engineerings betreffen ......... 121

4.3 Einordnung in die Softwareentwicklung .................................................. 126

4.4 Kritische Würdigung ................................................................................ 127

5 Zusammenfassung und Fazit .......................................................................... 128

Literaturverzeichnis ............................................................................................... 130

Index ........................................................................................................................ 139

Page 6: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

IV

Abkürzungsverzeichnis

ACM Association for Computing Machinery

ASD Adaptive Software Development

API Application Programming Interface

CASE Computer Aided Software Engineering

DSDM Dynamic System Development Method

FDD Feature Driven Development

GHC Glasgow Haskell Compiler

IEEE Institute of Electrical and Electronics Engineers

JSON JavaScript Object Notation

LOC Lines of Code

KLOC Kilo Lines of Code

Q&P Quality and Productivity

OTP Open Telecom Platform

RUP Rational Unified Process

SaaS Software as a Service

SEI Software Engineering Institute

SW Software

SWEBOK Guide to the Software Engineering Body of Knowledge

TDD Test Driven Development

UML Unified Modeling Language

Page 7: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

V

UP Unified Process

V&V Verification and Validation

XP Extreme Programming

Page 8: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

VI

Abbildungsverzeichnis

Abbildung 1: Hardware/software cost trends ............................................................... 8

Abbildung 2: Proklamierte „Silver Bullets“ in der Informatik ................................... 11

Abbildung 3: Manifesto for Agile Software Development ........................................ 13

Abbildung 4: Software-Engineering innerhalb der Informatik .................................. 24

Abbildung 5: Annäherung durch iterative Entwicklung ............................................. 35

Abbildung 6: Vorgehensweise der inkrementellen Entwicklung ............................... 36

Abbildung 7: Ausführung des Timeboxing-Modells .................................................. 40

Abbildung 8: V-Modell von 1979 nach Boehm ......................................................... 42

Abbildung 9: Vereinfachte Darstellung der Struktur des V-Modells XT................... 44

Abbildung 10: Phasen, Iterationen und Arbeitsabläufe .............................................. 47

Abbildung 11: XP-Prozess – Projektüberblick ........................................................... 53

Abbildung 12: The five processes of FDD with their outputs .................................... 56

Abbildung 13: Bedeutung verschiedener Qualitätsaspekte der Zeit........................... 63

Abbildung 14: Qualitätsbaum von Ludewig, et al. ..................................................... 64

Abbildung 15: Gliederung der Softwarequalitätssicherung nach Ludewig, et al. ...... 66

Abbildung 16: Positionierungskreuz Scientist, Engineer, Artist, Craftsman ........... 120

Page 9: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

VII

Tabellenverzeichnis

Tabelle 1: Gegenüberstellung von Werkstatt und Atelier .......................................... 26

Tabelle 2: Projekterfolge der Interview-Partner in „Coders at Work“ ..................... 104

Tabelle 3: Abgeleitete Mentalität des „Duct Tape Programmers“ ........................... 107

Page 10: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

1

1 Einleitung

Die vorliegende Arbeit beschäftigt sich mit dem „Duct Tape Programmer“ nach

Spolsky. Der Begriff des „Duct Tape Programmers“ wurde in Rahmen eines

Weblog-Artikels von Joel Spolsky geprägt (Spolsky, 2009). Dieser Artikel

beschreibt, abgeleitet aus einem Interview, das Peter Seibel im Buch „Coders at

Work“ (Seibel, 2009) mit Jamie Zawinski führt, einen bestimmten Stereotypen eines

Programmierers. Das Buch „Coders at Work“ beinhaltet insgesamt 15 Interviews mit

bekannten Persönlichkeiten aus der Programmierszene. Diese Arbeit untersucht

anhand der von Peter Seibel geführten Interviews, ob eine Mentalität, wie es Spolsky

in seinem Artikel beschreibt, festgestellt werden kann und ob sie einen Einfluss auf

das Software-Engineering haben könnte. Besonders erwähnt werden muss, dass diese

Arbeit zwar wissenschaftlich erarbeitet wurde, es jedoch aufgrund der geringen

Grundgesamtheit mit N = 15 davon ausgegangen wird, dass sie nicht repräsentativ

ist.

1.1 Problemstellung

Spolsky hat den Duct Tape Programmer auf Basis des ersten Interviews mit Jamie

Zawinski dargestellt. Zawinskis Aussagen repräsentieren nach Spolsky einen

bestimmten Stereotyp von Programmierer. Dieser besitzt eine besondere Mentalität

in Bezug auf die Entwicklung von Softwareprodukten. Inwieweit der Duct Tape

Programmer auch aus persönlichen Erfahrungen Spolskys entstanden ist, wird in dem

Artikel nicht erwähnt.

Die Mentalität des Duct Tape Programmer nach Spolsky kann am besten mit einer

Metapher beschrieben werden: Die zu lösende Aufgabe besteht darin einen Nagel mit

einem Hammer in die Wand zu schlagen. Ein Duct Tape Programmer nimmt den

Hammer in die Hand und versucht damit den Nagel in die Wand zu schlagen. Wenn

der Nagel sitzt, ist für ihn die Aufgabe erledigt. Ist der Nagel schief, versucht er, ihn

zu korrigieren. War die Wand zu stark, sucht er nach einem neuen, stärkeren Nagel.

Bei all seinem Schaffen versucht er, den Nagel in die Wand zu bekommen, und

korrigiert seine Fehler, nachdem er sie gemacht hat. Diese Mentalität ist in der

heutigen Softwareentwicklung einmalig. Je nach Ansatz des Software-Engineerings

Page 11: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

2

würde ein Entwickler zunächst einmal einen Test in Form einer Trockenübung

machen, bevor er mit dem Hammer den Nagel in Wand schlägt. Er würde die Wand

dahingehend untersuchen, ob der Nagel überhaupt in die Wand geschlagen werden

kann. Der Hammer, der Nagel und die Wand würden vorher untersucht, ob alle drei

die richtige Beschaffenheit für die Aufgabe besitzen und, gegebenenfalls

ausgetauscht werden. Möglicherweise würde der Entwickler vorher mathematisch

berechnen, in welchem Winkel der Nagel am besten in die Wand geschlagen werden

sollte, und auf dieser Basis eine Maschine bauen, die einen Nagel korrekt in die

Wand schlägt. Eine Maschine wäre zudem dann sinnvoll, wenn plötzlich hundert

Nägel in die Wand geschlagen werden müssten. Diese Maschine würde vor der

Inbetriebnahme ausgiebig getestet, ob sie Nägel korrekt in die Wand schlagen kann.

Sie würde zudem auf Basis der ISO-Norm entwickelt und vom TÜV abgenommen

werden, damit sie auch in anderen Projekten, in denen zum Beispiel Baumstämme in

den Boden gerammt werden müssen, eingesetzt werden kann. Das Einzige, was nicht

gemacht wird, ist, den Nagel in die Wand zu schlagen.

Die Problemstellung kann deshalb in zwei Teilbereiche operationalisiert werden.

Erstens: Gibt es den von Joel Spolsky im Artikel erwähnten Duct Tape

Programmer? Zweitens: Welchen Einfluss könnte eine solche Mentalität auf das

Software-Engineering haben?

1.2 Ziel der Arbeit

Das Ziel der Arbeit ist es zum einen die Mentalität des Duct Tape Programmers auf

Basis der 15 Interviews aus dem Buch „Coders at Work“ von Peter Seibel abzuleiten.

Als Leitbild dient hierzu der Artikel „The Duct Tape Programmer“ von Joel Spolsky.

Zum anderen wird anhand der Mentalität und Aussagen aus den Interviews, die

direkt Themengebiete des Software-Engineerings ansprechen, qualitativ überprüft,

ob ein Einfluss auf das Software-Engineering festgestellt werden kann.

1.3 Vorgehensweise

Im ersten Teil der Arbeit werden die Problemstellung, das Ziel der Arbeit und der

Leserkreis festgelegt. Im zweiten Teil wird das Software-Engineering im

Page 12: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

3

Allgemeinen betrachtet. Besonders wurden dabei die Vorgehens- und

Prozessmodelle des Softwareherstellungsprozesses betrachtet, weil diese seit Beginn

das Kernstück des Software-Engineerings darstellen (Hesse, et al., 1992 S. 28).

Copliens „A Generative Development – Process Pattern Language” (Coplien, 1998)

wurde bei den Vorgehens- und Prozessmodellen nicht betrachtet, weil es „Process

Patterns“ sind und zudem in der Basisliteratur keine Erwähnung finden. Auch wurde

kurz die Softwarequalität betrachtet, weil Spolsky im Artikel den Duct Tape

Programmer damit in Verbindung bringt. Weitere Bereiche des Software-

Engineerings, wie zum Beispiel Wartung und Reengineering, sind aus Platzgründen

nicht mit aufgenommen worden. Das Software-Engineering wurde dabei unabhängig

vom Thema des Duct Tape Programmers betrachtet, um eine neutrale Sicht zu

erhalten. Im dritten Teil wird die Mentalität des Duct Tape Programmers qualitativ

hergeleitet. Die Mentalität wird anhand von Charakteristiken festgestellt. Diese

Charakteristiken wurden aus den Interviews extrahiert und anschließend

kategorisiert. Die dargestellte Mentalität des Duct Tape Programmers in dieser

Arbeit ist deshalb zwar wissenschaftlich hergeleitet, aber aufgrund der geringen

Grundgesamtheit von N = 15 nicht repräsentativ. Im vierten Teil wird die

Einflussgröße auf Basis der im Buch vorliegenden Aussagen qualitativ festgestellt.

Dies betrifft zum einen Software-Engineering-relevante Fragestellungen von Peter

Seibel und inhaltliche Aussagen aus den Interviews, die für die

Charakterbestimmung nicht relevant waren. Zudem wird auf Basis der gewonnen

Erkenntnisse geschaut, wie der Duct Tape Programmer in das Software-Engineering

eingeordnet werden könnte. Das Kapitel besitzt viele Querverweise, die für Leser

gedacht sind, die nur das dritte und vierte Kapitel dieser Arbeit lesen möchten. Der

fünfte Teil stellt den Schluss der Arbeit mit einer Zusammenfassung und Fazit dar.

Es soll nicht unerwähnt bleiben, dass versucht wurde, diese Arbeit komplett digital

zu erstellen. Dies betrifft alle Arbeitsschritte, die für eine Arbeit in diesem Umfang

nötig sind. Dieses Vorgehen ist auch im Jahr 2010 und trotz des Internets nicht

möglich, vor allem bei der Recherche. So war es nicht möglich, für eine

wissenschaftliche Arbeit wissenschaftlich relevante Unterlagen digital zu erhalten,

ohne dafür bezahlen zu müssen. Dies trifft insbesondere auf die Standardwerke der

Informatik und des Software-Engineerings zu.

Page 13: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

4

Das Buch „Coders at Work“ wurde ebenfalls digital für diese Arbeit benutzt. Dazu

diente die Kindle-Edition des Buches. Das Referenzieren der Zitate weicht deshalb

von der Seitenmetapher ab. Alle Quellenangaben, die zu „Coders at Work“ getätigt

wurden, sind „Kindle Locations“. Falls der Leser als Referenzwerk das gedruckte

Buch von „Coders at Work“ besitzt und Zitate nachschlagen möchte, möge er die in

dieser Arbeit aufgeführten Seiten durch 12,38 teilen, um die Papierseite als Referenz

zu erhalten.

Ich möchte dem Leser dieser Arbeit auch nicht die gesammelten Erfahrungen in

Bezug auf das wissenschaftliche Arbeiten mit dem Kindle-Buch „Coders at Work“

vorenthalten. Das Buch wurde auf dem iPad mit der Kindle-App gelesen. Die

relevanten Zitate wurden mit der Kindle-Funktion „Highlight“ markiert. Durch die

Kindle-Whispersync-Funktion wurden die markierten Stellen unter dem Account des

Autors gespeichert. Die markierten Stellen wurden anschließend auf einem Mac mit

der Kindle-Applikation in das Programm OmniOutliner übertragen. Dies musste

durch die Computer-(Kindle for Mac)/Mensch-(Autor dieser Arbeit)/Computer-

(OmniOutliner)-Schnittstelle mit der Methode des Abtippens geschehen. Amazon

stellt den Export der „Highlight“ Funktion, aus Gründen, die dem Autor dieser

Arbeit nicht bekannt sind, nicht zur Verfügung. In OmniOutliner wurden die

Aussagen anschließend einer inhaltlichen Analyse unterzogen und in Charakter- und

Software-Engineering-relevante Aussagen geclustert. Pro Cluster wurden die

Aussagen anschließend in Kategorien zusammengefasst. Das Ergebnis dieses

Vorgehens ist im dritten und vierten Kapitel niedergeschrieben.

1.4 Leserkreis

Der Leserkreis dieser Arbeit sind als Primärzielgruppe Programmierer, die in der

Informatik auch liebevoll „Coding Monkeys“ genannt werden.

Sollte sich der Leser in dem Kapitel 1.1 (S. 1) durch die Metapher des „Duct Tape

Programmers“ angesprochen fühlen, ist die Arbeit eine wertvolle Ressource für ihn.

In diesem Fall sollte der zweite Teil übersprungen werden, es sei denn, man ist an

einem komprimierten Überblick des Software-Engineerings interessiert. Zudem

kommt diese Arbeit für Personen in Frage, die entweder das Buch „Coders at Work“

Page 14: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

5

gelesen haben und eine strukturierte Analyse im Kontext des Artikels von Joel

Spolskys „Duct Tape Progammers“ erhalten möchten, oder Personen, die das Buch

nicht gelesen haben und die wesentlichen Fakten des Buches zusammengefasst

präsentiert bekommen möchten. Für diejenigen, die das Buch „Coders at Work“

nicht gelesen haben, wird empfohlen, den zweiten Teil dieser Arbeit zu

überspringen. Diese Arbeit ist auch für Personen interessant, die einen neutralen,

schnellen und kompakten Einstieg in die Welt des Software-Engineerings erhalten

möchten, mit dem Schwerpunkt Vorgehen- und Prozessmodelle sowie

Softwarequalität.

1.5 Buchempfehlungen

Es können vier Bücher empfohlen werden. Das erste betrifft das Referenzwerk für

Software-Engineering von Ludewig et al. (Ludewig, et al., 2010). Es ist derzeit das

aktuellste Werk zu dem Thema und bietet einen guten Überblick über das Software-

Engineering. Es wurde deshalb auch als Referenz für diese Arbeit verwendet. Brooks

Buch (Brooks, 2003) stellt die zweite zeitlose Empfehlung dar und sollte von jedem

Informatiker gelesen werden. Das dritte Buch ist das „The Patterns Handbook“ von

Linda Rising (Rising, 1998) und ist wie Brocks Buch eine Sammlung von Essays

über das Software-Engineering. Copliens Essay „A Generative Development-Process

Pattern Language“ (Coplien, 1998) stellt in dem Buch das wichtigste Werk dar und

betrachtet den Softwareherstellungsprozess aus einer anderen Perspektive (im

Gegensatz zu den vorgestellten Vorgehens- und Prozessmodelle in dieser Arbeit).

Die letzte und vierte Empfehlung ist das Buch „Coders at Work“ (Seibel, 2009). Das

Buch sollte, genauso wie die Bücher „Programmers at Work“ (Lammers, 1986) und

„Masterminds of Programming“ (Biancuzzi, et al., 2009), in Universitäten Teil des

Lehrplans sein.

1.6 Hinweise zu Formatierungen und „Creative Commons―-Lizenz

In diesem Dokument sind aufgrund von englischen Begriffen und englischen Zitaten

die Formatierungen in der Maximalausprägung in Teilen nicht sehr leserfreundlich.

Dies bringt der Zwang der einheitlichen Formatierung bei einer wissenschaftlichen

Arbeit mit sich. Querverweise in dieser Arbeit dienen nur als Referenz. Der

Page 15: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

6

aufmerksame Leser kann die Querverweise deshalb ignorieren. Zitiert wurde in

dieser Arbeit nach ISO 690 (erstes Element und Datum). Diese Arbeit unterliegt der

Creative-Commons-Lizenz „Attribution Non-Commercial Share Alike“ (cc by-nc-

sa).

2 Softwaretechnik

Das Kapitel Softwaretechnik soll dem Leser dieser Arbeit einen Überblick über das

Thema gewähren und teilt sich in drei Unterkapitel: Grundlagen, Vorgehens- und

Prozessmodelle und Softwarequalität. Die Grundlagen setzen den Leser in den

Kontext, was Inhalt und Umfang von Software-Engineering betrifft. Anschließend

werden bekannte Vorgehens- und Prozessmodelle des Software-Engineerings

vorgestellt, da diese einen wesentlichen Bestandteil eines Softwareherstellungs-

prozesses bilden. Softwarequalität wird nur kurz besprochen, weil in dem Artikel

„The Duct Tape Programmer“ von Joel Spolsky darauf Bezug genommen wird. Alle

drei Unterkapitel enden mit einer kritischen Würdigung.

2.1 Grundlagen

In diesem Kapitel werden die Grundlagen des Software-Engineering dargestellt. Es

wird mit der Historie des Begriffs „Software-Engineering“ begonnen. Die Historie

beginnt mit der noch anhaltenden Softwarekrise und endet mit der agilen Bewegung.

Anschließend werden Definitionen besprochen, die für diese Arbeit relevant sind.

Dabei werden zusammengesetzte Worte wie zum Beispiel „Software“ und

„Engineering“ von Software-Engineering separat voneinander definiert. Danach

werden die Ziele des Software-Engineerings aufgeführt. Daneben werden zum einen

die Eigenschaften und der Wirkungskontext von Software beschrieben. Das Kapitel

endet mit den Wissensgebieten des Software-Engineerings auf Basis des SWEBOK.

2.1.1 Einführung

Die Informatik ist nach wie vor eine junge Wissenschaft. Die ersten Computer

wurden Mitte 1940er Jahre gebaut. In den Jahren 1940 bis 1960 war die Anschaffung

und Nutzung von Computer-Hardware sehr teurer. Die Programmierung erfolgte fast

ausschließlich hardwarenah in Assembler, meist ohne ein Betriebssystem.

Page 16: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

7

Applikationen, die zu diesem Zeitpunkt entwickelt wurden, waren vom Umfang sehr

gering und wurden meist von nur einer Person entwickelt. Die Software war von und

für Experten auf ein spezielles Problem zugeschnitten und wurden nach der Lösung

oft verworfen. Anwendungsgebiete erstreckten sich auf numerische-, technische-,

naturwissenschaftliche Probleme oder die Programmierung bekannter mathematisch

fundierter Algorithmen. Die Software und Hardware war zu dieser Zeit nur von

Experten bedienbar und nicht wie heute vom normalen Anwender (Grabowski,

2004), (Van Vliet, 2008 S. 2). Unabhängige Softwareentwicklungsunternehmen gab

es im Grunde nicht. Die Software wurde von den Hardware-Herstellern entwickelt

und kostenlos beigelegt. Software wurde zu diesem Zeitpunkt als Servicebestandteil

der Hardware angesehen (Van Vliet, 2008 S. 2). Durch die Ablösung der Röhren-

und Relaisrechner durch Computer mit Transistoren in den sechziger Jahren des 19.

Jahrhunderts wurde die Hardware wesentlich preiswerter und leistungsfähiger

(Schallehn, 2008). Gordon Moore formulierte 1965 in einem Artikel der Zeitschrift

Electronics (Moore, 1965) die Beobachtung, dass sich die Anzahl an Transistoren

auf einem handelsüblichen Prozessor alle achtzehn Monate verdoppelt1. Computer

waren durch die Einführung der Transistoren und später durch den integrierten

Schaltkreis dem normalen Anwender, dem „Nicht-Informatiker“ zugänglich. Ab

diesem Zeitpunkt kam es zu einer explosionsartigen Ausweitung der

Anwendungsgebiete für Computer. Programme entstanden, bei denen das finanzielle

oder sogar personelle Risiko vom Menschen abhing.

2.1.1.1 Softwarekrise

Die Softwarekrise beschreibt ein in der Mitte der 1960er Jahre aufgetretenes

Problem: Erstmalig überstiegen die Kosten für die Software die der Hardware

(Sommerville, 2007 S. 30), (Van Vliet, 2008 S. 2-3). 2

1 Die Bezeichnung Moore„sches Gesetz wurde 1970 von „Carver Mead“ auf Basis Moores Beobachtung geprägt.

2 Als Beispiel wird hier in der Literatur die Entwicklung des IBM OS/360 Betriebssystems aufgeführt.

Page 17: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

8

Abbildung 1: Hardware/software cost trends (Software and its impact: a quantitative assessment., 1973 S. 5)

Der Begriff Softwarekrise oder auch „Software Gap“ wurde auf der Nato-Konferenz

1968 von Dr. Edward E. David und Alexander G. Fraser in ihrem „Position Paper“

geprägt (Software Engineering: Report of a conference sponsored by the NATO

Science Committee, 1968 S. 70) .

Edsger W. Dijkstras führt in seiner Dankesrede „The Humble Programmer“ 1972

zum Turing Award auf: „Als es noch keine Rechner gab, war auch das

Programmieren noch kein Problem, als es dann ein paar leistungsschwache Rechner

gab, war das Programmieren ein kleines Problem und nun, wo wir gigantische

Rechner haben, ist auch das Programmieren zu einem gigantischen Problem

geworden. In diesem Sinne hat die elektronische Industrie kein einziges Problem

gelöst, sondern nur neue geschaffen. Sie hat das Problem geschaffen, ihre Produkte

zu nutzen.― (Dijkstras, 1972)3

Durch die preiswerte und leistungsfähige Hardware stiegen ab 1960 schnell der

Umfang und die Komplexität von Software. Vorher undenkbare Softwareprojekte

3 Eine der ersten gesicherten Erwähnungen der Softwarekrise findet sich in Edsger W. Dijkstras Dankesrede zum

Turing Award „The Humble Programmer“ (deutsch: „Der bescheidene Programmierer“, EWD340), die er 1972

hielt und die im „Communications of the ACM“-Magazin veröffentlicht wurde.

Page 18: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

9

ließen sich jetzt umsetzen (Sommerville, 2004 S. 4) und erforderten mehr als einen

Entwickler. Programmieren galt zu diesem Zeitpunkt als Kunst (Art) und nicht als

Handwerk (Craft). Gleichzeitig gab es keinerlei formale Ausbildung in diesem

Berufszweig, das Programmieren wurde nur durch „Learning by Doing“ und „Try

and Error“ gelernt. Letztendlich wurden große Softwareprojekte organisatorisch

gelöst, indem einfach mehr Programmierer an einem Projekt arbeiteten, der

sogenannte „Million Monkey“-Ansatz (Van Vliet, 2008 S. 2). Große

Softwareprojekte waren hierdurch oft Jahre im Rückstand (Borchers, 2004). Die

daraus resultierende Software kostete oft mehr als vorgesehen, war unzuverlässig,

schwer zu pflegen und arbeitete mangelhaft. Dieses Problem der

Softwareentwicklung entwickelte sich 1960 zum Manifest des Jahrzehnts.

2.1.1.2 Nato-Konferenz

Anlässlich der „Softwarekrise“ fand eine Konferenz über die Probleme in der

Softwareentwicklung jeweils in 1968 und 1969 statt (Randell, 2001). Sponsor beider

Konferenzen war das NATO Science Comittee. In der ersten NATO-Konferenz

wurde erstmals der Begriff „Software-Engineering“ eingeführt. Der Begriff

„Software-Engineering“ wurde gewählt, um bewusst auf ein Defizit in der

Softwareentwicklung aufmerksam zu machen, das durch eine ingenieurmäßige

Durchführung des Softwareentwicklungsprozesses gelöst werden sollte (Bauer, 1975

S. 523).

Software-Engineering wurde auf der Nato-Konferenz 1969 von Friedrich L. Bauer

zum ersten Mal definiert: „The Establishment and use of sound engineering

principles in order to obtain economically software that is reliable and works

efficiently on real machines.― (Bauer, 1975 S. 524), (Van Vliet, 2008 S. 5).

Die Konferenz-Teilnehmer wollten mit dem Begriff „Software-Engineering“

absichtlich die damalige Fachwelt provozieren und Aufmerksamkeit erregen. „The

phrase ‗software engineering‘ was deliberately chosen as being provocative, in

implying the need for software manufacture to be based on the types of theoretical

foundations and practical disciplines, that are traditional in the established branches

Page 19: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

10

of engineering.― (Software Engineering: Report of a conference sponsored by the

NATO Science Committee, 1968 S. 8).

Die Nato-Konferenz hatte keine Lösung für das Problem der Softwarekrise, doch es

war die Geburtsstunde des Software-Engineerings. Ergebnis war die Erkenntnis, dass

Software systematisch geplant und entwickelt werden muss (Zöller-Greer, 2002 S. 2-

3) . Seitdem hat sich Software-Engineering zu einer wissenschaftlichen Disziplin

entwickelt, die sich mit den praktischen Problemen der Herstellung von Software

beschäftigt und deren Prinzipien, Methoden und Techniken dokumentiert (Winter,

2005 S. 7).

2.1.1.3 No Silver Bullet

Im Zeitraum von 1970 bis 1990 gab es eine Vielzahl von Lösungsansätzen, um der

Softwarekrise entgegenzuwirken. Die meisten wurden aus einer

Managementperspektive verfasst und zielten darauf ab, durch einen industriellen

Produktionsprozess (Taylorismus) die Entwicklungskosten genauso wie bei der

Hardware zu senken.4 Die objektorientierte Programmierung sollte in den 1980er

Jahren endgültig die „Kunst des Programmierens“ so weit reduzieren, dass sie in

einem industriellen Produktionsprozess abgebildet werden konnte und damit die

„industrielle Revolution“ in der Softwareentwicklung einleiten (Planning the

Software Industrial Revolution, 1990). Diese idealistische Sichtweise entsprach

jedoch nicht der Realität (No Silver Bullet Revisted, 1995). Mit dem Aufsatz „No

Silver Bullet – Essence and Accident in Software-Engineering“ (No Silver Bullet:

Essence and Accidents of Software Engineering, 1987) prägt 1987 Frederick P.

Brooks5 in der Informatik den Begriff „No Silver Bullet“. Er nutzt dabei zur

Beschreibung eines Softwareprojekts die Metapher eines Werwolfs. Werwölfe

4 Als Lösung für die Softwarekrise wurden strukturierte- und objektorientierte Programmierung, CASE, ADA,

Dokumentation von Quellcodes und die Nutzung von Standards angepriesen. Für die Qualitätssicherung von

Software wurde auf formale Methoden zurückgegriffen. Das Capability-Maturity-Model sollte den „Reifegrad“

der Software ermitteln. Programmierer wurden diszipliniert und galten nicht mehr als „Künstler“. Das

Programmieren entwickelte sich in dieser Zeit zu einem professionellen Ausbildungsberuf.

5 Mit dem Aufsatz „The Mythical Man-Month“ vertrat Brooks bereits 1974 die Kernthese „Adding manpower to

a late software project makes it later“ und bezeichnete es selbst als „Brook‟s Law“ (The Mythical Man-Month,

1974).

Page 20: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

11

transformieren sich vom Bekannten zum Monster und lassen sich nur durch die

magische Silberkugel bändigen. Softwareprojekte sind Anfangs oft unschuldig,

überschaubar und werden von Projektbeteiligten wie ein kleines Kind verhätschelt.

Im fortgeschrittenen Stadium entwickelt es sich dann oft mit überzogenen Terminen,

hohen Projektkosten und schlechter Softwarequalität zum Monster für alle

Projektbeteiligten. Die Suche nach Technologien und Management-Techniken, um

dem entgegenzuwirken, vergleicht Brooks mit der Suche nach der magischen

Silberkugel. Brooks vernichtete mit dem Aufsatz nachhaltig die Hoffnung auf eine

Lösung für die Softwarekrise. Brooks begründete dabei seine These, indem er als

Erster die Schwierigkeit der Softwareerstellung in zwei Klassen unterteilt. Erstens

„essential difficulties“ – Schwierigkeiten, die der Natur von Software selbst

innewohnen – und zweitens „accidental difficulties“ mit der Art, die mit der Lösung

des Problems zu tun haben. Letzteres umfasst die Probleme mit der verwendeten

Programmiersprache, Methodik oder dem Entwicklungsprozess. Brooks geht davon

aus, dass in Zukunft Verbesserungen zu erwarten sind. Nicht zu lösen sind allerdings

die Probleme, die aus den Softwareeigenschaften entstehen. Brooks benennt hier als

Erster die vier wichtigsten: Komplexität, Konformität, Veränderlichkeit und

Unsichtbarkeit (Balzert, 2009 S. 9-10).

Abbildung 2: Proklamierte „Silver Bullets“ in der Informatik (Hoffmann, 2010)

1970 1980 1990 2000

Formal

Methods

Fagan

Inspections

Structured

Analysis

Waterfall

Model

Jackson Method

CPT

Egoless Programming

SADT/IDEF

Structured

Programming

Turbo Pascal

(IDE)

Structured

Design

Rapid Prototyping

Spiral Model

Hatley-Pirbhai

Ward-Mellor

O-O Programming

O-O Design

O-O Analysis

4GL

V-Model

Cleanroom

Engineering

Synchronize

and Stabilize

Visual

Modeling

UML

RUP

PSP

CMM

TSP

Agile Methods

Pascal Art of Computer

Programming

Mythical Man-Month

SEI

Smalltalk CASE Tools Agile

Manifesto

Page 21: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

12

Jede der proklamierten „Silver Bullets“ hat die Produktivität der

Softwareentwicklung in seiner Akkumulation gesteigert. Allerdings nur durch die

Reduzierung der „accidential difficulties“, erfolglos waren alle, sobald sie mit den

„essential difficulties“ in Berührung kamen. Jede Reduzierung der „accential

difficulties“ erschwert zusätzliche Verbesserungen durch neue Ansätze, weil zum

Schluss nur essentielle Probleme übrig bleiben und die Berührungspunkte mit ihnen

zur Verbesserung ausgeschlossen werden müssen (Berry, 2003 S. 3).

2.1.1.4 Die agile Bewegung

Der Softwarelebenszyklus6 und das daraus abgeleitete Wasserfallmodell hatten im

Rahmen der „Industrialisierung“ starre Prozessmodelle hervorgebracht – mit

Fachdisziplinen, die einer strikten Rangordnung7 unterlagen. Die Modelle hatten

bürokratische Strukturen und Prozesse, die sich oft mehr selbst dienten und nicht

mehr dem Entwickler, der das Ziel verfolgte, mit wenig Aufwand in einem

festgelegten Zeitrahmen nach Ingenieursprinzipien qualitativ ausreichende Software

herzustellen (Gloger, 2008 S. 19).

In den Neunzigern veränderten sich die

Marktbedingungen für Software grundlegend. Das Internet und die Software für

multifunktionale Geräte8 waren zu dieser Zeit zwei schnell wachsende Anwendungs-

gebietet der Informatik (Balzert, 2009 S. 12). Die Fähigkeit, schnell auf

Kundenwünsche oder den Markt reagieren zu können, hatte dabei ein höheres

Gewicht als die Existenz einer ausführlichen Dokumentation. Zudem verkürzten sich

die Lebenszeit der Software und ihre Release-Zyklen dramatisch. Die traditionellen

Entwicklungsprozesse waren dafür zu schwerfällig. Entwickler waren gezwungen,

flexiblere Methoden zu finden (Ludewig, et al., 2010 S. 218-219).

Das Agile-Manifesto ist das Ergebnis von Methoden, die flexiblere Entwicklungs-

prozesse ermöglichen. Populär wurde unter Entwicklern die agile Software-

6 Urheber des Softwarelebenszyklus ist Rosove (Rosove, 1967), Royce (Royce, 1970 S. 1-9) hat den

Softwarelebenszyklus in Form des Wasserfallmodells populär gemacht.

7 Am untersten Ende standen die Tester, dann kamen die Entwickler, über ihnen standen Software-Architekten,

über ihnen die Systemsoftware-Architekten, usw.

8 Dies betrifft „embedded systems“ wie zum Beispiel Mobilfunktelefone oder andere moderne Systeme der

Unterhaltungselektronik.

Page 22: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

13

entwicklung im Jahr 1999 durch Kent Becks Buch „Extreme Programming“ (Beck,

1999) und mündete in der „agilen Bewegung“. Ähnlich wie bei der Nato-Konferenz

1968 trafen sich im Jahr 2001 die 17 Pioniere9 dieser Bewegung in Snowbird, Utah,

um die Essenz der agilen Methoden in einem Manifesto festzuhalten. Der Begriff

„agile“ zur Beschreibung der Softwareentwicklungsmethodik wurde bei dem Treffen

ebenfalls geboren (Beck, et al., 2001), (Gloger, 2008 S. 21).

Abbildung 3: Manifesto for Agile Software Development (Beck, et al., 2001)

Das Manifest formuliert dabei absichtlich übergeordnet vier Werte und zwölf

Prinzipien (Beck, et al., 2001), an denen sich unterschiedliche

Entwicklungsmethoden orientieren, wie zum Beispiel XP, Scrum, DSDM, ASD,

Crystal, FDD und weitere (Hazzan, et al., 2008 S. 5). Das agile Manifesto

repräsentiert damit erstmals einen alternativen Ansatz zu den früheren

„tayloristischen“ Softwareentwicklungsprozessen (Ludewig, et al., 2010 S. 219).

2.1.2 Definitionen

Nachfolgend werden die Definitionen für Software-Engineering und Softwarequalität

betrachtet. Die Begriffe Software, Ingenieur und Qualität werden separat definiert,

weil beide Hauptbegriffe sich aus diesen zusammensetzen.

9 Autoren des agilen Manifesto: Mike Beedle, Ari Van Bennekum, Alistar Cockburn, Ward Cunningham, Martin

Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert Martin,

Steve Mellor, Ken Schwaber, Jeff Sutherland und Dave Thomas.

We are uncovering better ways of developing

software by doing it and helping others do it.

Through this work we have come to value:

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan

That is, while there is value in the items on

the right, we value the items on the left more.

Page 23: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

14

2.1.2.1 Software

Software ist ein allgemeiner, neutraler und unbestimmter Begriff. Es ist umstritten,

was genau Software ist und wie weitreichend der Begriff Software eingesetzt werden

kann (Ludewig, et al., 2010 S. 34). In der Literatur werden einheitlich die folgenden

zwei Definitionen für „Software“ zitiert. Erstens: „Software: Menge von

Programmen oder Daten zusammen mit begleitenden Dokumenten, die für ihre

Anwendung notwendig oder hilfreich sind― (Hesse, et al., 1984 S. 204) und

zweitens: „Software: Computer programs, Procedures and possibly associated

documentation and data pertaining the operation of a computer system‖ (IEEE,

1990 S. 66). Die beiden Definitionen zeigen, dass Software mehr als nur ein

Computer-Programm umfassen kann und immer eine entsprechende Dokumentation

sowie Daten enthält. Das Computer-Programm an sich stellt dabei die kleinste

Einheit dar und wird von der IEEE gegenüber Software technisch abgrenzt:

„Computer Program: A combination of computer instructions and data definitions

that enable computer hardware to perform computational or control functions.‖

(IEEE, 1990 S. 19).

Im Zusammenhang mit „Software“ sollten auch die Begriffe „Software-Produkt“,

„Software-System“ und „System-Software“ betrachtet werden. „Ein Produkt ist ein

in sich abgeschlossens, i.a. für einen Auftraggeber bestimmtes Ereignis eines

erfolgreich durchgeführten Projekts oder Herstellungsprozesses.― Ein „Software-

Produkt“ ist demnach ein Produkt, das aus Software besteht (Balzert, 2009 S. 3-4).

Dumke definiert genauer: „Ein Software-Produkt ist die Gesamtheit von Software-

Komponenten (Programmen, Dokumentationen, usw.), die als Ganzes entwickelt,

vertrieben, angewendet und gewartet werden.― (Dumke, 2003 S. 4).

„Unter einem System wird ein Ausschnitt aus der realen oder gedanklichen Welt,

bestehend aus Gegenständen […] und darauf vorhandene Strukturen […]

verstanden. Systemteile, die nicht weiter zerlegbar sind oder zerlegt werden sollen,

werden als Systemelemente bezeichnet.― Ein „Software-System“ ist somit ein

System, dessen Systemkomponenten und Systemelemente aus Software bestehen.

Das „Software-Produkt“ betrachtet dabei Software von außen – zum Beispiel aus

Sicht eines Anwenders-, während das „Software-System“ die innere Sichtweise

Page 24: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

15

darstellt – zum Beispiel aus Sicht eines Entwicklers. „System-Software“ ist

Software, die für eine bestimmte Hardware-/Familie entwickelt wurde, um den

Betrieb und die Wartung der Hardware zu ermöglichen oder zu vereinfachen.

„Anwendungs-Software“ setzt auf „System-Software“ auf und ermöglicht es dem

Anwender, Aufgaben mit dem „Computer-System“ zu lösen. Das „Computer-

System“ besteht dabei immer aus „Anwendungs-Software“, „System-Software“ und

Hardware (Balzert, 2009 S. 3-4).

2.1.2.2 Engineering und Ingenieur

Obwohl Software-Engineering in „Software-Technik“ übersetzt wurde, ist die

Tätigkeit des Ingenieurs stark damit verknüpft und bestimmt maßgeblich die

Grundbedeutung.

Ein Ingenieur befasst sich vorwiegend mit technischen Neuerungen oder

Innovationen im weitesten Sinn. Die Wortwurzel kommt aus dem lateinischen

„ingenium“ und bedeutet Scharfsinn, Erfindergeist. Eine aus Frankreich stammende

Definition lautet: „Der Ingenieur ist ein Mensch, der Ideen, Material und Menschen

einsetzt, um Produkte oder Projekte zu realisieren.― (Nagel, et al., 2009 S. 1). Dabei

müssen Produkte oder Projekte nicht unbedingt „neu“ sein. Ein Ingenieur ist

insgesamt darum bemüht, Verbesserung zum bestehenden Zustand zu erzielen und ist

dabei kreativ.

Beim Software-Engineering wird in der Literatur immer wieder von der

ingenieursmäßigen Softwareentwicklung nach „Ingenieurs-Prinzipien“ gesprochen.

Software-Engineering übernimmt dabei die folgenden fünf Merkmale der alten

Ingenieursdisziplinen: erstens Kostendenken als Grundlage von Bewertungen,

zweitens praktischer Erfolg als einzige zulässige Beweisführung, drittens

Qualitätsbewusstsein als Grundfarbe des Denkens, viertens die Einführung und

Beachtung von Normen und fünftens das Denken in Baugruppen (Ludewig, et al.,

2010 S. 33-34).

Page 25: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

16

2.1.2.3 Software-Engineering

Eine allgemeingültige und vor allem einheitliche Definition des Begriffs Software-

Engineering existiert nicht. Alle Definitionen sind sich jedoch einig, dass es sich bei

Software-Engineering um eine Ingenieursdisziplin handelt, die explizit das

Künstlertum ausschließt. Software Engineering grenzt sich in seinen

Grundlagendisziplinen gegenüber anderen Wissenschaften wie Kerninformatik,

Ingenieurwissenschaften, Mathematik, Psychologie, Soziologie und Betriebs-

wirtschaft ab, indem es sich vor allem auf Methoden konzentriert mit dem Anspruch

der praktischen Anwendbarkeit. Dabei wird weder bei den Grundlagen- noch den

Anwendungsfeldern eine scharfe Abgrenzung gezogen und ist dadurch „inhärent

transdisziplinär“ (Broy, et al., 2006 S. 211).

Die einzelnen Definitionen entwickeln sich zeitlich betrachtet vom Allgemeinen hin

zur Beschreibung der einzelnen Verfahrensweisen in der Ingenieursdisziplin.

Friedrich L. Bauer beschreibt als Erster den Begriff „Software-Engineering“ auf der

Nato-Konferenz 1969 sehr allgemein, während Boehm ihn bereits 1976 aufgrund

seiner empirischen Untersuchung eher technisch und wissenschaftlich definiert:

„Software Engineering – the practical application of scientific knowledge in the

design and construction of computer programs and the associated documentation

required to develop, operate and maintain them.― (Pomberger, et al., 2004 S. 4).

Die IEEE definiert 1983 noch Software-Engineering im Rahmen eines Produktzyklus

als „the systematic approach to the development, operation, maintenance and

retirement of software“ und erweitert 1990 die Definition um messbare Größen und

versucht über die Tugend der Disziplin das Künstlertum auszugrenzen: „[…]

systematic, disciplined, quantifiable approach […]“. Hesse et al. charakterisieren

Software-Engineering 1984 in ihrer Definition als Teil der Informatik und

konkretisieren sie, indem sie mit der Verwendung von Entwicklungswerkzeugen und

deren methodischer Anwendung verknüpfen: „Software-Technik ist das Fachgebiet

der Informatik, das sich mit der Bereitstellung und systematischen Verwendung von

Methoden und Werkzeugen für die Herstellung und Anwendung von Software

beschäftigt.― (Hesse, et al., 1984 S. 204). Schulz definiert 1988 ähnlich wie Hesse

Software-Engineering, stellt es aber als Ingenieurswissenschaft dar, in der Software

Page 26: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

17

unter industriellen Bedingungen hergestellt wird. Er betrachtet dabei zudem

expliziert die Menschen, die im Rahmen des Lebenszyklus mit ihr in Berührung

kommen, und wurde damit von Peter Molzberger (Molzberger, 1981) beinflusst.

„Software Engineering ist eine Ingenieurswissenschaft, die sich mit den Prinzipien,

Methoden, Werkzeugen und Menschen befasst, die Software unter industriellen

Bedingungen planen, entwickeln, anwenden und warten.― (Schulz, 1988 S. 14).

Die jüngste Definition von Balzert konzentriert sich wie Hesse et al. und Schulz auf

die einzelnen Verfahrensweisen, grenzt sich aber in bestimmten Punkten ab. Für ihn

sind wesentliche Charakteristika der Softwaretechnik, dass umfangreiche Software

arbeitsteilig und ingenieursmäßig entwickelt wird, um die Ziele der „Software-

Kunden“ zu erfüllen. Er schließt damit Programmierer aus, die Software einzeln

entwickeln und selbst anwenden. „Zielorientierte Bereitstellung und systematische

Verwendung von Prinzipien, Methoden und Werkzeuge für die arbeitsteilige,

ingenieursmäßige Entwicklung und Anwendung von umfangreichen

Softwaresystemen. Zielorientiert bedeutet die Berücksichtigung z.B. von Kosten, Zeit,

Qualität.― (Balzert, 2009 S. 17). Diese Abgrenzung führen auch Jalote (Jalote, 2005

S. 9-10), Van Vliet (Van Vliet, 2008 S. 6), Ludewig et al. (Ludewig, et al., 2010 S.

49-50) und weitere auf. Sommerville definiert es hingegen sehr allgemein aus der

Ingenieurssicht: „Software engineering is an engineering discipline which is

concerned with all aspects of software production.― (Sommerville, 2007 S. 7).

Die Definitionen treffen trotz ihrer Unterschiedlichkeit den Sachverhalt hinreichend

genau. Besonders hervorzuheben ist, dass insgesamt die jüngsten Definitionen einen

besonderen Augenmerk auf die Qualitätssicherung und das Projektmanagement

haben (Winter, 2005 S. 7).

2.1.2.4 Qualität

Für Qualität gibt es in der Literatur eine Vielzahl von unterschiedlichen Definitionen.

Qualität unterscheidet sich in ihrem Grad, je nachdem, wie Begrifflichkeiten von

Personen verstanden werden und unter welchem Blickwinkel Qualität betrachtet

wird. Garvin unterteilt Qualität in fünf verschiedene Sichtweisen: produktbezoge,

kundenbezoge, herstellerorientierte, absolute und wertorientierte Qualität (Garvin,

Page 27: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

18

1984 S. 25 ff.).

Erst durch die Verknüpfung dieser unterschiedlichen

Betrachtungswinkel kann Qualität durch Erfahrungen (transzendente Sichtweise)

erfasst werden (Gundlach, 2007 S. 3-4). Im umgangssprachlichen Verständnis wird

Qualität als Grad der Übereinstimmung zwischen den

Anforderungen/Ansprüchen/Erwartungen (Soll) an ein Produkt und dessen

Eigenschaften/Merkmale (Ist) gesehen. Mit der ISO-Normfamilie hat man sich

international auf eine Definition geeinigt, die allerdings immer wieder anhand der

praktischen Erfahrung mehr oder weniger stark verändert wurde. In der Literatur

findet man deshalb oft noch die alte DIN EN ISO 8402:1995-08-Norm „Qualität ist

die Gesamtheit von Eigenschaften und Merkmalen eines Produktes oder einer

Dienstleistung, die sich auf deren Eignung zur Erfüllung festgelegter oder

vorausgesetzter Erfordernisse beziehen.― Diese wurde jedoch von der kompakteren

EN ISO 9000:2005 abgelöst und definiert international im Status quo Qualität:

„Grad, in dem ein Satz inhärenter Merkmale Anforderungen erfüllt.― Die Definition

EN ISO 9000:2005 betrachtet damit Qualität nicht isoliert, sondern die Gesamtheit

der „inhärenten Merkmale“ und deren Zusammenwirken als Ganzes, um

Anforderungen (transzendente Sichtweise) zu erfüllen.

2.1.2.5 Softwarequalität

Im Gegensatz zum allgemeinen Qualitätsbegriff ist Softwarequalität eindeutig in der

DIN-ISO-9126-Norm definiert: „Software-Qualität ist die Gesamtheit der Merkmale

und Merkmalswerte eines Software-Produkts, die sich auf dessen Eignung beziehen,

festgelegte Erfordernisse zu erfüllen.― Die Definition bezieht sich ausschließlich auf

die Produktqualität (obwohl in der DIN-ISO-9126-Norm zwischen interner, externer

und Benutzungsqualität unterschieden wird). Zudem ist Software-Qualität eine

multikausale Größe, in der es nicht nur das eine Kriterium gibt, mit dem sich

Softwarequalität qualitativ und quantitativ messen lässt. Der Begriff Softwarequalität

ist in der Praxis deshalb auch nicht direkt anwendbar (Balzert, 1998 S. 257). In der

Praxis wird Softwarequalität mit Modellen festgestellt, die durch Qualitätsmerkmale

operationalisiert werden. Diese Merkmale sind in der DIN-ISO-9126-Norm ebenfalls

als Standard definiert. Sie werden in interne sowie externe unterschieden und dabei

in sechs Charakteristika aufgeteilt. Sie können durch ihre Allgemeingültigkeit jedem

Page 28: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

19

Softwareprodukt zugeordnet werden und lauten: Funktionalität, Zuverlässigkeit,

Benutzbarkeit, Effizienz, Änderbarkeit sowie Portabilität. Diese werden dann jeweils

noch in weitere Merkmale operationalisiert. Zusätzlich wird die Benutzungsqualität

als Charakteristik separat aufgeführt. Diese wird in Effizienz, Produktivität,

Sicherheit und Satisfaction operationalisiert (Liggesmeyer, 2009 S. 16-17).

Qualitätsmerkmale können nicht alle gleichzeitig gut in einem Produkt vorhanden

sein, weil sie unter Umständen negativ zueinander korrelieren (Hoffmann, 2008 S.

10-11).

2.1.3 Ziele

Die Ziele des Software-Engineerings werden in der Literatur aus der Definition des

Software-Engineerings hergeleitet. Wie bei den Definitionen gibt es auch hier

unterschiedliche Ansätze. Insgesamt kann aber festgestellt werden, dass alle bei der

Entwicklung von Software als Primärziel die Erfüllung der wirtschaftlichen Ziele

entweder im Rahmen des magischen Projektmanagementdreiecks (Qualität, Termine,

Kosten) (Keßler, et al., 2004 S. 55) oder dem Teufelsquadrat von Sneed (Qualität,

Umfang, Dauer, Kosten) (Sneed, 2005 S. 38) als vorrangigen Zweck sehen und nicht

die Entwicklung selbst.10

Als Sekundärziel wird das Finden von geeigneten

Prinzipien, Methoden und Werkzeugen zur Erreichung des Primärziels gesehen

(Hesse, et al., 1992 S. 22).

2.1.4 Eigenschaften von Software

Software besitzt besondere Eigenschaften und unterscheidet sich fundamental von

anderen technischen Produkten (Balzert, 2009 S. 9). Die Eigenschaften von Software

stellen bis heute nach Brooks als „essential difficulties“ ein ungelöstes Problem der

Softwareindustrie dar und haben damit einen enormen Einfluss auf das Software-

Engineering. In der Literatur werden diese in unterschiedlicher Ausprägung mit

verschiedenen Merkmalen aufgeführt und oft mit den Charakteristika des Software-

Engineerings gleichgesetzt oder vermischt.

10 Balzert hat in seiner Definition von Software-Engineering explizit das magische Projektmanagement Dreieck

mit aufgenommen.

Page 29: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

20

Erstens: Software ist immateriell digital. Brooks spricht hier auch von

Unsichtbarkeit. Man kann sie nicht „anfassen“ oder „sehen“ und sie wird nicht

gefertigt, sondern entwickelt sich aus diskreter Mathematik und Logik. Deshalb ist

der Entwicklungsfortschritt auch nicht objektiv messbar (Balzert, 2009 S. 9).

Zweitens: Software ist jederzeit veränderbar. Im Gegensatz zu physischen

Produkten kann Software unmittelbar verändert oder verformt und jederzeit aus den

Sourcen neu generiert werden (Winter, 2005 S. 8), (Balzert, 2009 S. 10). Deshalb

wird auch erwartet, dass Software einfach und schnell an Veränderungen angepasst

werden kann. Drittens: Software unterliegt keinem Verschleiß. Anders als bei

technischen Produkten kann Software beliebig oft genutzt werden, ohne dass ein

Verschleiß auftritt. Wartung von Software aufgrund von Abnutzungserscheinungen,

wie beim zum Beispiel beim Auto, ist nicht nötig. Für Software gibt es deshalb auch

keine Ersatzteile. Viertens: Software spiegelt die Realität wider. Software ist ein

Abbild der Arbeitsprozesse in der sie eingesetzt wird und verändert diese. Ändern

sich Arbeitsprozesse, muss die Software an diese angepasst werden. (Winter, 2005 S.

9), (Ludewig, et al., 2010 S. 38-39) Brooks spricht hier auch von Konformität. Bei

Einsatz von großer Standardsoftware werden unter Umständen die

Unternehmensprozesse auch an die Software angepasst (Balzert, 2009 S. 14).

Fünftens: Große Software hat eine lange Lebensdauer. Der Lebenszyklus von

Softwaresystemen geht oft über den der Ursprungshardware hinaus und muss damit

über Generationen an die veränderte Realität angepasst werden. Grund ist, dass

Softwarekosten über einen langen Zeitraum amortisiert werden müssen. Die

Anpassungen von Software führen zur Versionierung (Winter, 2005 S. 9), (Balzert,

2009 S. 14). Nach Balzert kann Software deshalb altern (Balzert, 2009 S. 9).

Sechstens: Software ist komplex. Software gehört zu den komplexesten Artefakten,

die Menschen bisher geschaffen haben. Software ist ein Abbild von vielen

Denkmodellen und besteht aus einer Vielzahl von Dokumenten, darunter auch

Quellcode (Ludewig, et al., 2010 S. 37). Quellcode kann einen enormen Umfang

annehmen, dieser reicht bei kleineren Projekten mit 10 KLOC bis zu sehr großen

Projekten mit mehreren 1000 KLOC (Jalote, 2008 S. 6). Siebtens: Software ist

schwer zu vermessen. Aufgrund der Komplexität und Unsichtbarkeit kann der

Page 30: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

21

Fortschritt und die Größe von Software nur bedingt gemessen werden. Dies betrifft

auch die Messung der Softwarequalität (Balzert, 2009 S. 10).

2.1.5 Charakteristika des Wirkungskontextes

Die Erklärung, was Software-Engineering ist, erfolgt in der Literatur unabhängig von

der Definition sehr praktisch in seinem Wirkungskontext. Hierbei gibt es

verschiedene Herangehensweisen, um die Charakteristika von Software-Engineering

zu beschreiben: Balzert „Warum ist Software so schwer zu entwickeln?“ (Balzert,

2009 S. 11-15), Ludewig et al. „Grundideen des Software-Engineering (Ludewig, et

al., 2010 S. 47-55), Jalote „The Problem Domain“ (Jalote, 2005 S. 2-15), Pfleeger et

al. „What is Software-Engineerig“ (Pfleeger, et al., 2010 S. 14-39) und Van Vliet

leitet es ein mit „Essentials characteristics of the field“ (Van Vliet, 2008 S. 6-8). Alle

zeigen dabei im Grunde die gleichen Charakteristika des Umfelds auf, in dem sich

Software-Engineering bewegt. Die nachfolgenden acht Charakteristika orientieren

sich an Van Vliets Darstellung.

Erstens: Software-Engineering betrachtet die Entwicklung von großen Programmen.

In der Literatur wird generell in „Programming-in-the-large“ und „Programming-in-

the-small“ unterschieden (Programming-in-the-large versus programming-in-the-

small, 1975). Die Bestimmung der Grenze erfolgt hierbei nicht ausschließlich anhand

der LOC, sondern daran, wie viele Personen auf einem Projekt arbeiten und wie

lange die Projektdauer angesetzt ist. „Programming-in-the-small“ umfasst eine

Person, die in kurzer Zeit ein Programm entwickelt. Jalote spricht hier auch von

einem „Student System“. „Programming-in-the-large“ umfasst mehrere Personen

über einen größeren Zeitraum. Jalote spricht hier auch von dem „Industrial Strength

Software System“ (Balzert, 2009 S. 11-12), (Van Vliet, 2008 S. 6), (Jalote, 2005 S.

2-3 & 9-10), (Ludewig, et al., 2010 S. 49-51). Die These, warum Software-

Engineering in diesen Projekten essentiell ist, wird mit dem „Problem of Scale“

(Jalote, 2005 S. 10) begründet: Je größer und komplexer ein Softwareprojekt ist,

desto formaler müssen Projektmanagement und Entwicklungsmethoden sein.

Zweitens: Die Herausforderung liegt im Management von umfangreicher Software,

die eine hohe Komplexität im Detail aufweist. Softwareprojekte müssen in

Teilprojekte/Komponenten und in Projektphasen unterteilt werden. Die Aufteilung

Page 31: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

22

soll bei den Projektbeteiligten erstens ein Verständnis für die Komplexität der

Software schaffen, zweitens den Umfang transparent machen und drittens

Projektziele festlegen. Die Komplexität kann dabei in Funktionen, Daten,

Algorithmen, zeitabhängiges Verhalten, Systemumgebung und Benutzeroberfläche

unterteilt werden (Balzert, 2009 S. 6-7). Die Aufgabe des Software-Engineerings ist

es dabei, die Komplexität des Details zu verwalten (Pfleeger, et al., 2010 S. 2-4),

(Ludewig, et al., 2010 S. 50), (Ludewig, et al., 2010 S. 6-7), (Jalote, 2005 S. 13).

Drittens: Software muss durch die permanente Veränderung ihrer Einsatzumgebung

ständig angepasst werden. Diese Eigenschaft von Software verursacht enorme

Kosten11

. Die Veränderbarkeit muss deshalb durch das Software-Engineering bereits

bei der Entwicklung mit berücksichtigen werden (Balzert, 2009 S. 14), (Jalote, 2005

S. 6-7,15), (Van Vliet, 2008 S. 7), (Pfleeger, et al., 2010 S. 28-30). In diesem

Zusammenhang stellt Balzert fest: „die Softwareprodukte von heute sind die

Altlasten von morgen“ (Balzert, 2009 S. 14). Viertens: Software effizient zu

entwickeln besitzt eine enorme Relevanz. Die Kosten und der Zeitraum für die

Entwicklung und Pflege von Software sind sehr hoch. Im Kontrast dazu steht, dass

Time-to-Market in der Technologiebranche essentiell ist. Die Konsequenz sind kurze

Release-Zyklen. Software-Engineering muss deshalb permanent neue Prinzipien,

Methoden und Werkzeuge für die Entwicklung und Pflege von Software schaffen

und alte optimieren sowie auf die hohe Wiederverwendbarkeit von

Softwarekomponenten achten (Van Vliet, 2008 S. 7). Ludewig et al. sprechen

deshalb auch davon, „Software Engineering als globale Optimierung“ in einem

Softwareprojekt einzusetzen (Ludewig, et al., 2010 S. 51). Fünftens: Kooperatives

Arbeiten innerhalb von Teams ist integraler Bestandteil bei der Entwicklung von

umfangreicher und komplexer Software. Große Softwareprojekte werden immer in

Teamarbeit realisiert. Die einzelnen Personen des Teams arbeiten dabei oft nicht am

gleichen Ort. Software-Engineering definiert in den Softwareentwicklungsteams

Standardabläufe für das gemeinsame Arbeiten und fordert dabei die nötige Disziplin

ein. Neben den informellen Regeln werden hierzu auch Werkzeuge für das

kollaborative Arbeiten, wie zum Beispiel Bugtracker, vorgeschrieben (Van Vliet,

2008 S. 7). Sechstens: Software muss den Benutzer bei seiner Arbeit unterstützen.

11 Zwei Drittel der Softwarekosten entstehen nach Balzert durch nachträgliche Anpassung (Balzert, 2009 S. 14).

Page 32: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

23

Software soll Benutzer bei der Arbeit entlasten. Dementsprechend müssen die zu

lösenden Aufgabenbereiche als Funktionalität in der Software bereitgestellt werden.

Software-Engineering soll dabei nicht nur das System richtig entwickeln, sondern

dem Benutzer das richtige System bereitstellen (Van Vliet, 2008 S. 7). Siebtens:

Software-Engineering ist ein Akt der Balance. Ein Softwareprojekt wird von internen

und externen Faktoren beeinflusst. Diese können Anforderungskataloge, Funktionen

oder das technische Fundament einer Software stark oder komplett verändern, so

dass eine erneute Iteration notwendig wird. Die Einflüsse können geschäftlicher,

politischer oder technischer Natur sein (Van Vliet, 2008 S. 8), (Jalote, 2005 S. 7).

Achtens: Die Qualität der Software ist der Motor für den Erfolg. Aufgrund der

Diskrepanz zwischen Sichtbarkeit und Fortschritt von Software, existiert in der

Softwareentwicklung das „90 % Syndrom“. Die letzten 10 % beeinflussen die

Qualität der Software maßgeblich und erfordern ein hohes Maß an Disziplin und

Ressourcen. Die Aufgabe von Software-Engineering ist es, diese Diskrepanz im

Projekt korrekt darzustellen und kontinuierliche Qualität der Software sicherzustellen

(Van Vliet, 2008 S. 9), (Balzert, 1999 S. 12), (Ludewig, et al., 2010 S. 50), (Jalote,

2005 S. 12-13).

2.1.6 Wissensgebiete des Software-Engineerings

Software-Engineering ist eine sehr facettenreiche Disziplin und umfasst eine

Vielzahl von Teilgebieten innerhalb und außerhalb der Informatik. Balzert ordnet

zum Beispiel Software-Engineering innerhalb der Kerninformatik der praktischen

Informatik zu und unterteilt es dort aus dem Blickwinkel der Informatik in die drei

übergeordneten Teilbereiche Softwareentwicklung, Softwaremanagement und

Softwarequalitätsmanagement.

Page 33: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

24

Abbildung 4: Software-Engineering innerhalb der Informatik (Balzert, 2009 S. 18)

Van Vliet trennt wiederum die Informatik vom Software-Engineering. Die

Abgrenzung erfolgt, indem er Software-Engineering inhaltlich dem Management

zuordnet und die Informatik der Softwareentwicklung, mit der Begründung:

„Software engineers must engineer software.― (Van Vliet, 2008 S. 10). Eine

unabhängige Sichtweise auf Software-Engineering versucht das SWEBOK, das aus

einer Initiative der IEEE und ACM entstanden ist. Im Gegensatz zu anderen oft

zitierten, umfangreichen Standardwerken in dieser Arbeit versucht es die

Teilbereiche des Software Engineerings in Wissensgebiete zu gliedern. Ziel ist dabei,

ein strukturiertes, einheitliches und umfassendes Gesamtwerk zu schaffen, das eine

Synthese von generell akzeptierten Erkenntnissen aufzeigt und referenziert. Das

SWEBOK dient damit als Rahmenwerk für einen Gesamtüberblick aller Themen, die

das Software-Engineering betrifft. Das SWEBOK umfasst insgesamt elf

Wissensgebiete. Die ersten zehn behandeln Software-Engineering, das letzte führt

verwandte Themengebiete auf (IEEE, 2004).

Erstens: Anforderungsanalyse befasst sich mit der Erarbeitung, Analyse,

Spezifikation und Verwaltung von Anforderungen an Software. Zweitens: Entwurf

ist der Prozess, bei dem die Anforderungen an die Software (was?) in eine

Beschreibung der Problemlösungsstrategie (wie?) transformiert wird. Drittens:

Realisierung befasst sich mit der Entwicklung des Programms. Das Ergebnis dieses

Prozesses ist die lauffähige Software. Viertens: Testen verifiziert, ob die entwickelte

Software tatsächlich das Problem löst. Die Software ist fehlerfrei, wenn das

Widerlegen der Fehlerfreiheit fehlgeschlagen ist. Fünftens: Wartung befasst sich mit

Kerninformatik

Theoretische

Informatik

Praktische

Informatik Technische

Informatik

Software

Engineering

Softwareentwicklung Softwaremanagement Softwarequalitäts-

management

Page 34: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

25

der Aufrechterhalten und Pflege des Betriebs von Software. Sechstens:

Konfigurationsmangement betrachtet die Menge aktuell installierter und im

laufenden Betrieb befindlicher Software- und Systemkomponenten und soll die

Integrität eines Softwaresystems über den gesamten Lebenszyklus der Software

wahren. Siebtens: Projektmanagement befasst sich mit Planung, Durchführung und

Bewertung von Softwareentwicklungsprozessen. Achtens: Vorgehensmodell

betrachtet die Definition, Implementation, Bewertung, das Management und die

Verbesserung von Softwareprozessen. Neuntens: Entwicklungswerkzeuge und

Methoden vereinigen streng genommen zwei Wissengebiete in sich: Werkzeuge und

Methoden. Werkzeuge befassen sich mit dem Design und Einsatz dieser für

Softwareentwicklungsprozesse. Methoden mit der Vorgehensweise in den Prozessen.

Zehntens: Software Qualität betrachtet nicht die Techniken des Testens, sondern den

Prozess des Testens und die allgemeine Softwarequalitätssicherung. Elftens:

Themengebiete, die mit Software-Engineering korrelieren. Darunter fallen:

technische Informatik, Informatik, Unternehmensführung, Mathematik,

Projektmanagement, Qualitätsmanagement, Softwareergonomie und System-

Ingenieurswesen (Calamé, 2003 S. 5-6).

2.1.7 Kritische Würdigung

Bei der Betrachtung der Grundlagen ist erschreckend, wie viele der elementaren

Fragen innerhalb des Software-Engineerings noch unbeantwortet sind. Verstärkt wird

dies durch Glaubensrichtungen innerhalb der Literatur, die Denkansätze

proklamieren und dadurch starken Einfluss auf die Softwareentwicklung haben. So

sind bis heute viele Methoden auf Basis der „Industriellen Revolution“ mit dem

Glauben an die ingenieursmäßige Entwicklung von Software entstanden. Aber ist

Software-Engineering eine Ingenieurswissenschaft? Wie wir wissen, ist Software-

Engineering aus einer Provokation heraus entstanden, Softwareentwicklung mit dem

positiven Begriff des Ingenieurs zu besetzten und sich von der „Kunst des

Programmierens“ abzuwenden. Alistair Cockburn bezweifelt, dass die Analogie des

Ingenieurs richtig gewählt wurde, und stellt damit das Ideal der ingenieursmäßigen

Softwareentwicklung in Frage (Cockburn, 2004). Trotzdem hat sich Software-

Engineering zu einer „Wissenschaft“ entwickelt – aufgrund der empirischen

Page 35: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

26

Untersuchungen12

, der daraus abgeleiteten Prinzipien, Methoden und Werkzeuge

(Balzert, 2009 S. 17) sowie einer festen Terminologie13

(Balzert, 2009 S. 20-22).

Allerdings werden bis heute „Kunst“ und „Handwerk“ zur Beschreibung der

Profession in der Literatur nach wie vor gleichermaßen benutzt (Pfleeger, et al., 2010

S. Xiii, 21).

Werkstatt (technisches Produkt) Atelier (Kunstwerk)

1 Geistige

Voraussetzung

Das vorhandene und verfügbare

technische Knowhow

Ist unter anderem die Inspiration des

Künsters

2 Termine Sind in der Regel mit genügender

Genauigkeit planbar

Sind wegen der Abhängigkeit von

Inspiration nicht planbar

3 Preis Ist an den Kosten orientiert und

darum kalkulierbar

Ist nur durch den Marktwert, nicht

durch die Kosten bestimmt

4 Normen und

Standards

Existieren, sind bekannt und

werden in aller Regel respektiert

Sind rar und werden, wenn sie

bekannt sind, nicht respektiert

5 Bewertung,

Vergleich

Kann nach objektiven,

quantifizierten Kriterien

durchgeführt werden

Ist nur subjektiv möglich, das

Ergebnis ist umstritten

6 Urheber Bleibt meist anonym, hat keine

emotionale Bindung zum Produkt

Betrachtet das Kunstwerk als Teil

seiner selbst

7 Gewährleistung

und Haftung

Sind klar geregelt, können nicht

ausgeschlossen werden

Sind undefiniert und praktisch kaum

durchsetzbar

Tabelle 1: Gegenüberstellung von Werkstatt und Atelier (Ludewig, et al., 2010 S. 48)

Betrachtet man die Gegenüberstellung von Werkstatt (Handwerk) und Atelier

(Kunst) (Ludewig, et al. S. 48), wird klar, dass die Trennung ein Wunschdenken ist.

Unverständlich ist, warum Software-Engineering dies sich nicht eingesteht und diese

Ambivalenz bzw. den dualen Charakter (Dumke, 2003 S. 11) einfach akzeptiert.

Denn bis heute werden Termine und Kosten für ein Softwareprojekt geschätzt und

im laufenden Projekt überschritten (The Standish Group, 1995), (Winter, 2005 S. 5).

Regeln sind existent/bekannt, werden aber nach wie vor in der Masse von

Programmierern ignoriert, genauso wie die Einhaltung von Normen. Programmtest

12 Die Sammlung empirischer Daten beginnt mit „Software and its impact: a quantitative assessment“ ,1973.

13 Dies betrifft die Begriffssammlung des Arbeitskreises der Gesellschaft für Informatik und das IEEE Standard

Glossary of Software Engineering Terminology.

Page 36: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

27

liefern begrenzte Aussagen über die Funktionalität und andere Eigenschaften von

Software können nur subjektiv bewertet werden. Für die Vergleichbarkeit von

Software gibt es kaum Kriterien. Programmierer bauen trotz des Anspruchs des

„Egoless Programming“ (Weinberg, 1971) ihre Persönlichkeit in die Software ein

(auch wenn Normen eingehalten werden), die dadurch für andere Menschen

unverständlich wird. Kritik an ihrem „Werk“ können Programmierer selten ertragen.

Die Verantwortung für die Qualität der Produkte wollen Programmierer sowie

Firmen nicht übernehmen, obwohl sie es mittlerweile gesetzlich müssen. In der

Praxis hat sich das Leitbild des Ingenieurs deshalb faktisch nicht durchgesetzt, weil

der damit verbundene Anspruch von Balzert – „Ingenieurmäßig bedeutet hier auch

kein Künstlertum“ (Balzert, 2009 S. 17) – bisher nicht eingelöst wurde (Ludewig, et

al., 2010 S. 47-48). Beim Studium der Literatur irritiert besonders, dass

fundamentale Probleme, die über Jahrzehnte bekannt sind, nicht gelöst werden. Das

beste Beispiel ist hier Brooks „konstante“ Gesetzmäßigkeit der „No Silver Bullet“.

Die agile Bewegung versucht erstmals beide Seiten der „essencial und accidential

difficultes“ zu betrachten und verlässt damit als Erste ernsthaft und konsequent den

Weg der „industriellen Revolution“ (Van Vliet, 2008 S. 27).

2.2 Vorgehensmodelle und Prozessmodelle

Die methodische Auseinandersetzung mit dem Softwareherstellungsprozess ist seit

Beginn des Software-Engineerings das Kernstück. In den frühen Zeiten wurde die

Beschäftigung mit den Modellen und Prozessen sogar dem Software-Engineering

gleichgesetzt (Hesse, et al., 1992 S. 28). Nach Jalote sind drei Faktoren relevant, um

qualitativ hochwertige Software produktiv zu entwickeln: Menschen, Prozesse und

Technologie (Werkzeuge). Menschen entwickeln und liefern die Software ab.

Prozesse sollen den Menschen helfen, welche Aufgaben sie zu erledigen haben und

in welcher Reihenfolge. Technologie (Werkzeuge) soll Arbeitsschritte effizienter

gestalten und Fehler reduzieren. Das größte Potenzial liegt nach Jalote in der

Optimierung der Prozesse. Deshalb konzentriert sich Software-Engineering im

Gegensatz zu anderen Disziplinen der Informatik nicht auf Verbesserungen der

Produktbestandteile, sondern auf das systematische Vorgehen innerhalb des

Page 37: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

28

Prozesses, um qualitativ hochwertige Software produktiv zu produzieren (Jalote,

2008 S. 9-10) .

2.2.1 Abgrenzung der Begriffe: Vorgehen, Prozess, Projekt

In der Literatur verwenden die meisten Autoren die Begriffe wie Vorgehensmodell

oder Prozessmodell als Synonyme. Ludewig et al. entzerren die Begriffe und grenzen

damit bewusst das Vorgehensmodell vom Prozessmodell (Hesse, et al., 1992 S. 46,

69-70) ab.

Betrachtet man das IEEE Standard Glossary of Software Engineering Terminology,

findet man folgende zwei Definitionen: Erstens, „process. (1) A sequence of steps

performed for a given purpose; for example, the software development process.

[…]― (IEEE, 1990 S. 57) und zweitens „software development process. The process

by which user needs are translated into a software product. The process involves

translating user needs into software requirements, transforming the software

requirements into design, implementing the design in code, testing the code, and

sometimes, installing and checking out the software for operational use. Note: These

activities may overlap or be performed iteratively.― (IEEE, 1990 S. 67)

Ein Prozess ist auf Basis beider Begriffsdefinitionen erstes die konkrete Abfolge von

Schritten, die ein konkretes Ergebnis haben. Man kann hier auch von einem Projekt

sprechen. Zweitens eine abstrakte Folge von Schritten, die beliebig vielen Projekten

zu Grunde liegen kann und als Muster beziehungsweise Modell dient.

Ein Prozess schließt demnach mehr Aspekte ein als das Vorgehen innerhalb eines

Projekts. Der Kern des Prozessmodells bildet immer ein Vorgehensmodell. Darüber

hinaus beinhalten Prozessmodelle im Gegensatz zum Vorgehensmodell auch

Organisationsstrukturen, Vorgaben für das Projektmanagement, Qualitätssicherung,

Dokumentation, Konfigurationsverwaltung, Werkzeuge, Notationen und Sprachen

(Ludewig, et al., 2010 S. 182). Historisch gesehen trifft die Unterscheidung ebenfalls

zu. In den siebzigern und frühen achtziger Jahren des letzten Jahrhunderts sind erst

die Vorgehensmodelle entstanden. Danach wurden innerhalb der Vorgehensmodelle

die Prozesse verbessert, woraus Prozessmodelle wie zum Beispiel der Unified

Page 38: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

29

Process oder auch Extreme Programming entstanden sind (Ludewig, et al., 2010 S.

89-92).

2.2.2 Ausgewählte Vorgehensmodelle

Die ausgewählten Vorgehensmodelle erfolgen erst aus der historischen Sicht mit

„Code and Fix“, dem „Software Life Cycle“ und dem daraus abgeleiteten

Wasserfallmodell. Das Rapid Prototyping als Modell überführt anschließend in nicht

lineare Vorgehensmodelle mit der evolutionären, iterativen und inkrementellen

Softwareentwicklung. Das Spiralmodell als Weiterentwicklung des

Wasserfallmodells bildet den Schluss. Nicht berücksichtigt wurde das V-Modell als

Vorgehensmodell. Es wird zwar oft als solches bezeichnet, ist jedoch aufgrund der

Integration von projektbegleitender Tätigkeiten ein Prozessmodell. Die Darstellung

der Modelle beschränkt sich auf die wesentlichen Kernaussagen, da sie in der

Literatur sehr ausführlich dargestellt werden.

2.2.2.1 Code and Fix

Bei dem Vorgehensmodell „Code and Fix“ oder auch „Build and Fix“ wird ohne

Analyse, Spezifikation und ohne Entwurf Programmcode direkt vom Entwickler

implementiert, getestet und korrigiert, bis das System den Vorstellungen des

Entwicklers entspricht.

Die Vorteile des Modells sind, dass erstens Probleme relativ schnell gelöst werden

können und zweitens in kurzer Zeit ein lauffähiges Programm entsteht. Die

Nachteile sind, dass erstens das Projekt nicht planbar ist, zweitens Arbeit nicht auf

mehrere Personen verteilt werden kann, drittens die Soll-Anforderungen fehlen und

damit das Programm nicht geprüft werden kann, viertens Programme nur durch den

Entwickler gewartet werden können, fünftens wichtige Konzepte und

Entscheidungen nicht dokumentiert sind und deshalb nicht transferiert werden

können, sechstens der Aufwand für Korrekturen erst im Einsatz entdeckt und

korrigiert werden können.

Obwohl das Modell in den 1960er Jahren dazu geführt hat, dass Software-

Engineering entstanden ist, wird es bis heute vielerorts angewendet – und besitzt in

Page 39: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

30

Managementkreisen eine hohe Beliebtheit, um schnelle Ergebnisse zu erhalten. Es

wird allerdings in der professionellen Softwareentwicklung strikt abgelehnt

(Ludewig, et al., 2010 S. 153-154).

2.2.2.2 Software Life Cycle

Jede Software durchlebt als Produkt verschiedene Stadien. Als Softwarelebenszyklus

wird der Prozess mit alle Phasen und Stadien von der Entwicklung, Einführung,

Wartung bis zur Ablösung oder Auslaufen eines Softwareprodukts verstanden.

(Dumke, 2003 S. 18-19) Das Modell des Lebenszyklus ist universell und wird in der

Literatur oft variiert durch überlappende Phasen, Meilensteine oder Iterationen

(Winter, 2005 S. 27). Als Urheber des Modells des Softwarelebenszyklus gilt Rosove

(Rosove, 1967 S. 67-93). Den Softwarelebenszyklus hat später Royce mit seinem

Wasserfallmodell populär gemacht. Der Softwarelebenszyklus war neben dem „Code

and Fix“ das erste Modell, das die Sichtweise in der Softwareentwicklung nach der

Softwarekrise maßgeblich veränderte.

Der Softwarelebenszyklus beschreibt acht Phasen, die eine Software durchlaufen

kann, und umfasst erstens Analyse (concept phasen), zweitens Spezifikation der

Anfordeung (requirements phase), drittens Entwurf (design phase), viertens

Implementierung (implementation phase), fünftens Test (test phase), sechstens

Integration und Abnahme (installation and test phase), siebtens Betrieb und Wartung

(operation and maintaince phase) und achtens Auslaufphase (retirement phase)

(IEEE, 1990 S. 68).

Der Zeitaufwand innerhalb des Lebenszyklus bis zur Fertigstellung (ohne Integration

und Abnahmen) einer Software unterliegt den sog. 40-20-40 Regeln. Nur 20 % der

Zeit wird mit der Implementierung (Programmierung) des Systems verbracht,

während 40 % für Analyse, Spezifikation und Entwurf und die restlichen 40 % für

das Testen verbraucht werden. Erfolgreiche Projekte unterliegen gemäß Boehm einer

60-15-25 Regel: 60 % Analyse, Spezifikation und Entwurf, 15 % Implementierung

und 25 % Testen. Der Betrieb und die Wartung nehmen 50-75 % der gesamten

Softwarekosten ein (Van Vliet, 2008 S. 14-15).

Page 40: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

31

2.2.2.3 Wasserfallmodell

Das Wasserfallmodell wird auch als sequenzielles oder lineares Modell bezeichnet

(Dumke, 2003 S. 112). Es basiert auf dem Softwarelebenszyklus, wobei es die

Auslaufphase nicht betrachtet. Das Modell unterteilt die Tätigkeiten der

Softwareentwicklung in klar abgegrenzte, aufeinander folgende Aktivitäten. Jede

dieser Aktivitäten produziert ein Ergebnis oder mehrere Teilergebnisse in Form von

Dokumenten (Ludewig, et al., 2010 S. 156-157). Van Vliet bezeichnet es deshalb

auch als „dokumentengetriebenes“ oder „planungsbetriebenes“, schwergewichtiges

Modell (Van Vliet, 2008 S. 46-47). Damit das Ende jeder Aktivität und der Anfang

der nächsten identifiziert werden können, muss eine Überprüfung der Dokumente

erfolgen und wird als „Verification und Validation“ bezeichnet. Dieses Vorgehen

soll sicherstellen, dass der Output der Aktivität erstens mit dem Input aus der

vorherigen Aktivität übereinstimmt und zweitens mit den allgemeinen

Anforderungen übereinstimmt. Stimmen diese nicht überein, gilt die Aktivität als

nicht abgeschlossen, bis die Anforderungen erfüllt sind (Jalote, 2008 S. 14-15). Diese

Zyklen, die einen Rücksprung in vorherige Aktivitäten erlauben (Wirbel), erzeugen

das Bild eines Wasserfalls. Rücksprünge in weiter zurückliegende Aktivitäten sind

nicht vorgesehen. In der Literatur gibt es Darstellungen des Modells, bei denen bei

einer Fehlerfindung nicht in eine frühere Aktivität zurückgekehrt werden darf, wenn

die nächste bereits gestartet wurde. Diese Sichtweise bezieht sich auf das strenge

Wasserfallmodell oder auch Einbahnstraßenmodell, welches das Projektmanagement

Ende der 1970er Jahre prägte (Ludewig, et al., 2010 S. 159-160).

Die größten Kritikpunkte am Wasserfallmodell sind, dass erstens davon

ausgegangen wird, dass die Anforderungen des Kunden bereits beim Start vorhanden

sind und sich im laufenden Projekt nicht mehr ändern werden. Damit geht das

Modell von einer vollständigen und fehlerfreien Anforderungsspezifikation in der

ersten Aktivität aus. Zweitens: Benutzer und Stakeholder werden dazu ermutigt, in

der Spezifikation so viele Funktionen wie möglich anzufordern, weil diese

nachträglich nicht mehr änderbar sind. Drittens: Ein lauffähiges System wird erst am

Ende des Projekts geliefert (sog. „Big Bang“ oder auch „all or nothing approach“).

Der Auftraggeber bekommt damit erst am Schluss ein lauffähiges System. Viertens:

Bei Überschreiten der Projektdauer wird das Testen verkürzt und bewusst fehlerhafte

Page 41: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

32

Software in Betrieb genommen. Die Fehlerbeseitigung erfolgt anschließend in der

Wartung.

2.2.2.4 Prototyping/Rapid Protoyping

Das Prototyping ist aus dem wesentlichen Kritikpunkt des Wasserfallmodells

entstanden. Die Grundidee ist dabei, die Anforderungen anhand eines lauffähigen

Prototyps zu evaluieren, der anschließend verworfen wird (Jalote, 2005 S. 41). Das

Vorgehen ist Prototypauswahl, entwerfen, konstruieren, benutzen, bewerten,

revidieren.14

Der Prototyp wird immer auf Basis von bekannten Anforderungen

entwickelt und realisiert ausgewählte Aspekte des Ursprungssystems. Durch die

Interaktion mit den Prototypen erhalten alle Projektbeteiligten sehr früh ein Gefühl

für das System. Neue Anforderungen an das System können dabei erkannt und

bestehende überprüft werden. Ein Prototyp ist immer Bestandteil einer Spezifikation

(Ludewig, et al., 2010 S. 163-164), (Jalote, 2005 S. 41-42), (Van Vliet, 2008 S. 56-

58). Das Prototyping gilt als nicht lineares Vorgehensmodell, weil es als

Vorgehensmodell spezielle Zyklen in speziellen Sequenzen zulässt, und ist

Bestandteile vieler Prozessmodelle (Ludewig, et al., 2010 S. 163), (Hesse, et al.,

1992 S. 63).

Wie ein Prototyp in einem Entwicklungsprozess eingesetzt werden kann, hat Kieback

et al. in vier Arten unterschieden. Erstes: ein Demonstrationsprototyp, der die

prinzipiellen Einsatzmöglichkeiten und die Handhabung des Systems zeigt. Sie sind

Wegwerfprodukte, besitzen keine fachliche Detailtreue und unterliegen keinem

softwaretechnischen Standard. Zweitens: funktionale Prototypen, die Ausschnitte

der Bedienoberfläche und Teile der Funktionalität modellieren. Der Prototyp kann

bereits der Architektur des Zielsystems entsprechen. Drittens: ein Labormuster, das

technische Aspekte des Zielsystems modelliert und damit die Architektur oder

Funktionalitäten verifiziert. Labormuster stellen aus Entwicklersicht ein

Experimentalsystem in Form einer Machbarkeitsstudie dar. Viertens: Das

Pilotsystem als Prototyp ist in seiner Qualität und Funktionalität für einen zeitlich

14 Eigene Darstellung, basierend auf Hesse (Hesse, et al., 1992 S. 66) und Ludewig et al (Ludewig, et al., 2010 S.

167).

Page 42: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

33

beschränkten echten Einsatz ausreichend weit entwickelt. Ein Pilotsystem beinhaltet

einen abgeschlossenen Teil des Zielsystems (Kieback, et al., 1992), (Ludewig, et al.,

2010 S. 167-168).

Floyd hingegen klassifiziert Prototypen in drei Arten nach dem angestrebten Ziel.

Erstens: exploratives Prototyping, das die Analyse unterstützen und ergänzen soll.

Als Prototypen werden meistens Demonstrations- und funktionale Prototypen gebaut,

die sich für konventionelle Vorgehensmodelle eignen. In der Literatur wird das

Vorgehen auch als „Rapid Prototyping“ bezeichnet. Zweitens: Experimentelles

Prototyping betrachtet die technische Umsetzung von Funktionalitäten und

Ergonomie. Hierzu werden funktionale Prototypen und Labormuster konstruiert.

Drittens: Beim evolutionären Prototyping wird dieser nicht nur als Hilfsmittel im

Entwicklungsprozess eingesetzt, sondern kann auch als Vorgehen dienen, um ein

System permanent an verändernde Rahmenbedingungen anzupassen.

Charakteristisch sind hierbei kurze Entwicklungs- und Release-Zyklen (Floyd, 1984

S. 6-12).

Bei dem vertikalen (funktionalen) Prototyping wird ein ausgewählter Teil des

Systems durchimplementiert mit dem Ziel, ein Teil des Programms anzufertigen.

Von horizontal (schichtenweise) wird gesprochen, wenn eine Ebene des

Gesamtsystems realisiert wird (Hesse, et al., 1992 S. 66), (Pomberger, et al., 2004 S.

29).

Die Gefahren beim Prototypenmodell sind: Erstens, dass Prototypergebnisse zu spät

in die Entwicklung einfließen können, zweites, dass die Prototypenentwicklung die

Entwickler von der eigentlichen Entwicklung des Systems ablenken können,

drittens, dass der Unterschied zwischen Prototyp und Produkt aus den Augen

verloren wird, viertens, dass der Prototyp ein dauerhaftes Provisorium wird und die

Entwicklung am eigentlichen Produkt verhindert, fünftens, dass der Prototyp

verführt, die Anforderung nicht sauber zu dokumentieren, weil sie im Prototyp

implementiert zu sein scheint (Hesse, et al., 1992 S. 67). Aus diesem Grund sollten

nur erfahrene Projektteams das Prototypenmodell nutzen.

Page 43: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

34

2.2.2.5 Evolutionäre Entwicklung

Die evolutionäre Entwicklung ist dem Prototyping sehr ähnlich und wird deshalb in

der Literatur oft mit dem evolutionären Prototyping gleichgesetzt. Ähnlich wie beim

Prototyping hat die evolutionäre Entwicklung die gleiche Ausgangslage, dass die

Anforderungen an ein System nicht oder kaum bekannt sind. Der wesentliche

Unterschied besteht darin, die Software strategisch bewusst durch Zyklen aus

Erprobung und Verbesserungen so zu verändern und zu erweitern, dass sie den

gewünschten Funktionsumfang besitzt. „Evolutionäre Software-Entwicklung –

Vorgehensweise, die eine Evolution der Software unter dem Einfluss ihrer

praktischen Erprobung einschließt. Neue und veränderte Anforderungen werden

dadurch berücksichtigt, dass die Software in sequenziellen Evolutionsstufen

entwickelt wird― (Ludewig, et al., 2010 S. 171).

Die Endprodukte in Ihrer ersten Version sind typischerweise in einem strukturell

schlechten Zustand, weil die Architektur auf Basis der ersten Anforderung entworfen

wurde. Brooks führt deshalb die Regel auf: „Plan to throw one away, you have to do

it anyway―. Deshalb sollte nach erfolgreicher Einführung die Software durch eine

Neuimplementierung ersetzt werden. Als Alternative hierzu kann das von agilen

Prozessen bekannte Refactoring als Methode während der Entwicklung eingesetzt

werden (Ludewig, et al., 2010 S. 171-172), (Winter, 2005 S. 32).

2.2.2.6 Iterative Softwareentwicklung

Bei der iterativen Softwareentwicklung wird die Software in mehreren geplanten und

kontrollierten wiederholenden Schritten realisiert. Jede Wiederholung wird als eine

Iteration beschrieben, wobei bereits der erste Schritt als eine Iteration betrachtet

wird. In der zweiten Iteration wird die realisierte Software auf Basis der gewonnen

Erfahrungen mit dem System und der bekannten Mängel der ersten Iteration

korrigiert und verbessert. Markt und- Technologieentwicklung können bei jedem

Durchgang zudem mit in die Entwicklung einfließen. Dabei werden in jeder Iteration

die Tätigkeiten Analysieren, Entwerfen, Codieren und Testen durchgeführt.

Page 44: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

35

Abbildung 5: Annäherung durch iterative Entwicklung (Ludewig, et al., 2010 S. 173)

Die iterative Entwicklung unterscheidet sich maßgeblich von der inkrementellen

durch die Zielbestimmung, die bei der iterativen gleich bleibt. Das System wird nicht

in jeder Iteration erweitert, sondern verbessert (Ludewig, et al., 2010 S. 172-174).

2.2.2.7 Inkrementelle Softwareentwicklung

Bei der inkrementellen Entwicklung wird die Software nicht in einem Projekt

realisiert, sondern in einer Reihe von aufeinander aufbauenden Ausbaustufen, welche

Software funktional erweitern. Die Software wird nach jeder Ausbaustufe

ausgeliefert und in Betrieb genommen. In der ersten Stufe wird das Kernsystem

implementiert und in den weiteren Ausbaustufen funktional erweitert. Neben dem

Kernsystem werden nach Van Vliet und Winter zudem oft auch

Softwarekomponenten mit dem höchsten Risiko („build the hardest things first“)

(Winter, 2005 S. 31) im ersten Inkrement implementiert (Van Vliet, 2008 S. 61). Im

Gegensatz zur iterativen Entwicklung besitzt die Software bei der inkrementellen

Entwicklung keinen Endzustand. Bei jedem Inkrement wird das Ziel weiter gesteckt

und dementsprechend funktional erweitert. Bei diesem Vorgehen muss

Abwärtskompatibilität zu vorherigen Systemen gewährleistet werden. Die

Vorgehensweise ist ein Kreislauf. Ist das Kernsystem im ersten Inkrement realisiert,

wird die Software im Anwendungsbereich eingesetzt. Die weiteren Inkremente

werden anschließend schrittweise nacheinander als ein jeweils eigenes Projekt

entwickelt, in die Software integriert, ausgeliefert, benutzt und bewertet.

Page 45: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

36

Abbildung 6: Vorgehensweise der inkrementellen Entwicklung (Ludewig, et al., 2010 S. 175)

Die Vorteile dieser Vorgehensweise sind erstens, dass Schwachstellen in der

Software vom Anwender bei jedem Inkrement identifiziert und behoben werden

können. Zweitens: Einwicklungszeiten sind pro Inkrement in Vergleich zur

Gesamtentwicklungszeit sehr kurz. Fehler können zudem kostengünstiger korrigiert

werden. Drittens: Durch die schrittweise Entwicklung der Software ist ein schneller

Markteintritt mit dem Kernsystem möglich. Viertens: „Overfunctionality“ wird

durch die schrittweise Entwicklung eingegrenzt, weil das Kernsystem nur die

Grundfunktionen besitzt (Van Vliet, 2008 S. 60) und das System auf Basis von

Benutzerfeedback um spezielle Funktionalitäten erweitert wird (Ludewig, et al.,

2010 S. 174-175).

2.2.2.8 Spiralmodell

Das Spiralmodell wurde von Boehm als Antwort auf die Kritik des

Wasserfallmodells und auf die Vorschläge des Prototyping entwickelt. Als

wesentliches Unterscheidungsmerkmal gegenüber den „Document-driven“-Modellen

stellt Boehm den Risikobezug, „Risk-driven-modell“, seines Spiralmodells in den

Mittelpunkt. Beim Vorgehen soll folgender Zyklus bis zum erfolgreichen oder bis

zum Scheitern des Projekts wiederholt werden. Erstens: Es sollen alle Risiken des

Projekts gesucht werden, wenn es keine Risiken mehr gibt, gilt das Projekt als

abgeschlossen. Zweitens: Zur Identifizierung des größten Risikos eines Projekts

müssen alle Risiken des Projekts bewertet werden. Drittens: Es soll immer der Weg

genommen werden, der das nächstgrößte Risiko beseitigt. Wenn sich das Risiko

nicht beseitigen lässt, ist das Projekt gescheitert. Boehm grenzt die Art der Risiken

Page 46: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

37

nicht ein. Risiken können auch außerhalb eines Projekts berücksichtigt werden, wie

zum Beispiel Human Ressources oder Zeitpunkte des Markteintritts.

Die Betrachtung des Risikos hat zwei Vorteile. Erstens: Wenn ein schwieriges

Problem unlösbar ist, fällt dies sehr früh im Projekt auf. Zweitens: Sind die größten

Risiken in einem Projekt gelöst, ist dies ein positives Signal für alle

Projektbeteiligten, weil anschließend nur noch kleine Risiken folgen (Ludewig, et

al., 2010 S. 178).

Das Spiralmodell ist ein generisches Modell, weil darin alle Vorgehensmodelle

enthalten sind und genutzt werden können. Es können pro Zyklus unterschiedliche

Vorgehensmodelle angewendet werden, abhängig vom zu lösenden Problem

(Sommerville, 2007 S. 73). Die Zyklen des Spiralmodells werden als Schnecke

dargestellt. Jeder Zyklus unterteilt sich in vier Aktivitäten: erstens Zielbestimmung,

einschließlich der Betrachtung von Alternativen, zweitens Risikoanalyse und ggf.

Prototypenentwicklung, drittens Konzeptentwicklung und Prüfen des nächsten

Teilprodukts, viertens weitere Projektplanung. Ein Projekt wird beim Spiralmodell

nur pro Zyklus geplant, was gleichzeitig auch die größte Kritik hervorruft. Ein

vollständiger Projektplan ist beim Spiralmodell nicht vorgesehen (Ludewig, et al.,

2010 S. 179). Das Spiralmodell unterscheidet sich in seiner Produktivität nach

Boehm nicht wesentlich von anderen, wenn die Risiken im Projekt gering sind

(Boehm, 1988 S. 69).

2.2.2.9 Einsatz der Vorgehensmodelle

In der Literatur wird keine Kategorisierung vorgenommen, welches Modell in

welcher Projektart eingesetzt werden soll – und das, obwohl es die Klassifikationen

von Programmen nach Lehman gibt (Ludewig, et al., 2010 S. 161-162). In der

heutigen Zeit leben Vorgehensmodelle in Prozessmodellen und sind deshalb als

Softwareentwicklungsprozess isoliert betrachtet in ihrer Anwendung nicht mehr zu

empfehlen. Dennoch muss innerhalb von Prozessmodellen entschieden werden,

welches Vorgehen genutzt werden soll. In der Literatur wird immer wieder

angedeutet, dass gute Entwicklerteams durch ihre Erfahrungswerte mit jedem

Vorgehen erfolgreich sind.

Page 47: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

38

Das Prototyping sollte als Vorgehen eingesetzt werden, wenn wichtige

Anforderungen fehlen oder nur unzureichend formuliert werden können. Die

evolutionäre Vorgehensweise sollte genutzt werden, wenn eine Anforderung faktisch

nicht möglich ist, weil maßgebliche (meist externe) Einflussgrößen, die hohen

Einfluss auf die Entwicklung haben, nicht bekannt sind. Die iterative Entwicklung ist

für Projekte sinnvoll, wenn ein Problem das erste Mal gelöst wird und von Beginn an

klar ist, dass der erste Wurf den Anforderungen nicht gerecht wird, dies aber durch

Iterationen gelöst werden kann. Die inkrementelle Softwareentwicklung hingegen

sollte bei Produkten eingesetzt werden bei denen „Time to Market“ einen hohen

Stellenwert besitzt und es ausreicht, im ersten Release nur das Kernsystem zu

realisieren, welches später um zusätzliche Funktionen erweitert werden soll. Das

Spiralmodell kann bei Projekten eingesetzt werden, die im Projekt bekannte,

technische Projektrisiken besitzen.15

2.2.3 Ausgewählte Prozessmodelle

Die Literatur bietet eine Vielzahl sehr unterschiedlicher Prozessmodelle an. Im

Allgemeinen wird geraten, die derzeitigen internen Prozesse zu analysieren, um

festzustellen wie diese gelebt und angewendet werden. Das Einführen eines neuen

Prozesses ist langwierig, schwierig, riskant und unterliegt einem „Change

Management“. Aus diesem Grund müssen Prozessmodelle in ihrem konkreten

Umfeld nach unterschiedlichen Bedingungen innerhalb eines Projekts angepasst

(Tailoring) werden können. Prozessmodelle lassen deshalb entweder mehr oder

weniger viel Spielraum bei ihrer Anwendung und in ihrer Ausgestaltung zu

(Ludewig, et al., 2010 S. 181-182). Im Zusammenhang mit den agilen Prozessen, die

aus der agilen Bewegung entstanden sind, werden Prozessmodelle in leicht- und

schwergewichtige Prozesse unterteilt (Van Vliet, 2008 S. 51). Der Unterscheid

zwischen „schwer“ und „leicht“ wird dabei anhand des Grades der Formalisierung

des Prozesses und an der Anzahl der verbundenen (Zwischen-)Ergebnisse/-Produkte

gemacht (Pomberger, et al., 2004 S. 45). Schwergewichtige Prozesse sind sehr

planungsgetrieben und legen viel Wert auf die Einhaltung des Prozessablaufs.

Leichtgewichte Prozesse dagegen sehen Änderungen als Gegenstand des

15 Eigene Darstellung in Anlehnung an Ludewig, et al, 2010.

Page 48: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

39

Prozessablaufs und versuchen, so wenig Zeit wie möglich, so viel wie nötig für die

Planung zu verbringen. Im Zentrum leichtgewichtiger Prozesse stehen nicht der

Prozess an sich und die konsequente Einhaltung dessen, sondern das Liefern von

lauffähiger Software (Van Vliet, 2008 S. 51). Aufgrund des fehlenden

Kriterienkatalogs für leichte und schwere Prozesse in der Literatur erfolgt in dieser

Arbeit keine Einteilung (Ludewig, et al., 2010 S. 183). Insgesamt kann aber

festgestellt werden, dass alle agilen Prozesse wie XP, FDD und Scrum den

leichtgewichtigen Prozessen zugeordnet werden können.

2.2.3.1 Phasenmodell

Beim Phasenmodell wird die die Softwareentwicklung in Phasen (Etappen)

gegliedert, die streng sequenziell durchlaufen werden. Das Ende einer Phase

symbolisiert einen Meilenstein. Jede neue Phase startet erst nach Erreichen des

Meilensteins der vorherigen Phase und hat ein zugewiesenes Budget. Das Budget

jeder Phase wird erst bereitgestellt, wenn der vorherige Meilenstein erreicht wurde.

Durch die Verknüpfung der Phasen mit Budgets wird es auch Kostenmodell genannt.

In dem Phasenmodell sind Rücksprünge in bereits abgeschlossene Phasen nicht

vorgesehen. Sollten Rücksprünge in vorherige Phasen notwendig sein, finden die

Tätigkeiten im Budget unter den Bedingungen der gerade laufenden Phase statt. Als

Vorgehensmodell wird das (strenge) Wasserfallmodell genutzt. Das Phasenmodell

bringt erheblichen Aufwand für die Organisation mit und ist stark von den Methoden

des Projektmanagements geprägt.

Die Vorteile sind, dass erstens Abweichungen von der Planung schnell erkannt

werden, spätestens nach nicht erreichen eines Meilensteins. Zweitens: Der

Personalbedarf ist pro Phase geklärt und sichergestellt. Drittens: Durch die

Prüfungen am Ende jedes Meilensteins ist das Risiko gering, dass im Projekt in die

falsche Richtung gearbeitet wurde oder dass Teile des Projekts zu spät fertig werden.

Viertens: Das „90 % Syndrom“ kann ausgeschlossen, bzw. auf bestimmte Phase

begrenzt werden, weil pro Meilenstein die Projektdauer genau festgelegt wurde.

Größter Kritikpunkt ist die strenge Aufteilung in sequenzielle Phasen, die sich nicht

überlappen dürfen (Ludewig, et al., 2010 S. 184-187).

Page 49: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

40

2.2.3.2 Timeboxing-Modell

Das Timeboxing-Modell von Jalote parallelisiert einzelne Inkremente innerhalb des

Softwareentwicklungsprozesses. Jedes Inkrement repräsentiert eine Timebox. Eine

Timebox umreißt einen fixen Zeitraum, in der ein Inkrement der Software

fertiggestellt werden muss. Im Gegensatz zu anderen Modellen – in denen erst nach

den Anforderungen festgestellt wird, wie lange die Entwicklung dauert –, wird der

Umfang eines Inkrements anhand dessen bestimmt, was in der zur Verfügung

stehenden Zeit pro Timebox realisiert werden kann. Jede Timebox als Inkrement

nutzt ein sequenzielles Vorgehensmodell (Jalote empfiehlt das strenge

Wasserfallmodell). Die Parallelisierung erfolgt, indem ein oder mehrere Teams die

Sequenzen zeitversetzt pro Timebox nacheinander abarbeiten. Die Realisierung des

ersten Inkrements besitzt eine Projektdauer der ersten Timebox, danach werden die

weiteren Inkremente in einem festgelegten Zeitintervall, das jeweils die Dauer einer

Sequenz besitzt, geliefert. Wenn eine Timebox die drei Sequenzen Requirement,

Code und Deploy besitzt und eine Größe von T-Tagen besitzt, würde das erste

Inkrement nach T Tagen geliefert werden. Alle weiteren würden nach T/3 erfolgen.

Abbildung 7: Ausführung des Timeboxing-Modells (Jalote, et al., 2004)

Nach Jalote ist der Vorteil des Timeboxing-Modells, dass durch die Parallelisierung

der Timeboxen mehrere Teams an einem Projekt gleichzeitig arbeiten können, was

es für den Offshore-Bereich sehr interessant macht. Im Gegensatz zu anderen

Prozessmodellen kann damit die Realisierungszeit aufgrund eines höheren

Personeneinsatz verkürzt werden. Eingesetzt werden sollte das Timeboxing-Modell

bei Projekten, bei denen eine hohe Anzahl an Funktionen implementiert werden

Page 50: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

41

muss und die Software in benutzbare Inkremente aus Nutzersicht aufgeteilt werden

kann. Voraussetzung bei dem Timeboxing-Modell ist nach Jalote erstens ein

Projektmanagement, das die Komplexität der Parallelität im Projekt beherrscht, und

zweitens muss die Software auf eine stabile Architektur aufsetzen. Nachteile des

Modells sind erstens, dass Change Requests nach einer abgeschlossenen Timebox in

einer darauf folgenden Timebox geändert werden müssen, und dass zweitens

Refactoring von Code nicht innerhalb einer Timebox geschieht, sondern

nachgelagert in einer Timebox erfolgt (Jalote, 2008 S. 25-27), (Jalote, et al., 2004).

2.2.3.3 V-Modell (XT)

In seiner Arbeit über V&V von Software hat Boehm 1979 seinem Wasserfallmodell

ein V-förmiges Phasenmodell gegenübergestellt (Boehm, 1979). Erste

Entwicklungen zum V-Modell begannen 1986. In der Folge wurde es im Auftrag des

Bundesministeriums für Verteidigung entwickelt und ist dort seit 1992 verbindlich

vorgeschrieben. 1996 wurde es auch für den zivilen Verwaltungsbereich Pflicht.

1997 wurde es erneut überarbeitet und unter der Bezeichnung V-Modell 97

publiziert. Enthalten waren in dieser Version die Unterstützung der inkrementellen

Entwicklung, koordinierte Entwicklung von Hard- und Software und die

objektorientierte Entwicklung. 2004 wurde in einer erneuten Revision das V-Modell

XT vorgestellt. Das „XT“ steht in diesem Fall für „Extreme Tailoring“ (Ludewig, et

al., 2010 S. 190).

Page 51: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

42

Abbildung 8: V-Modell von 1979 nach Boehm (Boehm, 1979)

Das V-Modell in seiner ursprünglichen Version von Boehm betrachtet die

Softwareentwicklung als symmetrischen Prozess und stellt neben den Rückbezügen

auf vorausgegangene Entwicklungsschritte auch Querbezüge zwischen den

Entwürfen/Aktivitäten und daraus entstehenden Produkten her. Sollten sich bei den

Querbezügen Unstimmigkeiten ergeben, muss zur überprüften Phase zurückgekehrt

werden (Hesse, et al., 1992 S. 37-38). Die entwerfenden Aktivitäten stehen dabei am

linken Ast des V-Modells. Dem stehen rechts realisierende und überprüfende

Tätigkeiten (Produkte) gegenüber. Boehm trennt durch die waagerechte Linie

„requirements baseline“ den fachlichen (Auftraggeber und Nutzer) vom technischen

(Entwickler-)Teilbereich. Oberhalb der Linie ist zudem nur Validation möglich,

welche die Frage „Haben wir das richtige Produkt gebaut?“ beantwortet. Verification

unterhalb beantwortet dagegen die Frage: „Haben wir das Produkt richtig gebaut?“

(Höhn, et al., 2008 S. 575).

Folgende wesentliche Merkmale charakterisieren das V-Modell 97/XT des Bundes:

Erstens: Das V-Modell teilt ein Projekt in Projektabschnitte, an deren Ende ein

Meilenstein geknüpft ist, der Entscheidungspunkt genannt wird. Zweitens: Das V-

Modell kann für Software- und Hardwareprojekte genutzt werden sowie als Meta-

Projekt zur Einführung eines Vorgehensmodells in eine Organisation. Drittens: Das

Page 52: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

43

V-Modell integriert im Gegensatz zum Wasserfallmodell projektbegleitende

Tätigkeiten wie Qualitätssicherung, Konfigurationsverwaltung und

Projektmanagement. Deshalb wird es in dieser Arbeit auch als Prozessmodell

verstanden und nicht als Vorgehensmodell. Viertens: Das V-Modell unterstützt

inkrementelle, komponentenbasierte und prototypische Entwicklung. Fünftens: Das

V-Modell lässt sich insbesondere in der XT-Variante anpassen und erweitern.

Die Elemente des Modells bestehen aus Aktivitäten, Produkten, Rollen,

Vorgehensbausteinen, Entscheidungspunkten, Projektdurchführungsstrategien und

Entwicklungsstrategien. Ein Produkt wird in Aktivitäten erstellt oder bearbeitet,

wobei eine Aktivität in Arbeitsschritte gegliedert sein kann. Als Produkte werden die

(Zwischen-)Ergebnisse eines Projekts bezeichnet. Produkte können wie Aktivitäten

gegliedert werden und heißen dann Thema. Inhaltlich zusammengehörende Produkte

und Aktivitäten werden gruppiert und als Disziplin bezeichnet. Im V-Modell sind 13

Disziplinen definiert. Rollen beschreiben zusammengehörende Aufgaben und

Verantwortlichkeiten sowie die dazugehörenden Fähigkeiten. Einem Produkt ist

immer eine Rolle zugewiesen sowie ggf. zusätzliche Rollen, die das Produkt

unterstützen. Insgesamt sind 30 Rollen im V-Modell XT definiert.

Vorgehensbausteine fassen Disziplinen zusammen, die für eine Aufgabe relevant

sind. Dabei werden für alle Projekte mindestens vier Vorgehensbausteine definiert:

Projektmanagement, Qualitätssicherung, Problem- und Änderungsmanagement und

Konfigurationsmanagement. Neben diesen Vorgehensbausteinen können im

„Tailoring“ weitere hinzukommen. Entscheidungspunkte besitzen drei Funktionen.

Erstens übernehmen sie die Funktion eines Meilensteins und definieren damit, wann

der nächste Projektabschnitt begonnen werden kann. Zweitens definieren sie, welche

Produkte am Ende jedes Entscheidungspunktes fertiggestellt sein müssen und

drittens deren Bewertung. Die Projektdurchführungsstrategie schafft den Rahmen,

in der das Projekt geordnet und nachvollziehbar durchgeführt werden kann. Sie legt

die Entscheidungspunkte fest und deren zeitliche Reihenfolge. Jedes

Entwicklungsprojekt wird immer in Iterationen durchgeführt, für jede Iteration muss

entschieden werden, welche der drei Entwicklungsstrategien (inkrementiell, iterativ,

Prototyp) angewendet werden soll. Entwicklungsstrategien geben, wie auch die

Projektdurchführungsstrategien, Entscheidungspunkte vor.

Page 53: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

44

Abbildung 9: Vereinfachte Darstellung der Struktur des V-Modells XT (Ludewig, et al., 2010 S. 196)

Die Struktur des V-Modells XT kann sehr vereinfacht wie folgt erläutert werden.

Erstens: Für jeden Projekttyp sind Vorgehensbausteine und

Projektdurchführungsstrategien festgelegt. Zweitens: Die Projektdurchführungs-

strategie gibt zu erreichende Entscheidungspunkte vor. Produkte müssen an jedem

Entscheidungspunkt fertiggestellt sein. Drittens: Pro Vorgehensbaustein werden alle

Rollen und Disziplinen (Produkte und Aktivitäten) zusammengefasst, um eine

Projektaufgabe zu lösen. Die Vorgehensbausteine bauen aufeinander auf. Viertes:

Produkte und Aktivitäten sind in Disziplinen unterteilt. Produkte werden durch genau

eine Aktivität fertiggestellt. Produkte hängen voneinander ab. Fünftens: Die Rollen

sind für Produkte verantwortlich und wirken an deren Erstellung mit.

Das Tailoring unterscheidet sich im Vorgehen beim V-Modell 97 gegenüber dem V-

Modell XT. Beim V-Modell 97 wird die Gesamtmenge der Aktivitäten durch

Streichungen eingeschränkt. Das V-Modell XT geht dagegen von Aktivitäten, die

minimal erforderlich sind, aus. Pro Projekttyp gibt es im V-Modell XT

verpflichtende und optionale Vorgehensbausteine – die beim Tailoring hinzugezogen

oder weggelassen werden können.

Mit dem V-Modell (XT) wird nicht nur die reine Softwareentwicklung abgedeckt,

sondern das komplette Projekt. Es besitzt sehr ausgefeilte und detaillierte Vorgaben,

Page 54: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

45

wie ein Projekt abläuft, und kann sehr gut als Ausgangspunkt genutzt werden, um

einen Entwicklungsprozess zu definieren. Es ist ein generisches Modell und kann

durch Tailoring an Prozesse und Projekte angepasst werden. Durch die Komplexität

des Modells ergibt sich ein enormer Umfang von Produkten, Aktivitäten und Rollen,

die es für kleinere Projekte unbrauchbar macht. Anpassungen an das Modell sind

sehr aufwändig und ohne Anpassungen wird es aufgrund der Größe sehr schwerfällig

und endet in Bürokratie. Durch die Komplexität entsteht zudem ein hoher

Schulungsaufwand für die Mitarbeiter des Projekts (Ludewig, et al., 2010 S. 190-

201).

2.2.3.4 (Rational-)Unified Process

Der „Unified Process“ entstand aus der Notwendigkeit heraus, dass die Methoden für

Analyse und Entwurf, Qualitätssicherung und Test nur auf imperative und nicht

objektorientierte Sprachen zugeschnitten waren. Die konventionellen Prozessmodelle

waren zudem wenig geeignet für die objektorientierte Programmierung. Der „Unified

Process“ ist historisch gesehen aus der Entwurfsmethode Objectory entstanden, die

später um Prozesskomponenten wie zum Beispiel dem des „Use Cases“ erweitert und

dann in „Objectory-Process“ umbenannt wurde. Durch den Zusammenschluss der

Firmen Objectory AB und Rational Software Corp. flossen die von Rational

entwickelten Ansätzen zur Softwareentwicklung in den Objectory Process ein.

Daraus entstanden zunächst der Rational Objectory Process und später der Rational

Unified Process (RUP). Der Unified Process wurde anschließend von RUP

abstrahiert. Der RUP stellt damit eine konkrete Ausprägung des Unified Process

(UP) dar.

Der Unified Process soll die Vorteile von Phasenmodellen und nicht linearen

Prozessmodellen vereinen. Dabei sollen Phasen die Planung und das Management

von Entwicklungsprojekten erleichtern und durch Iterationen sowie inkrementelles

Entwickeln helfen, Risiken früh zu erkennen. Die vier folgenden Merkmale sind

charakteristisch: Erstens: Der UP ist ein Phasenmodell mit vier Phasen

(Interception, Elaboration, Construction, Transition), an deren Ende jeweils ein

Meilenstein passiert werden muss (LO = Lifecycle Objective, LA = Lifecycle

Architecture, OC = Initial Operational Capability, PR = Product Release). In jeder

Page 55: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

46

Phase werden alle definierten Arbeitsabläufe in unterschiedlicher Intensität

durchgeführt. Ein Durchlauf durch alle vier Phasen wird als Zyklus bezeichnet. Das

Ergebnis ist ein internes oder an den Kunden auslieferbares Release. Zweitens: Der

UP ist iterativ. Jede Phase kann mehrere Iterationen beinhalten. Das Ergebnis einer

Iteration ist immer eine ausführbare Systemkonfiguration oder ein Prototyp. In jeder

Iteration und allen Phasen wird getestet. Ein Release entsteht über alle Phasen

hinweg indem Arbeitsergebnisse inkrementell weiterentwickelt werden. Drittens:

Ein Produkt wird inkrementell entwickelt, indem es mehrere Zyklen durchläuft. Am

Ende des letzten Zyklus ist das Produkt fertiggestellt. Viertens: UP basiert auf „Use

Cases“. Die Identifikation und Modellierung der „Use Cases“ zur Beschreibung der

funktionalen Anforderung ist zentraler Bestandteil des Ansatzes.

Die Struktur des UP setzt sich aus Rollen (Worker), Aktivitäten, Artefakten,

Arbeitsabläufen (Workflows) und Phasen zusammen. Als Rolle (Worker) werden

zusammenhängende Aufgaben, Verantwortlichkeiten und Fähigkeiten bezeichnet.

Ein Worker kann in unterschiedlichen Arbeitsaufläufen verschiedene Rollen

besetzen. Eine Aktivität ist eine Tätigkeit, die von einer Rolle in einem Arbeitsablauf

getätigt wird, und liefert immer ein definiertes Ergebnis. Ein Artefakt ist eine

„formulierte“ Information. Diese wird in Dokumente und Modelle unterschieden.

Artefakte sind der Input einer Aktivität und werden durch Worker in einem

Arbeitsablauf erstellt, verändert oder benutzt. Ein Arbeitsablauf fasst

zusammengehörige Worker, Aktivitäten und Artefakte zusammen. Dabei werden

vier Kernabläufe (Core Workflows) definiert: Requirements, Analysis,

Implementation und Test. Das Phasenmodell wird in vier Phasen unterteilt. Erstens:

Interception, in der die Produktidee und die Anforderung auf Basis einer

wirtschaftlichen Betrachtung soweit verstanden wird, dass ein Projekt zustande

kommt. Use Cases werden identifiziert und modelliert, Risikobewertungen, erste

Fassung der Architektur und des Projektplans werden erstellt. Wenn nötig werden

erste Prototypen entwickelt, um Risiken abzuschätzen. Zweitens: In der Elaboration

werden alle fehlenden Anforderungen und die größten Risiken identifiziert, bewertet

und Gegenmaßnahmen geplant sowie Pläne für die zwei folgenden Phasen erstellt.

Der Bau eines Protoypen zeigt den ersten Architekturkern und Funktionalitäten des

Systems. Drittens: In der Construction Phase wird das System auf Basis der

Page 56: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

47

vorhandenen Systemarchitektur implementiert, integriert und getestet.

Unvollständige Dokumentationen werden fertiggestellt. Am Ende der Phase ist das

System in der Qualität einer Beta-Version. Viertens: In der Transition wird das

Produkt so lange auf Basis von Rückmeldungen und Erfahrungen von Anwendern

verbessert, bis es stabil ist. Ziel ist, das Produkt soweit zu verbessern, dass es

Produktqualität erreicht. Die Phase endet, wenn der Kunde mit dem Ergebnis

zufrieden ist. Wird das Produkt in mehreren Ausbaustufen entwickelt, werden die

Phasen erneut durchlaufen.

Abbildung 10: Phasen, Iterationen und Arbeitsabläufe (Ludewig, et al., 2010 S. 206)

Der Rational Unified Prozess (RUP) passt den generischen Unified Process durch

Erweiterungen (Tailoring) an. Im RUP wird der Arbeitsablauf (Workflow) durch

„Discipline“ ersetzt. Ein Workflow in RUP beschreibt die Anordnung und den

Ablauf der Aktivitäten einer Disziplin. RUP erweitert zudem neben neuen Rollen,

Aktivitäten und Artefakten die fünf Kern-Arbeitsabläufe vom UP um weitere fünf.

Jede Disziplin wird in Form eines UML-Diagramms detailliert beschrieben, um die

Reihenfolge und Abhängigkeiten der Aktivitäten eines Arbeitsablaufs zu

visualisieren. Daneben wird jede Aktivität detailliert durch einen Text beschrieben,

und bei Artefakten wird die Gliederung vorgegeben und der Inhalt umrissen.

Um RUP einsetzen zu können, sollten eine ausgezeichnete Konfigurations- und

Änderungsverwaltung, Projektmanagementfertigkeiten und Kenntnisse in

objektorientierter Konzeption und Notation vorliegen. Vorteile von RUP sind gute

Page 57: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

48

Darstellung und detaillierte Dokumentation der Prozesse in Form von

Arbeitsanleitungen, inhaltliche Beschreibung und Musterdokumente. Zudem vereint

RUP das Phasenmodell mit iterativer sowie inkrementeller Entwicklung und schließt

das Prototyping mit ein. Durch den hohen Detaillierungsgrad muss das Projekt an

den RUP-Prozess angepasst werden. Projektspezifisches Tailoring ist deshalb

schwierig. Zudem ist RUP ein Produkt, das vermarktet und stetig weiterentwickelt

wird. Die Prozessdefinition ist deshalb relativ unstabil, da bei Updates veränderte

Fassungen des Prozesses entstehen und im Change Management berücksichtigt

werden müssen. Des Weiteren vermittelt RUP den Eindruck, dass bei der Einhaltung

des Prozesses garantiert ein gutes Ergebnis entsteht und Software industriell zu

fertigen ist. Die reine Formalität des Prozesses reicht hier nicht aus, vielmehr ist es

relevant, brauchbare Arbeitsergebnisse aus den einzelnen Aktivitäten zu erhalten

(Ludewig, et al., 2010 S. 207-211), (Van Vliet, 2008 S. 68-71), (Winter, 2005 S. 32-

35).

2.2.3.5 Extreme Programming

Extreme Programming gehört zu den agilen Prozessen und ist von Kent Beck, Ward

Cunningham und Ron Jeffries im Rahmen der Arbeit des Comprehensive

Compensation System bei Chrysler entstanden. Kent Beck hat zu Extreme

Programming zwei Bücher veröffentlicht. Das erste, „Extreme Programming

Explained. Embrace Change“, erschien 1999 und hat den Stellenwert eines

Manifests. Die zweite Auflage erschien 2004 und wurde von Grund auf

überarbeitet16

. In dieser Arbeit wird die erste Auflage behandelt und lediglich auf die

Änderungen der 2. Auflage hingewiesen, wenn dies sinnvoll erscheint.

Die zentralen Elemente von Extreme Programming sind die XP-Werte (values), XP-

Prinzipien (basic principles) und XP-Konzepte (practices). Das aus den drei

Elementen entstehende XP-Prozessmodell stellt die Menschen (alle

Projektbeteiligten) und deren Kommunikation in den Mittelpunkt und nicht

16 Kent Beck hat die Prinzipien komplett überarbeitet. Die Techniken sind in der neuen Auflage in

Primärtechniken und Sekundärtechniken unterteilt. Als neue Techniken sind „Pay per Use“, das SaaS als

Geschäftsmodell schon im Entwicklungsprozess integriert sowie die „Root-Cause Analysis“ und „Shrinking

Teams“.

Page 58: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

49

Dokumente, Werkzeuge oder Prozesse. Zudem sind die Entwicklerteams in Extreme

Programming schlank und besitzen eine Größe von ca. 10-20 Entwicklern.

Extreme Programming beruht auf vier Werten: Einfachheit, Feedback,

Kommunikation und Mut. Es sollen möglichst einfache Lösungen erstellt und

Prozesse genutzt werden, weil diese leicht zu erstellen und schneller zu verstehen

sind als komplexe. Das Projektteam soll so schnell und oft Feedback über Ergebnisse

vom Anwender oder den Kollegen im Team bekommen. Rückmeldungen sind Teil

der Qualitätssicherung. Die persönliche und direkte Kommunikation steht im

Vordergrund. Teams arbeiten nicht räumlich getrennt voneinander und sehen eine

hohe Verfügbarkeit des Kunden und Anwenders vor. Dokumente sind als

Kommunikationsmittel zweitrangig und dienen nur als Ergänzung. Mut wird

benötigt, um die ersten drei Werte in einem Projekt zu leben. In der neuen Auflage

wird als fünfter Wert „Respekt“ hinzugefügt. Jeder Projektbeteiligte respektiert die

anderen. Dies soll den menschenzentrierten Ansatz explizit hervorheben. Tailoring

der Werte ist seit der zweiten Auflage zudem projektspezifisch erlaubt (Wolf, et al.,

2005 S. 4-6), (Ludewig, et al., 2010 S. 222).

Die 15 XP-Prinzipien leiten sich aus den Werten ab. Die fünf zentralen Prinzipien

sind: unmittelbares Feedback, Einfachheit anstreben, inkrementelle Veränderung,

Veränderung wollen und Qualitätsarbeit. Die weiteren zehn Prinzipien sind: Lernen

lehren, geringe Anfangsinvestition, auf Sieg spielen, gezielte Experimente, offene

und aufrichtige Kommunikation, Instinkte des Teams nutzen nicht – dagegen

arbeiten, Verantwortung übernehmen, an örtliche Gegebenheiten anpassen, mit

leichtem Gepäck reisen und ehrliches Messen. Besonders hervorzuheben sind

erstens, dass komplexe Software inkrementell verändert werden soll, weil nur bei

schrittweise kleinen Änderungen unerwartete Effekte beherrschbar bleiben.

Zweitens: Extreme Programming Projekte spielen, um zu gewinnen und nicht, um

zu verlieren. Extreme Programming Projekte gehen davon aus, Fehler zu machen,

um daraus zu lernen, und versuchen nicht von Anfang an, Fehler zu verhindern.

Drittens: Es sollen gezielt Experimente im Projekt gestartet werden, um Risiken in

der Software oder im Entwicklungsprozess aufzudecken oder die eigenen

Entscheidungen überprüfen zu können (Wolf, et al., 2005 S. 6-10).

Page 59: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

50

Die XP-Konzepte – auch oft als Techniken deklariert – helfen, die Werte und

Prinzipien in der konkreten Projektarbeit umzusetzen. Extreme Programming

definiert 14 Konzepte, die in Management-, Team- und Programmierkonzepte

gruppiert werden können (Wolf, et al., 2005). Die Konzepte bedingen teilweise

einander und können deshalb im Rahmen von Extreme Programming nicht isoliert

eingesetzt werden. Die XP-Programmierkonzepte wie Paar-Programmierung,

testgetriebene Entwicklung und Refactoring sind generisch und werden auch ohne

Extreme Programming in der Praxis, zum Beispiel in Scrum, genutzt. Die Konzepte

sind wie eine Zwiebel aufgebaut, wobei Management die äußere und

Programmierkonzepte die innere Schale abdecken.

Die Managementkonzepte vereinen 5 Disziplinen. Erstens: Das integrale Team,

das zwingend den Kunden im Projekt verlangt, weil nur er die tatsächlichen

Anforderungen kennt und priorisieren kann. Der Kunde muss jederzeit dem Team für

Fragen und Diskussionen zur Verfügung stehen. Zweitens: Im Planungsspiel wird

der Aufwand jedes Inkrements, das iterativ entwickelt wird, mit dem Kunden

zusammen geschätzt. Der Kunde nennt die Anforderungen, die Entwickler schätzen

den Aufwand. Planungssitzungen werden so lange durchgeführt, bis eine Basis für

das nächste Inkrement gefunden wurde. Drittens: kurze Relase-Zyklen im Bereich

von mehreren Wochen, damit der Anwender schnell und oft Feedback geben kann.

Viertens: Täglich kurze, 15-minütige „Standup Meetings“, die keine ausgeprägte

Hierarchie aufweisen, finden im Stehen statt und dienen dazu, Aufgaben zu verteilen

und sich über Projektfortschritt und Probleme auszutauschen. Fünftens: In längeren

Abständen werden Sitzungen mit ausgewählten Personen durchgeführt, in denen das

Projekt im Rückblick bewertet wird, um Schwächen sowie Fehler zu identifizieren

und daraus zu lernen.

Die Teamkonzepte bestehen ebenfalls aus fünf Disziplinen. Erstens: Die

gemeinsame Verantwortung für den Code entspricht inhaltlich dem Egoless

Programming und wird über Paar-Programmieren praktisch gelöst. Zweitens:

Coderichtlinien gelten verbindlich für das Projekt. Drittens: erträgliche

Arbeitsbelastung, keine Überstunden einplanen, damit die Leute nicht verschlissen

werden. Viertens: zentrale Methapern, die helfen, einen gleichen Blickwinkel auf

Page 60: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

51

das Projekt zu bekommen und dem fachlichen Entwurf zu Grunde liegt. Fünftens:

Bei der laufenden Integration werden Ergebnisse in einer speziellen Umgebung

integriert und allen Entwicklern zur Verfügung gestellt. Nach der Integration müssen

alle Tests fehlerfrei durchlaufen, erst dann bleibt der Code im Gesamtsystem

vorhanden.

Die Programmierkonzepte umfassen vier Disziplinen, die in der Literatur auch als

einzelne Techniken separat betrachtet werden und deshalb generisch in anderen

Prozessmodellen eingesetzt werden. Erstens: Die testgetriebene Entwicklung (Test

Driven Development) sieht vor, dass Tests („Unit Tests“) vor dem Implementieren

erfolgen müssen. Das Schreiben der „Unit Tests“ vor der Implementierung soll

Entwicklern helfen, die Anforderungen einzuhalten und nur die Funktionen zu

implementieren, die notwendig sind, um den „Unit Test“ zu bestehen. Akzeptanztests

dienen dazu, die implementierten Funktionen fachlich abzunehmen. Zweitens:

Strukturverbesserungen (Refactoring) ist der Prozess, ein Softwaresystem

kontinuierlich intern so zu optimieren, dass sich das externe Verhalten nicht ändert.

Durch Refactoring werden die Struktur und das Design des Codes vereinfacht,

verbessert und die Komplexität des Codes reduziert, nachdem dieser geschrieben

wurde. Ziel ist, die Fehlerquote durch fehlerhaften Code oder schlechte Architektur

zu senken (Ludewig, et al., 2010 S. 593). Drittens: Bei der Paar-Programmierung

wird grundsätzlich das Programmieren von zwei Entwicklern durchgeführt. Einer

codiert und einer schaut zu, prüft und hinterfragt den Code. Die Rollen wechseln

ständig und die Paare können variieren. Durch Paar-Programmierung wird die

Qualität des Codes erhöht und das Wissen auf mehrere Person verteilt. Viertens: Das

Softwaresystem sollte die Anforderungen möglichst durch einen einfachen Entwurf

abbilden und mit Hilfe des Refactoring die Architektur inkrementell erweitern (Wolf,

et al., 2005 S. 10-15), (Ludewig, et al., 2010 S. 223-225).

Ausgehend von den Werten (values), XP-Prinzipien (basic principles) und XP-

Konzepten (practices) umfasst der Entwicklungsprozess drei Teilprozesse: erstens

Release Planung, zweitens iterative Release-Erstellung und drittens Akzeptanztests

und Release-Veröffentlichung (Pomberger, et al., 2004 S. 46). Ein Release-Zyklus

beginnt mit der Release-Planung, der auf Basis von vorher festgelegten „User

Page 61: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

52

Stories“17

erstellt wird. Jede „User Story“ muss für einen Entwickler in wenigen

Tagen umgesetzt werden können. In jedem Release werden die wichtigsten User

Stories implementiert, die der Kunde festlegt und priorisiert. Jedes Release wird

anhand der User Stories in einem Planungsspiel geschätzt und nach der Realisation

gegengerechnet, um aus Fehleinschätzungen zu lernen. Die Entwicklung erfolgt

anschließend in aufeinanderfolgenden Iterationsschritten, in der jede Iteration

abhängig vom Release-Plan geplant wird. Der Teilprozess der Release-Planung wird

immer angestoßen, wenn sich Änderungen oder Erweiterungen der User Stories

ergeben, sich die Systemarchitektur oder die Rahmenbedingungen im Projekt ändern.

Änderungen werden in der nächsten Iteration implementiert. Im Teilprozess der

Iteration findet die eigentliche Release-Entwicklung statt. Pro Iteration wird ein

Realisationszeitraum von zwei bis vier Wochen festgelegt, die im Planspiel

berücksichtigt werden müssen. Der Entwicklungsprozess beginnt mit „Unit Tests“,

mit denen Entwicklerpaare später überprüfen, ob die Anforderungen eines „User

Tasks“ korrekt implementiert wurden. Danach erfolgen der Entwurf und die

Implementierung durch die Entwicklerpaare. Ab einem bestimmten Reifegrad

werden „Unit Tests“ so lange ausgeführt, bis diese keine Fehler mehr aufweisen.

Anschließend wird die entwickelte Systemkomponente ins Gesamtsystem integriert.

Eine Überarbeitung erfolgt bei fehlgeschlagender Integration ins Gesamtsystem. Ist

ein User Task erfolgreich integriert worden, werden der Teilprozess des

Akzeptanztests und die Release-Veröffentlichung angestoßen. Wenn alle User

Stories erfolgreich den Akzeptanztest durchlaufen haben, wird ein System-Release

zur Veröffentlichung freigegeben. Sind in dem Release nicht alle Funktionen

implementiert, wird ein neuer Release-Zyklus angestoßen (Pomberger, et al., 2004 S.

47-48).

17 User Stories sind vergleichbar mit „Use Cases“ aus dem Unified Process. In XP wird zunächst vom Kunden die

User Story in Prosa geschrieben, welche die Fragen „wer“, „was“, „warum“ beantworten müssen. Der Entwickler

definiert auf Basis der „User Story“ den „User Task“, der die Funktionen für das zu entwickelnde System

definiert.

Page 62: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

53

Abbildung 11: XP-Prozess – Projektüberblick (Wells, 2000)

Die Vorteile des XP-Prozessmodells liegen in seiner Flexibilität, bei sich ständig

ändernden Rahmenbedingungen Anpassungen vornehmen zu können, und der

Möglichkeit, sich auf wesentliche Kernfunktionen in den ersten Releases zu

beschränken, die anschließend inkrementell in darauf folgende Releases erweitert

werden können. Durch die Einbindung des Auftraggebers und Anwenders wird die

Software sehr Nutzer-zentriert entwickelt. Extreme Programming eignet sich deshalb

für Produktentwicklungen, in denen Anforderungen nur in informeller, vager Form

vorliegen und sich häufig ändern können (Pomberger, et al., 2004 S. 50). Die

Kritiken an Extreme Programming sind vielseitig. Die einzelnen Elemente von

Extreme Programming bedingen so stark einander, dass ein dogmatisches Vorgehen

innerhalb des Prozessmodells Pflicht ist. Des Weiteren geht Extreme Programming

davon aus, dass Änderungen grundsätzlich günstig sind, wenn man sie kontinuierlich

durchführt. Warum klare Spezifikationen, die bis zu Projektende Bestand haben,

nicht in einer „Spezifikation“ festgehalten werden sollen, wird ebenfalls nicht klar.

Besonders kritisch ist allerdings die Annahme des idealen Kunden und

Programmierers. Kunden sind in der Regel nicht experimentierfreudig und müssen

aus Werkvertrags- und Unternehmenssicht eine Spezifikation und ausführliche

Dokumentation für die spätere Programmpflege durch andere Dienstleister bei

Festpreisprojekten vorlegen. Zudem kann die „When it‟s done“-Mentalität beim

Kunden auf Widerstand stoßen, genauso wie der doppelte Aufwand durch das

Programmieren in Paaren. Entwickler sind zudem selten kommunikationsstark,

außergewöhnlich teamorientiert, kundentauglich, offen für Kritik und ohne

Besitzdenken an ihrem Werk. Entwicklerteams sind zudem selten gleich gut

Page 63: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

54

qualifiziert, sodass Paar-Programmierung nicht auf gleicher Augenhöhe stattfinden

und das Refactoring nicht durch einen anderen Entwickler erfolgen kann.

2.2.3.6 Feature Driven Development

Feature Driven Development wurde von Jeff DeLuca im Rahmen eines großen

Bankenprojekts in Singapur entwickelt. In diesem Projekt wurde auch das

Modellieren in Java in Farbe mit UML (Java Modeling in Color with UML)

entwickelt (Palmer, et al., 2002 S. xxi) entwickelt. Beide Techniken können

zusammen angewendet werden, bedingen aber nicht einander. Im Kern versucht

Feature Driven Development, aus komplexen UML-Modellen gekapselte Funktionen

(Features) aus Kundensicht zu identifizieren, die dann anschließend priorisiert

realisiert werden. Aufgrund der geringen Formalität gilt Feature Driven

Development als agile Entwicklungsmethode und nutzt als Vorgehensmodell das

sequenzielle Vorgehen und die Iteration. Das Projekt kann dabei aber auch

inkrementell entwickelt werden.

Die Softwareentwicklung wird bei Feature Driven Development anhand eines

Feature-Plans organisiert. Den gesamten Prozess überwacht der Chefarchitekt, der

die Aufgabe hat, den Überblick über die Gesamtarchitektur und fachlichen

Kernmodelle zu behalten. Bei größeren Teams werden die einzelnen

Entwicklerteams von jeweils mehreren Chefprogrammierern angeleitet (Wolf, et al.,

2005 S. 137).

Zur Beschreibung von Features gibt es Namenskonvention. Es gibt drei Arten von

Features. Die kleinste Einheit ist ein Feature. Mehrere Features können in ein

Feature Set gruppiert werden. Die nächste Abstraktionsstufe über dem Feature Set ist

ein Major Feature Set. Ein Feature darf maximal zwei Wochen für seine

Realisierung benötigen (Gyger, 2003 S. 4-5).

Namenkonvention eines Features (Schritte) <action>the<result><by|for|of|to>a(n)<object>

Zum Beispiel

Calculate the total of Sale

Asses the fullfillment timelines of a sale

Page 64: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

55

Calculate the total purchases by a customer

Namenskonvention eines Feature Sets (Geschäftstätigkeit) <action><-ing>a(n)<object>

Zum Beispiel

Making a product sale

Namenskonvention eines Major Feature Sets (Fachgebiet) <object>management

Zum Beispiel

product-sales management

Der Prozess unterteilt sich in fünf Prozessstufen:

1. Entwickeln eines Gesamtmodells (alle Projektbeteiligten)

2. Erstellen einer Feature-Liste (Chefprogrammierer)

3. Planung pro Feature (Projektleiter, Entwicklungsleiter, Chefprogrammierer)

4. Entwurf pro Feature (Chefprogrammierer, Entwickler)

5. Implementierung pro Feature (Entwickler)

Die ersten drei laufen sequenziell ab, die letzten beiden werden pro Feature

wiederholt. Jeder Prozessschritt wird nach dem ETVX-Template beschrieben: Entry,

Task, Verification und Exit.18

18 Entry: Vorbedingungen des Prozesses; Tasks: Liste der Aufgaben, die im Prozess ausgeführt werden;

Verification: Beschreibung der Mittel wie die Erfüllung des Prozesses ermittelt werden kann; Exit:

Schlussbedingungen und Output.

Page 65: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

56

Abbildung 12: The five processes of FDD with their outputs (Palmer, et al., 2002 S. 58)

Im ersten Prozessschritt definieren Fachexperten und Entwickler unter der Leitung

des Chefarchitekten den Inhalt und Umfang des Systems. Der Kunde benötigt in

diesem Schritt nur eine grobe Vorstellung davon was das System leisten soll. Das

Gesamtmodell wird in kleinen Gruppen über Teilmodelle erstellt. Dies geschieht

über eine objektorientierte Modellierungstechnik. Die Teilmodelle werden

anschließend diskutiert und zu einem Gesamtmodell zusammengefügt. Im zweiten

Prozessschritt transformieren die Chefprogrammierer die Methoden der

Klassendiagramme in Features gemäß der Namenskonvention und gruppieren sie in

Fachgebiete, Geschäftstätigkeit und Schritte. Die Priorisierung der Features erfolgt

danach, ob ein Feature die Kundenzufriedenheit erhöht oder erniedrigt. Es gibt vier

Prioritätsstufen: „must have“, „nice to have“, „add it if we can“ und „future“ (Gyger,

2003 S. 7). Ein Feature darf den Implementierungszeitraum von zwei Wochen nicht

überschreiten. Ist ein Feature zu umfangreich, muss es in Teil-Features aufgebrochen

werden. Im dritten Prozessschritt planen Projektleiter, Entwicklungsleiter und

Chefprogrammierer die Reihenfolge sowie das Enddatum der „Majore Feature Sets“.

Die Reihenfolge der Features wird auf Basis der Abhängigkeiten zwischen den

Features, Auslastung der Entwicklerteams und Komplexität des Features festgelegt.

Jedes Feature Set bekommt einen Chefprogrammierer als Besitzer zugeordnet. Jede

Klasse wird einem klassenverantwortlichen Entwickler (Class Owner) zugewiesen.

Der vierte und fünfte Prozessschritt wird mehrmals, pro Feature einmal, ausgeführt.

Im vierten Prozessschritt bestimmt der Chefprogrammierer, welche Klassen

voraussichtlich für die Realisierung des Features betroffen sind und bildet mit den

Page 66: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

57

Klassenverantwortlichen ein „Feature-Team“. Die Feature-Teams können sich in

jeder Iteration verändern. Ein Klassenverantwortlicher kann auch in mehreren

Feature-Teams Mitglied sein. Die Entwickler erstellen ein oder mehrere

Sequenzdiagramme, und die Chefprogrammierer verfeinern die Klassenmodelle auf

Basis der Sequenzdiagramme. Danach werden erste Klassen und Methodenrümpfe

entwickelt. Bei fachlichen Unklarheiten werden Fachexperten aus dem ersten

Prozessschritt hinzugezogen. Im fünften Prozessschritt werden die im vierten Schritt

vorbereiteten Features implementiert. Bei der Entwicklung werden Unit Tests und

Code Inspektionen zur Qualitätssicherung eingesetzt (Roden, 2010), (Wolf, et al.,

2005 S. 137-139), (Gyger, 2003), (De Luca).

Im Gegensatz zu extreme Programming können bei Feature Driven Development

heterogen qualifizierte Entwickler innerhalb eines Teams arbeiten. Die

Wahrscheinlichkeit ist hoch, dass erfahrende Entwickler in Feature Driven

Development Chefprogrammierer sind. Feature Driven Development gibt keine

Praktiken vor, wie die Entwicklungsabteilung organisiert wird, und kann sich hier bei

den XP-Programmierkonzepten bedienen. Allerdings widerspricht die „Individual

Class Ownership“ dem „Collective Code Ownership”. Durch die Aufteilung des

Projekts in Features ist eine verteilte Entwicklung innerhalb von heterogenen

Projektteams sehr gut möglich. Dadurch können Entwicklerteams gut skaliert

werden. Es erlaubt durch die interne Hierarchie, die Feature-Teams klein zu halten,

auch wenn das Projekt groß ist. Zudem ist Feature Driven Development als agile

Entwicklungsmethode gut für Projekte geeignet die relativ stabile Anforderungen im

Projekt haben. Allerdings kann „Feature Driven Development“ nicht eingesetzt

werden, wenn ein Projekt nur technische Verbesserungen als Projektziel vorsieht,

weil diese nicht als Features beschrieben werden können. Feature Driven

Development eignet sich für die Softwareproduktentwicklung besser als für

Individualsoftware, weil innerhalb einer Produktentwicklung die Features relativ früh

festgelegt werden (Khramtchenko, 2004 S. 18-19), (Wolf, et al., 2005 S. 138-139),

(Gyger, 2003 S. 11), (Roden, 2010 S. 48-49).

Page 67: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

58

2.2.3.7 Scrum

Scrum ist ein agiler Ansatz zum Management von Softwareentwicklungsprojekten

und wurde von Jeff Sutherland, Ken Schwaber und Mike Beedle in den 1990er

Jahren entwickelt. Scrum basiert auf den Ideen des „Lean Production“ von Nonaka

und Takeuchi. Kernidee des „Lean Production“ ist das selbstorganisierende Team,

das aus Spezialisten besteht und kooperativ die Entwicklung vorantreibt (Ludewig, et

al., 2010 S. 228-229), (Gloger, 2008 S. 10-11). Es verantwortet dabei kollektiv den

Erfolg oder Misserfolg des Projekts. Scrum ist ein rollenbasierter, iterativer und

inkrementeller Prozess und beschränkt sich auf das Management agiler Projekt.

(Ludewig, et al., 2010 S. 229). Wie in Feature Driven Development schreibt Scrum

keine Programmierkonzepte vor und bedient sich deshalb oft der Konzepte/Praktiken

des Extreme Programmings.

Scrum unterteilt sich in sechs Rollen, sechs Meetings und neun Artefakte, die

innerhalb des iterativen Prozesses eingesetzt werden (Gloger, 2008 S. 14-17). Der

Product Owner, das Team und der Scrum Master sind wesentliche Rollen, die für den

Erfolg eines Scrum-Projekts verantwortlich sind (Ludewig, et al., 2010 S. 229-230).

Das Produkt entsteht in Scrum inkrementell. Bei jedem Inkrement wird der Scrum-

Prozess erneut durchlaufen. Das Prozessmodell beginnt mit der strategischen

Planungsphase, bevor die iterative Entwicklung im Scrum Flow erfolgt. Product

Owner ist der, der die Produktidee hat und diese soweit ausarbeitet, bis daraus eine

Produktvision wird. Die Produktfunktionen werden entweder vom Produkt Owner

oder mit den Teammitgliedern zusammen erarbeitet. Die einzelnen Funktionalitäten

sind sogenannte Backlog Items. Alle Backlog Items werden in eine Liste

geschrieben, dem Product Backlog. Der Product Owner priorisiert die Backlog Items

im Product Backlog anhand des „finanziellen Gewinns“ der Funktion. Jedes Backlog

Item wird im Umfang von den Teammitgliedern geschätzt, welche die Items in

Usable Software wandeln. Die Schätzung erfolgt in Story Points, die später in

Personentage umgerechnet werden. Die Schätzung für den Umfang (Story Points)

des gesamten Product Backlog wird dem Produkt Owner mitgeteilt. Aus dem

Product Backlog wird ein Release-Plan erstellt, der festlegt, in wie vielen zeitlich

abgegrenzten Intervallen das Projekt abgearbeitet wird – den sogenannten Sprints.

Page 68: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

59

Ein Sprint sollte nicht länger als 30 Tage dauern. Am Ende jedes Sprints muss ein

ausführbares und auslieferbares Produktinkrement vorliegen (Usable Software). Hier

wird in Explorations-, Standard- und Releasesprints unterschieden. Explorations-

sprints dienen dazu, problematische oder riskante Bereiche zu untersuchen und

Lösungen zu erproben (ähnlich dem explorativen Prototyping). Standardsprints sind

Produktinkremente, die nicht unbedingt ausgeliefert oder freigeben werden. Am

Ende eines Releasesprints entsteht immer ein auslieferbares Produktinkrement

(Ludewig, et al., 2010 S. 232). Jeder Sprint beginnt mit einer taktischen Planung. Das

erste Planungsmeeting (Sprint Planning Meeting 1) findet mit dem Product Owner,

Team, Management und Anwender statt und ist vergleichbar mit einem

Briefing/Anforderungsmeeting. Hier wird besprochen, wie viele und welche Backlog

Items das Team als Sprint Goal am Ende des Sprints zu liefern hat. Die Summe der

zu liefernden Backlog Items wird in einem Selected Product Backlog festgehalten.

Das Selected Product Backlog ist das gemeinsame Versprechen aller Beteiligten,

welche Funktionen in dem Sprint geliefert werden sollen. In dem darauf folgenden

Meeting (Sprint Planning Meeting 2) bespricht das Realisationsteam, wie die

Backlog Items aus dem Selected Product Backlog realisiert werden sollen. Ergebnis

des Meetings ist eine Liste der Aufgaben, das Sprint Backlog. Das Team beginnt mit

der Realisierung des Produkts. Scrum definiert nicht, wie die Entwicklung

organisiert wird. Stattdessen sollen die Entwickler sich selbst eine Organisationsform

geben, die ihnen hilft, das Sprint Goal zu erreichen. Die Entwickler stimmen ihre

Aufgaben täglich mit dem Scrum Master und dem Product Owner in einem kurzen

Meeting, dem Daily Scrum ab. In dem Meeting wird besprochen, was der einzelne

Entwickler seit dem letzten Meeting geschafft hat, was er bis zum nächsten Meeting

erreichen möchte und welche Hindernisse er bei der Realisierung erwartet. Zudem

bestimmen die Entwickler in dem Daily Scrum selbst, welche Aufgaben sie von der

Liste im Sprint Backlog abarbeiten wollen. Im Sprint Backlog wird der tägliche

Projektfortschritt von den Entwicklern in einem Feature Burndown Chart

festgehalten. Feature Burndown Charts zeigen eine Prognose an, wann alle Backlog

Items im Sprint Backlog abgearbeitet sind. Wird das Projekt früher als geplant fertig,

wählt der Product Owner zusätzlich Backlog Items aus dem Product Backlog aus.

Wird das Projekt später als geplant fertig, werden noch zu erstellende niedrig

Page 69: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

60

priorisierte Backlog Items aus dem Sprint Backlog gestrichen (Ludewig, et al., 2010

S. 231). Während des Sprints, werden in Estimation Meetings mit dem Product

Owner die nächsten Sprints vorbereitet und der Release-Plan aktualisiert. Am Ende

eines Sprints werden die fertiggestellten Funktionen in einem Sprint Review

präsentiert und zeigen den Fortschritt der Produktentwicklung auf Basis von

benutzbarer Software an. Zudem wird ein Sprint Endbericht erstellt, in dem

festgehalten ist, welche Backlog Items aus dem Sprint Backlog realisiert wurden und

welche nicht. Nach dem Sprint Review führen die Teammitglieder eine Sprint

Retroperspektive durch, in der die eigenen Arbeitsprozesse optimiert und hinterfragt

werden sollen (Gloger, 2008 S. 11-14), (Wolf, et al., 2005 S. 133-136), (Ludewig, et

al., 2010 S. 228-232).

Die optimale Teamgröße für ein Scrum-Projekt besteht aus fünf bis zehn Personen,

die wie beim Extreme Programming am selben Ort arbeiten sollten. Scrum stellt, wie

oft dargestellt, keinen Management-Rahmen für Extreme Programming bereit.

Extreme Programming besitzt genug eigene Konkurrenztechniken, wie zum Beispiel

das Planungsspiel und die Standup-Meetings. Allerdings kann Scrum genutzt

werden, wenn Extreme-Programming-Entwickler in ihrem Arbeitsablauf zu sehr

einschränkt werden. Mit Scrum kann sehr schnell Erfolg in Projekten herbeigeführt

werden, die ständig Schwierigkeiten bei der Termintreue haben. In der Literatur wird

dabei von 30 bis 60 Tagen gesprochen (Wolf, et al., 2005 S. 136). Im Gegensatz zu

anderen agilen Prozessmodellen kann deshalb Scrum als Quick Win eingesetzt

werden und ggf. später durch ein anderes ersetzt werden.

2.2.3.8 Einsatz der Prozessmodelle

Jedes Prozessmodell hat seine Schwerpunkte und verfolgt eine bestimmte

Philosophie. Das Phasenmodell bietet sich bei einem sehr kaufmännisch getriebenen

Projekt an, in dem der Vertrag auf Basis von Meilensteinen erfolgt und der

Auftraggeber wenig Erfahrung mit Softwareprojekten besitzt. Das Phasenmodell lebt

von Zwischen- und Endabnahmen. Aus diesem Grund muss vor der Beauftragung

entweder eine hinreichend genaue Anforderung vorliegen oder sie muss als

Projektbestandteil erstellt werden. Das Timeboxing-Modell ist relevant, wenn ein

Projekt komplett inkrementell in einem großen, räumlich getrennten Projektteam

Page 70: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

61

entwickelt werden muss und auf einer stabilen Architektur aufsetzt. Für Software-

oder Hardwareprojekte, die sehr komplex sowie umfangreich sind und in einem sehr

bürokratischen (behördlichen) Umfeld realisiert werden müssen, bietet sich das V-

Modell XT an. Das Gleiche trifft bei Softwareprojekten für RUP im

Unternehmensumfeld zu. RUP ist zwar flexibler als das V-Modell XT, besitzt aber

trotzdem eine gewisse Formalität und Komplexität im Prozessmodell und muss in

Form einer Lizenz erworben werden. In großen Organisationen kann RUP durch die

gute Dokumentation und Vorlagen den Projektbeteiligten Arbeit abnehmen. Feature

Driven Development kann bei stark design-/modellgetriebenen Projekten eingesetzt

werden sowie bei Projekten, in denen ein Produkt realisiert werden soll. Durch die

Aufteilung in Klassenverantwortliche kann Feature Driven Development auch bei

großen Entwicklerteams eingesetzt werden. Bei Extreme Programming und Scrum

muss der Kunde maßgeblich mitspielen und selbst beide Prozessmodelle kennen.

Insgesamt können beide grundsätzlich für jede Art von Projekt empfohlen werden.

Beide kommen ausgezeichnet mit Projekten zurecht, bei denen die Anforderung erst

im Projekt entsteht. Extreme Programming beinhaltet im Gegensatz zu Scrum

erfolgreich eingesetzte Programmierkonzepte, derer sich auch gerne andere

Prozessmodelle bedienen. Welches der beiden eingesetzt werden soll, muss

bestenfalls von der Entwicklungsabteilung entschieden werden. Aus

Projektmanagementsicht sind beide im Kern sehr ähnlich.

2.2.4 Kritische Würdigung

Beim Studieren der Literatur ist besonders aufgefallen, dass die Autoren der

Prozessmodelle keine Varianz der Modelle dem Anwender zugestehen möchten. Um

dies zu erreichen, wird mit Angst gearbeitet. Projekte sind in jedem Fall zum

Scheitern verurteilt, wenn vom gewählten Prozessmodell abgewichen wird.

Trotzdem hat jedes aufgeführte Vorgehens- und Prozessmodell seine Berechtigung.

Das Modell „Code and Fix“ sollte dabei nicht ausgeschlossen werden. Auch wenn es

vom Software-Engineering insgesamt abgelehnt wird, kann es in einem bestimmten

Projektkontext Sinn machen.

Vorgehens- und Prozessmodelle sind abhängig von ihrem Umfeld, in dem sie

eingesetzt werden, und nicht nur vom Projekt, so viel steht fest. Obwohl eigentlich

Page 71: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

62

das Projekt bestimmen müsste, mit welchen Modell es umgesetzt werden sollte.

Allerdings ist dies in Matrix-Projektmanagementorganisationen sehr schwierig

umzusetzen. Ist eine Person in mehreren Projekten aktiv, besitzt diese beim Einsatz

verschiedener Modelle unterschiedliche Rollen in der Organisation und muss im

Extremfall mehrmals täglich den Arbeitsablauf und die Denkweise ändern. Aus

diesem Grund werden sehr wahrscheinlich Prozessmodelle einheitlich auf eine ganze

Projektorganisation angewendet. Die Betrachtung pro Projekt ist damit theoretisch

richtig, praktisch aber kaum durchführbar. Deshalb ist es auch nicht verwunderlich,

dass viele Projekte scheitern.

In der Basisliteratur wurde während der Recherche dieser Arbeit keine verbindliche

Aufstellung gefunden, für welches Projekt welches Vorgehens- und Prozessmodell

sinnvoll ist. Eine einheitliche Auflistung, in der eine Projektklassifizierung mit dem

empfohlenen Modell erfolgt, fehlt. Aus Sicht des Autors unverständlich, da eine

Klassifikation von Projektarten im Industrieumfeld heutzutage möglich ist. Deshalb

wurde auch jeweils am Ende der Kapitel „Vorgehensmodelle“ und „Prozessmodelle“

der mögliche Einsatz nur kurz aufgezeigt, weil es nicht den Kern dieser Arbeit

darstellt.

Besonders zu erwähnen ist das Timeboxing-Modell von Jalote. Nicht wegen des

Parallelisierens der Arbeitspakete, sondern wegen der Mentalität, dass Zeit ein

wesentlicher Hive-Faktor19

eines Prozessmodells sein kann. Alle anderen

Prozessmodelle machen den Prozessablauf unabhängig von der verfügbaren Zeit.

Scrum versucht dies zwar auf Basis des „Feature Burndown Charts“ durch das

Streichen von Backlog Items zu umgehen, verpflichtet sich in letzter Konsequenz

aber nicht darauf.

In der Literatur wird inkrementelles und iteratives Vorgehen von verschiedenen

Autoren nicht klar definiert. Jalote beschreibt zum Beispiel das Timeboxing-Modell

als iterativ, dabei wird Software darin in Inkrementen entwickelt. Iteration und

inkrementelles Entwickeln ist im konkreten Fall nicht immer klar abzugrenzen.

19 Hive-Faktoren sind bei der Spiele-Entwicklung globale Größen, wie zum Beispiel der Faktor Zeit. Hive als

Begriff ist eine Analogie zum kollektiven Bewusstsein (Hive Mind) der Borg.

Page 72: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

63

Dennoch sollte es in der Literatur übergreifend möglich sein, ein gemeinsames

Verständnis für beide Begriffe und das damit beschriebene Vorgehen zu entwickeln.

Insgesamt kann aber festgestellt werden, dass die agile Bewegung einen richtigen

und wichtigen Schritt in die richtige Richtung gemacht hat. Die Modelle lösen sich

von der „industriellen Revolution“ und versuchen, die „essential difficulties“ im

Prozess nicht zu ignorieren, sondern als Fakt zu akzeptieren. Allerdings darf auch

hier nicht vergessen werden, dass die agile Bewegung auch erst durch den

technologischen Fortschritt, was die Werkzeuge betrifft, möglich wurde

(Miniaturisierung, Netzwerke, Versionierungssysteme …).

2.3 Softwarequalität

Software-Engineering befasst sich sowohl mit der Produktqualität als auch mit der

Projektqualität, in der das Produkt hergestellt wird. Ein Prozess kann verschiedenen

Projekten zugrundeliegen. Deshalb wird Prozessqualität oft mit der Projektqualität

gleichgesetzt. Eine hohe Prozessqualität ist keine Garantie für hohe Projektqualität,

sondern schafft nur günstige Voraussetzungen.

Abbildung 13: Bedeutung verschiedener Qualitätsaspekte der Zeit (Ludewig, et al., 2010 S. 67)

Die Produktqualität kann nach Ludewig et al. operationalisiert werden in Gebrauchs-

und Wartungsqualität. Die Gebrauchsqualität beschreibt die Sicht des Benutzers,

während die Wartungsqualität die Sicht des Entwicklers einnimmt. Wartungsqualität

betrifft den Benutzer auch dann, wenn es sich um „Shrinkware“ handelt, weil das

Page 73: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

64

Produkt durch bessere Wartungsfähigkeit langfristig besser wird (Ludewig, et al.,

2010 S. 66-67).

Abbildung 14: Qualitätsbaum von Ludewig, et al. in Anlehnung an Boehm, Brown und Liptow

Für die Taxonomien von Softwarequalität gibt es verschiedene Modelle, die sich im

Wesentlichem bezüglich Detailgrad, Kategorisierung und Sichtweisen unterscheiden.

McCall nennt insgesamt elf Attribute und ordnet sie drei Gruppen zu: Product

Operation (Benutzerungsqualität), Product Revision (Wartungsfähigkeit) und

Product Transition (Tranformationsqualität). Die DIN ISO 9126 ordnet in der

internen-/externen Qualität die Unterattribute einem der sechs Hauptattribute zu und

besitzt vier Attribute für Benutzungsqualität. Dabei betrachtet sie nur die

Produktsicht und nicht die Prozesssicht (Van Vliet, 2008 S. 124-130). Ludewig et al.,

in Anlehnung an Boehm, Brown und Lipow, unterteilen den Qualitätsbegriff in einen

Page 74: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

65

Qualitätsbaum und unterscheiden in Produkt- und Prozessqualität (Ludewig, et al.,

2010 S. 68).

Unabhängig von der Wahl einer bestimmten Taxonomie ist das differenzierte und

priorisierte Betrachten von Qualitätsattributen in einem Softwareprojekt

ausschlaggebend für die Qualität. Durch die konkurrierenden Attribute kann der

Fokus auf ein unwichtiges Attribut andere wichtigere negativ beeinflussen. Für einen

Buttom-up-Ansatz als Mittel zur Priorisierung ist der Qualitätsbaum deshalb am

besten geeignet (Ludewig, et al., 2010 S. 68).

2.3.1 Produktqualität

Produktqualität wird über Softwarequalitätssicherung erreicht. Betrachtet man die

IEEE-Definition zur Softwarequalitätssicherung (IEEE, 1990 S. 60), stellt man fest,

dass sie noch Prozessbewertung beinhaltet. Diese ist allerdings zu einem von der

Qualitätssicherung getrennten Thema geworden (Ludewig, et al., 2010 S. 269).

2.3.1.1 Softwarequalitätssicherung

Die Softwarequalitätssicherung hat das Ziel, das Vertrauen in eine Software zu

erhöhen. Um Vertrauen in ein Produkt zu schaffen, kann man es gemäß der IEEE-

Definition von Softwarequalitätssicherung gut machen oder nachweisen, dass es gut

ist (IEEE, 1990 S. 60). Beides zählt zur Qualitätssicherung.

Page 75: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

66

Abbildung 15: Gliederung der Softwarequalitätssicherung nach Ludewig, et al. (2010)

Softwarequalitätssicherung kann in drei übergeordnete Teilbereiche unterteilt

werden. Erstens: Organisatorische Maßnahmen die darauf abzielen, die Entwicklung

und Qualitätssicherung systematisch durchzuführen. Zweitens: Konstruktive

Maßnahmen, mit denen Softwaremängel durch den Einsatz geeigneter Methoden,

Sprachen und Werkzeuge vermieden werden sollen. Zu diesen Maßnahmen gehört

auch die Verwendung eines geeigneten Prozessmodells. Drittens: Analytische

Maßnahmen, unter die alle Arten der Softwareprüfung fallen. Letzeres wird oft mit

Softwarequalitätssicherung gleichgesetzt und wird in dieser Arbeit näher betrachtet

(Ludewig, et al., 2010 S. 272).

2.3.1.1.1 Prüfungen (analytische Maßnahmen)

Prüfungen sollen feststellen, ob die Software aus Sicht der Anforderungen fehlerfrei

ist und keinen Mangel aufweist. Dabei wird eine systematische Suche nach Fehler

und Mängeln in der Software durchgeführt. Ein Fehler liegt vor, wenn die Software

eine Anforderung, die an das Produkt gestellt wird, nicht erfüllt. Im Gegensatz dazu

liegt ein Mangel vor, wenn die Anforderung den beabsichtigten oder festgelegten

Gebrauch nicht erfüllt. Unterscheidung zwischen Fehler und Mangel einer Software

liegt demnach in der Perspektive. Wenn ein Fehler die Verwendung der Software

nicht beeinträchtigt, liegt kein Mangel vor (DIN EN ISO 8402: 08.95). Prüfungen

Page 76: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

67

müssen zudem im Arbeitsablauf von der Korrektur getrennt werden. Beim Finden

eines Fehlers wird dabei die Prüfung nicht sofort abgebrochen, um diesen zu

beheben. Die Korrektur der Fehler erfolgt also erst, nachdem die Prüfung der

Software vollständig abgeschlossen wurde (Ludewig, et al., 2010 S. 280).

Boehm unterscheidet zudem zwei Arten von Prüfungen. Erstens: Verifikation

kontrolliert, ob ein Verfahrensschritt richtig ausgeführt wurde. Dies trifft

insbesondere dann zu, wenn über formale Techniken bewiesen wird, dass ein

Programm die Spezifikation korrekt implementiert hat. Zweitens: Bei der

Validierung wird überprüft, ob das Ergebnis den Erwartungen des Kunden

entspricht. Die Validierung ist allerdings erst dann möglich, wenn ein Teilprodukt

oder Prototyp fertig ist, vorher kann nur verifiziert werden (Boehm, 1979 S. 3).

Die Möglichkeiten, eine Software zu prüfen, kann entweder mit oder ohne Hilfe

eines Rechners erfolgen. Die Prüfung ohne Rechner wird auch als nicht mechanische

Prüfung bezeichnet. Dabei werden die Arbeitsergebnisse von einem Experten

geprüft. Verfahren, die in Praxis eingesetzt werden, sind Durchsicht, Inspektion

(Review) oder Walktrough. Nicht mechanische Prüfungen sind der einfachste und

billigste Weg, Prüfverfahren einzuführen, und helfen dem Team, Wissen zu teilen

und ein gemeinsames Qualitätsverständnis zu erhalten. Die Prüfung mit Rechner

wird auch als mechanische Prüfung bezeichnet. Dazu zählen alle Testverfahren

(ausführen) sowie die statische Analyse (Ludewig, et al., 2010 S. 279-280).

Liggesmeyer (Liggesmeyer, 2009) unterteilt insgesamt in statische und dynamische

Prüfverfahren. Die statischen entsprechen der nicht mechanischen Prüfung, die

dynamischen der mechanischen Prüfung von Ludewig et al. In dieser Arbeit wird die

die Sichtweise von Ludewig & Lichter vertreten, weil sie besser operationalisiert ist.

Die dynamsichen Tests sind bei Liggesmeyer jedoch umfangreicher und detaillierter

dargestellt.

Page 77: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

68

2.3.1.1.2 Nicht mechanische Prüfungen

Es gibt eine Vielzahl von Verfahren um Software zu inspizieren. Aus diesem Grund

werden hier die in der Praxis oft eingesetzten fünf Softwareinspektionen dargestellt

(Ludewig, et al., 2010 S. 281-294).

Bei der Durchsicht/Schreibtischtest führt der Entwickler die Prüfung seines

eigenen Quellcodes durch. Die Durchsicht wird durch Refactoring begünstigt.

Prinzipiell sollte jeder Autor einen Prüfling erst dann weitergeben, wenn er ihn nicht

selbst kritisch betrachtet hat.

Der Entwickler gibt bei der Stellungnahme den Quellcode einem oder mehreren

Kollegen zum Lesen und wertet deren Feedback aus, um den Prüfling zu

überarbeiten. Bei dieser Prüfung ist der Organisationsaufwand gering, erfordert aber,

dass der Entwickler die Fähigkeit eines Moderators besitzt und die Anmerkungen der

Gutachter nicht ignoriert. Paar-Programmierung nutzt das Prinzip der Stellungnahme

direkt bei der Entwicklung.

Beim Structured Walkthrough stellt der Entwickler sein Arbeitsergebnis einer

kleinen Gruppe von bis zu fünf Personen vor und führt sie durch das Dokument. Die

Gutachter versuchen, Probleme zu identifizieren, indem sie spontan oder vorbereitete

Fragen stellen.

Beim Review wird Quellcode, ein Prototyp oder ein Produkt einer bestimmten

Anzahl von Gutachtern vorgestellt. Die Gutachter können Manager, Kunden,

Benutzer oder Dritte sein. Während der Reviewsitzungen kann der Prüfling von den

Gutachtern kommentiert werden oder es wird auf mögliche Fehler hingewiesen. Je

nach Ausgang einer Reviewsitzung wird entscheiden, ob die nächste Phase oder

Iteration angestoßen wird. Reviews können in Anforderungsreview, vorläufiger

Entwurfsreview, kritischer Entwurfsreview, technischer Review und

Abnahmetestreview unterschieden werden. Im Gegensatz zum Structured

Walkthrough ist die Personenanzahl des Teams im Review umfangreicher, die

beteiligten Akteure definiert und der Ablauf formalisiert.

Page 78: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

69

Die „Design and Code Inspection“ ist identisch mit dem technischen Review und

unterscheidet sich im Wesentlichen darin, dass die Gutachter dem Moderator ihre

Notizen vor der Sitzung geben, dass es in der Sitzung einen Vorleser gibt, der den

Prüfling vorließt, sowie anschließend die Befunde vorgelesen werden und der

Prüfungsprozess mit einer Einführungssitzung beginnt. Die Design and Code

Inspection gilt als die umfangreichte Review-Methode.

2.3.1.1.3 Mechanische Prüfungen

Bei der mechanischen Prüfung werden in dieser Arbeit nur die dynamischen

Maßnahmen betrachtet, der Programmtest. Diese Arbeit hat nur den Anspruch, einen

Überblick zu dem Thema zu gewähren. Eine ausführliche Betrachtung findet man in

Spillner und Linz (2005) oder in Liggesmeyer (2009).

2.3.1.1.3.1 Begriff und Abgrenzung des Tests

Die Definition, was Testen bedeutet, kann je nach Perspektive unterschiedlich

ausgelegt werden 20

. In dieser Arbeit wird Myers Definition vertreten: „Testen ist die

Ausführung eines Programms mit dem Ziel Fehler zu entdecken.“ (Myers, 2004 S. 5).

Wobei hierzu ergänzt werden muss, dass die Ausführung des Programms auch

mehrfach erfolgen kann. Testen ist demnach nicht erstens die Inspektion eines

Programms, zweitens die Vorführung eines Programms, drittens die Analyse eines

Programms durch Softwarewerkzeuge und viertens die Untersuchung des

Programms mit einem Debugger. Bei einem systematischen Test müssen die

Randbedingungen definiert oder erfasst sein, die Eingaben systematisch ausgewählt

worden sein und die Ergebnisse dokumentiert und nach Kriterien beurteilt werden,

die vor dem Test festgelegt wurden. Es liegt ein Fehler vor, wenn beim Soll-Ist-

Vergleich eine Abweichung festgestellt wurde. Ist ein Fehler entdeckt worden, so ist

ein Test erfolgreich. Ist keiner entdeckt worden, dann war der Test erfolglos. Die

Situation des Einsatzes sollte beim Test so simuliert werden, dass ein erfolgreicher

Test auch auf einen erfolgreichen Einsatz schließt (Ludewig, et al., 2010 S. 480-481).

20 Vergleiche hierzu Myers Herleitung zu seiner Definition. (Myers, 2004 S. 4-5)

Page 79: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

70

2.3.1.1.3.2 Klassifikationen von Tests

Eine Klassifikation von Test kann einmal im Allgemeinen und im speziellen

erfolgen. Bei der allgemeinen Klassifikation kann in zwei grundsätzliche Richtungen

unterschieden werden, erstens nach dem Umfang der Angemessenheit und zweitens

nach Herkunft der Informationen. Beim Umfang der Angemessenheit kann in drei

Typen unterscheiden werden. Erstens: Das Coverage-Based Testing spezifiziert, in

welchen Umfang das Produkt getestet werden soll. Zweitens: Beim Fault-Based

Testing wird gezeigt, dass durch Testdaten vordefinierte Fehler nicht mehr

auftauchen. Und drittens: Beim Error-Based Testing wird nach typischen

fehleranfälligen Punkten gesucht (Van Vliet, 2008 S. 409). Bei Herkunft der

Information unterscheidet man in zwei Arten. Erstens: Wenn die Testfälle anhand

der Spezifikation ausgewählt werden, spricht man von einem Black-Box-Test oder

auch Funktionstests. Bei einem Black-Box-Test wird das Programm so betrachtet, als

ob man nichts über seine innere Beschaffenheit wüsste, sondern es wird nur so

betrachtet, wie es die Spezifikation vorgibt. Zweitens: Werden innere Strukturen

oder Aufzeichnungen von früheren Programmabläufen bei der Wahl der Testfälle

berücksichtigt, spricht man von einem Glass-Box-Test oder Strukturtest. Dabei wird

versucht, auf den Quellcode bezogene Deckungen zu erreichen (Coverage-Based

Testing), wie zum Beispiel, dass 80 % der Anweisungen im Programm mindestens

einmal ausgeführt wurden (Van Vliet, 2008 S. 409), (Ludewig, et al., 2010 S. 489).

Test können neben den beiden allgemeinen übergeordneten Arten im Speziellen in

vier Klassifikationen eingeteilt werden: Aufwand, Komplexität, Eigenschaften und

Rollen.

Die Tests nach Aufwand für die Vorbereitung und Archivierung lassen sich in drei

Typen einteilen. Erstens: Der Laufversuch, bei dem der Entwickler versucht, das

Programm zu übersetzten, zu binden, zu starten und in ganzer Länge auszuführen.

Zweitens: Beim Wegwerftest werden vom Gutachter spontan nach kurzer

Überlegung Daten eingegeben und das Resultat überprüft. Drittens: Der bereits

beschriebene systematische Test.

Betrachtet man die Komplexität des Prüflings kann in vier Testarten unterschieden

werden. Erstens: Der Einzeltest, auch als „Unit Test“ bezeichnet, bei dem einzelne

Page 80: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

71

überschaubare Programmeinheiten getestet werden (Funktionen, Unterprogramme

oder Klassen). Zweitens: Beim Modultest werden mehrere

Programmeinheiten/Komponenten getestet. Drittens: Im Integrationstest wird

geprüft, ob Fehler in den Schnittstellen und der Kommunikation zwischen

Programmeinheiten vorliegen. Viertens: Der Systemtest, in dem

Kommunikationsprobleme zwischen Subsystemen aufgedeckt werden können.

Zudem kann geprüft werden, ob alle Funktionalitäten implementiert wurden.

Die Klassifikation nach der getesteten Eigenschaft kann in sechs Testtypen

unterschienden werden. Erstens: Beim Funktionstest werden die Funktionen auf

Basis der Anforderung/Spezifikation überprüft. Zweitens: Beim Installationstest

muss die Software auf Basis der Anleitungen und gemäß der beschriebenen

Systemvoraussetzungen installiert und in Betrieb genommen werden können.

Drittens: Der Wiederinbetriebnahmetest überprüft, ob nach unterbrochenem Betrieb

die Software wieder in Betrieb genommen werden kann. Viertens: Beim

Verfügbarkeitstest wird geprüft, ob die Software ohne Störungen über eine

festgelegte Dauer läuft. Fünftest: Beim Last- und Stresstest wird getestet, ob das

System sich unter hoher, unter höchster Belastung oder Überlastung so verhält, wie

es gefordert war. Sechstens: Der Regressionstest prüft, ob ein Programm

nach/aufgrund einer Korrektur oder Veränderung keine neuen Fehler enthält.

Betrachtet man den Test nach den beteiligten Rollen, wird erstens in Alpha- und

Beta Test unterschieden. Beim Alpha-Test hat das Produkt noch wesentliche Mängel

und wird beim Hersteller getestet. Im Gegensatz dazu steht der Beta-Test, der

speziellen Kunden zum Testen zur Verfügung gestellt wird. Zweites: Beim

Akzeptanz oder Abnahmetest wird eine Vorführung der Software beim Kunden

durchgeführt, bei der geprüft wird, ob alle Anforderungen an die Software erfüllt

wurden (Ludewig, et al., 2010 S. 489-492).

2.3.1.1.4 Vor- und Nachteile von Prüfungen

Prüfungen im Allgemeinen liefern per se eine einfache Anforderung, was die

Qualitätskriterien eines Produkts betrifft. Prüfungen erzwingen deshalb, bei einer

unvollständigen Spezifikation, Entwicklern konkrete Qualitätsanforderungen zu

Page 81: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

72

benennen. Darüber hinaus erhält der Entwickler ein konstruktives Feedback zur

Qualität seiner Arbeit. Durch Prüfungen können zudem gute und schlechte

Prüflingen identifiziert werden und ermöglichen damit das Verwerfen von

aussichtlosen Varianten oder Lösungswegen. Tests sind zudem reproduzierbar und

objektiv und hängen nicht von der Qualifikation oder Tagesform des jeweiligen

Gutachters ab. Aufgrund der Reproduzierbarkeit von Tests können diese auch für die

Qualitätssicherung in der Wartung eingesetzt werden. Im Gegensatz dazu können

Reviews und Tests keinen Korrektheitsnachweis der Software erbringen und zeigen

in der Regel nicht die Fehlerursache (Ludewig, et al., 2010 S. 274, 488-489).

2.3.2 Prozessqualität

Die Betrachtung der Prozessqualität wird in dieser Arbeit nur der Vollständigkeit

halber aufgenommen. Wichtig ist, dass der Entwicklungsprozess von Software nicht

vergleichbar mit dem Fertigungsprozess der Industrie ist. Ein Fertigungsprozess hat

unmittelbare Auswirkungen auf das Produkt. Ein Softwareprodukt kann jedoch ohne

einen Entwicklungsprozess in einem Projekt entwickelt werden. Ein perfekter

Prozess muss deshalb keine Garantie für hohe Softwarequalität sein (Ludewig, et al.,

2010 S. 135-136). Vorgestellt werden CMMI und SPICE. Bootstrap wird in dieser

Arbeit nicht betrachtet, weil es in Spice aufgegangen ist (Liggesmeyer, 2009 S. 26).

2.3.2.1 CMMI

1991 hat das Software Engineering Institute (SEI) an der Carnegie Mellon University

das Capability Maturity Model (CMM) vorgestellt. CMM bewertet anhand eines Best

Practice Modells die Softwareentwicklungsprozesse eines Unternehmens. CMM ist

ein Kriterienkatalog, der wie eine Checkliste aufgebaut ist und fünf Stufen beinhaltet.

Für die Eintrittsstufe gibt es keine Kriterien. Damit wird jedes Unternehmen, das

nicht die Kriterien für Stufe 2 erfüllt, auf die Eintrittsstufe zurückgestuft. Ein

Unternehmen, das alle Kriterien erfüllt, erreicht die höchste Stufe fünf. Bei CMM

werden in der Prozessbewertung keine technischen Aspekte und keine Kompetenzen

von Mitarbeitern berücksichtigt. CMMI ist aus der Zusammenlegung von CMM-

Varianten entstanden (Hardware, Systemprojekte) und im August 2006 in der

Version 1.2 veröffentlicht worden. Es ist modular aufgebaut, in sogenannten

Page 82: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

73

„Konstellationen“. Die Version 1.2 beschreibt drei Konstellationen:

Produktentwicklung (CMMI-DEV), Akquisition (CMMI-ACQ) und

Dienstleistungen (CMMI-SVC). CMMI-DEV in Version 1.2 unterscheidet 22

Prozessgebiete, die in die vier Gruppen21

aufgeteilt werden. Jedes Prozessgebiet

beschreibt das zu erreichende Ziel und die Aufgaben, diese zu erreichen. Bei den

Zielen werden zum einen in spezifische auf das Prozessgebiet bezogene und zum

anderen generische Ziele, die jedes Prozessgebiet betreffen, unterschieden. Inwieweit

eine Organisation nach einem (abgeschlossenen) Projekt die generischen Ziele

erreicht hat, wird anhand eines Reifegrades gemessen. CMMI bietet dazu zwei

Varianten an, die stufenförmige und die kontinuierliche. Die stufenförmige stammt

aus CMM und besitzt fünf Reifegradstufen22

. Bis auf die erste Stufe werden alle

Stufen durch Prozessgebiete beschrieben und sind einem Reifegrad zugeordnet. Um

den Reifegrad einer Stufe zu erreichen, muss sie alle Anforderungen der Stufe und

der darunterliegenden erfüllen. Dabei können Schwächen eines Prozessgebiets nicht

durch andere Stärken ausgeglichen werden. Bei der kontinuierlichen Variante wird

jedes Prozessgebiet einzeln betrachtet und bewertet. Dies wird erreicht, indem fünf23

generische Ziele pro Prozessgebiet festgelegt werden, die aufeinander aufbauen und

einen Fähigkeitsgrad pro Prozessgebiet definieren. Das Ergebnis ist ein kammartiges

Prozessprofil (Liggesmeyer, 2009 S. 20-23), (Ludewig, et al., 2010 S. 235-250).

2.3.2.2 Spice

Basierend auf Erfahrungen mit CMM, Bootstrap und anderen Ansätzen wurde durch

ISO auf internationaler Ebene das Bewertungsverfahren SPICE (Software Process

Improvement and Capability dEtermination) zu Bewertung und Verbesserung der

Softwareprozesse einer Organisation entwickelt. SPICE definiert wie CMMI den

Prozess durch Fähigkeitsgrade mit sechs Stufen.24

Die Bewertung wird in

Prozessreferenzmodellen festgelegt, die auch branchenspezifisch sein können. Das

21 Project Management, Engineering, Process Management und Support

22 ML1: Initial, ML2: Managed, ML3: Defined, ML4: Quantitatively Managed, ML5 Optimized

23 CL0: Incomplete, CL1: Performed, CL2 Managed, CL3: Defined, CL4 Quantitatively Managed, CL5

Optimzing. CL0 wird nicht mitgezählt, weil es keine generischen Ziele enthält.

24 Level 0: Incomplete, Level 1: Performed, Level 2: Managed, Level 3: Established, Level 4: Predictable,

Level 5: Optimizing

Page 83: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

74

Referenzmodell besteht aus drei Prozesskategorien (Primary-, Organisational- und

Supporting Lifecycle Processes) mit neun Gruppen die 49 Prozesse zur Erstellung

und Akquise von Softwareprodukten und Services beinhalten (Liggesmeyer, 2009 S.

24). Aus dem Prozessreferenzmodell können einzelne Prozesse für eine

Begutachtung ausgewählt werden, woraus das Prozessbegutachtungsmodell entsteht.

Jeder Prozess wird einzeln über Prozessattribute bewertet, die sich je nach

Fähigkeitsgrad (1 bis 5) unterscheiden. SPICE besitzt darüber hinaus verschiedene

Begutachtungsarten und -durchführungen und enthält ein generisches Modell zur

Prozessbewertung (Liggesmeyer, 2009 S. 23-26), (Ludewig, et al., 2010 S. 250-255).

2.3.3 Kritische Würdigung

Die Gewichtung der Qualitätsmerkmale eines Softwareprodukts ist durch die

negative Korrelation der Taxonomien zueinander das Produktdesign der Informatik.

Qualitätsmerkmale sollten deshalb in einem Projekt zu Beginn operationalisiert,

gewichtet und definiert werden. Der daraus entstehende Qualitätsmix bildet

anschließend den Rahmen für das Softwareprodukt. Das Besondere daran ist, dass

Benutzer der Software diesen Mix später im Produkt als Produktdesign wahrnehmen.

Softwarequalität sollte deshalb nicht nur während des Projekts erfolgen, sondern

schon vor dem Start des Projekts.

Nicht mechanische Prüfungen in Form von Inspektionen sind wichtig für die

Codequalität und sollten deshalb permanent im Projekt angewendet werden.

Inspektionen erfordern allerdings eine offene Kommunikationskultur in dem Team.

Ansonsten können gerade Code Reviews sich insgesamt negativ auf den Teamgeist

auswirken. Bei Code Reviews kommt es zudem auf das Vertragsverhältnis an, weil

diese bei Auftragsarbeit oft als Druckmittel benutzt werden, um den Preis

nachträglich zu reduzieren. Die mechanischen Prüfungen, insbesondere das Testen,

können sehr umfangreich sein und bis zur Perfektion getrieben werden. Ob deshalb

unbedingt ein absolut fehlerfreies Produkt „in time, in budget“ entsteht ist fraglich.

Der Mix von Prüfungen sollte deshalb immer in Abhängigkeit mit den

Rahmenbedingungen, die das Projekt vorgibt, erfolgen.

Page 84: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

75

Prozessqualität sollte insgesamt in einem Projekt nicht überbewertet werden. Die

Formalität, in der die Fähigkeitsgrade festgestellt werden, lassen vermuten, dass der

Grad der Prozessqualität lediglich ein Ausschreibungskriterium ist, ohne dem Projekt

an sich wirklich zu helfen.

3 Duct Tape Programmer

Peter Seibel veröffentlichte das Buch „Coders at Work“ (Seibel, 2009) im September

2009. In dem Buch wurden 15 Interviews mit anerkannten und sehr einflussreichen

Entwickler abgedruckt. Dabei wurden 80 Stunden Material aus Interviews im

Frage/Antwort-Stil verdichtet zusammengefasst. Interview-Partner waren Entwickler

wie Donald Knuth, Jamie Zawinski, Brendon Eich, Ken Thompson, Peter Norwig

oder Brad Fritzpatrick. Der Älteste war dabei Donald Knuth (geboren 1938) und der

Jüngste Brad Fritzpatrick (geboren 1980).

Peter Seibel war allerdings nicht der Erste, der in diesem Stil ein Buch verfasste.

Susan Lammers veröffentlichte bereits 1986 das Buch „Programmers at Work“

(Lammers, 1986). Das Buch unterscheidet sich in zwei wesentlichen Punkten von

„Coders at Work“: Erstens werden in ihren Interviews 19 Helden der

Microcomputer und PC-Revolution wie Bill Gates (Microsoft), John Warnock

(Adobe), Gary Kildall (CP/M), Wayne Ratcliff (dBase) oder Andy Herzfeld (MAC

OS) interviewt – viele von ihnen wurde Entrepreneure. Zweitens: Das Buch zeigt

pro Interviewer eine Seite Beispielcode oder Zeichnungen.

Im März 2009 ist zudem das Buch „Masterminds of Programming: Conversations

with the Creators of Major Programming Languages“ (Biancuzzi, et al., 2009)

erschienen, das ausschließlich Interviews von den Erschaffer bekannter

Programmiersprachen wie Bjarne Stroustrup (C++), James Gosling (Java) oder Brad

Cox und Tom Love (Objective-C) beinhaltet.

Page 85: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

76

3.1 Begriffsherkunft

Der Begriff des „Duct Tape Programmers“ wurde von Joel Spolsky25

geprägt. In

seinem Weblog hat Spolsky einen Artikel zum ersten Interview mit Jamie Zawinski

in „Coders at Work“ verfasst (Spolsky, 2009). In dem Artikel nimmt er Bezug auf

Aussagen von Zawinskis Arbeiten am Netscape Browser (Version 2) und leitet

daraus einen bestimmten Typus von Programmierer ab. Er charakterisiert ihn als

pragmatisch, wenn es darum geht, ein lauffähiges Produkt zu entwickeln. Die

Mentalität entspricht Richard Gabriels „Worse is Better“ (Gabriel). Er favorisiert

dabei die 50 %-Lösung, mit der Probleme beim Kunden gelöst werden, gegenüber

einer 99 %-Lösung, die permanent optimiert wird und dadurch das Labor nicht

verlässt – sein Motto: „Shipping is a feature, your product must have it“.

Komplizierte, designgetriebene Programmiertechniken oder -sprachen werden von

ihm vermieden, es wird immer die einfachste Lösung genutzt. Dies gilt auch für die

testgetriebe Entwicklung. Die Fehlerquote wird von ihm durch den Einsatz von

einfachen und beherrschbaren Werkzeugen und Programmiersprachen gering

gehalten. Die dadurch gewonnene Zeit wird von ihm in die Fertigstellung des

Produkts investiert.

Spolsky beschreibt diese Mentalität eines Programmierers durch die Metapher eines

„Duct Tape“, ein Klebeband, das dem Militär, im Motorsport, der Bühnentechnik

oder Bastlern zur provisorischen schnellen Reparatur dient. Er wählte deshalb „The

Duct Tape Programmer“ als Titel seines Artikels und als Beschreibung für den

Charakter eines solchen Programmierers.

Der kontroverse Artikel von Joel Spolsky löste in der Netzgemeinde anschließend

eine Diskussion über „software quality versus delivery times“ aus.

Führend in der Diskussion mit 276 Kommentaren war der Blog Post (Martin, 2009)

von Robert Martin (CEO von Object Mentor). Er stimmt Spolskys Artikel

grundsätzlich zu, rät aber zur differenzierter Betrachtung in Bezug auf „Over-

Engineering“. Seine Kernthese des Artikels ist: „I want you to ship, but I don‘t want

you to ship shit.” (Martin, 2009). Rob Martin relativiert zudem die extreme Sicht

25 Joel Spolsky ist CEO von Fog Creek Software und Mitgründer von Stackoverflow.

Page 86: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

77

Zawinskis: „The programmer who spends weeks building the perfect structure does

just as much harm to the project as the programmer who hacks a bunch of crap

together.“ (Martin, 2009). Dennoch sieht er es als notwendig an, das „Duct Tape“ in

Maßen einzusetzen: „In short, it‘s bad to use too much duct tape. But I‘d be

suspicious if I didn‘t see some duct tape!“ (Martin, 2009). Zawinskis Aussage, dass

„Unit Tests“ die Entwicklung verlangsamen, steht Martin kritisch gegenüber. Seiner

Meinung nach beschleunigen sie den Entwicklungsprozess, allerdings ohne Beispiele

zu nennen. Seine zentrale Aussage hierzu ist: „Programmers who say they don‘t have

time to write tests are living in the stone age.“ (Martin, 2009). Jeffrey Palermo (CTO

Headspring Systems) hingegen betrachtet in der Diskussion die „Duct Tape“-

Mentalität aus der Projekt-Perspektive und vergleicht es mit einem Projekt für einen

Wahlkampfkandidaten (Palermo, 2009). Erstens: Wirf die Software weg, wenn der

Kandidat verliert! Zweitens: Gewinnt der Kandidat, greift Brooks Regel „Plan to

throw one away, you have to do it anyway―.

James Zawinski distanzierte sich in seinen Blog von Spolskys Duct Tape

Programmer (Zawinski, 2009). Gleichzeitig mahnt er an, dass technische Aussagen

im Kontext der Zeit betrachtet werden müssen. Dies betrifft insbesondere seine

Aussagen zu technologischen Entscheidungen nicht auf C++, Threads und Templates

zu setzen. Desweiteren führte er auf, dass sein Quellcode erst in dem Mozilla-Projekt

einen kompletten Rewrite erhalten hat und dass die Code-Basis von Netscape 4 der

Rewrite des niemals veröffentlichten C++-Collabra-Codes für Netscape 3 war. Damit

beseitigte er die Vermutungen der Netzgemeinde, dass Netscape 4 so fehlerhaft war,

weil es auf Zawinskis „Duct Tape“-Code aufbaute.

Peter Seibel nahm in seinem Blog ebenfalls Stellung. Einmal zu den Netscape-

Rewrites (Seibel, 2009) und zum anderen zu Robert Martins nicht belegter

Behauptung, dass Unit Tests den Entwicklungsprozess beschleunigen (Seibel, 2009).

Die letzte Aussage überprüfte er aufgrund der Interviews. Dabei stellte er Folgendes

fest: Erstens, dass im ersten Schritt Test Driven Development die Entwicklung

verlangsamt (Zawinski, Knuth). Zweitens, dass Unit Tests langfristig den

Entwicklungsprozess beschleunigen (Fritzpatrick). Drittens, dass Test Driven

Page 87: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

78

Development kein Ersatz für eine technische Spezifikation ist (Bloch). Viertens,

dass ein Unit Test keine Hilfe bietet, das eigentliche Problem zu lösen (Norvig).

3.2 Besondere Problemstellung

Joel Spolsky betrachtet in seinem Artikel „The Duct Tape Progammer“ nur Jamie

Zawinskis Aussagen aus dem Buch „Coders at Work“. Der abgeleitete Charakter in

dem Artikel des „Duct Tape Programmers“ betrachtet demnach nicht alle Interview-

Partner. Deshalb ist es notwendig, alle weiteren Interviews auf Basis von Joel

Spolskys beschriebenen Charakter und Mentalität des „Duct Tape Programmers“ zu

untersuchen26

.

3.3 Vorgehen

Das Vorgehen kann in drei Schritte unterteilt werden. Erstens: Feststellen von

Gemeinsamkeiten in den Fragestellungen bei allen 15 Interview-Partnern und

Interpretation, worauf sie abzielen. Dies soll dem Leser helfen, welche Fragen über

alle Interviews hinweg gestellt wurden. Zweitens: Finden von Gemeinsamkeiten in

den Aussagen der Interview-Partner über alle gestellten Fragen hinweg, die auf eine

Charakteristik des „Duct Tape Programmers“ nach Joel Spolsky hinweisen.

Drittens: Kategorisieren der Charakteristiken in Themenkomplexe, die mit Zitaten

belegt werden, aus denen anschließend eine Mentalität abgeleitet werden kann.

Nicht betrachtet werden Meinungen, die sich auf die Sprachwahl der

Programmiersprachen beziehen, weil sie in erster Linie eine persönliche Meinung

darstellen. In diesem Zusammenhang argumentiert Bloch auf Seibels Frage „Why do

people get so religious about their computer languages?“ – Blochs Antwort: „[…]

Yes, you want to go to a bar that serves good drinks, but that‘s not the most

important thing. It‘s who hangs out there and what they talk about. And that‘s the

way you choose computer languages. Over time the community builds up around the

language – not only the people, but the software artifacts: tools, libraries, and so

forth.“ (Seibel, 2009 S. 2190)

26 Dies impliziert nicht, dass der anschließend festgestellte Charakter aus der Untersuchung repräsentativ ist.

Page 88: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

79

3.4 Analyse der Fragestellungen in „Coders at Work―

In den Interviews von Peter Seibel lässt sich ein Raster in der Reihenfolge und Inhalt

der von ihm gestellten Fragen erkennen. Es gibt zudem eine Minimalausprägung von

Fragen in jedem einzelnen Interview. Die nachfolgenden Fragen von Seibel weichen

in den einzelnen Interviews im Wortlaut ab, sind aber sinngemäß identisch.

Seibel beginnt alle Interviews mit den Eröffnungsfragen „How did you become a

programmer?― oder „How did you learn to program?― und „Do you remember the

first interesting program you wrote?―. Diese Fragen werden für den

Gesprächseinstieg genutzt und sollen den Interview-Partner in einen zeitlichen

Kontext setzen, in denen sie keine bekannten Programmier-Persönlichkeiten waren.

Anschließend werden die Interviews in zwei übergeordnete Themenblöcke unterteilt.

Der erste bezieht sich auf das Handwerk des Programmierens. Der zweite erörtert

Erfahrungen und persönliche Meinungen in der Funktion eines Softwareentwicklers.

Der erste Themenblock startet mit Fragen zum Softwaredesign. „How do you design

software?― und erfragt, ob der jeweilige Interview-Partner ein favorisiertes

Vorgehensmodell bei der Entwicklung besitzt und wie er in der Vergangenheit bei

der Entwicklung vorgegangen ist. Als grobe Richtung gibt Peter Seibel dabei „Top-

Down“, „Bottom-Up“ oder „Middle-Out“ vor. Die Überleitung zum Vorgehen und

Erlebnissen mit Softwarefehlern, die entweder selbst oder von anderen verschuldet

wurden, erfolgt mit „What‘s the worst bug you ever track down?“. Das Vorgehen bei

der Fehlersuche wird mit „What are your debugging tools? Debuggers? Printlns?

Something else?― erfragt. „Do you ever do any pair programming?―, erfragt zum

einen inwieweit Methoden zur Fehlerreduzierung innerhalb des

Entwicklungsprozesses von den Interview-Partnern genutzt werden, und zum

anderen, wie diese zu agilen Konzepten stehen. Die Frage „What about code

ownership? It is important for people to own code individually or is it better for a

team to share ownership?“ soll die persönliche Meinung und Projekterfahrung zu der

Thematik erörtern. Anschließend wird Bezug auf die Themen „Clean Code“ und

„Literal Programming“ genommen. Hierzu werden zwei Fragen gestellt, die jeweils

eine der zwei möglichen Perspektive betrachten. Die erste betrachtet das Lesen des

Quellcodes von Dritten mit „When you read a big piece of code, how do you get into

Page 89: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

80

it? Do you read code you‘re not working on?“ und die zweite betrifft das Verfassen

des eigenen Quellcodes für Dritte mit „Have you ever done literate programming a

la Knuth?“.

Der zweite Themenblock beginnt mit der Frage „How do you recognize a great

programmer?“ aus der Perspektive, wenn der Interview-Partner einen Entwickler

einstellen soll. Die Frage wird vertieft mit „Google has a bit of a reputation, as

Microsoft also does, of interviewers using puzzle questions?“ und soll herausfinden,

ob die Interview-Partner selbst Einstellungstest praktiziert und welche Erfahrungen

sie damit gemacht haben. Erörtert wird Dijkstras These, dass Informatik (Computer

Science) Teil der Mathematik ist, mit der Frage „How much mathematics do you

think is required to be a competent programmer?“. Die Frage soll zudem Dijkstras

These beim Interview-Partner abfragen, ob Studenten im Studium erst theoretische

Grundlagen erlernen sollten, bevor sie an den Computer herangeführt werden.

Welche Autoren und Bücher die Interview-Partner gelesen haben, wird mit „Are

there any books that every programmer should read?“ erfragt. Seibel zielt

insbesondere darauf ab, ob die Entwickler „The Art of Computer Programming“ von

Donald Knuth gelesen und ihrer Meinung nach empfehlen können. Mit „Do you still

enjoy programming?“ wird erfragt, ob die Interview-Partner immer noch

Begeisterung für das Entwickeln empfinden. Mit „Do you consider yourself a

scientist, an engineer, an artist, or a craftsman?“ stellt er zum Schluss die

entscheidende Frage, wie sie sich selbst und in Bezug auf ihre Arbeit sehen.

3.4.1 Interviewfragen mit Relevanz für das Software-Engineering

Aus dem Standard-Fragenkatalog von Peter Seibel können vier Fragen als relevant

festgestellt werden, die konkrete Themen des Software-Engineerings erfragen.

Erstens: „How do you design software?“, was neue oder bestehende

Vorgehensmodelle aufzeigen kann. Zweitens: „Do you ever do any pair

programming?“ kann als Experten-Meinung zu der Methodik dienen. Drittens:

„What about code ownership? It is important for people to own code individually or

is it better for a team to share ownership?“ besitzt als Experten-Meinung ebenfalls

Relevanz. Viertens: „Do you consider yourself a scientist, an engineer, an artist, or

a craftsman?“ kann einen Einblick gewähren, aus welchem Blickwinkel

Page 90: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

81

ausgezeichnete Programmierer ihren Beruf sehen. Die Auswertung der

Fragestellungen erfolgt im Kapitel 4.1 (S. 110).

3.5 Charakteristiken

Die Feststellung der Charakteristiken erfolgte nach dem „Bottom Up“-Verfahren. Es

wurden die einzelnen Interviews aus der Sichtweise von Joels Spolskys Duct Tape

Programmer gelesen und Zitate extrahiert. Anschließend wurde diese in folgende

Hauptkategorien unterteilt: Thesen, Haltung, Methoden, Vorgehensweise, Ziele und

Projekterfolg.27

Keiner der Interview-Partner besitzt alle Charakteristiken. Zitate sind deshalb in

großen Teilen nur von einer Person vertreten. Die nachfolgenden

Charaktereigenschaften können deshalb als Maximalausprägung verstanden werden.

3.5.1 Thesen

Als Thesen werden die Aussagen aus den Interviews verstanden, die wesentlichen

Einfluss auf den ganzen Softwareentwicklungsprozess besitzen, ihn maßgeblich

beeinflussen und zu Spolskys Bild des Duct Tape Programmer passen. Diese sind

wissenschaftlich nicht belegbar und werden lediglich aus den Erfahrungen einzelner

Interview-Partner abgeleitet. Mit einbezogen wurden die Inhalte der Netzdiskussion

zu Spolskys Ursprungsartikel. Die Thesen sind priorisiert, in der Reihenfolge ihrer

Erwähnung.

3.5.1.1 These 1: Shipping is a feature, your product must have it

In den Interviews vertritt diese These Jamie Zawinski eindeutig und wird deshalb

auch vom Joel Spolsky in seinem Artikel plakativ aufgegriffen. Zawinskis Zitat:

„Yeah,‖ he says, ―At the end of the day, ship the fucking thing! It‘s great to rewrite

your code and make it cleaner and by the third time it‘ll actually be pretty. But that‘s

not the point—you‘re not here to write code; you‘re here to ship products.― (Seibel,

2009 S. 329). Diese These basiert auf Steve Jobs (CEO von Apple) Aussage „Real

artists ship“. Der Slogan wurde im Rahmen des Macintosh-Projekts 1983 von Jobs

27 Das Vorgehen wurde bereits beim Beginn der Arbeit dargelegt (siehe Kapitel 1.3, S. 3).

Page 91: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

82

getätigt. Die Softwareentwickler waren bereits einen Monat überfällig (Levy, 1995 S.

165), weil sie sich von ihrem Code nicht trennen konnten. In Linchpin nimmt Seth

Godin ebenfalls zu dem Slogan Stellung, allerdings im Kontext zu „Worse is better“ ,

indem er argumentiert: „Shipping isn‘t focused on Producing a masterpiece (but all

master-pieces get shipped)“ (Godin, 2010 S. 1885). Norvig unterstreicht die Aussage

im Kontext der Code-Optimierung: „You have to think how much is it going to

benefit the customer if I go from 95 % to 100 % on this feature vs. working on these

ten other features that are at 0 %― (Seibel, 2009 S. 3867). Besonders hervorzuheben

ist Fritzpatricks Aussage, dass ihn ein fester Fertigstellungstermin mehr reizt als die

von Google „When it‘s done, it‘s done“-Mentalität (Seibel, 2009 S. 996). Norvig

nimmt zudem Stellung zum „Launch early and often“-Ansatz (Seibel, 2009 S. 3871),

der die „Real artists ship“-Mentalität unterstützt – allerdings im Kontext von Googles

Kostenlosstrategie. Seine These: Fehler in kostenlosen Web-Produkten stellen kein

Desaster dar, weil der Kunde dafür nicht zahlt und Updates sofort sichtbar sind, weil

sie nicht installiert werden müssen. „We‘re just going to launch things and get some

feedback from users and fix the stuff that needs to be fixed and don‘t worry about the

other stuff.“ (Seibel, 2009 S. 3875) Diese Sicht teilt ebenso Zuckerberg in seiner

Releasestrategie: „It‘s just better to just launch and have something cool that you can

fix over time.“ (Cutler, et al., 2009).

In Bezug auf Softwarequalität trifft Zawinski folgende Aussage „We're absolutly 100

% committed to quality. We're going to ship the highest Product we can on March

31.“ (Seibel, 2009 S. 474). Diese Aussage ließ Robert Martin zu der Aussage

hinreißen „I want you to ship, but I don't want you to ship shit.“ (Martin, 2009).

Zawinski stimmt in seiner Aussage auch mit Martins These überein. Der wesentliche

Unterschied zwischen beiden ist, dass Zawinksi unter „committed to quality“

fehlerhafte, aber benutzbare Software als Endprodukt versteht, die keinen Mangel

aufweist und im weitesten Sinne einen „Black-Box-Test“ (siehe Kapitel 2.3.1.1.3.2,

S. 70) besteht. Martins Zitat bezieht sich jedoch auf den Softwareprozess. Die

Aussage „[…] I don't want you to ship shit― ist für ihn gleichbedeutend, wenn

Software nicht nach Test Driven Development entwickelt wurde und keine 100 %

„Test Coverage“ bei den Unit Tests besitzt. Norwig nimmt zu Zawinskis Sicht

indirekt Stellung, indem er Fehler gegenüber einen Mangel in Software relativiert,

Page 92: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

83

die das System nicht abstürzen lassen: „[…] Look at all the software bugs on your

computer. There are millions of them. But most of the time it doesn‘t crash.― (Seibel,

2009 S. 3954) Zawinski beschreibt zudem indirekt, dass sie den

Fertigstellungstermin auf Kosten der Features gehalten haben, wenn er in einem

Nebensatz erwähnt „[…] this is the one with all the stuff that we couldn‘t ship the

first time around.― (Seibel, 2009 S. 290). Zum Einhalten des Termins wurden

Features gestrichen.

Zusammenfassend können fünf Dinge festgestellt werden. Erstes, dass der

Fertigstellungstermin der zentrale Mittelpunkt für alle Entscheidungen im Software-

entwicklungsprozess ist. Zweitens, dass die Auslieferung der ersten Version einen

gewünschten Feedbackprozess durch die Nutzung der Software in Gang setzt, der in

einen inkrementellem kreativen Verbesserungsprozess endet. Drittens, dass die

Softwarequalität der ersten Generation nicht in der Code-Qualität gemessen wird,

sondern, ob die Software aus Benutzersicht fehlerfrei und benutzbar ist. Viertens,

dass Funktionen und Umfang der Software abhängig vom Fertigstellungstermin ist.

Fünftens, das es im ersten Schritt ausreicht, die relevanten 80 % eines Problems zu

lösen.

3.5.1.2 These 2: Die Komplexität eines Problems offenbart sich erst in der

Implementierung

Zawinksi beschreibt in seinem Interview einen interessanten Konflikt zwischen

Design und Implementierung. In einer Selbstreflektion erläutert er anschaulich, wie

er glaubt, dass ein Problem aus der Perspektive des Softwaredesigns gelöst werden

sollte und wie er das Problem letztendlich in der Implementierung gelöst hat. „[…]

Once you start writing code, you‘re gonna realize, ‗No, that was a dumb idea. Why

did I think that this module was going to be really easy when actually it‘s way more

complicated than I thought?‗ Which is something you‘re not going to clue into you

actually start writing code and you feel it getting away from you.“ (Seibel, 2009 S.

406). Eich differenziert bei Design und Implementierung zwischen Theoretikern und

Praktikern und kommt zu Schluss „[…] They‘re not really practical people. They

have amazing insights, which can sometimes be very productive, but when you have

to actually write programs and ship them to users and have them usable and have

Page 93: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

84

them win some sort of market contest, you‘re far removed from theory.“ (Seibel,

2009 S. 2038). Zawinksi sieht das Softwaredesign als permanenten Designprozess

während der Entwicklung des Programms: „The design process is definitely an

ongoing thing; you never know what the design is until the program is done.“

(Seibel, 2009 S. 407). Im Zusammenhang, wie Design Reviews durchgeführt

wurden, erwähnt Cosell, dass sie vor der Implementierung das Design erstellt hatten.

Er fügt allerdings auf Seibels Nachfrage hinzu „Probably some of the coding had

been done because a lot of people, including me, have to start blocking up little bits

of code to see how a thing is actually going to work out“ (Seibel, 2009 S. 6727). In

diesem Fall hatten sie mit der Implementierung von Teilbereichen während des

Designprozesses gestartet, um Ihr eignes Design zu überprüfen. Fritzpatricks

Erfahrung mit designgetriebenen Entwicklern beschreibt er folgendermaßen: „They

would just do abstraction on abstraction on abstractions. They would go really

slowly and are very religious about their style. They‘re like. ‗I‘m an artisan

programmer.‗ And I was like: Your Code doesn‘t run. It‘s not efficient and it doesn‘t

look like any of the other code that you‘re interacting with.“ (Seibel, 2009 S. 1000).

Im Gegensatz dazu erzählt Fritzpatrick auch die Anekdote, wie ein Entwickler es

geschafft hat, das komplexe „Voice Bridge“-System für Livejournal lauffähig zu

machen. Er hat dabei sehr komplexe Probleme mit den einfachsten Mitteln gelöst,

indem er Komponenten aus den unterschiedlichsten Sprachen „irgendwie“

zusammengesetzt hat. Sie mussten zwar seine Version komplett neu implementieren,

das lauffähige System gab ihnen aber die entscheidende Idee, wie die Lösung aussah

(Seibel, 2009 S. 1000ff.).

Warum Komplexität erst in der Implementierung festgestellt werden kann, begründet

Deutsch mit Hilfe einer Metapher. In der „echten“ Welt ist es möglich, etwas zu

erschaffen, ohne sich Gedanken über die Details auf der atomaren Ebene zu machen,

und kommt dabei zur Schlussfolgerung „To a great extent, that is not true in the

world of software“. Er fügt hinzu: „Software is a discipline of detail, and that is a

deep, horrendous fundamental problem with software. Until we understand how to

conceptualize and organize software in a way that we don‘t have to think about how

every little piece interacts with every other piece, things are not going to get a whole

lot better. And we‘re very far from being there.“ (Seibel, 2009 S. 5336).

Page 94: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

85

3.5.1.3 These 3: An hour code reading is worth two weeks of QA

Die Methode des „Code Readings“, insbesondere in Bezug auf „Code Reviews“ ,

wird in allen Interviews besprochen. Crockford und Allen bewerten darin, wie

effizient diese Methode ihrer Meinung nach ist. Crockford sieht es als enorme

Zeitersparnis: „I think an hour of code reading is worth two weeks of QA. It‘s just a

really effective way of removing errors.― (Seibel, 2009 S. 1313). Allens Meinung ist,

dass diese unter Termindruck zwar anstrengend, aber wirksam sind: „[…] and been

in the situation where one has week-by-week code reviews right up against

deadlines. […] It can be very painful to sit there every Friday and do code reads

with people explaining why they‘re doing what they‘re doing and finding other

people‘s errors. Seibel: Painful, but worthwhile? Allen: Absolutly worthwhile. […]―

(Seibel, 2009 S. 6230).

Crockford führt zudem auf, dass „Code Readings“ im Projekt davor schützen, dass

Programmierer erst zum Schluss merken, dass sie mit einer Aufgabe überfordert

sind, und die Möglichkeit bieten, den Projektfortschritt zeitnah zu sehen: „One of the

consequences of that is that if you have weak or confused programmers you‘re not

aware of their actual situation until much too late. […] ‗Yeah. I‘m almost done‗, and

then you get the code, and there‘s nothing there, or it‘s crap, or whatever, and

they‘re nowhere close to done.― (Seibel, 2009 S. 1314).

3.5.1.4 These 4: „Unit Tests― lösen das Kernproblem nicht

Norvig beschreibt in seinem Interview ein Erlebnis mit Ron Jeffries28

. Beide wollten

einen „Sudoko Solver“ schreiben. Ron Jeffries versuchte, das Problem zu lösen,

indem er als Erstes „Unit Tests“ schrieb. Norvig Aussage hierzu: „[…] He had five

different blog posts and in each one he wrote a little bit more and wrotes lots of tests

but he never got anything working because he didn‘t know how to solve the

problem.― Norvig nennt auch das Kernproblem, welches Ron Jeffries hatte: „[...] He

didn‘t know that so he was sort of blundering in the dark even though all his code

‗worked‗ because he had all these test cases.― Deshalb kommt er zu der

28 Ron Jeffris ist neben Kent Beck und Ward Cunningham einer der drei Gründer von Extreme Programming.

Page 95: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

86

Schlussfolgerung: „But you can test all you want and if you don‘t know how to

approach the problem, you‘re not going to get a solution.― (Seibel, 2009 S. 3773 ff.).

3.5.1.5 These 5: The smartest people in the organization shouldn’t design

APIs or GUIs or languages

Bloch antwortet auf Seibels Frage „Is there something intrinsic in programming

that‘s always going to draw people with that kind of mentality?―, indem den Konflikt

zwischen der technischen und benutzbaren Lösung anspricht. Bei der technischen

Lösung steht die Denksportaufgabe so stark im Mittelpunkt, dass beim

Programmieren vergessen wird, für wen diese eigentlich gelöst werden soll. Er führt

hierzu aus: „We love Brainteasers. But we have to temper this lover with the

knowledge that we‘re solving real problems for real people. […] The moment you

lose sight of that and who your customers are, you‘re dead meat. But I think it tends

to conflict with the sort of people who are attracted to programming, who are the

people who love brainteasers.― (Seibel, 2009 S. 2556). Damit beide Ziele erreicht

werden können, gibt er folgende Ratschlag im Vorgehensmodell: „Keep that

empathy gene on when you‘re designen your API, but then, in order to make them

run bloddy fast you can freely decend into the puzzle palace.― (Seibel, 2009 S.

2560). In diesem Zusammenhang kommt er zur Schlussfolgerung, dass

Programmierer zwar die intelligentesten Personen in einer Organisation sind, aber es

oft nicht schaffen, den „Context Switch“ zwischen Empathie/Denksport

durchzuführen. Aus diesem Grund sollten sie bei APIs, GUIs und Sprachen nicht die

Entscheidungsgewalt besitzen, weil im Zweifelsfall diese für Dritte nicht mehr

benutzbar sind. „But merely the fact that they‘re the smartest people in the

organization doesn‘t mean they should be making all the decisions, because

intelligence is not a scalar quantity; it‘s a vector quantity. And if you lack empathy

or emotional intelligence then you shouldn‘t be designing APIs or GUIs or

languages.― (Seibel, 2009 S. 2572). Die Problematik wird auch in Jones Interview

im Zusammenhang mit Microsoft Research aufgegriffen. Microsoft überprüft neue

APIs in Usability Tests. Die Situation, in denen die API-Designer das ungefilterte

Feedback der Benutzer (in diesem Fall Probanden) erhalten, beschreibt er wie folgt:

„Steven Clarke and his colleagues at Redmond have made systematic attempts to

Page 96: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

87

watch programmers, given a new API, talk though what they‘re trying to do. And

they get the people who designed the API to sit behind a glass Screen and watch

them. And the guys sitting there behind the glass screen say, ‗No, no, don‘t do that!

That‘s not the right way!‗ But it‘s soundproof. That turns out often to be very

instructive. They go and change their API.― (Seibel, 2009 S. 3171). Bloch nennt

auch den Grund. Seiner Meinung spielt es keine Rolle, wie exzellent der API-

Designer ist. Eine API entwickelt sich im Entwicklungsprozess organisch und das

Design entsteht aus praktischen Anforderungen während der Entwicklung. Deshalb

sollte Test Driven Development und Refactoring im ersten Schritt bei der API

durchgeführt werden und nicht am Quellcode, der die API nutzt. „It doesn‘t matter

how good you are; you can‘t get an API right until you‘ve tried to code to it. You

design something; try to use it; […] So what I‘m talking about is test-first

programming and refactoring the APIs, rather than refactoring the implementation

code underneath the APIs.― (Seibel, 2009 S. 2276).

3.5.2 Haltung

In den Interviews kann eine Haltung zu bestimmten Themenkomplexen extrahiert

werden. Eindeutig negativ ist die Haltung zum Wasserfallmodell. Es werden von den

Interview-Partnern die typischen Kritikpunkte aufgeführt, die bereits im ersten Teil

dieser Arbeit genannt wurden. Grundsätzlich wird UML als Kommunikations-

instrument für gut befunden, aber selbst nicht angewendet. Die Personen geben auch

zu, die UML-Notation nicht zu kennen. Eine Wiederverwendung von Software findet

ausschließlich auf Quellcode-Ebene statt, wobei die Wiederverwendung von

Objekten vermieden wird. Das Einführen von unnötigen Abstraktionsebenen wird als

Over-Engineering angesehen. Die Optimierung von Code wird sehr differenziert

betrachtet. Grundsätzlich sind die Interview-Partner der Meinung, dass Entwickler in

der Regel den interessantesten, aber nicht relevantesten Code optimieren. Das

„Literate Programming“ wird als sinnvolles Konzept angesehen, aber von den

Interview-Partnern kaum durchgeführt. Trotzdem wird der lesbare Code als eines der

wichtigsten Bestandteile beim Schreiben von Quellcode gesehen. Crockford erwähnt

zudem, dass sich Standards in der Informatik evolutionär entwickeln und nicht durch

Page 97: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

88

ein Komitee verabschiedet werden sollte. Den Standardisierungsprozess sollten

Entwickler selbst aktiv mitgestalten.

3.5.2.1 Wasserfallmodell

Allen, Eich und Bloch beschreiben in den Interviews sehr deutlich ihre negative

Haltung zum Wasserfallmodell. Dabei werden mehrere Punkte angesprochen. Allen

kritisiert drei wesentliche Punkte. Erstes, die mangelnde Interaktionsmöglichkeiten

zwischen den Fachdisziplinen: „[…] And found it frustrating because in its early

stages, a designer and the programmer could not interact―, zweitens die Annahme,

dass die Anforderungen sich im laufenden Projekt nicht ändern werden, und

drittens, dass erst am Projektende eine lauffähige Software entsteht („all or nothing

approach“). „One of the problems was- probably still is – that the life cycle of a

piece of software is very long. […] it took months and months or years. And the

environment changed and the requirements changed. And the customers really did

have the say in what they wanted in the end.― (Seibel, 2009 S. 6164). Eich und Bloch

nehmen beide Bezug auf das Problem, dass die Spezifikation und Implementierung

zwei getrennte Aktivitäten sind. Eich nimmt Bezug auf die zweite These (Die

Komplexität eines Problems offenbart sich erst in der Implementierung): „You spend

all this time writing documents and then you go to write the code and often you

realize that it‘s really stupid and you totally change the code and put the documents

down the memory hole.― (Seibel, 2009 S. 2000) Bloch kritisiert das Vorgehen des

realitätsfremden theoretischen Spezifizierens ohne die Integration des Kunden: „[…]

you get a bunch of smart guys into a room to work for six months and write a 247-

page system specification before they really understand what it is they‘re trying to

build. Because after six months, they‘ll have a very precisely specified system that

may well be useless. And often they say, ‗We‘ve invested so much in the spec that we

have to build it.‗ So they build the useless system and it never gets used.― (Seibel,

2009 S. 2249) Norvigs These ist, dass das Wasserfallmodell in den frühen Zeiten des

„Batch Processing“ durch das einfachere Interface auch seine Berechtigung hatte. Es

konnten damals Arbeitsabläufe besser sequenziell durchgeführt werden als heute.

Trotzdem kritisiert er die fehlende Interaktion mit dem Kunden: „It was possible to

do this kind of waterfall design where you said, – The input is going to be this deck of

Page 98: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

89

cards, and the output is going to be a report that has this number in this column.―

(Seibel, 2009 S. 1998). Dabei kommt er zum Schluss, dass die heutigen Werkzeuge

eine höhere Interaktion mit dem Kunden zulassen und deshalb die agile

Herangehensweise zeitgemäß ist. „Rather than have a complete specification from

the start, just get customers in the room an start brainstorming.― (Seibel, 2009 S.

3675).

3.5.2.2 UML

Bloch und Norvig haben zwei unterschiedliche Sichtweisen auf den Einsatz von

UML. Bloch sieht UML als nützlich, aber nicht notwendig an und bestärkt dies,

indem er zugibt, die UML-Notation nicht zu kennen: „No, I think it's nice to be able

to make diagrams that other people can understand. But honestly I can't even

remember which components are supposed to be round or square.― (Seibel, 2009 S.

2286). Norvig hingegen sieht UML als Hilfsmittel für Sprachen, die in der

Modellierung Schwächen besitzen: „I never liked any of these UML-type tools. I

always thought – If you can't do it in the language itself that‘s a weakness of the

language.― (Seibel, 2009 S. 3876). Aus beiden Zitaten kann festgestellt werden, dass

beide keine UML-Diagramme als Hilfsmittel für eine Problemlösung nutzen würden.

3.5.2.3 Wiederverwendung

Obwohl Deutsch an das Prinzip der Wiederverwendung bei Objekten nach wie vor

glaubt, sieht er es kritisch. Wenn Software wiederverwendet werden kann, ist es eine

Kapitalanlage, die gewartet und gepflegt werden muss. Es entstehen Kosten für den

Aufbau einer Objekt-Bibliothek. Die Kosten für die Erstellung von Objekten können

nicht ausschließlich einem Kundenprojekt zugeordnet werden, sondern müssen wie

Anlagevermögen (zum Beispiel der Bau einer neuen Fabrik zur Produktion)

betrachtet werden. Ob sich die Investition für ein wiederverwendbares Objekt

finanziell lohnt, ist ungewiss. Er führt dabei auf, „all things that I see getting reused

these days are either very large or very small. The scale of reuse […] when we were

promoting objects was classes and groups of classes. Except in situations where you

have a collection of classes that embody some kind of real domain knowledge, I don't

see that happening much.―. Was er mit sehr klein und sehr groß meint, führt er

Page 99: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

90

ebenfalls auf: „What I see getting reused is either very small things – individual

icons, individual web page designs – or very big things like entire languages or large

applications with extension architectures like Apache or Mozilla.― (Seibel, 2009 S.

5470 ff.) Objekte sind seiner Meinung nach genau in der Mitte. Die Gründe, aus der

Perspektive eines Entwicklers, Objekte nicht zu nutzen, führen Armstrong, Knuth

und Norvig auf. Armstrong ist der Meinung, dass objektorientierte Sprachen eine

geringere Wiederverwendbarkeit besitzen als imperative Sprachen, „because the

problem with object-oriented languages is they‘ve got all this implicit environment

that they carry around with them. You want a banana but what you got was a gorilla

holding the banana and the entire jungle.―. Im Gegensatz dazu führt er imperative

Sprachen auf: „If you have referentially transparent code, if you have pure functions

– all the data comes in its input arguments and everything goes out and leaves no

state behind – it‘s incredible reuseable.― (Seibel, 2009 S. 2680 ff.) In dieser These

unterstützt ihn Knuth, indem er sich gegen Kapselung ausspricht und der Meinung

ist, das letztendlich das eigentliche Programmieren in den Hintergrund gerückt wird:

„There's this overemphasis on reusable software where you never get to open up the

box and see what's inside the box. It's nice to have these black boxes but, almost

always, if you can look inside the box you can improve it and make it work better

once you know what's inside the box. […] All they're able to do is assemble the

parts.― (Seibel, 2009 S. 7259). Norvig sieht in der Wiederbenutzung die Gefahr, dass

fehlerhafte Software entsteht. Durch die Nutzung gleicher Komponenten in anderen

Nutzungskontexten muss die wiederverwendete Software wie alle anderen

Komponenten auf Lauffähigkeit und Fehler überprüft werden. „They have extremely

good checks for the stuff that‘s mission critical, and in the previous mission the stuff

that was recorded in foot-pounds was non-mission-critical – it was just a log that

wasn‘t used for navigation. So it had been classified as non-mission-critical. In the

new mission they reused most of the stuff but they changed the navigation so that

what was formerly a log file now became an input to the navigation.― (Seibel, 2009

S. 3944). Das Problem war, dass die Navigationssoftware davon ausging, dass ihr die

Daten in Newton und nicht in Pfund übergeben wurden. Die Mission scheiterte

aufgrund der Wiederverwendung von Software.

Page 100: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

91

3.5.2.4 Over-Engineering

Die Haltung gegenüber „Over-Engineering“ ist eindeutig negativ. Die Interview-

Partner sehen keinen Mehrwehrt durch die Einführung von Abstraktionsebenen. Ihrer

Meinung nach werden durch Abstraktionsebene die eigentlichen Probleme nicht

gelöst, sondern weiterdelegiert. Deshalb sind sie der Meinung, dass dies nichts mit

Programmieren zu tun hat und das heute viele Entwickler sich im Grunde nicht mit

dem System auskennen, auf dem sie programmieren. Thompson äußert sich in

diesem Zusammenhang: „Modern programming scares me in many respects, where

they will just build layer after layer that does nothing except translate. […] It‘s just

relegating the problem to a deeper and deeper level.― (Seibel, 2009 S. 5765).

Zawinski ist der gleichen Meinung: „We need to do is add another abstraction layer

here and have a delegate for this delegate for this delegate.― (Seibel, 2009 S. 322).

Fritzpatrick vertritt die Meinung, dass Programmierer sich zu stark fokussieren –

ohne das Interesse, den Rest des Systems verstehen zu wollen. Dies macht sich seiner

Meinung nach bemerkbar, indem sie sich gedankenlos auf die Arbeit Dritter

verlassen. „Your virtual machine may be hiding that from you and giving you some

abstraction that makes it look like that's efficient, but it's only efficient when you're

running it on this kernel […] it helps to actually know what's going on under the

covers and not trust everyone else's libraries, and code, and interfaces.― (Seibel,

2009 S. 853). Eich sieht es differenzierter und macht Abstraktion abhängig vom

Anwendungsfall: „Abstraction is powerful. What I‘m really allergic to […] was the

CORBA, COM, DCOM, object-oriented nonsense. Every startup of the day had some

crazy thing that could take 200,000 method calls to start up and print ―hello, world‖.

That‘s travesty; you don‘t want to be a programmer associated with that sort of

thing.― (Seibel, 2009 S. 1771ff.). Er sieht zudem einen Evolutionsprozess, welche

Abstraktion gut und sinnvoll ist und dass Entwickler in dem Umfeld trotzdem guten

Quellcode produzieren können, ohne das System komplett verstehen zu müssen.

„Staying close to the metal was my way of keeping honest and avoiding the bullshit,

but now, you know, with time and better, faster hardware and an evolutionary

winnowing process of good abstractions versus bad. I think people can operate

above that level and not know assembly and still be good programmers and write

tight code.― (Seibel, 2009 S. 1771ff.). In diesem Zusammenhang kommt er zur

Page 101: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

92

Erkenntnis, dass trotz Abstraktionen das Programm vom Compiler in Maschinencode

übersetzt werden muss, und er damit die Aufgabe hat, die Abstraktionen wieder

aufzulösen: „But there‘s something still that bothers me if over time we lose the

ability to write to the metal. Somebody‘s doing it; the compiler is generating the

code. The compiler writers have to be doing a better job over time.― (Seibel, 2009 S.

1771 ff.).

3.5.2.5 Code-Optimierung

Der Reiz der Code-Optimierung ist für Entwickler sehr groß. Trotzdem sehen die

Interview-Partner darin eine Gefahr. Ihrer Meinung nach optimieren Entwickler

Code-Teile nach persönlichen Vorlieben und nicht nach Projektrelevanz. Cosell

spricht sogar davon, dass Programmierer die schlechteste Wahl für die Optimierung

von Quellcode sind, weil sie nur den interessantesten und nicht den relevantesten

Code optimieren: „Programmers are the worst optimizers in the world. They always

optimize the part of the code that's most interesting to optimize, an almost never get

these part of the code that actually needs optimization.― (Seibel, 2009 S. 6958).

Steele spricht in diesem Zusammenhang auch von dem Entwicklerphänomen

„Because we can“: „It's easy to become too fixated on optimizing something just

because you can, even though it's not what you need to work on.‖ (Seibel, 2009 S.

4667). Fritzpatrick sieht die Optimierung als Belohnung für das Erreichen von

lauffähigen Code an: „Optimization is fun because it's not necessary. If you're doing

that, you've got your thing working and nothing else is more important […].―

(Seibel, 2009 S. 1051). Crockfords Argument spricht das Relevanzkriterium an und

kommt zum Ergebnis, dass die Codequalität dadurch sinkt: „I also see a lot of folks

struggling to try to make stuff fast in situations where it absolutely doesn't need to go

fast. They're unaware of how their own program is spending its time and so they're

optimizing things which don't require optimization and which will never be big

enough going though that path to ever make any difference so there's no reward, no

benefit at all, for having done that optimization. All the optimization did was

introduced cruft.― (Seibel, 2009 S. 1376). Dieser Meinung ist auch Thompson: „I'll

do it as simply as possible the first time. […] Building a very complex algorithm for

something that's never run is just stupid. […] It's a bug generator.― (Seibel, 2009 S.

Page 102: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

93

5891). Zudem macht er darauf aufmerksam, dass die Optimierung von Code auch

anders erfolgen kann. Er führt hier „Moore‟s Law“ und den Einsatz von „Cache“ an.

Diese Kriterien sollten in die Entscheidung der Relevanz mit einbezogen werden.

„You can pick up 10 percent but while you're picking up that 10 percent, computers

have gotten twice as fast and maybe with some other stuff that matters more for

optimization, like caches. I think it's largely a waste of time to do really well. It's

really hard; you generate as many bugs as you fix. You should stop, not take that

extra 100 percent of time to do 10 percent of the work.― (Seibel, 2009 S. 5805).

Armstrong rät deshalb Programmierern: „Don't tell people how fast something is

going to be before you've implemented it.― (Seibel, 2009 S. 2794).

3.5.2.6 Literate Programming

Das „Literate Programming” à la Knuth wird von den Interview-Partnern als

sinnvolles Konzept angesehen, aber kaum durchgeführt. Allerdings hat es alle

beeinflusst, wie sie Programme schreiben. Am besten fasst es Thompson zusammen:

„It's a great idea, but almost impossible to do in practice.― (Seibel, 2009 S. 5975).

Ingalls nennt auch den Grund: Die Methode nimmt zu viel Zeit in Anspruch. „I like

to work that way with something when I've got the time to finish it off.― (Seibel, 2009

S. 5139). Armstrong zeigt den Konflikt auf, den er beim Literate Programming hat.

In seinen Augen lenkt ihn die Dokumentation vom Programmieren ab: „I'm not

against the idea but I'm sort of impatient and wanted to write the code and not the

documentation.― (Seibel, 2009 S. 2936). Crockford sieht das Problem in der Masse

und der fehlenden Kultur. Es gibt zu wenig Entwickler, die Literate Programming

derzeit anwenden: „I'm not against it in principle. I just haven't had occasion to do it.

[…] There are a lot of great ideas in literate programming, but it's not the right bar:

there aren't enough other programmers hanging out there.― (Seibel, 2009 S. 2288).

Besonders interessant ist seine Haltung. Ein Programm, das lesbar ist, hat seiner

Meinung nach einen enormen Mehrwert: „The thing I like about the literate style is

that you're designing the program specifically for reading and I think that provides

tremendous value to the program.― (Seibel, 2009 S. 1466) Obwohl er die Methodik

beim Entwickeln selbst nicht anwendet: „[…] but I'm currently not doing any literate

programming.― (Seibel, 2009 S. 1438). Bloch bestätigt Knuths These, dass ein

Page 103: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

94

Programm lesbar sein muss und im Wesentlichen ein Literaturwerk ist. „As Knuth

would say, a Program is essentially a work of literature. For whatever reason, I

realized even back then that a program has to be readable.― (Seibel, 2009 S. 2134).

Steele bestätigt, dass es seinen Stil beeinflusst hat, ein Programm lesbar zu

schreiben: „[…] It has influenced my style in that I think about those issues.― (Seibel,

2009 S. 4237). Knuth sieht es ebenfalls sehr praktisch und naiv. Die Methode hat

ihm geholfen und er hofft, dass es auch anderen hilft. Er schreibt allerdings anderen

nicht vor, dass lesbarer Code nur durch seine Methode entsteht. „I can't prove that

this is the best thing, but it sure works for me. Then you hope that other people will

try it and come to the same conclusion. But I don't like going out and telling people

what they ought to believe.― (Seibel, 2009 S. 7151).

3.5.2.7 Lesbarer Quellcode

Auch wenn Donald Knuths Literate Programming von den Interview-Partnern selbst

nicht angewendet wird, sind fast alle der Meinung, dass Entwickler für sich selbst

und Dritte lesbaren Code produzieren müssen. Zawinski beschreibt es treffend: „[…]

certainly one of the most important things is writing code you can come back to

later.― (Seibel, 2009 S. 105). Für Cosell gehört lesbarer Code zu den wichtigsten

Faktoren, wenn in Programmierteams gemeinsam gearbeitet wird. Das lauffähige

Programm allein ist nicht ausreichend. „Writing a program that work is a skilled

craft – now you have to program. Working programs are given.― (Seibel, 2009 S.

6770). Bloch schließt sich dem an: „[…] I realize it isn‘t just about making it work;

It‘s about producing an artifact that is readable, maintainable, and efficient.― Er

merkt zudem an, dass lesbarer Code schneller ausgeführt wird und wenn nicht, dass

lesbarer Code einfacher optimiert werden kann. „It's easier to optimize correct code,

than to correct optimized code.― (Seibel, 2009 S. 2177ff.). Norvig sieht das ähnlich,

wenn er die Leistung eines Entwicklers in der Gesamtheit betrachtet: „One of our

best search people is by no means our best programmer, in terms of how the code

looks.― (Seibel, 2009 S. 3913). Cosell differenziert dabei den Quellcode anhand

dessen, für wen er bestimmt ist. „The binary bits are what computers want and the

text file is for me.― (Seibel, 2009 S. 6767). Die Form des Quellcodes muss dabei für

das Team nachvollziehbar sein. Der Computer als Maschine benötigt nur die

Page 104: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

95

Anweisungen. „[…] to the belief that computer-program source code is for people,

not for computers. computers don't care.― (Seibel, 2009 S. 6765).

3.5.2.8 Standards und Historie

Crockford nimmt als Einziger Stellung zu den Themen Standards und Historie. Er ist

der Meinung, dass Standards nicht durch ein Komitee verabschiedet werden, sondern

sich evolutionär entwickeln sollen. „[…] in that maybe the right approach to take to

standardization is to figure out which of those are the best though out, which are the

most maintainable, which are the most growable, and pick that. Rather than a

standards comittee trying to guess the best way to do it, we pick from examples in the

marketplace that is actually demonstrably the best way to do it.― (Seibel, 2009 S.

1612ff.). Desweiteren kritisiert er Entwickler, die sich nicht für die Herkunft von

Standards interessieren oder selbst welche schaffen wollen. Seiner Meinung nach

sollten Entwickler den Standardisierungsprozess aktiv mitgestalten und sich nicht auf

Komitees verlassen. „I Think we're tragically unaware of our history, and I'm often

really disappointed to see that people who are now practicing this craft have no

intellectual curiosity about where this stuff came from and just assume that some

committee got it right and presented them with a set of tools or languages, and all

they have to do is use properly.― (Seibel, 2009 S. 1612ff.). In Bezug auf die Historie

sieht Crockford den PC als Rückschritt. Seiner Meinung nach wurden viele heutige

Probleme der Vernetzung in der Timesharing Era bereits vor 20 Jahren gelöst. Der

größte Rückschritt ist für ihn, dass PCs von Grund auf nicht in ihrem Ursprung als

Multiuser-Systeme konzipiert wurden. „Progress isn't always forward. When we

leaped to the PC, we lost a whole lot of stuff. In the timesharing era, we had social

systems online. A timesharing system was a marketplace. It was a community and

everybody who was part of that could exchange email […] they were doing all this

stuff and all that got lost when went to PC. It took another 20 years or so to get back.

We also took a huge step backwards in terms backwards of security. Timesharing

systems were starting to understand how to defend the system from each other. We

went to PC, you owned your machine and everything had the same privileges, the

same rights to do whatever it had to do, and it turned out that not all the software

running in your machine is acting in your interest.― (Seibel, 2009 S. 1612ff.).

Page 105: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

96

3.5.3 Methode

Das methodische Vorgehen wird ihm Rahmen der Dokumentation und Lesbarkeit

von Quellcode sowie dem Lesen von Quellcode in den Interviews angesprochen.

Dokumentiert wird dabei nur das Nötigste, außer der Quellcode wird von Dritten

benutzt. Lesbarer Code wird nicht nach bestimmten Regeln produziert, sondern

erfolgt, indem sich der Entwickler in Dritte hineinversetzt. Code Reading wird als

Methode des Voneinanderlernens gesehen, und um Fehler zu reduzieren.

3.5.3.1 Dokumentation

Armstrong unterscheidet die Art der Dokumentation als Einziger inhaltlich in den

Interviews. Für ihn ist der Quellcode die Antwort auf das zu lösende Problem. Eine

Dokumentation beschreibt hingegen das Problem. Beide Sichtweisen müssen zum

Verständnis des Quellcodes vorhanden sein. „The code shows me, what it does. It

doesn't show me what it's supposed to do. I think the code is the answer to a problem.

If you don't have the spec or you don't have any documentation, you have to guess

what the problem is from the answer.― (Seibel, 2009 S. 2925). Für Crockford ist ein

Programm erst dann fertig, wenn es dazu eine Dokumentation gibt, und grenzt sich

damit gegenüber der agilen Softwareentwicklung ab: „[…] I don't think a program is

finished until you've written some reasonable documentation. And I quite like a

specification. I think its unprofessional these people who say, – What does it do?

Read the code.― (Seibel, 2009 S. 2924). Thompson dokumentiert den Quellcode

knapp. Seine Methode ist es, „Usage Lines“ einzusetzen, falls er „Argumente“

vergisst, und er dokumentiert die Datei im Kopfbereich. Allerdings schreibt er auch

eine ausführliche Dokumentation, wenn sein Werk woanders eingesetzt wird oder

von jemand anders genutzt werden muss. „I'll put in a usage line if I forget the

arguments. And I'll put in a comment at the header about what the whole thing does.

But very, very brief. If it's part of a system or a library or something that's meant to

be published, then I'll take the time to document it. But otherwise, no.― (Seibel, 2009

S. 5787). Cosell hingegen ist der Meinung, dass Quellcode so geschrieben werden

sollte, dass er lesbar ist. Allerdings gibt sie zu, dass sie auch schwierige

Codebereiche zum besseren Verständnis dokumentiert: „I don't put a lot of

comments in my code because I think you should be writing your code so that it is

Page 106: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

97

readable and your algorithms and thoughts are clear in the code. … The only place I

tend to put comments in my code is when my instinct says, – This particular piece of

code, […] doesn't clearly state what I'm trying to accomplish― (Seibel, 2009 S.

6797).

3.5.3.2 Readable Code

Die Interview-Partner verzichten auf Vorgaben bei der Erstellung von lesbarem

Quellcode, wie sie in Clean Code (Martin, 2008) aufgezeigt werden. Ihre Methode,

lesbaren Code zu verfassen, ist, sich beim Schreiben in die dritte Person

hineinzuversetzen und einen durchgängigen, eigenen Stil einzuhalten. Crockford

merkt im Kontext des Code Reviews an, dass Quellcode ordentlich, lesbar und im

einheitlichen Stil geschrieben werden sollte, damit er begutachtet werden kann.

„Another aspect is writing your code such that it can be read. Neatness counts, as it

turns out, and style is important. And all of those things will increase the quality of

the code base […].― (Seibel, 2009 S. 1333). Grundsätzlich sollte der Code dabei

einheitlich eingerückt sein und er empfiehlt Variablen nicht mit nur einem Wort zu

benennen. „The simplest is just being consistent in the presentation so you always

indent everything properly; you have white space in all the right places […] I tend to

use too many one-letter variable names, which I believe is a bad thing.― (Seibel,

2009 S. 1333). Cosell Methode, lesbaren Code zu schreiben, ist einfach, den Code

aus der Perspektive eines Dritten zu sehen: „You have to look at the program

through the eyes of a new programmer.‖ (Seibel, 2009 S. 6950). Gleiches rät auch

Knuth :”I don't have to present it in the form that the compiler wants to see it. I

present it in a form that I think is easiest for a reader to understand.― (Seibel, 2009

S. 7163).

3.5.3.3 Code Reading

Crockford sieht das „Code Reading“ als wichtige Methode an, damit Programmierer

voneinander lernen können. Zudem ist er der Meinung, dass hierdurch die Qualität

des Quellcodes maßgeblich erhöht wird (siehe auch These 3, S. 85). „One of the

things I‘ve been pushing is code reading. I think that is the most useful thing that a

community of programmers can do for each other – spending time on regular basis

Page 107: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

98

reading each other‘s code.― (Seibel, 2009 S. 1311). Dem stimmt auch Steele zu, der

als Schüler beim MIT Zugriff auf den Quellcode von verschiedenen Projekten hatte

(zum Beispiel ITS, TECO oder Lisp) und deshalb Lisp für die IBM 1130

implementieren konnte. Gleichzeitig kritisiert er, dass Entwickler heute selten guten

Quellcode von anderen Entwicklern sehen und sich deshalb nicht weiterentwickeln:

„Part of the problem that we face nowadays, now that software has become valuable

and most software of any size is commercial, is that we don‘t have a lot of examples

of good code to read. The open source movement has helped to rectify that to some

extent.― (Seibel, 2009 S. 4223). Fritzpatrick sieht es ebenfalls als Methode, um

außerordentliche Entwickler besser einschätzen zu können, und zum Lernen. „[…] if

you really respect some programmer, go read some of their code. Maybe that‘ll make

you realize that they‘re mortal […]. Or you learn something about their code.―

(Seibel, 2009 S. 913).

3.5.4 Vorgehen

Das charakteristische Vorgehen setzt sich aus drei Teilbereichen zusammen. Erstens

werden die Programme typischerweise inkrementell entwickelt, wobei dabei nach

Van Vlient und Winter zuerst die Softwarekomponenten mit dem höchsten Risiko als

Erstes implementiert werden („build the hardest things first“). Zweitens, das

Vorgehen der Realisierung erfolgt in kleinen Teams. Die Kommunikation zwischen

den Teams wird über Schnittstellenbeschreibungen gelöst. Drittens, das Vorgehen

beim Refactoring Dritter erfolgt durch einen Rewrite des Codeabschnitts.

3.5.4.1 Inkrementelle Entwicklung

Die Software der Interview-Partner wurde inkrementell entwickelt. Das Design des

Programms entstand schrittweise während des Schreibens des Quellcodes. Ingalls

hatte für die erste Implementierung von Smalltalk als Spezifikation nur ein paar

Notizzettel von Alan Kay. Die erste Smalltalk-Implementierung begann er, indem er

angefangen hat, diese in Basic zu schreiben: „I just started typing in code.― Das

gleiche Vorgehen nutzte Crockford: „When I started working with Javascript, I

didn‘t read anything about it. I just started.― (Seibel, 2009 S. 1521) Thompson

schreibt vorher Datenstrukturen auf, beginnt aber auch sofort mit dem Schreiben –

Page 108: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

99

bei falschen Designentscheidungen schreibt er die Codeabschnitte komplett neu. „I

usually write down data structures before I write down code. I don‘t write down

algorithms – no flowcharts, or stuff like that. […] I don‘t stick to code. […] I‘ll just

hack and go over it.― (Seibel, 2009 S. 5772). Zawinski beschreibt sein Vorgehen,

indem er in kleinen Schritten die Probleme löst. „Just figuring out how to get from

point A to point B – how to make the machine do what you want.― (Seibel, 2009 S.

366). Fritzpatrick gibt den Rat, Code inkrementell zu entwickeln, damit man in jeder

Stufe seinen Quellcode verifizieren kann. „[…]Try to figure out what‘s going on.

Learn how to write things incrementally so that at each stage you could verify it.―

(Seibel, 2009 S. 1128). Dabei werden die schwierigsten und risikoreichsten

Komponenten als Erstes implementiert. Die Mentalität entspricht dabei dem des

„Risk-driven-Modell“, des Spiralmodells oder dem Ansatz der inkrementellen

Entwicklung „Build the hardest thing first“. „But I've started with the hard bits or

the parts I was unsure of it and tried to implement those parts first. I try not to put off

anything hard or surprising to the end.― (Seibel, 2009 S. 910). Welche der

Komponenten oder Funktionen eines Programms als schwer oder leicht einzustufen

sind, hängt nach Crockford von der Erfahrung des Entwicklers ab. „Identify the hard

problems and then solve them. And then the easy problems, […] So threre‘s a bit of

experience there in classifying them as easy and hard.― (Seibel, 2009 S. 2918).

Thomspon, Fritzpatrick und Ingalls beschreiben das Vorgehen in ihren Projekten

sehr detailliert. Thompson schrieb ein Betriebssystem, um sein Dateisystem für die

PDP-7 testen zu können. Aus dem Betriebssystem ist Unix entstanden. „Halfway

through there that I realized it was a real time-sharing system. I was writing the shell

to drive the file system. And then I was writing a couple other programs that drove

the file system. And right about there I said, ‗All I need is an editor and I've got an

operating system.‗― (Seibel, 2009 S. 5829). Fritzpatrick hat Livejournal aus dem

Nutzungskontext heraus entwickelt. Die Funktionen des Systems sind dabei

inkrementell aus „Use Cases“ entstanden. Das Kernsystem wurde schrittweise um

Funktionen erweitert. „Commenting on LiveJournal was a practical joke. I was

checking my LiveJournal right before I ran into class. We had just introduced friend

pages and I saw something my friend wrote and it was really stupid and wanted to

make fun of him. ‗Oh, but I can‘t reply.‗ […] The whole security thing, like friends-

Page 109: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

100

only posts and private posts, was because a friend wrote that he went to a party and

woke up drunk in a ditch the next day. His parents read it […].― (Seibel, 2009 S.

969). Ingalls beschreibt, dass er bei der Smalltalk-Implementierung zuerst mit einem

„Rapid Prototyp“ in Basic und danach inkrementell vorgegangen ist: „I remember

the first thing we got to run was six factorial. It‘s a really simple example but it

involves the process of dynamic lookup and creating new stack frames. And the once

you‘ve got that working, you come to understand how things are going to go and you

find out what‘s difficult. […] ‗OK, I see how this work, I‘m going to write it in

assembly code,‗ or whatever else. Then you suddenly realize, ‗Oh yeah, we need

automatic storage management […].‗ It‘s one thing after another.‖ (Seibel, 2009 S.

4817).

3.5.4.2 Vorgehensmodell

In den Interviews wurden verschiedene Arten des Vorgehens angesprochen, wie die

Interview-Partner die Software in ihren Projekten entwickelt haben. Insgesamt kann

festgestellt werden, dass die Aufteilung der Arbeitspakete sehr praktisch durch

Module in den Teams erfolgte. Die Kommunikation der Module erfolgt durch

Schnittstellen, die zwischen den Entwicklern vorher definiert wurden. Die

Teamgröße betrug in etwa zwei bis drei Personen.

Ingalls Zusammenarbeit mit seinen Kollegen erfolgte über definierte Schnittstellen.

Für die Arbeiten im Detail gab es keine Spezifikation. Die Probleme wurden in den

Augenblicken gelöst, in denen sie auftraten. „Either you agree on some interface, or

often I'll build some framework that's incomplete but that works for one example and

then it's obvious to someone else where their stuff would fit in. Or they've done that

and it's obvious to me where my stuff fits in. It's usually been in that concrete way,

rather than any kind of spec because we've usually been working on something that

nobody wrote down. It's all kind of been following the needs of the moment.― (Seibel,

2009 S. 4974). Zawinksi beschreibt, wie er jeden Tag mit seinen Kollegen die

Features des „Mail Readers“ aufteilte, die anschließend sofort implementiert wurden.

„I had a basic design down and I'd starting doing a little coding and every day or

every couple of days we'd look at the list of feature and I'd go " […] maybe I'll work

on that […] and he‘d go ‗OK, I‘ll work on that‗ and then we‘d go away. […] and we

Page 110: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

101

just sort of divides up the pieces― (Seibel, 2009 S. 278). Das Design der OTP wurde

von drei Personen entwickelt. Armstrong beschreibt, dass sie morgens mit drei

Personen zwei bis drei Stunden lang die Anforderungen für den Tag spezifizierten

und anschließend das Arbeitspaket in zwei bis drei Stunden umgesetzt hatten. Eine

Person schrieb die Dokumentation, zwei Personen implementierten die Funktionen.

Die erste Version des Frameworks hatten sie in zehn bis zwölf Wochen fertiggestellt.

Das Team wurde erst dann um weitere vier Entwickler erweitert (Seibel, 2009 S.

2906ff.). Zawinski beschreibt eine für ihn optimale Entwicklungsabteilung ähnlich.

Er würde eine Entwicklungsabteilung in kleine Teams von drei Personen

organisieren. Das Projekt würde in Module aufgeteilt werden und jedes Team würde

ein Modul entwickeln. Damit beschreibt er ein Prozessmodell ähnlich dem Feature

Driven Development, allerdings ohne ein Rollenmodell: „I think you want to

arrange for there to be no more than three or four people working really closely

together on a day-today basis. Than that can scale up a lot. Say you've got a project

where you can divide it up into twenty-five really distinct modules. Well, you can

have tewnty-five tiny teams – maybe that's a little much. Say ten. And as long as they

can coordinate with each other, I don't think there's a whole lot of limit to how big

you can scale that. Eventually it just starts looking like multiple projects instead of

like one project.― (Seibel, 2009 S. 513). Wie bei Ingalls würde die Kommunikation

der einzelnen Module über definierte Schnittstellen erfolgen, auf die sich die Teams

einigen müssten. „There's got to be agreement about what the interface between

modules is. For that very modular approach to work at all, the interface between

modules has to clear and simple.‖ (Seibel, 2009 S. 524). Bloch gibt an, dass Code

vor der eigentlichen Implementierung der API geschrieben werden sollte. Ansonsten

verschwendet man Zeit für die Implementierung einer API, die nicht genutzt wird.

„But the fundamental rule is, write the code that uses the API before you write the

code that implements it. Because otherwise you may be wasting your time writing

implementation code that won‘t get used.― Zudem empfiehlt er, erst dann die

Dokumentation für die API zu erstellen, nachdem sie benutzt wurden. Ansonsten

dokumentiert man eine fehlerhafte API. „In fact, write the code that uses the API

before you even flesh out the spec, because otherwise you may be wasting your time

writing detailed specs for something, that‘s fundamentally broken.― (Seibel, 2009 S.

Page 111: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

102

2260). Deutsch beschreibt das Vorgehen, wie er APIs während der Entwicklung

definiert. Dabei ist er wie Bloch sehr praktisch. Er schaut, welche Funktionen in

welchem Umfeld welchen Input/Output benötigen, und welche Funktionen hierdurch

ausgelöst werden. „[…] I found that when sitting down to write any piece of code,

more and more the question I would ask myself first is, ‗Ok, what's the interface

between this and everything around it going to look like? What gets passed in? What

gets passed out? How much of a task should be on which side on an interface?‗―

(Seibel, 2009 S. 5372).

3.5.4.3 Refactoring

Das Refactoring des eigenen Quellcodes oder den eines von Fremden erstellten

erfolgt durch einen kompletten „Rewrite“. Zawinski bezieht dies nicht nur auf das

Refactoring an sich, sondern auch auf die Verwendung von Quellcode dritter. Dabei

führt er zwei Argumente auf: Erstens, das Schreiben des Quellcodes erfolgt

schneller, als den Quellcode von Dritten zu verstehen, und zweitens werden nur die

Funktionen implementiert, die er wirklich benötigt. „[…] but when you inherit code

from someone else, sometimes it's faster to write your own than to reuse theirs.

Because it's going to take a certain amount of time to understand their code and

learn how to use it and understand it well enough to be able to debug it. Where if you

started from scratch it would take less time. And it might do 80 percent of what you

need, but maybe that's the 80 percent you actually need.― (Seibel, 2009 S. 339).

Cosell beschreibt ein ähnliches Vorgehen beim Fixen von Fehlern im Code von

Dritten. Er implementiert die fehlerhafte Funktion komplett neu, weil er den Code

von Dritten in der Regel nicht versteht. „How did you fix the bug? – my Answer

would have been, – I couldn‘t understand the code well enough to figure out what it

was doing, so I rewrote it.― (Seibel, 2009 S. 6535). Crockford liest Code von Dritten,

indem er ihn „refactored“. „I'll throw it in a text editor and I'll start fixing it. […]

Morningstar taught me to do this. He's brilliant at refactoring other people's code

and that's the approach he takes and I find it works.― (Seibel, 2009 S. 1365).

Page 112: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

103

3.5.5 Ziele

Peter Seibel hat in den Interviews keine konkrete Frage zu den Zielen gestellt. Ingalls

hat als Einziger konkret in den Interviews ein Ziel genannt. Sein Ziel ist, es zeitnah

ein lauffähiges Programm zu erschaffen. Das Programm muss im erstem Schritt nicht

fehlerfrei sein, sondern lauffähig, damit er sieht, wie es sich verhält. „In the spectrum

of implementers, I probably err on the side of just making things happen. A lot of that

is because I get so much of a thrill bringing things to life that it doesn't even matter if

it's wrong at first. The point is, that as soon as it comes to life it starts telling you

what it is.― (Seibel, 2009 S. 4824). Ähnlich beschreibt es Zawinski, der versucht, so

früh wie möglich ein lauffähiges Programm zu erhalten, damit er sich auf ein

Problem konzentrieren und dieses gegenüber anderen priorisieren kann. „I find that

getting something on the screen as soon as possible really helps focus the problem

for me. It helps me decide what to work on next. Because if you‘re just looking at that

big to-do list it‘s like, eh, I don‘t know which one I should do-does it matter which

one I do? But if there‘s something you can actually look at […], it‘s like OK, there!―

(Seibel, 2009 S. 399).

Ein weiteres Ziel wird zwischen den Zeilen vermittelt. Es wird immer die einfachste

aller möglichen Lösungen favorisiert, die schnell zum Ziel führt. Bloch führt hierzu

auf „[…] when in doubt, leave it out […]― (Seibel, 2009 S. 2279). Thompson nutzt

den einfachsten Lösungsweg, um Fehler zu vermeiden: „I'll do it as simply as

possible the first time. […] Building a very complex algorithm for something that's

never run is just stupid. […] It's a bug generator.― (Seibel, 2009 S. 5891). Die

Einfachheit seiner Problemlösung zieht sich bis zum Quellcode durch. „And if

there‘s one thing that characterizes my code, it‘s that it‘s simple choppy, and little.

Nothing fancy. Anybody can read it.― (Seibel, 2009 S. 5898). Cosell sieht dies

ähnlich und empfiehlt, immer erst die einfachste Lösung zu nehmen, um ein

Ergebnis zu erhalten: „Code it as lucidly, as easy to read, as crystal-clear as you

can. Do it the simple way. And then, if it needs to be sped up, we‘ll deal with it

later.― (Seibel, 2009 S. 6960).

Page 113: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

104

3.5.6 Projekterfolg

Die Interview-Partner blicken auf einem enormen Erfolg der Softwareentwicklung

zurück. Die aufgeführten Personen in der Tabelle haben maßgeblich an der Software-

Entwicklung teilgehabt. Die Projekte fallen unter das Softwareengineering und

gelten nicht als „Programming-in-the-small“ oder „Student System“, weil sie in einer

Projektorganisation entstanden sind und alle, ohne Ausnahme, „Industrial Strength

Software Systems“ sind. Die von den Interview-Partnern entwickelte Software hat

nachhaltig die Informatik und die gesamte Software-Industrie weltweit beeinflusst

und gestaltet.

Programmierer Programme

Jamie Zawinski Netscape Browser, Mail Reader

Brad Fritzpatrick LiveJournal, memcached

Douglas Crockford JSON

Brendan Eich JavaScript

Joshua Bloch Java Collections Framework

Joe Armstrong Erlang, OTP

Simon Pyton Jones Haskell, GHC

Dan Ingalls Smalltak, Bitblt

Peter Deutsch Lisp (PDP-1), Genie, Ghostscript

Ken Thompson Unix, B

Donald Knuth TeX, METAFONT

Tabelle 2: Projekterfolge der Interview-Partner in „Coders at Work“ (Seibel, 2009)

Page 114: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

105

3.6 Mentalität

Verdichtet man die Charakteristika zu einem übergeordneten Denk- und

Verhaltensmuster, lässt sich ein Stereotyp im positiven Sinne ableiten.

Aufgeführte Charakteristika Abgeleitete Mentalität

Thesen

Shipping is a feature, your product must have it. Die Fertigstellung des Produkts steht im

Mittelpunkt aller Entscheidungen. Eine

fehlerfreie 80 % Lösung aus Benutzersicht ist für

die Fertigstellung des Programms ausreichend.

Die Komplexität eines Problems offenbart sich

erst in der Implementierung.

Das Softwaredesign entsteht erst während der

Entwicklung des Programms. Die Komplexität

des Details einer Software ist ansonsten nur

schwer beherrschbar.

An hour code reading is worth two weeks of QA. Eine effiziente Qualitätssicherung des

Quellcodes kann während des Projekts durch

interne Code Reviews erfolgen.

„Unit Tests“ lösen das Kernproblem nicht. Ein „Unit Test“ hilft nicht weiter, wenn die

Lösung eines Problems nicht bekannt ist.

The smartest people in the organization

shouldn‟t design APIs or GUIs or languages.

Eine API entsteht organisch während der

Entwicklung eines Programms.

Haltung

Wasserfallmodell Ein agiles Vorgehen ist, mit den heute zur

Verfügung stehenden Entwickler-Werkzeugen,

zeitgemäß.

UML UML zur Problembeschreibung ist nützlich, aber

nicht notwendig. Ein Problem muss direkt in der

Programmiersprache abbildbar sein.

Wiederverwendung Objektorientierte Sprachen besitzen eine

geringere Wiederverwendbarkeit als imperative

Sprachen.

Over Engineering Abstraktionsebenen delegieren Probleme nur

weiter und lösen sie nicht. Credo: „Staying close

to the metal“.

Code-Optimierung Programmierer optimieren immer nur den

interessantesten und nicht den relevantesten

Code. Credo: „Don't tell people how fast

something is going to be before you've

implemented it.“

Page 115: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

106

Aufgeführte Charakteristika Abgeleitete Mentalität

Haltung (Fortsetzung)

Literate Programming Literate Programming besitzt eine enorme

Relevanz, wird in der Praxis aber nicht

angewendet.

Readable Code Der Quellcode gehört dem Entwickler, der

Binärcode dem Computer. Die ausführbare Datei

ist nichts wert, wenn der Quellcode nicht lesbar

ist.

Standards und Historie Standards in der Informatik sollten sich

evolutionär entwickeln und nicht über ein

Komitee verabschiedet werden. Programmierer

sollten aktiv den Standardisierungsprozess

mitgestalten. Die Informatik hat sich seit der

Timesharing-Ära nicht weiterentwickelt.

Methode

Dokumentation Der Quellcode ist die Antwort, die

Dokumentation ist die die Beschreibung des

Problems.

Readable Code Quellcode sollte ordentlich, lesbar und im

einheitlichen Stil geschrieben werden. Code

sollte immer aus der Perspektive eines Dritten

verfasst werden.

Code Reading Code Reading im Team erhöht die Qualität des

Quellcodes. Das Lernen von anderen

Entwicklern beginnt mit dem Lesen dessen

Quellcodes.

Vorgehen

Inkrementelle Entwicklung Programme entstehen inkrementell. Die

schwierigsten und risikoreichsten Komponenten

werden als Erstes entwickelt. Starte mit dem

Schreiben des Quellcodes.

Vorgehensmodell Das Programm wird in Modulen aufgeteilt. Jedes

Modul entwickelt ein Entwickler oder -team. Die

Kommunikation findet über Schnittstellen statt.

Module sollten nicht länger als zwei bis drei

Tage für die Realisation benötigen.

Refactoring Der Quellcode erhält beim Refactoring einen

Rewrite. Dies bezieht sich auch auf die

Wiederverwendung von Quellcode Dritter. Bei

der Wiederverwendung werden nur die

Funktionen implementiert, die im Kontext der

Wiederverwendung benötigt werden.

Page 116: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

107

Aufgeführte Charakteristika Abgeleitete Mentalität

Ziele

Lauffähigkeit Die Entwicklung sollte immer an einem

lauffähigen Programm erfolgen, um zu sehen,

wie es sich verhält. Die Priorisierung der

Aufgaben erfolgt auf Basis des lauffähigen

Programms.

Einfachheit Es wird immer die einfachste aller möglichen

Lösungen favorisiert, um schnell ein Ergebnis zu

erhalten. Komplexere Lösungen werden erst

implementiert, wenn die einfache Lösung

funktioniert.

Tabelle 3: Abgeleitete Mentalität des „Duct Tape Programmers“ auf Basis der aufgeführten Charakteristika

Crockford benennt in seinem Interview auch die mögliche Ursache, warum es den

„Duct Tape Programmer“ als Typus gibt. Programmieren ist schwierig. Der Grund:

Entwickler müssen in den meisten Fällen als Erste eine Lösung zu einem Problem

finden. Wenn es das Problem schon einmal gab und der Quellcode verfügbar ist,

wird versucht, den Quellcode wiederzuverwenden. Wenn es nichts Vergleichbares

gibt, muss der Programmierer dem Problem allein oder zu zweit („Pair

Programming“) entgegentreten. Die Mentalität hilft dem Entwickler dies täglich zu

bewältigen. „Part of what makes programming difficult is most of the time we're

doing stuff we've never done before. If it was stuff that had been done before we'd be

reusing something else. For most of what we do, we're doing something that we

haven't done before. And doing things you haven't done before is hard.― (Seibel,

2009 S. 1406)

3.7 Kritische Würdigung

Festzustellen ist, das Spolsky den Duct Tape Programmer in seinem Artikel sehr

passend und erstaunlich genau beschrieben hat, obwohl er nur das erste Interview

gelesen hatte. Spolskys Artikel wurde zudem beeinflusst durch Duct Tape

Programmer die er aus seinem persönlichen und professionellen Umfeld kannte.

Page 117: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

108

„Well, I wrote that article after reading Zawinski's interview, but I have certainly

known many duct tape programmers in my career and know many by reputation.―29

Ob Peter Seibel ein Remake von Lammers „Programmers at Work“ gewollt hat, ist

nicht zu erkennen. Konzeptionell sind sich beide Bücher ähnlicher als Biancuzzis

„Masterminds of Programming“. Insgesamt sind die Bücher mit Interviews von

außergewöhnlichen Informatikern eine Pflichtlektüre für Programmierer und

Personen, die in Softwareprojekten wirken. Zudem dient das Buch sehr gut als

Lehrmaterial. Viele Aussagen in den Interviews besitzen enorme Praxisrelevanz. Es

darf auch nicht vergessen werden, dass die erste Generation von Programmierern in

den nächsten Jahren wegfallen wird. Für die Weitergabe von Wissen und um ein

Gefühl für die Mentalität der Leute zu erhalten (welche die Informatik maßgeblich

geprägt haben), ist das von den Autoren der Bücher gewählte Interviewformat sehr

gut geeignet.

Insgesamt sind Duct Tape Programmer sehr praktische Entwickler, die im Kern ein

lauffähiges Programm erschaffen wollen. Daneben besitzen die Personen eine hohe

Selbstreflektion. Eich beschreibt sehr gut den Konflikt, den ein Programmierer bei

seiner täglichen Arbeit durchläuft. Dabei spricht er von dem Spannungsfeld zwischen

dem Optimisten und dem Paranoiden. Beide Charaktertypen sind seiner Meinung

nach notwendig, um ein guter Entwickler zu sein. „I‘ll have made some kind of

happy pony land in my head, where I forgot some important problem. That‘s always

a challenge because programmers have to be optimists. We‘re supposed to be

paranoid, neurotic, Woody Allen types who are always worried about things, but

really you wouldn‘t get anywhere in programming if you were truly paranoid―

(Seibel, 2009 S. 2087). Bloch beschreibt selbstreflektierend, dass Entwickler

Denksportaufgaben lieben, aber im Grunde nicht daran interessiert sind, dass jemand

ihre Lösung versteht. Er spricht hier von dem Empathie-Gen, das Entwickler für sich

entdecken und entwickeln müssen. „Keep that empathy gene on when you‘re

designing your APIs, but then, in order to make them run bloddy fast, you can freely

descend into the puzzle place.― (Seibel, 2009 S. 2555). Knuth nimmt Managern

29 Der Autor dieser Arbeit hat Joel Spolsky persönlich per E-Mail gefragt, inwieweit der Artikel von seinem

persönlichen und professionellen Umfeld beeinflusst wurde. Das Zitat ist die Antwort auf die Frage.

Page 118: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

109

nachhaltig die Hoffnung das Schätzungen von Programmierern ernst genommen

werden sollten und der Realität entsprechen. „I think it is always going to be true

that a person who manages programmers should not expect it to be predictable.―

(Seibel, 2009 S. 7147). Knuth begründet dies mit der Komplexität, die sich oft erst

während der Implementierung offenbart, und nimmt damit Bezug auf These 2 (siehe

Kapitel 3.5.1.2, S. 83). Desweiteren äußert Donald Knuth in seinem Interview eine

generelle Systemkritik. „Today we don't do anything new, we just plug existing

things together.‖ (Seibel, 2009 S. 7430). Ein Duct Tape Programmer würde sich mit

diesem Zitat nicht identifizieren. Der „Ingenieur“ oder ein „Industrieprogrammierer“

hingegen schon, weil Software damit ingenieursmäßig entwickelt werden kann.

Betrachtet man die Aussage mit Hilfe einer Methaper, wird der Unterschied beider

Welten deutlicher. Duct Tape Programmer bauen keine Brücken, sondern erfinden

sie. Softwareentwickler bauen Brücken mit Hilfe von Kapselung, Frameworks oder

Libraries, weil sie ihnen die Sicherheit geben, dass jemand die Brücke schon einmal

gebaut haben könnte.

Besonders interessant ist die Sichtweise von „Duct-TapeProgrammer“ auf die

Qualitätssicherung von Softwareprodukten. Ein Mangel darf in der Software eines

„Duct Tape Programmers“ nicht auftreten, Fehler allerdings schon. Letzteres wird

mit der „Worse is Better“-Perspektive gerechtfertigt. Insgesamt haben Duct Tape

Programmer ein gutes Gespür, welcher Mix an Qualitätssicherungsinstrumenten

eingesetzt werden sollte. Dies betrifft insbesondere die Auswahl von Inspektionen

und Prüfungen. Anders wie Zawinski es in seinem Interview darstellt, haben Duct

Tape Programmer im Grunde nichts gegen den Einsatz von Test Driven

Development. Sie sehen es einfach als Hilfsmittel, um Software ohne Mangel

herstellen zu können, und nicht als den heiligen Gral für fehlerfreie Software.

4 Mentalität als Einflussgröße des Software-Engineerings

Damit eine Einflussgröße im Allgemeinen festgestellt werden kann, muss vorher eine

Messung erfolgt sein. Für eine wissenschaftliche Messung müssen bestimmte

Voraussetzungen und ein bestimmtes Vorgehen erfüllt werden, die in diesem Fall

soziologischer Natur und damit nicht Gegenstand dieser Arbeit sind. Erschwerend

ist, dass bisher keine Messung stattgefunden hat. Die Arbeit wird deshalb die

Page 119: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

110

Einflussgröße nur qualitativ aufgrund der inhaltlichen Aussagen aus den Interviews

feststellen können. Hierbei wird die herrschende wissenschaftliche Meinung mit den

Aussagen aus den Interviews verglichen, um mögliche Abweichungen aufzuzeigen.

Eine Einflussgröße aufgrund der abgeleiteten Mentalität kann bei dem derzeitigen

Wissensstand nicht erfolgen, sondern nur vermutet werden.

Die inhaltlichen Aussagen aus den Interviews werden hierzu in zwei Themenblöcke

unterteilt. Erstens: Die Antworten aus Peter Seibels Fragen, die Relevanz auf das

Software-Engineering besitzen (siehe Kapitel 3.4.1, S. 80). Hier wird ein besonderer

Fokus auf die Vorgehens- und Prozessmodelle gelegt. Zweitens: Aussagen aus den

Interviews, die in dem dritten Kapitel keiner Charakteristik zugeordnet werden

konnten, aber Themenfelder des Software-Engineerings betreffen. Diese wurden

nicht explizit von Peter Seibel erfragt und stammen deshalb aus dem Kontext anderer

Antworten.

Unabhängig von den Aussagen aus den Interviews wird zudem betrachtet, wie der

Stereotyp des „Duct Tape Programmers“ die Softwareentwicklung eingeordnet

werden könnte.

4.1 Interviewfragen mit Relevanz für das Software-Engineering

Wie bereits in Kapitel 3.4.1 (S. 80) aufgeführt, hat Peter Seibel in den Interviews vier

Fragen gestellt, mit direktem Bezug auf Themenfelder des Software-Engineerings.

Diese Fragen werden in diesem Kapitel untersucht. Besonders betrachtet wird die

erste Frage „How do you design software?“, da sie Hinweise auf neue Vorgehens-

und Prozessmodelle geben könnte.

4.1.1 How do you design software?

Die Antworten auf diese Frage sind bereits in vorherigen Kapiteln aufgeführt

worden, wie zum Beispiel in Kapitel 3.5 (S. 81 ff.) „Charakteristiken“. Es wurden

deshalb viele Querverweise in diesem Kapitel verwendet. Diese sind für das

Verständnis nicht relevant, sondern dienen nur als zusätzliche Information.

Page 120: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

111

Das Kapitel konzentriert sich auf den Abgleich der Aussagen aus den Interviews mit

den im Software Engineering herrschenden Vorgehens- und Prozessmodellen. Wie

bereits in Kapitel 2.2 (S. 27) erwähnt, bildet die methodische Auseinandersetzung

mit dem Softwareherstellungsprozess das Kernstück des Software-Engineering oder

wird dem sogar gleichgesetzt. Deshalb findet in dieser Arbeit auch ein ausführlicher

Abgleich statt.

Als Vorgehensmodell wird Rapid Protoping (siehe auch Kapitel 2.2.2.4, S. 32) und

inkrementelle Entwicklung (siehe auch Kapitel 2.2.2.7, S. 35) benutzt. Zum

Fertigstellen jedes Inkrements wird das Vorgehen der Iteration benutzt.

Das Rapid Prototyping dient in erster Linie als Ziel, zeitnah ein lauffähiges

Programm zu schaffen (siehe auch Kapitel 3.5.5, S. 103). Bei der Klassifizierung

nach Floyd würde dies dem evolutionären Prototyping entsprechen, weil die

Codebasis kontinuierlich weiterentwickelt wird. Ein Duct Tape Programmer tendiert

dabei eher vertikal den Prototypen zu entwickeln als horizontal, weil er die Software

in Schritten funktional und nicht in Schichten erweitert. Das Vorgehen hängt in dies

Fall aber davon ab, welche der beiden Varianten die einfachste und schnellste ist.

Das Vorgehen der inkrementellen Entwicklung lässt sich an drei typischen Punkten

feststellen. Erstens wird bei der Entwicklung im ersten Schritt versucht, ein

Kernsystem zu entwickeln und dieses schrittweise funktional zu erweitern. Das

Kriterium der Auslieferung und Inbetriebnahme jedes Inkrements muss unter der

Perspektive des evolutionären Prototyping gesehen werden. Duct Tape Programmer

tendieren durch die erste These (siehe Kapitel 3.5.1.1, S. 81) dazu, ein Produkt

zeitnah fertig zu stellen und mittels Benutzerfeedback weitere Inkremente zu

entwickeln. Zweitens: Es wird versucht, die schwierigsten Komponenten mit dem

höchsten Risiko als Erstes zu implementieren (siehe Kapitel 3.5.4.1, S. 98). Drittens:

Aus den Interviews ist nicht zu erkennen, dass die Software-Projekte, an denen die

Interview-Partner gearbeitet haben, einen definierten Endzustand hatten. Dies kann

damit begründet werden, dass die Projekte, in denen die Interview-Partner gearbeitet

hatten, Innovationsprojekte innerhalb der Informatik darstellten (siehe Kapitel 3.5.6,

S. 104). Zum Beispiel herrschte bei der ersten Smalltalk-Implementierung in Basic

bei den Programmierern keine Klarheit darüber, wie umfangreich das Projekt ist und

Page 121: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

112

ob die Idee von Alan Kay sich überhaupt umsetzen ließe (Seibel, 2009 S. 4811 ff).

Die einzelnen Inkremente werden iterativ entwickelt. Die Iteration bezieht sich dabei

immer auf das lauffähige Programm und dient zudem der Priorisierung für die

Entwicklung weiterer Inkremente (siehe Kapitel 3.5.5, S. 103).

Insgesamt ähnelt das Vorgehensmodell sehr stark dem des Spiralmodells, wobei das

Vorgehen der vier Aktivitäten nicht formal abläuft. Identisch ist die Planung pro

Zyklus (siehe Kapitel 3.5.4.1, S. 98).

Das Prozessmodell nutzt Prinzipien und Methoden aus dem Timeboxing-Modell von

Jalote (siehe Kapitel 2.2.3.2, S. 40), Extreme Programming (siehe auch Kapitel

2.2.3.5, S. 48) und Feature Driven Development (siehe Kapitel 2.2.3.6, S. 54).

Das Timeboxing-Modell nutzt Prinzipien der ersten These (siehe Kapitel 3.5.1.1, S.

81). Dabei wird der Umfang eines Inkrements aufgrund der verfügbaren Zeit

definiert. Das Timeboxing-Modell ist damit das einzige Modell, in dem Zeit als ein

wesentlicher Faktor für die Projektorganisation und den Projektumfang gilt. Selbst

agile Prozessmodelle wie Scrum oder Extreme Programming richten die

Projektorganisation nicht an der verfügbaren Zeit aus, sondern an den zu

realisierenden Funktionen. Die Betrachtungsweise, Funktionen an

Fertigstellungszeitpunkte zu knüpfen, ist bei dem Timeboxing-Modell einzigartig.

Desweiteren finden sich Übereinstimmungen bei Extreme Programming. Die

Extreme Programming-Werte werden gelebt, besonders der Wert Einfachheit (siehe

auch Kapitel 3.5.5, S. 103). Allerdings wird die Kommunikation mit Hilfe von

Dokumenten nicht als zweitrangig angesehen (siehe Kapitel 3.5.3.1, S. 96). Duct

Tape Programmer dokumentieren durchaus, wenn das Werk woanders eingesetzt

wird. Betrachtet man die Extreme Programming-Prinzipien, so werden diese im Kern

gelebt. Hier sind insbesondere die Prinzipien inkrementeller Veränderung, um die

Komplexität zu beherrschen (siehe Kapitel 3.5.1.2, S. 83), und gezielte Experimente

durchzuführen (siehe Kapitel 3.5.4.1, S. 98). Bei den Managementkonzepten besteht

der wesentliche Unterschied darin, dass der Kunde nicht im Mittelpunkt steht

(Seibel, 2009 S. 2238). Dies trifft auch auf das Planungsspiel zu. Das Programm in

kurzen Release-Zyklen zu entwickeln, ist Teil des Vorgehensmodells eines „Duct

Page 122: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

113

Tape Programmers“. Bei den Teamkonzepten finden sich kaum Übereinstimmungen,

weil diese aus Sicht eines „Duct Tape Programmers“ individuell abhängig vom

Projekt und vom Team sind. Dies betrifft insbesondere „Code Ownership“ (siehe

Kapitel 4.1.3, S. 117) und die laufende Integration, wenn Unit Test nicht genutzt

werden (siehe auch Kapitel 4.2.3, S. 123). Bei den Programmierkonzepten wird

testgetriebene Entwicklung und Pair Programming abhängig davon genutzt, ob es im

Projekt sinnvoll ist (siehe Kapitel 4.2.2, S. 122 und 4.2.3, S. 123). Das Refactoring

wird als Konzept genutzt. Allerdings gibt es hierzu ergänzende Ansichten, was

Zeitraum, Umfang und Dokumentation betrifft (siehe auch Kapitel 4.2.4, S. 124).

Der Entwicklungsprozess entspricht eher dem Feature Driven Development. Ingalls,

Zawinski und Armstrong beschreiben die Organisation des Entwicklungsprozesses,

indem sie das Programm in Module aufteilen und an Entwickler verteilen. Die

Kommunikation der realisierten Module erfolgt über vorher definierte Schnittstellen.

Dieses Prinzip verfolgt Feature Driven Development ebenso (siehe auch Kapitel

3.5.4.2, S. 100). Der wesentliche Unterschied ist erneut die Kundensicht. Duct Tape

Programmer definieren die Module nicht aus Kunden-, sondern Entwickler-

perspektive. Das Ergebnis der Modulaufteilung kann aber durch das Vorgehen des

Prototypisierens ähnlich sein, weil die Lauffähigkeit der einzelner Module im

Mittelpunkt steht (Seibel, 2009 S. 245). Gekapselte Funktionen des Feature Driven

Development werden nach einem formaleren, aber ähnlichen Prinzip identifiziert und

in Prototypen realisiert. Aufgrund der ersten These priorisieren Duct Tape

Programmer Module vom Denkmodell eher aus der Sichtweise von Feature Driven

Development, also „must have“, „nice to have“, „add it if we can“ und „future“. Die

Realisierungszeiträume werden in den Interviews von Zawinksi, Ingalls und

Armstrong auf ein bis drei Tage beschränkt und orientieren sich damit an Extreme

Programming oder Scrum (siehe Kapitel 3.5.4.2, S. 100). Die in Feature Driven

Development beschriebene „Class Ownership“ ist abhängig vom Projekt und Team

(siehe Kapitel 4.1.3, S. 117). Grund für den Feature Driven Development ähnlichen

Entwicklungsprozess kann der Umstand sein, dass die Interview-Partner in der Regel

in der Softwareproduktentwicklung tätig waren (siehe auch Kapitel 3.5.5, S. 103).

Ob ein Rollenmodell in dem Entwicklungsprozess bei den Interview-Partnern

existiert hat, ist aus den Interviews nicht zu erkennen und damit unklar.

Page 123: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

114

Festzustellen ist, dass Duct Tape Programmer zwar ein eigenes Vorgehens- und

Prozessmodell besitzen, Facetten dessen aber bereits in anderen Vorgehens- und

Prozessmodellen vorkommen. Wesentlicher Unterschied zu allen anderen Modellen

ist, dass Duct Tape Programmer mit Menschenverstand Prinzipien, Methoden und

Werkzeuge projekt- und teamabhängig wählen und einsetzen. Zudem kommen sie

mit jedem Modell aus. Die Ausnahme bildet hier das Wasserfallmodell (siehe

Kapitel 3.5.2.1, S. 88).

Zawinskis beschriebenes Modell (siehe Kapitel 3.5.4.2, S. 100) ist im Kontext zu

James Coplien „The Pattern language“ (Coplien, 1998) besonders interessant.

Zawinski zeigt hier ein mögliches Vorgehensmodell für das in „Pattern 3“

beispielhaft beschriebene „Solo Virtuoso“ und die in „Pattern 6“ beschriebenen

„Domain Expertise in Roles“ auf. Beide gehen in „Pattern 9: Developer Controls

Process“ auf (Coplien, 1998 S. 253 ff.). Zudem beschreibt Zawinski in seinem

Interview, dass die Kommunikation zwischen den einzelnen Programmierern mittels

definierter Schnittstellen erfolgen müsste (Seibel, 2009 S. 277). Diese Art von

Entwicklungsprozess fördert das in „Pattern 17“ beschriebene Code Ownership und

entspricht dem „Conway‟s-law-in-the-small“30

(Coplien, 1998 S. 267 ff.).

Desweiteren kann festgestellt werden, dass keines der bekannten Software-

Engineering-Modelle eine standardisierte Kommunikation von Modulen über

Schnittstellen als Kommunikationsinstrument erwähnt.

4.1.2 Do you ever do any pair programming?

Armstrong macht den Einsatz der Paar-Programmierung abhängig von der

Qualifikation der Entwickler. Dabei stellt er drei unterschiedliche Szenarien auf.

Erstens: Wenn zwei gleichwertig qualifizierte Entwickler Pair Programming als

Methode nutzen, um ein Problem zu lösen, für das beide keinen Lösungsansatz

besitzen. In diesem Szenario hält Armstrong die Methode für hilfreich. „So if you

30 Nach Coplien ist “Code Ownership” das Resultat hervorgerufen durch Schnittstellen innerhalb einer

Architektur („to have ownership, there must be interfaces“) und beschreibt es als “Conway‟s-law-in-the-small”.

Nach Tim Born gibt es zudem eine Gemeinsamkeit zwischen „Code Ownership“ und Objekt-Orientierter-

Programmierung, aufgrund der Kapselung von Software-Komponenten. (Coplien, 1998 S. 267ff)

Page 124: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

115

don‘t know what you‘re doing then I think it can be very helpful with someone who

also doesn‘t know what they‘re doing.― (Seibel, 2009 S. 2884). Eine weitere

Methode, die im Zusammenhang des Pair Programming bei Entwicklern auf gleicher

Augenhöhe genannt wird, sind „Pair Debugging Sessions“. Die Methode sieht vor,

dass Entwickler eigenständig und separat voneinander Quellcode/Systemmodule

schreiben und diesen anschließend zusammen debuggen. Hierbei werden in den

Interviews zwei Arten genannt. Ingalls führt das Debugging mit dem Programmier-

kollegen durch. Ingalls: „Usually I‘ve been on my own or working on a separate

part. There are lots of projects on which I‘ve worked with others, and many intense

pair debugging sessions.― (Seibel, 2009 S. 4972). Während Bloch und Norvig

angeben, dass der jeweils andere Entwickler den Quellcode des anderen debugged.

Im Gegensatz zum Refactoring passt der Kollege den Code an seine Bedürfnisse an

(Schnittstellen, Funktionen) und überprüft dabei die Lauffähigkeit. Bloch: „I love

Buddy Programming where you‘re working with someone Else but not on the same

keyboard. You‘re writing different parts of the system – you trade the code back and

forth.‖ (Seibel, 2009 S. 2525) Norvig: ―If you have two good programmers, it‘s

better for them to work independently and then debug each others work afterwards

[…].― (Seibel, 2009 S. 3697).

Zweitens: Wenn die Qualifikationen der Entwickler leicht unterschiedlich sind, kann

der schwächere Entwickler beim Paar-Programmieren durch Beobachtung von dem

Besseren lernen. Thompson führt hierzu aus: „If you have one programmer who‘s

better than the other one, then there‘s probably benefit for the weaker programmer

or the less experienced programmer to observe the other one.― (Seibel, 2009 S.

2885).

Drittens: Wenn die Qualifikation beider Entwickler zu weit auseinander liegen,

sollte Pair Programming nur unter bestimmten Bedingungen erfolgen, weil sich sonst

der schwächere Programmierer dumm fühlt. „[…] But if the gap is too great then

they won‘t learn, they‘ll just sit there feeling stupid.― (Seibel, 2009 S. 2886),

argumentiert Armstrong. Bloch und Norvig relativieren dies allerdings, indem sie

bestimmte Rahmenbedingungen aufzeigen, in denen Paar-Programmierung bei stark

unterschiedlichen Qualifikationen funktionieren kann. Zum einen sollten bei stark

Page 125: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

116

unterschiedlichen Qualifikationen die Rollen beider Entwickler vorher definiert

werden. Das Verhältnis, welches Norvig hier aufführt, ist das Lehrer/Schüler-Modell.

Wenn von Anfang an Klarheit über die Rollen herrscht, kann der Schwächere von

dem Stärken durch Beobachten lernen. „I think the best part of the apprentice

approach is that you get to watch the master, and I would like see more of that. So I

guess that‘s another use of pair programming.― (Seibel, 2009 S. 3707). Zum anderen

kann laut Bloch Pair Programming auch im Rahmen eines Code Reviews stattfinden.

In diesem Szenario werden die Änderungen am Code von einem höher Qualifizierten

durchgeführt und der schwächere Entwickler schaut zu. „Typically it‘s in the context

of a code review […] there‘ll be a lot of changes and I‘ll say – Why don‘t we just sit

together at a maschine and bash it into shape? […] I think it‘s a great way to teach,

to pass knowledge down from one generation of hacker to the next.― (Seibel, 2009 S.

2532). Diese Methodik wird auch von Martin Fowler als ein Zeitpunkt aufgegriffen,

in dem das Refactoring praktiziert werden sollte (Refactor as you do a code review).

Allerdings nicht im Kontext der Paar-Programmierung, sondern im Rahmen einer

Software-Inspektion in Form der Durchsicht oder Stellungnahme (Fowler, et al.,

2004 S. 59). Zudem ist Paar-Programmierung abhängig von der Persönlichkeit des

Entwicklers. Armstrong kann zum Beispiel bei schwierigen Problemen besser allein

arbeiten (Seibel, 2009 S. 2887), während Fritzpatrick einen Dritten benötigt, um

nicht abgelenkt zu werden (Seibel, 2009 S. 947).

Zusammenfassend kann festgestellt werden, dass Paar-Programmierung abhängig

von der Qualifikation der Entwickler eingesetzt werden sollte. Als grundsätzliche

Bedingung müssen allerdings beide Entwickler die Methode für sich selbst als

hilfreich einschätzen und nicht als störend empfinden. Norvig und Thompson

schätzen den Effizienzgewinn bei der Paar-Programmierung allerdings als gering ein.

Norvig empfiehlt Pair Programming dosiert einzusetzen: „Ten percent of the time it

is a really good idea to sit down together because you want that shared

understanding. I think most of the time you‘re not going to be as effective.― (Seibel,

2009 S. 3696). Thompson sieht es als Methode an, um die Fehlerquote insgesamt zu

reduzieren. Besserer Quellcode entsteht durch den Einsatz der Methode allerdings

nicht. „The result isn‘t better. Probably debugging is faster – a you‘re typing,

someone can catch a bug over your shoulder.― (Seibel, 2009 S. 6026).

Page 126: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

117

Das sequenzielle Debuggen des Quellcodes des jeweils anderen Entwicklers kann

eine neue Methodik der Paar-Programmierung sein. Obwohl dies eher der Software-

Inspektion in Form der Stellungnahme zugeordnet werden müsste. Das gleichzeitige

Arbeiten am Quellcode, welches die Paar-Programmierung charakterisiert, fehlt bei

dieser Methodik. Anerkannte Varianten von der Paar-Programmierung sind derzeit

„Distributed Pair Programming“ (Schümmer, et al., 2009) und „Ping Pong Pair

Programming“ (Cunningham & Cunningham, 2003).

4.1.3 What about code ownership? It is important for people to own code

individually or is it better for a team to share ownership?

Im Kern werden beide Perspektiven „Code Ownership“ und „Collective Code

Ownership“ gleichberechtigt behandelt. Es wird als wichtig erachtet, im Projektteam

den Code untereinander zu kennen. Andererseits wird es nicht abgestritten, dass

Code Ownership existiert. In Blochs Interview wird der Konflikt sehr deutlich.

Rational ist es ihm bewusst, dass Quellcode dem Team gehören soll – emotional

streitet er dies jedoch ab. Seine rationale Antwort auf die Frage lautet: „[…] So it‘s

really important that multiple people learn about each piece of code and are able to

work on it. But I think it‘s unrealistic to expect everyone to own all the code.― Die

emotionale hingegen: „I believe code ownership can‘t be denied. In a way, it‘s like

motherhood – you give birth to the code that you write and especially it‘s large,

complex, or original, it is yours. […] If you break someone else‘s code, that‘s not

nice.― (Seibel, 2009 S. 2537). Fritzpatrick sieht es aus dem Projektteam-Gedanken.

Er kann sich nicht vorstellen, dass Code Ownership in der heutigen Zeit noch

existiert. „I don‘t think code should be owned. I don‘t think anyone really thinks

that.― (Seibel, 2009 S. 958), Sein Statement steht für die Open-Source-Generation.

Thompson sieht es sehr praktisch aus Entwicklersicht: „The catchphrase is, – you

touched it last – you own it.― (Seibel, 2009 S. 6018). Auch Zawinski sieht beide

Perspektiven als wichtig an, stellt jedoch besonders heraus, dass Entwickler

Verantwortung für ihren Quellcode übernehmen müssen und nicht das gesamte

Projektteam. „[…] It‘s certainly good for other people to have their hands in it, if

only because you‘re not going to be maintaining it yourself forever. It‘s going to

have to be handed off to someone else for one reason or another. But it‘s also good

Page 127: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

118

to have someone to blame. If everybody is responsible for it then there‘s no one to

put their foot down.― (Seibel, 2009 S. 539). Bloch nennt zudem einen Grund, warum

Code Ownership in Projektteams durchaus Sinn machen kann. Softwareentwickler

sind in der Regel Spezialisten auf einem Fachgebiet und keine austauschbaren

Generalisten. Wenn Entwickler gezwungen werden, an Lösungen zu arbeiten, für die

sie nicht spezialisiert sind, kann die Softwarequalität sinken. „Engineers have things

that they‘re good at and things they‘re not so good at. There are people who would

like to pretend that this isn‘t so, that engineers are interchangeable, and that anyone

can and should be a total generalist. […] If you force them all to do everything,

you‘ll probably make mediocre products.‖ (Seibel, 2009 S. 2358).

Zusammenfassend kann man feststellen, dass die Interview-Partner eine gesunde

Einstellung zum Code Ownership besitzen. Code Ownership wird nicht geleugnet.

Collective Code Ownership wird akzeptiert. Besonders interessant ist Fritzpatricks

Einstellung zum Code Ownership. Die Open-Source-Bewegung hat offensichtlich

besonderen Einfluss auf Entwickler, die seit der Bewegung und in diesem Umfeld

aufgewachsen sind. Das dogmatische Durchsetzen des Code Ownership hilft in

Projekten nicht. Insbesondere dann, wenn Code Ownership im Projekt aufgrund des

hohe Spezialisierungsgrad der Entwickler Sinn macht.

Nach Copliens entsteht in Großprojekten aufgrund der Organisationsform und

Architektur der Software automatisch Code Ownership. Dies begründet er damit,

dass komplexe Software nur durch Spezialwissen beherrscht werden kann. Coplien

nennt auch die Rahmenbedingungen hierzu: Erstens: Code Ownership muss in Form

von „Domain Experise in Roles“ (Coplien, 1998 S. 256) im Projekt vorhanden sein.

Und zweitens: Ein Architekt muss die Architektur als Gesamtes im Überblick

behalten, um einen Tunnelblick zu verhindern (Coplien, 1999 S. 5-14).

4.1.4 Do you consider yourself a scientist, an engineer, an artist, or a

craftsman?

Peter Seibel hat diese Frage nicht Armstrong, Steele, Deutsch und Knuth gestellt.

Jones beantwortet die Frage nicht eindeutig. Die Grundgesamtheit ist demnach elf.

Die Antworten fallen unterschiedlich aus. Besonders auffällig ist, dass nur Norvig

Page 128: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

119

und Allen eine eindeutige Zuordnung machen. Norvig sieht es als „Craft“ und

begründet es mit der Funktionalität, die Programme besitzen (müssen). „But I don't

think of as art. I think craft is really the right word for it. You can make a chair, and

it's good looking, but it's mostly functional – it‘s a chair.― (Seibel, 2009 S. 4034).

Allen sieht sich eindeutig als „Scientist“: „I think of myself as a computer scientist.―

(Seibel, 2009 S. 6311). Zawinski, Thompson und Cosell beschreiben es als seine

Kombination von „Artist“ und „Craftsman“, wobei der Schwerpunkt unterschiedlich

ist. Zawinski macht den Anteil abhängig vom Projekt: „Somewhere between

craftsman and artist, depending on what the project is― (Seibel, 2009 S. 561),

während Thompson den Anteil „Artist“ als geringer einschätzt: „I believe a

craftsman but with certain amount of artistry to keep it alive.― (Seibel, 2009 S.

5923). Cosell hingegen sieht beides als neutral an: „The way I do engineering is as a

combination of art and craft.― (Seibel, 2009 S. 6944). Fritzpatrick sieht sich als

„Engineer“ in Bezug auf das Softwaredesign. An zweiter Stelle kommt „Scientist“

für die Methodik und die Herangehensweise an Problemstellungen: „I would say,

scientist are second, but only in the sense of scientific method of changing one thing

at a time and how you diagnostic problems. Engineer for the design aspect of

things.― (Seibel, 2009 S. 1143). Ingalls setzt alle vier in eine Reihenfolge. Als Erstes

steht die Kombination zwischen „Scientist“ und „Artist“, danach folgt „Craft“ und

zum Schluß „Engineer“ (Seibel, 2009 S. 5145). Eich und Bloch sehen es als

Kombination von „Scientist“, „Engineer“ und „Craftsman“. Eich sieht die

Schwerpunkte wie Zawinski ähnlich abhängig vom Projekt und der Aufgabe.

„Programming is partly engineering; there's maybe some math on a good day. and

then there's a lot of practical stuff that doesn't even rise to the level of engineering.

Maybe it'll be formalized more over time.― (Seibel, 2009 S. 2026). Bloch beschreibt

es sehr philosophisch und versucht, sich von dem Schubladendenken zu entfernen.

Eine Priorisierung führt er nicht durch. „What we're doing is an aesthetic pursuit. It

involves craftsmanship as well as mathematics and it involves people skills and prose

skills – all of these things that we don't necessarily think of as engineering but

without which I don't think you'll ever be a really good engineer.― (Seibel, 2009 S.

2575). Crockford ist der Einzige, der die Kategorisierung in Frage stellt, indem er

sich als Schriftsteller bezeichnet, der in Englisch oder in Javascript schreibt. „I think

Page 129: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

120

myself as writer. Sometimes I write in English and sometimes I write in javascript.―

(Seibel, 2009 S. 1578).

Insgesamt kann festgestellt werden, das „Craft“ am häufigsten von den Interview-

Partnern genannt wird, gefolgt von „Scientist“ – „Artist“ und „Engineer“ sind

gleichauf. Zudem werden die Begriffe nicht einzeln genannt, sondern in den meisten

Fällen als Paar. Die Begriffe besitzen inhaltlich jedoch deutliche Unterschiede.

Offensichtlich ist Engineering als Begriff in Software-Engineering zu

eindimensional, um die Entwickler-Tätigkeit zu beschreiben. Aus dem

Positionierungskreuz ist zu erkennen, dass bis auf Ingalls niemand „Artist“ und

„Engineer“ als Beschreibung genutzt hat.

Abbildung 16: Positionierungskreuz Scientist, Engineer, Artist, Craftsman (eigene Darstellung)

Der Vergleich mit „Scientist“, „Engineer“, „Artist“ und „Craft“ dient nur als

mentales Denkmodell, um eine mögliche Zuordnung der eigenen

Page 130: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

121

Programmiertätigkeit für Dritte verständlich zu machen. In diesem Fall, müsste ein

neuer Begriff als „Engineering“ gefunden werden. Diese Ansicht vertritt Alistair

Cockburn (Cockburn, 2004) und Ludewig et al. (Ludewig, et al., 2010 S. 48) ebenso.

4.2 Aussagen, die Themenfelder des Software-Engineerings betreffen

Neben den direkten Fragen, die Peter Seibel zum Software-Engineering gestellt hat,

sind innerhalb der Interviews auch inhaltliche Aussagen zu Software-Engineering im

Allgemeinen und zu speziellen Themen wie Test Driven Development, Unit Tests

und Refactoring gefallen.

4.2.1 Allgemeine Aussagen zum Software-Engineering

Bloch, Deutsch und Knuth führen drei wesentliche Punkte auf, die im Software-

Engineering seit Beginn diskutiert werden. Brooks These „Adding people to a late

software project makes it later“ entspricht nach Bloch der Wahrheit und hat bis heute

Bestand (Seibel, 2009 S. 2165). Deutsch führt auf, dass das Software-Engineering bis

heute keine guten Werkzeuge besitzt, um ein System zu beherrschen, wenn es wächst

und groß wird. Er klassifiziert dabei in zwei Arten des Wachstums. Wenn ein kleines

zum mittelgroßen anwächst und wenn ein mittelgroßes zu einem großen anwächst.

Letztes ist nach Deutsch mit unseren derzeitigen Werkzeugen nur schwer

beherrschbar (Seibel, 2009 S. 5306). Knuth betrachtet die „Silver Bullet“-Diskussion

aus einer interessanten Perspektive: In der Informatik steigt die Komplexität

kontinuierlich an und erreicht immer wieder die Grenzen von dem, was die

Informatik und Menschen leisten können. Diese Mentalität führt zwangsweise zu

fehlerhafter Software, es sei denn, man gibt das Komplexitätsbestreben in der

Informatik auf. Damit der Hunger nach steigender Komplexität beherrscht werden

kann, kommen immer wieder neue Vorgehens- und Prozessmodelle auf. Diese sollen

die Komplexität reduzieren und die Softwareentwicklung vereinfachen, bis

festgestellt wird, dass dies nicht möglich ist. Deutsch nennt sich deshalb auch nicht

Wissenschaftler, weil er seit 50 Jahren in der praktischen Informatik tätig ist und seit

30 Jahren keine signifikante Verbesserung festgestellt hat. Als Beispiel nennt er die

Nutzung von „Pointer“ in verbreiteten Programmiersprachen (Seibel, 2009 S. 7420).

Page 131: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

122

Bloch stellt im Interview fest „Programming is fundamentally different to the way

we construct things in the real world― (Seibel, 2009 S. 2691) und bezieht sich damit

auf die Eigenschaften von Software. In der realen Welt werden Sachen konstruiert,

indem man Objekte zusammensetzt. Als Beispiel nennt er den Hausbau und

Computer-Chips. Dabei kommt er zur Schlussfolgerung: „And that‘s how you make

hardware. But we don‘t make software like that. We should make software like that

and we don‘t.― (Seibel, 2009 S. 2691).

4.2.2 Test Driven Development

Norvig vertritt die Ansicht, dass Test Driven Development in erster Linie zur

Fehlerkorrektur eingesetzt wird und keinen Einfluss auf das Software-Design

besitzen sollte. Er begründet es damit, dass ein fehlerhafter Test keine Aussage über

das Softwaredesign gibt. Die Bestandteile eines Designs können erst dann getestet

werden, wenn sie vorhanden sind. Tests können dann eine Aussage darüber geben,

wie gut einzelne Bestandteile miteinander interagieren und wo die Grenzen sind. Ein

Design sollte allerdings nicht daran ausgerichtet werden, weil ein Test

fehlgeschlagen ist (Seibel, 2009 S. 3829).

Betrachtet man Norvigs Aussage aus Kent Becks Sicht des Test Driven

Developments, stellt man fest, dass beide in ihrer Aussage nicht weit auseinander

liegen. Beck geht davon aus, dass sich Softwaredesign in einer Projektorganisation

auf Basis von ausführbarem Code organisch entwickelt. „We must design

organically, with running code providing feedback between decisions.‖ (Beck, 2004

S. ix). Nach Beck ist der Grundgedanke beim Test Driven Development zu wissen,

dass eine Lücke zwischen der Entscheidung und dem Feedback während der

Programmierung vorherrscht, sowie zu wissen, mit welchen Techniken diese Lücke

geschlossen werden kann. Softwaredesign vor den Tests zu erstellen, zeigt, dass

Klarheit über Entscheidung und Feedback herrscht und widerspricht nach Beck Test

Driven Development nicht (Beck, 2004 S. xii). Im Gegensatz dazu steht Robert

Martins Sichtweise „[…] The act of writing a unit test is more an act of design than

of verification […]―, der Unit Test als Mittel zum Design sieht (Martin, 2003 S. 23).

Deshalb kann davon ausgegangen werden, dass sich Norvig auf Martins Sicht im

Interview bezieht.

Page 132: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

123

In den Interviews berichten Eich und Armstrong, dass Test Driven Development

ihnen beim Programmieren enorm geholfen hat. Eich erwähnt dies im Rahmen der

Entwicklung bei Mozilla mit Firefox (Seibel, 2009 S. 1742). Armstrong nutzt selbst

die Technik beim Entwickeln (Seibel, 2009 S. 2779). Auch Norvig nutzt Test Driven

Development im Rahmen des Softwaredesigns „I think test-driven design is great. I

do that a lot more than I used to do.― (Seibel, 2009 S. 3772). Das Design aufgrund

eines fehlerhaften Tests zu ändern oder darauf auszurichten, sollte während der

Entwicklung trotzdem kritisch hinterfragt werden (siehe auch 3.5.1.4, S. 85).

4.2.3 Unit Tests

Fritzpatrick missbraucht Unit Test für zwei sinnvolle Zwecke. Erstens: zum

Debuggen von Quellcode. Er unterteilt dabei eine große Funktion in mehrere

kleinere und testet diese dann einzeln mit Unit Test. Im Rahmen des Refactoring

setzt er danach die einzelnen Funktion wieder zu einer gesamten zusammen (Seibel,

2009 S. 1038). Zweitens: wenn er eine Bibliothek von Dritten benutzen möchte,

prüft er vorher mit Unit Tests die Funktionen die er benutzen möchte. „I figure

sicnce I‘m going to have to write something to learn the library anyway, my first

Hello World program might as well be a unit test against it.― Damit prüft er, ob die

Bibliothek den Funktionsumfang bietet, den er benötigt, und ob die Funktionen, die

er nutzt, frei von Fehlern sind (Seibel, 2009 S. 1098). Fritzpatrick nutzt damit Unit

Test in einem interessanten Kontext, einmal zum Code Review sowie für das

Refactoring und zum anderen zum Testen von Bibliotheken. Er befolgt damit Blochs

Methodik, dass Test Driven Development und Refactoring im ersten Schritt bei der

Benutzung einer API durchgeführt werden sollte (siehe auch Kapitel 3.5.1.5, S. 86).

Norvig rät Programmierern zum einen viele Unit Tests zu schreiben, und zum

andern, nicht boolisch, sondern in qualitativen Aussagen zu denken. Ein Test muss

nicht immer wahr oder falsch sein. Wenn in einem Suchergebnis 80 % richtige

Antworten vorkommen sollen, ist dies nicht gleichbedeutend damit, dass die

restlichen 20 % ein Fehler sein müssen. Desweiteren rät er, sich Gedanken über

alternative Fehlermodi in Programmen zu machen. Als Beispiel gibt er ein

persönliches Erlebnis an. Am Flughafen war der Strom ausgefallen. Die Flugzeuge

sind aber trotzdem pünktlich geflogen, weil der Flugplan als Ausdruck vorlag.

Page 133: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

124

Zudem lassen sich vier zentrale Aussagen aus den Interviews ableiten. Erstens: Unit

Tests verlangsamen die Entwicklung im ersten Schritt. Zawinski (Seibel, 2009 S.

461) und Knuth (Seibel, 2009 S. 7131) beschreiben dies im Kontext des ersten

Softwarerelease von Netscape und TeX (siehe auch Kapitel 3.5.1.1, S. 81).

Zweitens: Unit Tests beschleunigen langfristig den Entwicklungsprozess.

Fritzpatrick beschreibt dies aus der Maintenance-Perspektive eines Live Services.

(Seibel, 2009 S. 727) „It's always easier to do something right the first time than to

do a migration with a live service. That's the biggest pain in the ass ever.― (Seibel,

2009 S. 798). Drittens: Unit Tests sind kein Ersatz für eine technische Spezifikation.

Unit Tests stellen lediglich sicher, dass der Code die Spezifikationen einhält. Bloch

führt hierzu auf: „I don‘t think tests are even remotely an acceptable substitute for

documentation. Once you‘re trying to write something that other people can code to,

you need precise specs, and the tests should test that the code conforms to those

specs.― (Seibel, 2009 S. 2284). Damit stellt sich Bloch gegen Robert Martins Sicht,

dass Test Driven Development der Spezifikation dient und nicht der Validierung

(Martin, 2003 S. 23). Viertens: Norvigs These, dass Unit Tests keine Hilfe sind, um

das eigentliche Problem zu lösen (siehe hierzu auch Kapitel 3.5.1.4, S. 85) (Seibel,

2009).

4.2.4 Refactoring

In den Interviews werden zum Refactoring drei Methoden angesprochen die sich in

Zeitpunkt, Umfang und Dokumentation aufteilen lassen.

Zeitpunkt – Crockfords These ist, dass ein Refactoring des kompletten Quellcodes

alle sechs Entwicklungszyklen geschehen sollte. Der Zeitrahmen der Zyklen ist dabei

unerheblich und sollte abhängig vom Projekt sein. Wird Scrum als Prozessmodell

genutzt, sollte jeder siebte Sprint ein Refactoring Sprint sein. Besitzt ein Projekt

einen monatlichen Lieferzyklus, sollte nach sechs Monaten ein Monat für das

Refactoring der Codebasis genutzt werden. Die Abgrenzung, wann ein Refactoring

oder ein Rewrite stattfinden sollte, macht Crockford abhängig von den

Programmierern im Projekt. Diese würden aufgrund der Codebasis wissen, wann ein

Rewrite notwendig sei, und nicht das Management (Seibel, 2009 S. 1396).

Page 134: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

125

Umfang – Cosell unterteilt den Umfang und Dauer der Änderungen des Bugfixing in

drei Stufen. Bei zwei von drei Stufen nutzt sie die Möglichkeit, beim Bugfixing den

Code zu refactoren (Fowler, et al., 2004 S. 58). Die erste Stufe ist die schnellste und

vom Umfang am geringsten. In ihr wird nur die fehlerhafte Zeile ausgetauscht. In der

zweiten Stufe wird der betroffene Codeabschnitt komplett neugeschrieben (siehe

Kapitel 3.5.4.3, S. 102). Die dritte Stufe hat zum Ziel eine bessere Version des

Programms zu erstellen, indem auch abhängige Codeabschnitte ein Rewrite erhalten

oder durch Refactoring verbessert werden (Seibel, 2009 S. 6876).

Dokumentation – Knuth beschreibt einen Refactoring-Ansatz zur Vermeidung von

„Premature Optimization“31

. Damit der Quellcode beim nachträglichen Optimieren

lesbar bleibt, sollte der alte Quellcode auskommentiert und damit in Form einer

Versionierung stehen bleiben. Er empfiehlt dabei eine Optimierung des Quellcodes

in Stufen, wobei jede neue eine Verbesserung der vorherigen darstellt. „Section one

– here‘s a naive implementation of this algorithm; section two – here‘s a slightly

souped-up version of section one; and section three, here‘s the one we actually use

which you would never understand if you hadn‘t read the first two sections.― (Seibel,

2009 S. 7223). Durch diese Vorgehensweise bleibt die Historie des

Optimierungsvorgangs im Quellcode erhalten. Der Ansatz wird gemäß Knuth dem

Literate Programming zugerechnet.

Alle drei Ausführungen besitzen praktische Relevanz und haben ihre Berechtigung.

Die Methoden werden als solche in der Form nicht in Literatur aufgeführt. Besonders

hervorzuheben ist, dass Cosell in dem Interview zugibt, Refactoring nicht zu kennen

(Seibel, 2009 S. 6876).

31 Der Satz „We should forget about small efficiencies, say about 97% of the time: premature optimization is the

root of all evil“ wird oft mit Donald Knuth in Verbindung gebracht, der es in seinem Aufsatz „Structured

Programming with go to Statements“ inhaltlich beschrieben hat (Knuth, 1974 S. 294). Der Aufsatz ist die

Widerlegung von Knuth zu Dijkstras Aufsatz „Go To Statement Considered Harmful“ (Dijkstra, 1968 S. 147-

148). Als Urheber gilt Tony Hoare, der wiederum auf Edsger Dijkstra verweist mit dem Hinweis, dass er dieses

Zitat für „common culture or folklore“ hält (Gerwitz, 2004). „Premature Optimization“ soll Entwickler hindern,

bereits bei der Entwicklung klassische Code-Optimierung zu betreiben, und soll sie gleichzeitig ermutigen, gute

Algorithmen zu entwickeln und diese vernünftig zu implementieren. (Hyde, 2004 S. xviii)

Page 135: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

126

4.3 Einordnung in die Softwareentwicklung

Betrachtet man den Charakter, die abgeleitete Mentalität und die Aussagen aus

diesem Kapitel, stellt sich die Frage, wie der Duct Tape Programmer in die

Softwareentwicklung eingeordnet werden kann. Wird die abgeleitete Mentalität aus

dem Kapitel 3.6 (S. 105) betrachtet, erkennt man, dass diese im Wesentlichen aus

Charakteristika abgeleitet worden ist, die im Kontext von Softwareprojekten genannt

wurden. Auf Basis des Wissens über den Stereotypen kann deshalb derzeit nur

festgestellt werden, welche Rahmenbedingungen ein Softwareprojekt besitzen sollte,

um die Anforderungen, die ein Duct Tape Programmer an ein Projekt stellt, zu

erfüllen.

Wie bereits in Kapitel 4.1.1 (S. 110) festgestellt, kommt ein Duct Tape Programmer

mit jedem Vorgehens- und Prozessmodell zurecht, mit Ausnahme des

Wasserfallmodells. Daneben gibt es individuelle Abneigungen, mit denen ein

Softwareprojekt oder das Unternehmen rechnen muss. Thompson berichtet zum

Beispiel in den Interviews, dass es ihm nicht erlaubt sei, bei Google Code

einzuchecken, weil er sich weigert, in C++ zu entwickeln (Seibel, 2009 S. 5951).

Allerdings hat Google sehr genau erkannt, in welchem Projektumfeld Thompson

wirken kann. „But I‘m not actually production either. I‘m in projects that will be

become production. […] would be just to find something to make life better. Or have

some new idea of new stuff that replaces old stuff. Try to make it better.― (Seibel,

2009 S. 5940). Thompson beschreibt damit Projekte, die Innovationscharakter

besitzen. Eine Innovation definiert Hausschildt wie folgt: „Innovationen sind im

Ergebnis qualitativ neuartige Produkte oder Verfahren, die sich gegenüber dem

vorangehenden Zustand merklich – wie auch immer das zu bestimmen ist –

unterscheiden. […]― (Hausschildt, 1993 S. 4-6). Demnach sind Duct Tape

Programmer Entwickler, die in Projekten wirken, die neue Produkte oder Verfahren

entwickeln. Betrachtet man die Projekterfolge in Kapitel 3.5.6 (S. 104), erkennt man,

dass alle die Projekte Innovationscharakter besessen haben oder noch besitzen und

dabei die Informatik maßgeblich beeinflusst haben.

Die Rahmenbedingungen, die in einem Projekt vorherrschen sollten, können

ebenfalls anhand der Kenntnis, die wir bisher über den Duct Tape Programmer

Page 136: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

127

haben, festgestellt werden. Erstens muss das Projekt etwas Neues entwickeln oder

Bestehendes signifikant verbessern, das vorher noch nicht existiert hat (Seibel, 2009

S. 1411). Zweitens: Die technische Umgebung, in der entwickelt wird, muss frei von

Abstraktionsebenen sein und dem Entwickler die Möglichkeit der systemnahen

Programmierung geben (Prinzip „close to the metal“, siehe Kapitel 3.5.2.4, S. 91).

Die Werkzeuge sollte im besten Fall der Programmierer selbst bestimmen können.

Drittens: Das Projekt benötigt keine ausführliche Spezifikation, sondern es reicht

eine Metapher aus, wie es in Extreme Programming zu finden ist (Seibel, 2009 S.

4813). Viertens: Die Projektorganisation muss den Entwicklern die Möglichkeit

einräumen, sofort in ausführbarem Code Lösungsansätze zu entwickeln (siehe

Kapitel 3.5.2.2, S. 89 und Kapitel 3.5.1.2, S. 83). Fünftens: Das Projektteam sollte

beim Projektstart eine Größe von nicht mehr als drei bis vier Programmierern mit

vergleichbarer Qualifikation besitzen (siehe Kapitel 3.5.4.2, S. 100). Sechstens: Ist

das Projekt an eine Deadline gebunden, müssen Funktionen zugunsten des

Abgabezeitpunkts gestrichen werden dürfen (siehe Kapitel 3.5.1.1, S. 81).

Betrachtet man die Gegenperspektive, ist der Duct Tape Programmer kein

Programmierer, der in die Metapher des „industriellen Produktionsprozesses“ passt.

Die industriellen Entwicklungsprozesse und festgefahrenen technischen

Infrastrukturen der Industrie betrachtet er aufgrund seiner Mentalität kritisch oder

lehnt sie ab (siehe auch Kapitel 3.6, S. 105).

4.4 Kritische Würdigung

Ob die Mentalität des Duct Tape Programmers eine Einflussgröße auf das Software-

Engineering hat, kann im Rahmen dieser Arbeit nicht festgestellt werden. Das Buch

„Coders at Work“ und der Artikel „The Duct Tape Programmer“ von Joel Spolsky

können nur als Grundlage dienen, um eine Charakter- und Mentalitätsbestimmung

durchzuführen. Um ein wissenschaftlich repräsentatives Ergebnis zu erhalten,

müssen mehr Programmierer befragt werden. Dies müsste über eine empirische

Studie in Form eines Fragebogens und Auswertung erfolgen. Zudem stellt sich bei

der Charakterbestimmung auch die Frage, ob es noch weitere Stereotypen von

Programmierern gibt. So wurde in dieser Arbeit als Gegenpol zum Duct Tape

Programmer der „Industrieprogrammierer“ als Metapher zur Abgrenzung benutzt.

Page 137: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

128

Ob es diesen gibt und ob er wirklich aus wissenschaftlicher Sicht einen adäquaten

Gegenpol darstellt, ist unbekannt. Eines lässt jedoch mit Sicherheit sagen: Ein Duct

Tape Programmer ist für Innovationsprojekte prädestiniert. In diesen Projekten

entfaltet er einen enormen Wirkungsradius und hat nachhaltigen Einfluss auf das

Projektergebnis und auf die Informatik. Ob die in diesem Kapitel aufgeführten neuen

Methoden und Modelle letztendlich einen Weg in die wissenschaftliche Literatur

finden werden, ist fraglich. Software-Engineering ist eine Wissenschaft, die stark von

Evangelisten beeinflusst wird. Ohne sie wäre die agile Bewegung nicht entstanden.

Auch wenn Crockford anmahnt, dass Programmierer sich mehr für den

Gestaltungsprozess einsetzen sollten, besitzen Duct Tape Progammer als „Coding

Monkeys“ in der Praxis wenig Einfluss auf Softwareherstellungsprozesse. Trotzdem

muss man feststellen, dass Zawinskis Modell ein sehr hohes Potenzial hat, neben

Extreme Programming, Feature Driven Development und Scrum genannt zu werden,

wenn es denn weiter ausgearbeitet werden würde.

5 Zusammenfassung und Fazit

Vorgehens- und Prozessmodelle wurden von sehr intelligenten Informatikern

entwickelt, mit einer sehr technischen Sicht auf unsere Welt. Zum Lösen der

„accidential problems“ ist dies die richtige Perspektive und hat Software-Engineering

sehr weit gebracht. Betrachtet man die „essential difficulties“, kommen sehr schnell

die menschlichen Schwächen zum Vorschein. Wir sind keine Maschinen, auch wenn

die Informatik dies glaubt. Unsere Vorstellungskraft ist zum Beispiel im Gegensatz

zu unserer Fantasie begrenzt, und es fällt uns sehr schwer, immaterielle Erzeugnisse

in ihrer Größe und Komplexität abzuschätzen. Dazu kommt noch, dass nicht jeder

Informatiker ein Genie ist und beliebig komplexe Algorithmen oder komplexen

Programmcode versteht. Diese menschliche Schwäche lässt sich nicht durch unsere

Ratio ausgleichen. Hier stellt sich die Frage, ob die Klügsten und Besten der

Informatik für das Gestalten von Werkzeugen, Prinzipien oder Methoden in der

letzten Instanz zum Lösen der „essential difficulties“ überhaupt geeignet sind. Bloch

beschreibt in seinem Interview sehr deutlich seine Sichtweise zu dieser Thematik.

Seine Aussage bezieht sich zwar auf APIs und wie er seine Arbeit beschreiben

würde, die Kernaussage von ihm ist aber allgemein gültig: „But merely the fact that

Page 138: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

129

they‘re the smartest people in the organization doesn‘t mean they should be making

all the decisions, because intelligence is not a scalar quantity; it‘s a vector quantity.

And if you lack empathy or emotional intelligence then you shouldn‘t be designing

APIs or GUIs or languages. What we're doing is an aesthetic pursuit. It involves

craftsmanship as well as mathematics and it involves people skills and prose skills –

all of these things that we don't necessarily think of as engineering but without which

I don't think you'll ever be a really good engineer.― (Seibel, 2009 S. 2572 ff.)

Betrachtet man Bloch Aussage, können möglicherweise die „essential difficulties“

nicht von Spitzeninformatikern gelöst werden. Ihnen fehlt schlichtweg die

emotionale Intelligenz. Jedenfalls ist es an der Zeit, ernsthaft darüber nachzudenken,

ob das Denkmodell des ingenieurmäßigen Entwickelns überhaupt noch zeitgemäß

ist. Die Metapher war in den 1960er Jahren richtig und wichtig, um zu beginnen.

Heute ist von ihr nur eine Worthülse übrig.

Der Autor dieser Arbeit sieht diese Ausarbeitung als Impuls, um weitere Arbeiten auf

diesem Gebiet zu initiieren. Beim genauen Hinschauen erkennt man, dass diese

Arbeit ein unentdecktes Land offenlegt. Besonders interessant dabei ist, dass dies

nicht aus der technischen Perspektive erfolgt, sondern aus soziologischer. Vielleicht

ist die Schnittstelle zwischen den „accidential difficulties“ und „essential difficulties“

der Mensch selbst. Damit würde man sich von der Sichtweise Balzert und andere

Wissenschaftler abwenden, die der Meinung sind, Werkzeuge, Methoden und

Prinzipien seien der Mittelpunkt der ingenieursmäßigen Softwareentwicklung. In

diesem Fall würde die Definition von Schulz, der den Mensch berücksichtigt, am

besten das Software-Engineering beschreiben. Was in diesem Zusammenhang nicht

vergessen werden darf, ist, dass die agile Bewegung unbewusst oder bewusst den

ersten Schritt in die richtige Richtung gegangen ist. Allerdings steht sie sich aufgrund

ihrer zunehmenden fundamentalen-dogmatischen Haltung immer mehr selbst im

Weg.

Fakt ist, dass diese Arbeit der Anstoß für eine Doktorarbeit ist. Dass der Duct Tape

Programmer existiert, ist unbestritten. Was fehlt ist eine repräsentative empirische

Untersuchung, deren Ergebnis den Charakter und Mentalität des Stereotypen

beschreibt.

Page 139: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

130

Literaturverzeichnis

Balzert, Helmut. 1998. Lehrbuch der Softwaretechnik, Teil 2: Softwaremanagement,

Software-Qualitätssicherung, Unternehmensmodellierung. s.l. : Spektrum-

Akademischer Verlag, 1998.

—. 2009. Lehrbuch der Softwaretechnik: Basiskonzepte und requirements

Engineering. Heidelberg : Springer, 2009.

—. 1999. Lehrbuch Grundlagen der Informatik. Heidelberg, Berlin : Spektrum

Akademischer Verlag, 1999.

Bauer, Friedricht Ludwig. 1975. Software Engineering. Berlin : Springer Verlag,

1975.

Beck, Kent. 1999. Extreme Programming Explained: Embrace Change.

Amsterdam : Addison-Wesley Longman, 1999.

—. 2004. Test-Driven Development by Example. Boston : Pearson Education, 2004.

Beck, Kent, et al. 2001. Manifesto for Agile Software Development. [Online] 2001.

[Zitat vom: 16. September 2010.] http://www.agilemanifesto.org/history.html.

Berry, Daniel. 2003. The Inevitable Pain of Software Development: Why There Is

No Silver Bullet. Canada : University of Waterloo, 2003.

Biancuzzi, Federico und Warden, Shane. 2009. Masterminds of Programming:

Conversations with the Creators of Major Programming Languages. Sebastopol :

O'Reilly Media, 2009.

Boehm, Barry. 1988. A Spiral model of Software of Software Development and

Enhancement. Computer. Mai 1988, Bd. Vol. 2, 5, S. 61-72.

—. 1979. Guidelines for Verifying and Validating Software Requirements and

Design Specifications. Applied Information Technology 1979: I.F.I.P. Conference

Proceedings. s.l. : North-Holland Pub. Co., 1979, S. 711-719.

Page 140: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

131

Borchers, Detlef. 2004. Heise. [Online] 07. April 2004. [Zitat vom: 8. September

2010.] http://www.heise.de/newsticker/meldung/Vor-40-Jahren-der-perfekte-

Computer-96683.html.

Brooks, Frederick. 2003. Vom Mythos des Mann-Monats. Essays zum Software-

Engineering. Frechen : MiTP Verlag, 2003.

Broy, Manfred, et al. 2006. Manifest*: Strategische Bedeutung des Software

Engineering in Deutschland. Informatik-Spektrum. Juni 2006, S. 210-221.

Calamé, Jens. 2003. Didaktische Grundfragen der Informatik: Software

Engineering. [PDF] Uni Potsdam : s.n., 2003.

Cockburn, Alistair. 2004. The End of Software Engineering and the Start of

Economic-Cooperative Gaming. The international journal published by ComSIS

Consortium. Februar 2004, Bd. 1, 1.

Coplien, James. 1998. A generative development - Process Pattern Language.

[Buchverf.] Linda Rising. The patterns handbook: techniques, strategies, and

applications. s.l. : Combridge University Press, 1998.

—. 1999. Organization and Architecture. 1999 CHOOSE Forum on Object-Oriented

Software Architecture. [Online] 11. März 1999. [Zitat vom: 18. Oktober 2010.]

http://dirkriehle.com/community-service/choose/1999-forum/coplien2.pdf.

Cunningham & Cunningham. 2003. Pair Programming Ping Pong Pattern.

Portland Pattern Repository's Wiki. [Online] Cunningham & Cunningham, Inc., 01.

Mai 2003. [Zitat vom: 25. Oktober 2010.]

http://c2.com/cgi/wiki?PairProgrammingPingPongPattern.

Cutler und Cuttler, Kim-Mai. 2009. Mark Zuckerberg on how to build hacker

culture inside a company. SocialBeat. [Online] 24. Oktober 2009. [Zitat vom: 14.

September 2010.] http://digital.venturebeat.com/2009/10/24/live-blogging-mark-

zuckerbergs-talk-at-startup-school/.

Page 141: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

132

De Luca, Jeff. The Latest FDD Processes. Nebulon.com. [Online] [Zitat vom: 02.

September 2010.]

http://www.nebulon.com/articles/fdd/download/fddprocessesA4.pdf.

Dijkstra, Edsger. 1968. Go To Statement Considered Harmful. Communications of

the ACM. 1968, Bd. 11, 3.

Dijkstras, Edsger. 1972. The humble programmer. Communications of the ACM

(CACM), Volume 15. 1972, S. 859-866.

Dumke, Reiner. 2003. Software Engineering, Eine Einführung für Informatiker und

Ingenieure: Systeme, Erfahrungen, Methoden, Tools. Wiesbaden : Vieweg & Sohn

Verlag, 2003.

Floyd, Christiane. 1984. A Systemtic look at prototyping. Berlin : Institut für

Angewandte Informatik, 1984.

Fowler, Martin und Beck, Kent. 2004. Refactoring: Improving the Design of

Existing Code. s.l. : Addison Wesley Longman, 2004.

Gabriel, Richard. Jamie Zawinski: jwz.org. The Rise of "Worse is Better''. [Online]

[Zitat vom: 11. September 2010.] http://www.jwz.org/doc/worse-is-better.html.

Garvin, David. 1984. What dows "Product Quality" Really Mean. Sloan

Management Review Vol. 25, No. 1. 1984, S. 25-43.

Gerwitz, Hans. 2004. Hans Gerwitz. Premature optimization is the root of all evil.

[Online] 12. August 2004. [Zitat vom: 15. Oktober 2010.]

http://hans.gerwitz.com/2004/08/12/premature-optimization-is-the-root-of-all-

evil.html.

Gloger, Boris. 2008. Scrum: Produkte zuverlässig und schnell entwickeln. München,

Wien : Hanser, 2008.

Godin, Seth. 2010. Linchpin. London : Hachette Digital, 2010.

Page 142: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

133

Grabowski, Prof. Dr. Jens. 2004. Vorlesung Software Engineering, Universität

Göttingen. [Online] 2004. [Zitat vom: 7. September 2010.]

http://www.swe.informatik.uni-goettingen.de/notes/SS2004/Grabowski/I-

Einfuehrung-6-auf-1.pdf.

Gundlach, Valerie. 2007. Die DIN EN ISO 9000ff. im Überblick. Norderstedt :

GRIN Verlag, 2007.

Gyger, Daniel. 2003. Agile vs. klassische Methoden der Software-Entwicklung:

Feature-Driven Development. Institut für Informatik: Universität Zürich. [Online]

2003. [Zitat vom: 02. September 2010.]

http://www.ifi.uzh.ch/rerg/fileadmin/downloads/teaching/seminars/seminar_ws0304/

08_Gyger_Fdd_Ausarbeitung.pdf.

Hausschildt, Jürgen. 1993. Innovationsmanagement. München : s.n., 1993.

Hazzan, Orit und Dubinsky, Yael. 2008. Agile Software Engineering. München :

Springer, 2008.

Hesse, Wolfgang, et al. 1984. Ein Begriffsystem für die Softwaretechnik. Vorschlag

zur Terminologie. Informatik Spektrum. 1984, S. 200 - 213.

Hesse, Wolfgang, Merbeth, Günter und Frölich, Rainer. 1992. Software-

Entwicklung: Vorgehensmodelle, Projektführung, Produktverwaltung. München,

Wien : Oldenbourg Verlag, 1992.

Hoffmann, Dirk. 2008. Software-Qualität. Berlin Heidelberg : Springer-Verlag,

2008.

Hoffmann, Ulrich. 2010. FH-Wedel: Software-Engineering. [Online] 2010. [Zitat

vom: 13. August 2010.] http://www.fh-

wedel.de/fileadmin/mitarbeiter/uh/WS200910/SWE345_01_Einleitung.pdf.

Höhn, Reinhard und Höppner, Stephan. 2008. Das V-Modell XT: Anwendungen,

Werkzeuge, Standards. Berlin, Heidelberg, New York : Springer Verlag, 2008.

Page 143: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

134

Hyde, Randall. 2004. Write Great Code: Understanding the machine. San

Francisco : No Starch Press, 2004.

IEEE. 2004. Guide to the Software Engineering Body of Knowledge (SWEBOK).

IEEE computer society. [Online] 2004. [Zitat vom: 8. November 2010.]

http://www.computer.org/portal/web/swebok/html/contents.

—. 1990. IEEE Std. 610.12-1990, IEEE Standard Glossary of Software Engineering

Terminology. New York : The Institute of Electrical und Electronic Engineers, 1990.

Jalote, Pankaj. 2008. A Concise Introduction to Software Engineering. London :

Springer Verlag, 2008.

—. 2005. An Integrated Approach to Software Engineering. New York : Springer

Science+Business Media, Inc., 2005.

Jalote, Pankaj, Palit, Aveejeet und Kurien, Priya. 2004. Timeboxing: A Process

Model for Iterative Software Development. Advances in Computers. 2004, 62, S. 67-

103.

Keßler, Heinrich und Winkelhofer, Georg. 2004. Projektmanagement: Leitfaden

zur Steuerung und Führung von Projekten. Berlin Heidelberg : Springer-Verlag,

2004.

Khramtchenko, Serguei. 2004. Comparing eXtreme Programming and Feature

Driven Development in academic and regulated environments. Feature Driven

Development. [Online] 17. Mai 2004. [Zitat vom: 02. September 2010.]

http://www.featuredrivendevelopment.com/files/FDD_vs_XP.pdf.

Kieback, Antoinette, et al. 1992. Prototyping in industriellen Software-Projekten -

Erfahrungen und Analysen. Informatik Spektrum. 1992, Bd. 15, S. 65-77.

Knuth, Donald. 1974. Structured Programming with go to Statements. ACM

Computing Surveys. 1974, Bd. 6, 4.

Lammers, Susan. 1986. Programmers at Work. s.l. : Tempus Books, 1986.

Page 144: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

135

Levy, Steven. 1995. Insanely great: the life and time of Macintosh, the computer

that changed everything. s.l. : Penguin Books, 1995.

Liggesmeyer, Peter. 2009. Software-Qualität: Testen, Analysieren und Verfizieren

von Software. Heidelberg : Spektrum Akademischer Verlag, 2009.

Ludewig, Jochen und Lichter, Horst. 2010. Software Engineering: Grundlagen,

Menschen, Prozesse, Techniken. Heidelberg : dpunkt.verlag, 2010.

Martin, Robert. 2003. Agile software development: principles, patterns, and

practices. University of California : Prentice Hall, 2003.

—. 2008. Clean Code: A Handbook of Agile Software Craftsmanship. New York :

Prentice Hall, 2008.

—. 2009. The Duct Tape Programmer. Object Mentor. [Online] 24. September 2009.

[Zitat vom: 11. September 2010.]

http://blog.objectmentor.com/articles/2009/09/24/the-duct-tape-programmer.

Molzberger, Peter. 1981. Einführung: Von der Doppelnatur der Software.

[Buchverf.] Heinz Schelle. Software: Moderne Methoden zur Planung, Realisierung

und Kontrolle der Entwicklung. München-Wien : Oldenbourg, 1981, S. 11-19.

Moore, Gordon. 1965. Cramming more components onto integrated circuits.

Electronics. 19. April 1965, S. 114-117.

Myers, Glenford. 2004. The Art of Software Testing. Hoboken, New Jersey : John

Wiley & Sons, 2004.

Nagel, Manfred, et al. 2009. Zukunft Ingenieurwissenschaften - Zunkunft

Deutschland. Berlin Heidelberg : Springer-Verlag, 2009.

No Silver Bullet Revisted. Cox, Brad. 1995. 1995, American Programmer Journal.

No Silver Bullet: Essence and Accidents of Software Engineering. Brooks,

Frederick. 1987. 1987, Computer Magazine, S. 10-19.

Page 145: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

136

Palermo, Jeffrey. 2009. Debunking the duct tape programmer. jeffreypalermo.com.

[Online] 25. September 2009. [Zitat vom: 11. September 2010.]

http://jeffreypalermo.com/blog/debunking-the-duct-tape-programmer/.

Palmer, Stephen und Felsing, John. 2002. A Practical Guide to Feature Driven

Development. Upper Saddle River, Nj : Prentice Hall, 2002.

Pfleeger, Sahri Lawrence und Atlee, Joanne. 2010. Software Engineering: Theory

and Practice. New Jersey : Pearson Higher Education, 2010.

Planning the Software Industrial Revolution. Cox, Brad. 1990. 1990, IEEE Software

magazine, Vol. 7, (6), S. 25-33.

Pomberger, Gustav und Pree, Wolfgang. 2004. Software Engineering, Architektur-

Design und Prozessorientierung. München : Carl Hanser Verlag, 2004.

Programming-in-the-large versus programming-in-the-small. DeRemer, Frank und

Kron, Hans. 1975. New York : ACM, 1975. Proceedings of the international

Conference on Reliable Software (Los Angeles, California, April 21 - 23, 1975). S.

114-121.

Randell, Brian. 2001. The NATO Software Engineering Conferences. [Online] 13.

August 2001. [Zitat vom: 8. September 2010.]

http://homepages.cs.ncl.ac.uk/brian.randell/NATO/index.html.

Rising, Linda. 1998. The Patterns Handbook: Techniques, Strategies, and

Applications. Cambridge : Cambridge University Press, 1998.

Roden, Golo. 2010. Feature Driven Development. Visualstudio1.de. 2010, 04, S. 46-

49.

Rosove, Perry. 1967. Developing computer-based information systems. New York :

John Wiley & Sons, 1967.

Royce, Winston. 1970. Managing the Development of large software systems. Los

Angeles : IEEE Wescon, 1970.

Page 146: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

137

Schallehn, Elke. 2008. Einführung in die Geschichte der Informatik. [Online] 2008.

[Zitat vom: 7. September 2010.] http://wwwiti.cs.uni-

magdeburg.de/iti_db/lehre/gif/gif_2.pdf.

Schulz, Arno. 1988. Software-Entwurf: Methoden und Werkzeuge. München-Wien :

Oldenbourg, 1988.

Schümmer, Till und Lukosch, Stephan. 2009. Understanding Tools and Practices

for Distributed Pair Programming. Journal of Universal Computer Science. 2009,

Bd. 15, 16.

Seibel, Peter. 2009. Coders at Work. NY : Springer-Verlag New York, 2009.

—. 2009. Duct tape context: A tale of two rewrites. gigamonkeys.wordpress.com.

[Online] 28. September 2009. [Zitat vom: 11. September 2010.]

http://gigamonkeys.wordpress.com/2009/09/28/a-tale-of-two-rewrites/.

—. 2009. Unit testing in Coders at Work. gigamonkeys.wordpress.com. [Online] 5.

Oktober 2009. [Zitat vom: 11. September 2010.]

http://gigamonkeys.wordpress.com/2009/10/05/coders-unit-testing/.

Sneed, Harry. 2005. Software-projektkalkulation: Praxiserprobte Methoden der

Aufwandsschätzung für verschiedene Projektarten. München Wien : Hanser Verlag,

2005.

Software and its impact: a quantitative assessment. Boehm, Barry. 1973. 1973,

DATAMATION, Vol. 19 (5), S. 48-59.

Software Engineering: Report of a conference sponsored by the NATO Science

Committee. Naur, Peter und Randell, Brian. 1968. Garmisch : Scientific Affairs

Division, 1968. The NATO Software Engineering Conferences. S. 231.

Sommerville, Ian. 2007. Software Engineering. München : Pearson Studium Verlag,

2007.

—. 2004. Software Engineering. München : Pearson Studium Verlag, 2004.

Page 147: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

138

Spolsky, Joel. 2009. The Duct Tape Programmer. Joel on Software. [Online] 23.

September 2009. [Zitat vom: 10. September 2010.]

http://www.joelonsoftware.com/items/2009/09/23.html.

The Mythical Man-Month. Brooks, Frederick. 1974. 1974, Datamation, S. 44-52.

The Standish Group. 1995. The Chaos Report. Boston : The Standish Group, 1995.

Van Vliet, Hans. 2008. Software Engineering: Principle and Practice. West

Sussex : Wiley, 2008.

Weinberg, Gerald. 1971. The psychology of computer programming. University of

Michigan : Van Nostrand Reinhold, 1971.

Wells, Don. 2000. XP Flow Chart: Project. Extreme Programming. [Online] 2000.

[Zitat vom: 29. August 2010.]

http://www.extremeprogramming.org/map/project.html.

Winter, Mario. 2005. Methodische objektorientierte Softwareentwicklung.

Heidelberg : dpunkt.verlag, 2005.

Wolf, Henning, Rook, Stefan und Lippert, Martin. 2005. extreme Programming:

Eine Einführung mit Empfehlungen und Erfahrungen aus der Praxis. Heidelberg :

dpunkt.verlag GmbH, 2005.

Zawinski, Jamie. 2009. That "duct tape" silliness. jwz.livejournal.com. [Online] 28.

September 2009. [Zitat vom: 11. September 2010.]

http://jwz.livejournal.com/1096593.html.

Zöller-Greer, Peter. 2002. Softwareengineering für Ingenieure und Informatiker.

s.l. : Wiesbaden, 2002.

Page 148: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

139

Index

90 % Syndrom 23, 39

Accidental difficulties 11

Accidential difficulties 129

Alan Kay 98

Alistair Cockburn 25, 121

Anwendungs-Software 15

API 86, 101, 128

Black-Box-Test 70, 82

Change Management 38

CMMI 72

Code and Fix 29, 61

Code Reading 97

Code Review 74, 85, 97

Code-Optimierung 92

Coding Monkey 4, 128

Collective Code Ownership 57, 117

Computer-System 15

Conway‟s-law-in-the-small 114

Coverage-Based Testing 70

Creative-Commons 6

Demonstrationsprototyp 32

Duct Tape 76

Duct Tape Programmer 1, 76

Egoless Programming 27

Eigenschaften von Software 19

Einbahnstraßenmodell Siehe strenge

Wasserfallmodell

Error-Based Testing 70

Essential difficulties 11, 19, 128, 129

ETVX-Template 55

Evolutionäre Entwicklung 34

Evolutionäres Prototyping 33, 111

Experimentelles Prototyping 33

Exploratives Prototyping 33

Extreme Programming 13, 29, 48, 61

Fault-Based Testing 70

Feature Driven Development 54, 61,

101, 112

Funktionale Prototypen 32

Garvin 17

Glass-Box-Test 70

Gordon Moore 7

Hive-Faktor 62

IEEE Standard Glossary 28

Industrial Strength Software System

21, 104

Industrieprogrammierer 127

Ingenieur 15

Ingenieurs-Prinzipien 15

Inkrementelle Softwareentwicklung

35, 98

Innovation 126

Iterative Softwareentwicklung 34

James Coplien 114

Kernsystem 35

Kindle 4

Labormuster 32

Lebenszyklus 17, 20

Leichtgewichtiger Prozesse 39

Literate Programming 93

Mangel 66, 109

Mechanische Prüfung 67

Page 149: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

140

Million Monkey Ansatz 9

Nicht mechanische Prüfungen 67

No Silver Bullet 10, 27

OmniOutliner 4

Over-Engineering 91

Paar-Programmierung 51, 114

Phasenmodell 39, 60

Pilotsystem 32

Premature Optimization 125

Problem of Scale 21

Produktqualität 63

Produktzyklus 16

Programming-in-the-large 21

Programming-in-the-small 21, 104

Projektqualität 63

Protoping 111

Prototyping 32

Prozessmodell 28

Prozessmodelle 38

Prozessqualität 72

Qualität 17

Rational Objectory Process Siehe

Rational Unified Process

Rational Unified Process 45, 61

Real artists ship 81

Refactoring 34, 51, 87, 102, 124

Robert Martin 76, 122, 124

Schwergewichtige Prozesse 38

Scrum 58, 61

Shrinkware 63

Smalltalk 98

Software 14

Software Gap 8

Software Inspektionen 68

Software-Engineering 9, 16

Softwarekrise 7, 9, 30

Softwarelebenszyklus 12, 30

Software-Produkt 14

Softwarequalität 18, 64, 82

Softwarequalitätssicherung 65

Software-System 14

Software-Technik 15

SPICE 73

Spiralmodell 36, 99, 112

Stereotyp 105, 126

Strenge Wasserfallmodell 31, 40

Sudoko Solver 85

SWEBOK 24

System-Software 14

Tailoring 38, 44

Taylorismus 10

Test Driven Development 51, 77, 87,

109, 122

The Humble Programmer 8

The Mythical Man-Month 10

Timeboxing-Modell 40, 112

UML 89

Unified Process 29, 45

Unit Test 70, 77, 123

Unit Tests 51

V-Modell 41

V-Modell XT 41, 61

Vorgehensmodell 28

Wasserfallmodell 12, 30, 31, 88, 114

Page 150: Der "Duct Tape Programmer" Mentalität als Einflussgrösse des Software Engineerings

141

Wiederverwendbarkeit 22

Wiederverwendung 89

Wirkungskontext 21

Worse is better 82

Ziele 19, 103