: David Farley
: Modernes Software Engineering Bessere Software schneller und effektiver entwickeln
: MITP Verlags GmbH& Co. KG
: 9783747506356
: mitp Professional
: 1
: CHF 17.50
:
: Betriebssysteme, Benutzeroberflächen
: German
: 288
: Wasserzeichen/DRM
: PC/MAC/eReader/Tablet
: PDF

»Es gibt viele Bücher, die Ihnen sagen, wie Sie ein bestimmtes Software-Engineering-Verfahre anwenden sollen; dieses Buch ist anders. [...] Es ist ein Buch für jeden, der die Softwareentwicklung ernsthaft als echte Ingenieursdisziplin behandeln möchte, egal ob Sie gerade erst anfangen oder schon seit Jahrzehnten Software entwickeln.«
-Dave Hounslow, Software Engineer

In diesem Buch gibt Ihnen der Continuous-Delivery-Pionier David Farley praktische Strategien an die Hand, mit denen Sie Software-Projekte effektiver umsetzen, erfolgreicher managen und die Qualität Ihrer Programme grundlegend verbessern können - und damit auch Ihre tägliche Arbeit.

David Farley richtet sich an Programmierer, technische Leiter und Manager unabhängig von ihrer Erfahrung. Er beleuchtet langlebige Strategien und Prinzipien, die das Herzstück der effektiven Softwareentwicklung bilden. Dabei unterscheidet er zwischen zwei Kerndisziplinen: Erkunden und Lernen sowie Umgang mit Komplexität. Für jede der beiden vermittelt er praxisnahe Konzepte und Prinzipien, die Ihnen helfen, den gesamten Entwicklungsprozess zu verbessern, von Ihrer Denkweise bis hin zur Qualität Ihres Codes. Dafür beschreibt er effektive Strategien, die nachweislich zum Erfolg führen.

Farleys Konzepte und Techniken bilden einen ganzheitlichen, wissenschaftlichen und fundierten Ansatz zur Lösung praktischer Probleme bei der Softwareentwicklung unter realistischen wirtschaftlichen Bedingungen. Dieser allgemeingültige und langlebige Ansatz kann Ihnen helfen, sogar Probleme zu lösen, die Ihnen bisher nie begegnet sind. Er bietet Ihnen einen tiefen Einblick in Ihre tägliche Arbeit und unterstützt sie dabei, bessere Software schneller, effektiver und mit mehr Freude zu entwickeln.



