Modernes Software Engineering Bessere Software schneller und effektiver entwickeln
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 r...
Autor principal: | |
---|---|
Formato: | Libro electrónico |
Idioma: | Alemán |
Publicado: |
Frechen :
mitp
2023.
|
Edición: | 1st ed |
Materias: | |
Ver en Biblioteca Universitat Ramon Llull: | https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009764837906719 |
Tabla de Contenidos:
- Intro
- Stimmen zum Buch
- Impressum
- Vorwort
- Einleitung
- Eine Definition von Software Engineering?
- Der Inhalt des Buchs
- Danksagungen
- Über den Autor
- Teil I: Was ist Software Engineering?
- Kapitel 1: Einführung
- 1.1 Engineering - Die praktische Anwendung von Wissenschaft
- 1.2 Was ist Software Engineering?
- 1.3 Die Rückeroberung des »Software Engineering«
- 1.4 Wie man Fortschritte macht
- 1.5 Die Geburt des Software Engineering
- 1.6 Paradigmenwechsel
- 1.7 Zusammenfassung
- Kapitel 2: Was ist Engineering?
- 2.1 Die Produktion ist nicht unser Problem
- 2.2 Konstruktionsingenieurwesen, nicht Produktionstechnik
- 2.3 Eine Arbeitsdefinition von Engineering
- 2.4 Engineering != Code
- 2.5 Warum ist Engineering so wichtig?
- 2.6 Die Grenzen von »Handwerk«
- 2.7 Präzision und Skalierbarkeit
- 2.8 Komplexität handhaben
- 2.9 Reproduzierbarkeit und Messgenauigkeit
- 2.10 Engineering, Kreativität und Handwerk
- 2.11 Warum das, was wir tun, kein Software Engineering ist
- 2.12 Kompromisse
- 2.13 Die Illusion des Fortschritts
- 2.14 Der Weg vom Handwerk zum Engineering
- 2.15 Handwerk ist nicht genug
- 2.16 Zeit für ein Umdenken?
- 2.17 Zusammenfassung
- Kapitel 3: Grundlagen eines Engineering-Ansatzes
- 3.1 Eine Branche im Wandel?
- 3.2 Die Bedeutung von Messungen
- 3.3 Anwendung von Stabilität und Durchsatz
- 3.4 Die Grundlagen einer Ingenieursdisziplin für die Software-Entwicklung
- 3.5 Experten im Lernen
- 3.6 Experten im Umgang mit Komplexität
- 3.7 Zusammenfassung
- Teil II: Für das Lernen optimieren
- Kapitel 4: Iterativ arbeiten
- 4.1 Praktische Vorteile iterativen Arbeitens
- 4.2 Iteration als defensive Design-Strategie
- 4.3 Der Reiz des Plans
- 4.4 Praktische Aspekte des iterativen Arbeitens
- 4.5 Zusammenfassung
- Kapitel 5: Feedback.
- 5.1 Ein praktisches Beispiel für die Wichtigkeit von Feedback
- 5.2 Feedback bei der Entwicklung
- 5.3 Feedback bei der Integration
- 5.4 Feedback beim Design
- 5.5 Feedback zur Architektur
- 5.6 Frühzeitiges Feedback bevorzugen
- 5.7 Feedback beim Produktdesign
- 5.8 Feedback in Unternehmen und Kultur
- 5.9 Zusammenfassung
- Kapitel 6: Inkrementalismus
- 6.1 Die Bedeutung von Modularität
- 6.2 Inkrementalismus im Unternehmen
- 6.3 Werkzeuge für den Inkrementalismus
- 6.4 Die Auswirkungen von Änderungen begrenzen
- 6.5 Inkrementelles Design
- 6.6 Zusammenfassung
- Kapitel 7: Empirismus
- 7.1 In der Realität verankert
- 7.2 Trennung von Epirismus und Experiment
- 7.3 »Ich kenne diesen Bug!«
- 7.4 Selbsttäuschung vermeiden
- 7.5 Eine Realität erfinden, die zu unserer Argumentation passt
- 7.6 Von der Realität geleitet
- 7.7 Zusammenfassung
- Kapitel 8: Experimentell vorgehen
- 8.1 Was bedeutet »experimentell vorgehen«?
- 8.2 Feedback
- 8.3 Hypothese
- 8.4 Messung
- 8.5 Kontrolle der Variablen
- 8.6 Automatisierte Tests als Experimente
- 8.7 Einordnung der Versuchsergebnisse der Tests in den Kontext
- 8.8 Der Umfang eines Experiments
- 8.9 Zusammenfassung
- Teil III: Optimieren für den Umgang mit Komplexität
- Kapitel 9: Modularität
- 9.1 Merkmale von Modularität
- 9.2 Die Bedeutung von gutem Design wird unterschätzt
- 9.3 Die Bedeutung von Testbarkeit
- 9.4 Für Testbarkeit zu designen verbessert die Modularität
- 9.5 Services und Modularität
- 9.6 Deploybarkeit und Modularität
- 9.7 Modularität auf verschiedenen Ebenen
- 9.8 Modularität menschlicher Systeme
- 9.9 Zusammenfassung
- Kapitel 10: Kohäsion
- 10.1 Modularität und Kohäsion: Grundlagen des Designs
- 10.2 Der grundlegende Abbau von Kohäsion
- 10.3 Kontext ist wichtig
- 10.4 High-Performance-Software
- 10.5 Verbindung zur Kopplung.
- 10.6 Hohe Kohäsion durch TDD
- 10.7 Wie erreicht man gute Kohäsion bei Software?
- 10.8 Kosten von schlechter Kohäsion
- 10.9 Kohäsion in menschlichen Systemen
- 10.10 Zusammenfassung
- Kapitel 11: Trennung von Zuständigkeiten
- 11.1 Dependency Injection
- 11.2 Trennung von wesentlicher und zufälliger Komplexität
- 11.3 Bedeutung von DDD
- 11.4 Testbarkeit
- 11.5 Ports &
- Adapters
- 11.6 Wann sollte »Ports &
- Adapters« eingesetzt werden?
- 11.7 Was ist eine API?
- 11.8 Verwendung von TDD zur Förderung der Trennung von Zuständigkeiten
- 11.9 Zusammenfassung
- Kapitel 12: Information Hiding und Abstraktion
- 12.1 Abstraktion oder Information Hiding
- 12.2 Was verursacht den »Big Ball of Mud«?
- 12.3 Unternehmerische und unternehmenskulturelle Probleme
- 12.4 Technische Probleme und Probleme des Designprozesses
- 12.5 Furcht vor Over-Engineering
- 12.6 Verbesserung der Abstraktion durch Testen
- 12.7 Die Macht der Abstraktion
- 12.8 Undichte Abstraktionen
- 12.9 Geeignete Abstraktionen auswählen
- 12.10 Abstraktionen in der Anwendungsdomäne
- 12.11 Abstrakte zufällige Komplexität
- 12.12 Systeme und Code von Drittanbietern isolieren
- 12.13 Immer das Verbergen von Informationen bevorzugen
- 12.14 Zusammenfassung
- Kapitel 13: Kopplung handhaben
- 13.1 Kosten von Kopplung
- 13.2 Hochskalieren
- 13.3 Microservices
- 13.4 Entkopplung kann mehr Code bedeuten
- 13.5 Lose Kopplung ist nicht das Einzige, was wichtig ist
- 13.6 Lose Kopplung bevorzugen
- 13.7 Wie unterscheidet sich dies von der Trennung von Zuständigkeiten?
- 13.8 DRY ist zu simpel
- 13.9 Asynchronität als Werkzeug für lose Kopplung
- 13.10 Für lose Kopplung designen
- 13.11 Lose Kopplung in menschlichen Systemen
- 13.12 Zusammenfassung
- Teil IV: Werkzeuge zur Unterstützung von Engineering in der Software-Entwicklung.
- Kapitel 14: Die Werkzeuge einer Ingenieursdisziplin
- 14.1 Was ist Software-Entwicklung?
- 14.2 Testbarkeit als Werkzeug
- 14.3 Messpunkte
- 14.4 Schwierigkeiten, die Testbarkeit zu erreichen
- 14.5 Wie man die Testbarkeit verbessert
- 14.6 Deploybarkeit
- 14.7 Geschwindigkeit
- 14.8 Die Variablen kontrollieren
- 14.9 Continuous Delivery
- 14.10 Allgemeine Werkzeuge zur Unterstützung von Engineering
- 14.11 Zusammenfassung
- Kapitel 15: Der moderne Software Engineer
- 15.1 Engineering als menschlicher Prozess
- 15.2 Digital disruptive Unternehmen
- 15.3 Ergebnisse vs. Mechanismen
- 15.4 Langlebigkeit und allgemeine Anwendbarkeit
- 15.5 Grundlagen einer Ingenieursdisziplin
- 15.6 Zusammenfassung.