Leanpub Header

Skip to main content

Test-first Codierung

Programming with Ease - Teil 1

Clean Code und hohe Testabdeckung fallen im Tagesgeschäft deiner Softwareentwicklung oft durch die Ritzen? Das könnte daran liegen, dass dir ein systematisches Vorgehen für Probleme unterschiedlichen Schwierigkeitsgrades fehlt. In diesem Buch zeige ich dir ein umfassendes Vorgehen, das classical TDD einschließt - und darüber hinausgeht.

The author is letting you choose the price you pay for this book!

Pick Your Price...
PDF
EPUB
WEB
493
Pages
99,159Words
About

About

About the Book

Clean Code bedeutet wandlungsfähiger Code. Wandlungsfähigkeit setzt voraus, dass du keine Angst hast, Code zu verändern. Du willst ihn ja nicht unwissentlich verschlimmbessern und das nicht bemerken. Stabilen Code liefern und sofort wissen, wann er reif zur Lieferung ist, sind Grundpfeiler, auf denen deine langfristig hohe Produktivität ruht.

Automatisierte Tests sind seit langem unverzichtbar, wenn es um nachweisbare und nachvollziehbare Korrektheit von Software geht. Leider haben sich automatisierte Tests trotz hervorragender Werkzeugunterstützung und methodischer Empfehlungen wie Test-Driven Development (TDD) und Behavior-Driven Development (BDD) noch nicht als Selbstverständlichkeit durchgesetzt. Die Testabdeckung ist daher in vielen Codebasen, auch frischen, nicht ausreichend, um regressionsfreiheit sicherzustellen. Das Sicherheitsnetz, das automatisierte Tests spannen sollen, damit du darüber angstfrei Codieren kannst, ist weit und/oder löchrig. Woran mag das liegen?

Die Gründe sind sicher vielfältig für dünne Testabdeckung. Einer sticht für mich jedoch heraus: mangelnde Systematik. Es fehlt eine Guideline, wie du als Entwickler, der du mit einem Programmierproblem konfrontiert bist, geradlinig zu testabgedecktem und auch noch ordentlichem Code kommst.

Der red-green-refactor Prozess in TDD ist eine gute Idee - die allerdings in der Praxis von vielen Entwicklern als zu wenig unterstützend erlebt wird. Sie versuchen sich daran zu halten, fühlen sich jedoch schnell entweder allein gelassen oder überfordert bei ihrem Praxisproblem. Aus Frustrations wird dann das Kind mit dem Bade ausgeschüttet und ganz auf automatisierte Tests verzichtet. Oder es wird in der Community nach Hilfe gesucht, die Literatur gewälzt - doch als Antwort wird vor allem "Du musst es eben nochmal und genauer nach den Regeln probieren!" gegeben. Beides ist nicht hilfreich.

Automatisierte Tests sind heute nicht mehr nice to have, sondern gehören zu fachgerechter Arbeitsweise, wenn du professioneller Softwareentwickler sein willst. Sie nicht zu schreiben, sich nicht darum zu bemühen, ist keine Option.

Und mit TDD einfach nochmal und nochmal gegen die Problemwand zu rennen, bringt auch nicht unbedingt die Lösung, sondern erzeugt Frust und Kopfschmerzen. Denn wenn es mit TDD nicht recht klappen will, dann liegt das nicht unbedingt daran, dass du als Entwickler TDD nicht begreifst. Es kann auch daran liegen, dass der TDD Prozess einfach nicht zu deinem Problem passt.

An TDD ist deshalb nichts falsch. Es greift nur schlicht in der Praxis zu kurz. Die Welt der Programmierprobleme ist größer und bunter als das, was in TDD Coding Dojos an kleinen Problemen behandelt wird.

In mehr als 10 Jahren Beschäftigung mit Clean Code Development habe ich mich daher bemüht, ein Vorgehen zu entwickeln, das umfassender und systematischer unterstützt, Probleme in der Codierung zu lösen. Das Motto ist sozusagen: "Keine Angst vor dem blinkenden Cursor in deiner IDE!"