David Farley ist Gründer und Consultant vonContinuous Delivery Ltd und verfügt über jahrelange Erfahrung als Programmierer, Software Engineer und Systemarchitekt. Seine bahnbrechenden Ansätze haben die Arbeit von Entwicklern und Teams revolutioniert. Als Head of Software Development fürLondon Multi Asset Exchange (LMAX) hat er eines der schnellsten Finanzsysteme der Welt aufgebaut. Er war einer der ersten, der agile Methoden wie Continuous Integration und automatisierte Tests angewendet hat und ist Betreiber des erfolgreichen Youtube-Kanals »Continuous Delivery«.
Cover1
Stimmen zum Buch3
Impressum6
Inhaltsverzeichnis7
Vorwort13
Einleitung17
Eine Definition von Software Engineering?19
Der Inhalt des Buchs20
Danksagungen21
Über den Autor23
Teil I: Was ist Software Engineering?25
Kapitel 1: Einführung27
1.1 Engineering – Die praktische Anwendung von Wissenschaft27
1.2 Was ist Software Engineering?28
1.3 Die Rückeroberung des »Software Engineering«30
1.4 Wie man Fortschritte macht30
1.5 Die Geburt des Software Engineering31
1.6 Paradigmenwechsel33
1.7 Zusammenfassung34
Kapitel 2: Was ist Engineering?35
2.1 Die Produktion ist nicht unser Problem35
2.2 Konstruktionsingenieurwesen, nicht Produktionstechnik36
2.3 Eine Arbeitsdefinition von Engineering42
2.4 Engineering != Code43
2.5 Warum ist Engineering so wichtig?45
2.6 Die Grenzen von »Handwerk«46
2.7 Präzision und Skalierbarkeit47
2.8 Komplexität handhaben48
2.9 Reproduzierbarkeit und Messgenauigkeit49
2.10 Engineering, Kreativität und Handwerk51
2.11 Warum das, was wir tun, kein Software Engineering ist53
2.12 Kompromisse54
2.13 Die Illusion des Fortschritts55
2.14 Der Weg vom Handwerk zum Engineering56
2.15 Handwerk ist nicht genug57
2.16 Zeit für ein Umdenken?58
2.17 Zusammenfassung59
Kapitel 3: Grundlagen eines Engineering- Ansatzes61
3.1 Eine Branche im Wandel?61
3.2 Die Bedeutung von Messungen62
3.3 Anwendung von Stabilität und Durchsatz65
3.4 Die Grundlagen einer Ingenieursdisziplin für die Software-Entwicklung67
3.5 Experten im Lernen67
3.6 Experten im Umgang mit Komplexität68
3.7 Zusammenfassung70
Teil II: Für das Lernen optimieren71
Kapitel 4: Iterativ arbeiten73
4.1 Praktische Vorteile iterativen Arbeitens75
4.2 Iteration als defensive Design-Strategie77
4.3 Der Reiz des Plans79
4.4 Praktische Aspekte des iterativen Arbeitens86
4.5 Zusammenfassung88
Kapitel 5: Feedback89
5.1 Ein praktisches Beispiel für die Wichtigkeit von Feedback89
5.2 Feedback bei der Entwicklung93
5.3 Feedback bei der Integration94
5.4 Feedback beim Design96
5.5 Feedback zur Architektur99
5.6 Frühzeitiges Feedback bevorzugen101
5.7 Feedback beim Produktdesign102
5.8 Feedback in Unternehmen und Kultur103
5.9 Zusammenfassung106
Kapitel 6: Inkrementalismus107
6.1 Die Bedeutung von Modularität108
6.2 Inkrementalismus im Unternehmen110
6.3 Werkzeuge für den Inkrementalismus112
6.4 Die Auswirkungen von Änderungen begrenzen113
6.5 Inkrementelles Design115
6.6 Zusammenfassung118
Kapitel 7: Empirismus119
7.1 In der Realität verankert120
7.2 Trennung von Epirismus und Experiment120
7.3 »Ich kenne diesen Bug!«121
7.4 Selbsttäuschung vermeiden123
7.5 Eine Realität erfinden, die zu unserer Argumentation passt124
7.6 Von der Realität geleitet128
7.7 Zusammenfassung129
Kapitel 8: Experimentell vorgehen131
8.1 Was bedeutet »experimentell vorgehen«?132
8.2 Feedback133
8.3 Hypothese135
8.4 Messung136
8.5 Kontrolle der Variablen137
8.6 Automatisierte Tests als Experimente138
8.7 Einordnung der Versuchsergebnisse der Tests in den Kontext140
8.8 Der Umfang eines Experiments142
8.9 Zusammenfassung143
Teil III: Optimieren für den Umgang mit Komplexität145
Kapitel 9: Modularität147
9.1 Merkmale von Modularität148
9.2 Die Bedeutung von gutem Design wird unterschätzt149
9.3 Die Bedeutung von Testbarkeit151
9.4 Für Testbarkeit zu designen verbessert die Modularität152
9.5 Services und Modularität159
9.6 Deploybarkeit und Modularität161
9.7 Modularität auf verschiedenen Ebenen163
9.8 Modularität menschlicher Systeme164
9.9 Zusammenfassung166
Kapitel 10: Kohäsion167
10.1 Modularität und Kohäsion: Grundlagen des Designs167
10.2 Der grundlegende Abbau von Kohäsion168
10.3 Kontext ist wichtig171
10.4 High-Performance-Software175
10.5 Verbindung zur Kopplung176
10.6 Hohe Kohäsion durch TDD177
10.7 Wie erreicht man gute Kohäsion bei Software?177
10.8 Kosten von schlechter Kohäsion180
10.9 Kohäsion in menschlichen Systemen181
10.10 Zusammenfassung182
Kapitel 11: Trennung von Zuständigkeiten183
11.1 Dependency Injection187
11.2 Trennung von wesentlicher und zufälliger Komplexität188
11.3 Bedeutung von DDD192
11.4 Testbarkeit194
11