Let's go agile! Geht das überhaupt mit ABAP? Dieses Buch führt Sie passgenau in die agile Entwicklung ein und setzt dabei genau da an, wo Sie sich auskennen: bei Ihrem Legacy Code. Sie lesen, wie Sie Ihre Programme Schritt für Schritt verbessern und erlernen dabei die wichtigsten Methoden der testgetriebenen Entwicklung. Anschließend erfahren Sie, wie Sie diese und viele weitere Techniken auch in neuen Entwicklungsprojekten einsetzen können. Clean Code, Walking Skeleton, Shared Code Ownership, Executable Documentation und Co. sind schon bald keine Fremdwörter mehr für Sie!
Aus dem Inhalt:
- Testgetriebene Entwicklung
- Objektorientiertes Design
- Test-Doubles
- ABAP Unit
- Redesign und Neuentwicklung
- Kontinuierliche Verbesserung
- Der perfekte Sprint
- ABAP Test Isolation Tools
- ABAP Development Tools (ABAP in Eclipse)
- Ausbildungsstrategie und Skalierbarkeit
Inhaltsverzeichnis
Vorwort . . . 21 Einleitung . . . 23 1. Einführung . . . 31 1. 1 . . . Nachhaltigkeit: Entwicklung und Wartung mit einer Testinfrastruktur . . . 32 1. 2 . . . Agilität: Praktiken des Agile Software Engineerings . . . 37 1. 3 . . . Effizienz: Einhaltung von Designprinzipien . . . 38 1. 4 . . . Kommunikation: Diagramme als Gesprächsgrundlage . . . 42TEIL I Aufbau einer Testinfrastruktur . . . 45 2. Beispielanwendung für diesen Buchteil . . . 47 2. 1 . . . Stammdatenmanagement . . . 48 2. 2 . . . Benutzeroberfläche . . . 50 2. 3 . . . Backend . . . 51 3. Codebasierte Verbesserung eines Tests . . . 55 3. 1 . . . Einführung in den Testcode . . . 55 3. 2 . . . Allgemeine Clean-Code-Prinzipien . . . 67 3. 3 . . . Testorientierte Clean-Code-Prinzipien . . . 76 4. Designbasierte Verbesserung des Tests . . . 85 4. 1 . . . Basisklasse von Testklassen . . . 85 4. 2 . . . Verwendung von Hilfsklassen durch Testklassen . . . 91 5. Robuster Integrationstest . . . 99 5. 1 . . . Verbesserungsprozess . . . 99 5. 2 . . . Unabhängigkeit von Testmethoden . . . 100 5. 3 . . . Wiederholbarkeit von Testmethoden . . . 105 6. Minimierung von Abhängigkeiten . . . 113 6. 1 . . . Vereinfachung einer Verwendung . . . 114 6. 2 . . . Abgrenzung einer Verwendung . . . 121 6. 3 . . . Unabhängigkeit von einer Erzeugung . . . 125 6. 4 . . . Unabhängigkeit von einer Erweiterung . . . 131 7. Isolierter Komponententest . . . 137 7. 1 . . . Transformation des Integrationstests . . . 138 7. 2 . . . Skalierung mit einer Testsprache . . . 150 7. 3 . . . Testgetriebene Entwicklung . . . 157 7. 4 . . . Liskov-Substitution-Prinzip . . . 161 8. Redesign mit Unit-Tests . . . 165 8. 1 . . . Objektorientierte API für Entitäten . . . 167 8. 2 . . . Hervorheben von Änderungen als eigenständige Einheit . . . 170 8. 3 . . . Tests für die Highlight-Changes-Klasse . . . 177 8. 4 . . . Zusammenfassung des ersten Teils . . . 182TEIL II Testorientiertes ABAP-Design . . . 185 9. Design von Methoden . . . 187 9. 1 . . . Regeln zur Implementierung einer Methode . . . 188 9. 2 . . . Regeln für die Signatur einer Methode . . . 19610. Design von Klassen . . . 209 10. 1 . . . Erzeugung eines Objekts durch seine Klasse . . . 210 10. 2 . . . Erzeugung eines Objekts durch eine Factory-Klasse . . . 213 10. 3 . . . Abhängigkeitsarten zwischen Klassen . . . 217 10. 4 . . . Interfaces einer Klasse . . . 220 10. 5 . . . Abstraktionsebenen innerhalb einer Klasse . . . 222 10. 6 . . . Katalog-Entwurfsmuster . . . 229 10. 7 . . . Innerer Zusammenhalt . . . 23111. Design von Paketen . . . 237 11. 1 . . . Paketkonzept . . . 237 11. 2 . . . Produktpakete . . . 244 11. 3 . . . Testpakete . . . 24612. Testfälle . . . 249 12. 1 . . . Testdesign . . . 250 12. 2 . . . Testpyramide . . . 253 12. 3 . . . Testabdeckung . . . 25613. Testdoubles . . . 259 13. 1 . . . Vorteile von Testdoubles . . . 259 13. 2 . . . Spezifikation von Testdoubles . . . 263 13. 3 . . . Design von Testdoubles . . . 269 13. 4 . . . Injektion von Testdoubles . . . 27514. Globale Testdoubles . . . 289 14. 1 . . . Testdouble für eine DOM-Methode . . . 290 14. 2 . . . Testdouble für zwei DOM-Methoden . . . 295 14. 3 . . . Kombination zweier Methodendoubles . . . 301 14. 4 . . . Globalisierung von Testdoubles . . . 307 14. 5 . . . Design globaler Testdoubles . . . 310 14. 6 . . . Anpassung globaler Testdoubles . . . 31315. Testklassen . . . 319 15. 1 . . . Lokale Testklassen . . . 321 15. 2 . . . Entwurfsmuster . . . 324 15. 3 . . . Testklassenhierarchien . . . 327 15. 4 . . . Globale Testklassen . . . 331 15. 5 . . . Namenskonventionen für Testcode . . . 33316. Testdaten . . . 335 16. 1 . . . Testdatencontainer . . . 335 16. 2 . . . Testdatenobjekte . . . 34317. Testinfrastruktur . . . 355 17. 1 . . . Anwendungsszenarien für eine globale Testinfrastruktur . . . 357 17. 2 . . . Entwicklungsprozesse mithilfe einer Testinfrastruktur . . . 362 17. 3 . . . Zusammenfassung des zweiten Teils . . . 365TEIL III Agile Neuentwicklung . . . 36718. Planung und Vorarbeit . . . 369 18. 1 . . . Spezifikation der Beispielanwendung . . . 370 18. 2 . . . Architektur und Design der Beispielanwendung . . . 372 18. 3 . . . Teststrategie für die Beispielanwendung . . . 377 18. 4 . . . Vorbereitung der testgetriebenen Entwicklung . . . 38019. Testgetriebene Entwicklung . . . 393 19. 1 . . . Akzeptanztestgetriebene Entwicklung . . . 393 19. 2 . . . Komponententestgetriebene Entwicklung . . . 396 19. 3 . . . Unit-Test-getriebene Entwicklung . . . 401 19. 4 . . . Objektbasierte Überprüfung . . . 403 19. 5 . . . Testen des Änderns und Sicherns eines Vertrags . . . 407 19. 6 . . . Zusammenfassung des dritten Teils . . . 413TEIL IV Agile Methoden . . . 41520. Scrum . . . 417 20. 1 . . . Artefakte . . . 417 20. 2 . . . Rollen . . . 423 20. 3 . . . Meetings . . . 424 20. 4 . . . Eigenschaften . . . 42921. Agile Software Engineering . . . 433 21. 1 . . . Refactoring . . . 434 21. 2 . . . Testgetriebene Entwicklung . . . 437 21. 3 . . . Paarweise Programmierung . . . 441 21. 4 . . . Walking Skeleton . . . 447 21. 5 . . . Gemeinsame Codeverantwortung . . . 453 21. 6 . . . Kontinuierliche Integration . . . 45922. Lean-Entwicklungsmodell . . . 463 22. 1 . . . Grundlagen . . . 463 22. 2 . . . Umsetzung der Lean-Prinzipien mit Agile Software Engineering . . . 465 22. 3 . . . Testinfrastruktur . . . 467 22. 4 . . . Agile Coaching . . . 46823. Entwicklung der Teams . . . 469 23. 1 . . . Nachhaltige Ausbildung . . . 469 23. 2 . . . Lücken in der Ausbildung . . . 473 23. 3 . . . Agile Coaching . . . 476 23. 4 . . . Netzwerk für Agile Coaching . . . 48324. Entwicklung des Backlogs . . . 485 24. 1 . . . Design Thinking . . . 486 24. 2 . . . User Story Mapping . . . 49225. Entwicklung des Produkts . . . 497 25. 1 . . . Nachhaltige Entwicklung . . . 498 25. 2 . . . Entwicklungsstrategien für Legacy Code . . . 501 25. 3 . . . Entwicklungsstrategien für neuen Code . . . 502 25. 4 . . . Zusammenfassung des vierten Teils . . . 504TEIL V Testorientierte ABAP-Werkzeuge . . . 50526. ABAP Unit . . . 507 26. 1 . . . Klasse CL_ABAP_UNIT_ASSERT . . . 507 26. 2 . . . Ausführung von Tests . . . 512 26. 3 . . . Entwicklungsobjekte . . . 51827. ABAP Development Tools . . . 521 27. 1 . . . Einführung . . . 521 27. 2 . . . Testgetriebene Entwicklung mit den ABAP Development Tools . . . 52528. ABAP-Werkzeuge zur Testisolierung . . . 545 28. 1 . . . Beispielklasse . . . 545 28. 2 . . . Open SQL Test Double Framework . . . 548 28. 3 . . . Test Seams . . . 551 28. 4 . . . ABAP Test Double Framework . . . 553 28. 5 . . . Zusammenfassung des fünften Teils und des gesamten Buches . . . 557 Anhang . . . 559 A. Namenskonventionen . . . 561 B. Literaturverzeichnis . . . 563 C. Der Autor . . . 564 Index . . . 565