Test-first Codierung als Teil meines Programming with Ease Konzeptes für Clean Code Development nimmt dich an die Hand bei der Bewältigung von Programmierproblemen, die es in fünf Kategorien einteilt:

  • trivial
  • einfach
  • kompliziert
  • komplex
  • chaotisch

Diese Kategorisierung ist an das Cynefin Framework von IBM angelehnt, das Führungskräfte situationsgerecht bei Entscheidungen unterstützen soll.

In der test-first Codierung wird diesen Kategorien aber jeweils ein anderer Problemlösungsansatz zugeordnet. Triviale Probleme gehst du anders an als komplizierte oder komplexe. Klingt logisch, oder? TDD - genauer: classical TDD - hat darin auch seinen Anwendungsfall; doch der ist begrenzt auf nur einen der Problemschwierigkeitsgrade. Und komplexe Probleme sind das nicht.

Gemeinsam ist den Ansätzen für alle Schwierigkeitsgrade, dass du die Codierung mit mindestens einem Test beginnst: dem Akzeptanztest. Deshalb test-first im Titel. Die Begründung ist zwiefach: 1. Wenn du nicht zuerst einen Test schreibst, ist die Wahrscheinlichkeit groß, dass du keinen schreibst. 2. Wenn du dein Denken zuerst auf einen Test richtest, also auf die Außenansicht deiner Lösung, nimmst du die Perspektive eines Benutzers an. Das führt tendenziell zu einer besseren Schnittstelle für deinen Code und zu höherer Testbarkeit.

Test-first Codierung ist aber nicht alles. Es ist nur die letzte Phase eines mehrschrittigen Prozesses, in dem du Anforderungen in hochqualitativen Code umsetzt. Diesen Prozess fasse ich unter dem Titel Programming with Ease zusammen, weil die Programmierung "von Anfang bis Ende" durch mehr Systematik einfacher werden soll.

Allerdings ist Test-first Codierung der erste Band in meiner Programming with Ease Buchreihe. Codierung ist schlicht das, was dir als Softwareentwickler am nächsten liegt und jeden Tag im wahrsten Sinne des Wortes unter den Nägeln brennt. Deshalb will ich dich dabei abholen und unterstützen. Deine Motivation wird bei der Codierung am höchsten sein, etwas Neues zu lernen und deine Gewohnheiten zu verändern. Zumindest hoffe ich das.

Was erwartet dich konkret in diesem Band? Ich habe meine Vorstellung von einem test-first Vorgehen in mehrere Lektionen/Kapitel eingeteilt, die ich auch in Trainings vermittle. Schau dir einfach mal das Inhaltsverzeichnis an. Jedes Kapitel besteht aus einem Erklärungsteil und Übungsaufgaben. Der Text ist mit vielen Codebeispielen und Abbildungen aufgelockert. Insgesamt sollte das Buch dir ca. 8+ Stunden Lesespaß geben. Und zur Bearbeitung der Übungsaufgaben kannst du auch nochmal 12-16 Stunden rechnen. Das meine ich nicht zur Abschreckung, sondern will dir zeigen, dass du hier einiges Material hast, um dich als Software Craftsman solide mit der Thematik Clean Code Development auseinander zu setzen. Das Buch ist ernsthafte Lektüre für deine Weiterbildung.

Schau dir am besten einmal die Probekapitel an; oder stelle Fragen in der Community zum Buch und rund um Clean Code Development. Dann bist du hoffentlich entschlossen, es damit zu versuchen: für mehr Stabilität und Ordnung in deiner Software.

Ich wünsche dir viel Freude bei der Programmierung!

-Ralf Westphal, info@ralfw.de

PS: Wenn du Lust hast, findest du auch einen Überblick darüber, was ich mit Test-first Codierung meine, in einem Youtube-Interview, das David Tielke mit mir geführt hat. In knapp 30 Minuten reiße ich darin die wesentlichen Aspekte des Ansatzes an.

Ver. 1.3.6.20210416

