Code That Fits in Your Head Heuristiken für die Softwareentwicklung. Komplexität reduzieren | Legacy Code beherrschen | Performance optimieren

Techniken und Konzepte f|r nachhaltige Softwareentwicklung sowie sauberen und wartbaren Code Reduktion von Komplexitt̃, strukturierte Arbeitsablũfe und effiziente Fehlerbehandlung Mit Ausz|gen aus einem vollstñdigen Beispielprojekt inklusive Code zum Download Mark Seemann ist daf|r bekannt, komple...

Descripción completa

Detalles Bibliográficos
Autor principal: Seemann, Mark (-)
Formato: Libro electrónico
Idioma:Alemán
Publicado: Frechen : mitp 2022.
Edición:1st ed
Colección:Robert C. Martin series.
Materias:
Ver en Biblioteca Universitat Ramon Llull:https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009670621806719
Tabla de Contenidos:
  • Intro
  • Stimmen zum Buch
  • Code That Fits in Your Head
  • Impressum
  • Vorwort des Herausgebers der englischen Ausgabe
  • Einleitung
  • Wer dieses Buch lesen sollte
  • Voraussetzungen
  • Ein Hinweis für Softwarearchitekten
  • Aufbau des Buchs
  • Über den Codestil
  • var verwenden oder var nicht verwenden
  • Code-Listings
  • Hinweis zur Bibliografie
  • Eigene Zitate
  • Danksagung
  • Über den Autor
  • Teil I: Beschleunigung
  • Kapitel 1: Kunst oder Wissenschaft?
  • 1.1 Bau eines Hauses
  • 1.1.1 Das Problem mit Projekten
  • 1.1.2 Das Problem mit Phasen
  • 1.1.3 Abhängigkeiten‌
  • 1.2 Kultivieren eines Gartens
  • 1.2.1 Was lässt einen Garten gedeihen?
  • 1.3 Der Weg zur Ingenieurswissenschaft
  • 1.3.1 Software als Kunsthandwerk
  • 1.3.2 Heuristik
  • 1.3.3 Ältere Vorstellungen von Software Engineering
  • 1.3.4 Fortschritte beim Software Engineering
  • 1.4 Fazit
  • Kapitel 2: Checklisten
  • 2.1 Eine Gedächtnisstütze
  • 2.2 Checkliste für eine neue Codebasis
  • 2.2.1 Git verwenden
  • 2.2.2 Build automatisieren
  • 2.2.3 Alle Fehlermeldungen‌ aktivieren
  • 2.3 Überprüfungen zu einer vorhandenen Codebasis hinzufügen
  • 2.3.1 Schrittweise Verbesserungen
  • 2.3.2 Hacken Sie Ihre Organisation
  • 2.4 Fazit
  • Kapitel 3: Komplexität in den Griff bekommen
  • 3.1 Ziel
  • 3.1.1 Nachhaltigkeit
  • 3.1.2 Nutzwert
  • 3.2 Warum Programmieren schwierig ist
  • 3.2.1 Die Gehirn-Metapher
  • 3.2.2 Code wird häufiger gelesen als geschrieben
  • 3.2.3 Verständlichkeit
  • 3.2.4 Geistige Arbeit
  • 3.3 Software Engineering
  • 3.3.1 Beziehung zur Informatik
  • 3.3.2 Menschenfreundlicher Code
  • 3.4 Fazit
  • Kapitel 4: Vertical Slice
  • 4.1 Beginnen Sie mit funktionierender Software
  • 4.1.1 Vom Dateneingang zur dauerhaften Datenspeicherung‌
  • 4.1.2 Minimaler Vertical Slice
  • 4.2 Laufendes Skelett
  • 4.2.1 Charakterisierungstest
  • 4.2.2 Arrange, Act, Assert.
  • 4.2.3 Lockerung der statischen Analyse
  • 4.3 Von außen nach innen
  • 4.3.1 JSON entgegennehmen
  • 4.3.2 Eine Reservierung vornehmen
  • 4.3.3 Unit-Test
  • 4.3.4 DTO und Domänenmodell
  • 4.3.5 Fake-Objekt
  • 4.3.6 Schnittstelle für das Repository
  • 4.3.7 Objekte im Repository erstellen
  • 4.3.8 Abhängigkeiten konfigurieren
  • 4.4 Vervollständigen Sie den Slice
  • 4.4.1 Schema
  • 4.4.2 SQL-Repository
  • 4.4.3 Konfiguration mit der Datenbank
  • 4.4.4 Führen Sie einen Smoke Test durch
  • 4.4.5 Test der Außengrenze mit einer Fake-Datenbank
  • 4.5 Fazit
  • Kapitel 5: Kapselung
  • 5.1 Speichern Sie die Daten
  • 5.1.1 Prämisse der Priorität der Transformation
  • 5.1.2 Parametrisierter Test
  • 5.1.3 DTO ins Domänenmodell kopieren
  • 5.2 Validierung
  • 5.2.1 Ungültige oder fehlende ‌Datumsangaben
  • 5.2.2 Rot-Grün-Refactor
  • 5.2.3 Natürliche Zahlen
  • 5.2.4 Robustheitsgrundsatz
  • 5.3 Schutz von Invarianten
  • 5.3.1 Immer gültig
  • 5.4 Fazit
  • Kapitel 6: Triangulierung
  • 6.1 Kurzzeit- und Langzeitgedächtnis
  • 6.1.1 Legacy Code und Gedächtnis
  • 6.2 Kapazität
  • 6.2.1 Überbuchung
  • 6.2.2 Advokat des Teufels‌
  • 6.2.3 Vorhandene Reservierungen
  • 6.2.4 Advokat des Teufels und Rot-Grün-Refactor
  • 6.2.5 Wann haben Sie hinreichend viele Tests?
  • 6.3 Fazit
  • Kapitel 7: Dekomposition
  • 7.1 Code Rot
  • 7.1.1 Schwellenwerte
  • 7.1.2 Zyklomatische Komplexität
  • 7.1.3 Die 80/24-Regel
  • 7.2 Verständlicher Code
  • 7.2.1 Hexagonale Blumen
  • 7.2.2 Kohäsion
  • 7.2.3 Feature-Neid
  • 7.2.4 Beim Verschieben verlorengegangen
  • 7.2.5 Parsen, nicht überprüfen
  • 7.2.6 Fraktale Architektur
  • 7.2.7 Variablen zählen
  • 7.3 Fazit
  • Kapitel 8: API-Design
  • 8.1 Prinzipien des API-Designs
  • 8.1.1 Affordanz
  • 8.1.2 Poka Yoke
  • 8.1.3 Schreiben Sie für die Leser
  • 8.1.4 Ziehen Sie sinnvoll benannten Code Kommentaren vor
  • 8.1.5 Namen ausixen.
  • 8.1.6 Trennung von Befehlen und Abfragen
  • 8.1.7 Kommunikationshierarchie
  • 8.2 Beispiel für ein API-Design
  • 8.2.1 Maître d'hôtel
  • 8.2.2 Verwendung eines gekapselten Objekts
  • 8.2.3 Implementierungsdetails
  • 8.3 Fazit
  • Kapitel 9: Zusammenarbeit
  • 9.1 Git
  • 9.1.1 Commit-Nachrichten
  • 9.1.2 Continuos Integration
  • 9.1.3 Kleine Commits
  • 9.2 Gemeinsame Eigentümerschaft am Code
  • 9.2.1 Paarprogrammierung
  • 9.2.2 Mob-Programmierung
  • 9.2.3 Verzögerungen durch Code-Reviews
  • 9.2.4 Ablehnung von Änderungen
  • 9.2.5 Code-Reviews
  • 9.2.6 Pull-Requests
  • 9.3 Fazit
  • Teil II: Nachhaltigkeit
  • Kapitel 10: Erweiterung des Codes
  • 10.1 Feature-Flags
  • 10.1.1 Kalender-Flag
  • 10.2 Das Strangler-Pattern
  • 10.2.1 Strangler auf Methodenebene
  • 10.2.2 Strangler auf Klassenebene
  • 10.3 Versionierung
  • 10.3.1 Vorwarnung
  • 10.4 Fazit
  • Kapitel 11: Bearbeiten von Unit-Tests
  • 11.1 Refactoring von Unit-Tests
  • 11.1.1 Änderung des Sicherheitsnetzes
  • 11.1.2 Hinzufügen von neuem Testcode
  • 11.1.3 Refactoring von Test- und Produktionscode trennen
  • 11.2 Fehlschlagende Tests
  • 11.3 Fazit
  • Kapitel 12: Fehlerbehebung
  • 12.1 Verstehen
  • 12.1.1 Wissenschaftliche Vorgehensweise
  • 12.1.2 Vereinfachen
  • 12.1.3 Quietscheentchen-Debugging
  • 12.2 Fehler
  • 12.2.1 Fehler durch Tests reproduzieren
  • 12.2.2 Langsame Tests
  • 12.2.3 Nichtdeterministische Fehler
  • 12.3 Bisektion
  • 12.3.1 Bisektion mit Git
  • 12.4 Fazit
  • Kapitel 13: Trennung von Zuständigkeiten
  • 13.1 Komposition
  • 13.1.1 Verschachtelte Komposition
  • 13.1.2 Sequenzielle Komposition
  • 13.1.3 Referenzielle Transparenz
  • 13.2 Cross-Cutting Concerns
  • 13.2.1 Logging
  • 13.2.2 Decorator
  • 13.2.3 Was protokolliert werden sollte
  • 13.3 Fazit
  • Kapitel 14: Rhythmus
  • 14.1 Persönlicher Rhythmus
  • 14.1.1 Zeiteinteilung
  • 14.1.2 Pausieren
  • 14.1.3 Zeit wohlüberlegt nutzen.
  • 14.1.4 Blindschreiben
  • 14.2 Team-Rhythmus
  • 14.2.1 Regelmäßige Aktualisierung der Abhängigkeiten
  • 14.2.2 Andere Dinge planen
  • 14.2.3 Gesetz von Conway
  • 14.3 Fazit
  • Kapitel 15: Die üblichen Verdächtigen
  • 15.1 Performance
  • 15.1.1 Altlast
  • 15.1.2 Verständlichkeit
  • 15.2 Security
  • 15.2.1 STRIDE
  • 15.2.2 Spoofing
  • 15.2.3 Tampering
  • 15.2.4 Repudiation
  • 15.2.5 Information Disclosure
  • 15.2.6 Denial of Service
  • 15.2.7 Elevation of Privilege
  • 15.3 Andere Verfahren
  • 15.3.1 Eigenschaft-basiertes Testen
  • 15.3.2 Verhaltensbezogene Codeanalyse
  • 15.4 Fazit
  • Kapitel 16: Tour
  • 16.1 Navigation
  • 16.1.1 Das Gesamtbild erkennen
  • 16.1.2 Organisation der Dateien
  • 16.1.3 Details aufspüren
  • 16.2 Architektur
  • 16.2.1 Monolith
  • 16.2.2 Zyklen
  • 16.3 Verwendung
  • 16.3.1 Aus Tests lernen
  • 16.3.2 Schenken Sie den Tests Beachtung
  • 16.4 Fazit
  • Anhang A: Liste der Verfahren
  • A.1 50/72-Regel‌
  • A.2 80/24-Regel‌
  • A.3 Abhängigkeiten regelmäßig aktualisieren
  • A.4 Advokat des Teufels‌
  • A.5 Arrange, Act, Assert‌
  • A.6 Ausnahmen von der Regel begründen
  • A.7 Bedrohungsmodell‌
  • A.8 Bisektion‌
  • A.9 Checkliste für eine neue Codebasis‌
  • A.10 Code-Reviews
  • A.11 Decorators‌ für Cross-Cutting Concerns
  • A.12 Feature-Flag‌‌
  • A.13 Fehler als Tests reproduzieren
  • A.14 Functional Core, Imperative Shell‌
  • A.15 Kommunikationshierarchie‌
  • A.16 Namen ausixen‌
  • A.17 Parsen, nicht überprüfen‌
  • A.18 Robustheitsgrundsatz‌
  • A.19 Rot-Grün-Refactor‌
  • A.20 Refactoring‌ von Test- und Produktionscode trennen
  • A.21 Semantische Versionierung
  • A.22 Slice
  • A.23 Strangler‌
  • A.24 Prämisse der Priorität der Transformation‌
  • A.25 Trennung von Befehlen und Abfragen
  • A.26 X-getriebene Entwicklung‌
  • A.27 Zählen der Variablen
  • A.28 Zyklomatische Komplexität‌
  • Anhang B: Bibliografie.