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...

Descripción completa

Detalles Bibliográficos
Autor principal: Farley, David (-)
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‌ &amp
  • Adapters‌
  • 11.6 Wann sollte »Ports &amp
  • 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.