Price

Pick Your Price...

Minimum price

$17.50

$24.50

You pay

$24.50

Author earns

$19.60
$

All prices are in US $. You can pay in US $ or in your local currency when you check out.

EU customers: prices exclude VAT, which is added during checkout.

...Or Buy With Credits!

Number of credits (Minimum 2)

2
The author will earn $24.00 from your purchase!
You can get credits monthly with a Reader Membership

Author

About the Author

Ralf Westphal

Ralf Westphal is a freelance consultant, project coach, trainer, author, and speaker on concepts and methods to increase longterm productivity in software development. He is also the co-founder of the German "Clean Code Developer" initiative for higher software quality.

Ralf is based in Bansko, Bulgaria. Visit his homepage at www.ralfw.de for information on regular in-depth online trainings and consulting regarding sustainable software development.

Contents

Table of Contents

Zum Geleit

Motivation

  1. Programming with Ease
  2. Das Softwareuniversum

Einleitung

  1. Anforderungskategorien
  2. It’s the productivity, stupid!
  3. Produktivitätskiller
  4. Fehlende Korrekheit
  5. Fehlender Wert
  6. Fehlende Ordnung
  7. Zusammenfassung
  8. Die Methode

01 - Die Anforderung-Logik Lücke

  1. Logik - Der Stoff aus dem Verhalten entsteht
  2. Funktionalität
  3. Effizienz I - Effizienz durch Algorithmen und Datenstrukturen
  4. Effizienz II - Effizienz durch Verteilung
  5. Zusammenfassung
  6. Von den Anforderungen zur Logik
  7. Logik schwer definierbar
  8. Die Phasen der Programmierung
  9. Zusammenfassung
  10. Übungsaufgaben
  11. Reflexionsaufgabe
  12. Aufgabe 1 - Nachdenken
  13. Aufgabe 2 - Entwickeln

02 - Vorläufig codieren im Chaos

  1. Das Nein der Codierung
  2. Prototyping to the Rescue
  3. Die Schwierigkeit der Umsetzung einstufen
  4. Zusammenfassung

03 - Sofort codieren in der Trivialität

  1. Trivialität als Gegenteil von Chaos
  2. Vorsicht vor Selbstüberschätzung!

04 - Schrittweise codieren in der Einfachheit

  1. Trittsteine legen
  2. Pear Programming
  3. Die Kunst der Problemskalierung
  4. Sichtbarkeit von Variationsdimensionen
  5. Variationen ordnen
  6. Am Beispiel
  7. Zusammenfassung
  8. Übungsaufgaben
  9. Reflexionsaufgabe
  10. Aufgabe 1
  11. Aufgabe 2

05 - Komplementär codieren in der Kompliziertheit

  1. Zerlegung in komplementäre Teilprobleme
  2. Funktionen repräsentieren Lösungen
  3. Integration Operation Segregation Principle
  4. Zerlegungsbeispiel I
  5. Leitfragen für die Zerlegung
  6. Analyse & Entwurf
  7. Codierung
  8. Reflexion
  9. Buddelschiff Programmierung
  10. Zerlegungsbeispiel II
  11. Bottom-up Codierung
  12. Reflexion
  13. Zusammenfassung
  14. Übungsaufgaben
  15. Reflexionsaufgabe
  16. Aufgabe 1 - Römische Zahlen kompliziert wandeln
  17. Aufgabe 2 - Game of Life

06 - Tests als Treiber der Modularisierung

  1. Akzeptanztests
  2. Triviale Probleme
  3. Einfache Probleme
  4. Komplizierte Probleme
  5. Gerüsttests
  6. Gerüsttestfälle erhalten I - Akzeptanztests
  7. Gerüsttestfälle erhalten II - Modultests
  8. Zusammenfassung
  9. Übungsaufgaben
  10. Reflexionsaufgabe
  11. Anforderungen
  12. TODO 1: Inkrementelle Teilprobleme
  13. TODO 2: Komplementäre Teilprobleme
  14. TODO 3: Nähere dich der Gesamtlösung iterativ an
  15. TODO 4: Lösche die Gerüsttests - oder wandle sie um

07 - Testbarkeit steigern mit Surrogaten

  1. Logik dynamisch binden
  2. Statische Bindung
  3. Dynamische Bindung mit Funktionszeigern
  4. Dynamische Bindung mit Objekten
  5. Zusammenfassung
  6. Surrogate in Tests einsetzen
  7. Extraktion einer Klasse und Abstraktion mit Interface
  8. Injektion einer Objektfabrik
  9. Surrogate unterschieben
  10. Reflexion
  11. IOSP over Surrogates
  12. Extraktion eines Belangs
  13. Refactoring to Functional Core
  14. Schritte in die Objektorientierung
  15. Zusammenfassung
  16. Übungsaufgaben
  17. Reflexionsaufgabe
  18. Aufgabe 1 - CSV-Tabellierung testbarer machen
  19. Aufgabe 2 - Game-of-Life testbarer machen

08 - Experimentell codieren in der Komplexität

  1. Experimentelles Vorgehen im Testcode
  2. TDD as if you meant it (TDDaiymi)
  3. Beispiel #1: FromRoman revisted
  4. Inkrement 1
  5. Inkrement 2
  6. Inkrement 3
  7. Inkrement 4
  8. Inkrement 5
  9. Inkrement 6
  10. Reflexion
  11. Beispiel #2: Eine ruhige Bowlingkugel schieben
  12. Anforderungen
  13. Analyse
  14. Codierung
  15. Reflexion
  16. Zusammenfassung
  17. Übungsaufgaben
  18. Reflexionsaufgabe
  19. Anforderungen
  20. TODO 1
  21. TODO 2
  22. TODO 3

09 - Test-first refaktorisieren

  1. Frustrierende Lektüre
  2. Fehlende Bedeutung
  3. Fehlende Zusammenhänge
  4. Fehlende Testbarkeit
  5. Warum refaktorisieren?
  6. Softwarewartung erhält Ordnung proaktiv
  7. Schrittweise aufräumen I
  8. Bestimme das System-to-Refactor (S2R)
  9. Refactor to Test-First
  10. Schrittweise aufräumen II
  11. Refactor to IOSP
  12. Refactor to Modules
  13. Dokumentieren
  14. Reflexion
  15. Zusammenfassung
  16. Übungsaufgaben
  17. Reflexionsaufgabe
  18. Szenario
  19. TODO 1
  20. TODO 2
  21. TODO 3
  22. TODO 4
  23. TODO 5

10 - Finale mit Testmatrix

  1. Anhang - Musterlösungen

Musterlösung: 01 - Die Anforderung-Logik Lücke

  1. Aufgabe 1 - Gründe für automatisiertes Testen
  2. Beispielhafte Gründe für die Testautomatisierung
  3. Beispielhafte Gründe für test-first Testautomatisierung
  4. Aufgabe 2 - Eine Anwendung test-first entwickeln
  5. Analyse
  6. Entwurf der Persistenz
  7. Codierung

Musterlösung: 04 - Schrittweise codieren in der Einfachheit

  1. Aufgabe 1 - Einschätzung des Schwierigkeitsgrades
  2. Mathematischen Ausdruck berechnen
  3. Game-of-Life
  4. NQueen
  5. Binärzahlenkonvertierung
  6. Aufgabe 2 - Römische Zahlen in Dezimalzahlen wandeln
  7. Verständnis dokumentieren
  8. Inkrementelle Testfälle definieren
  9. Test-first codieren
  10. Reflexion

Musterlösung: 05 - Komplementär codieren in der Kompliziertheit

  1. Aufgabe 1 - Römische Zahlen kompliziert wandeln
  2. Zerlegung für Lösungsansatz 1
  3. Zerlegung für Lösungsansatz 2
  4. Reflexion
  5. Aufgabe 2 - Game of Life
  6. Verständnis dokumentieren
  7. Schrittweise zerlegen
  8. Akzeptanztests
  9. Teilprobleme bottom-up lösen
  10. Reflexion

Musterlösung: 06 - Tests als Treiber der Modularisierung

  1. Analyse
  2. Inkrementelle Teilprobleme
  3. Zerlegung der Inkremente inkl. Codierung
  4. Akzeptanztest
  5. Inkrement I
  6. Inkrement II
  7. Inkrement III
  8. Inkrement IV
  9. Inkrement V
  10. Reflexion
  11. Refaktorisierung mit nachträglicher Modularisierung
  12. Zusammenfassung

Musterlösung: 07 - Testbarkeit steigern mit Surrogaten

  1. Aufgabe 1 - CSV-Daten tabellieren
  2. Analyse
  3. Planung
  4. Umsetzung
  5. Reflexion
  6. Aufgabe 2 - Game-of-Life
  7. Analyse
  8. Planung
  9. Umsetzung
  10. Reflexion
  11. Zusammenfassung

Musterlösung: 08 - Experimentell codieren in der Komplexität

  1. Analyse
  2. Planung
  3. Zerlegung in Teilprobleme
  4. Inkrementelle Testfälle für die komplexen Probleme
  5. Codierung
  6. Akzeptanztests
  7. TDDaiymi - Lange Worte zerschneiden
  8. TDDaiymi - Zeilen zusammensetzen
  9. Triviale Probleme lösen
  10. Integration
  11. Refaktorisierung in Module
  12. Reflexion
  13. Zurückhaltung als Tugend

Musterlösung: 09 - Test-first refaktorisieren

  1. Abgrenzung des System to Refactor (S2R)
  2. Characterization Test
  3. S2R Entry Point testbar machen
  4. Console kapseln
  5. Characterization Test aufsetzen
  6. Verantwortlichkeiten identifizieren
  7. Entwurf der neuen Codestruktur
  8. Funktionen extrahieren
  9. Kommandozeilenanalyse
  10. HexDump I - Entzerrung der Logik
  11. HexDump II - Refactor to IOSP
  12. Refactor to Modules
  13. Bonus Verbesserungen
  14. Auflösung einer logischen Abhängigkeit
  15. Fehlerkorrektur in der Ausgabe
  16. Zusammenfassung

Get the free sample chapters

Click the buttons to get the free sample in PDF or EPUB, or read the sample online here

The Leanpub 60 Day 100% Happiness Guarantee

Within 60 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.

Now, this is technically risky for us, since you'll have the book or course files either way. But we're so confident in our products and services, and in our authors and readers, that we're happy to offer a full money back guarantee for everything we sell.

You can only find out how good something is by trying it, and because of our 100% money back guarantee there's literally no risk to do so!

So, there's no reason not to click the Add to Cart button, is there?

See full terms...

Earn $8 on a $10 Purchase, and $16 on a $20 Purchase

We pay 80% royalties on purchases of $7.99 or more, and 80% royalties minus a 50 cent flat fee on purchases between $0.99 and $7.98. You earn $8 on a $10 sale, and $16 on a $20 sale. So, if we sell 5000 non-refunded copies of your book for $20, you'll earn $80,000.

(Yes, some authors have already earned much more than that on Leanpub.)

In fact, authors have earned over $14 million writing, publishing and selling on Leanpub.

Learn more about writing on Leanpub

Free Updates. DRM Free.

If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).

Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats that a book includes are shown at the top right corner of this page.

Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.

Learn more about Leanpub's ebook formats and where to read them

Write and Publish on Leanpub

You can use Leanpub to easily write, publish and sell in-progress and completed ebooks and online courses!

Leanpub is a powerful platform for serious authors, combining a simple, elegant writing and publishing workflow with a store focused on selling in-progress ebooks.

Leanpub is a magical typewriter for authors: just write in plain text, and to publish your ebook, just click a button. (Or, if you are producing your ebook your own way, you can even upload your own PDF and/or EPUB files and then publish with one click!) It really is that easy.

Learn more about writing on Leanpub