Softwaretechnik
Lesson 2
TDD & Code Katas
Organisatorisches
- Termine
- Prüfungen
- Übungen/Aufgaben
Termine
7.10. und 14.10. fallen aus
Prüfungen
- Die Note entsteht zu 100% aus der Prüfung
- Aufgaben werden nicht benotet
- Prüfungsrelevant ist
- Was auf den Folien steht
- Was ich dazu erzählt habe
- Was in Aufgaben gemacht wurde
Übungen/Aufgaben
- Es wird Aufgaben geben
- Oft in der Form
- Recherche
- Lesen von bestimmten Artikeln
- Anschauen eines Video
- Die Ergebnisse dieser Aufgaben sind Prüfungsrelevant
Meine Empfehlung
- Bildet Gruppen
- Schreibt zusammen was in der Vorlesung passiert ist
- Macht es im Internet verfügbar
- Zum Beispiel im Wiki des Github Repositories zur Vorlesung
- Macht die Aufgaben, schriftlich
- tauscht die Ergebnisse untereinander aus und bewertet sie
Feedback
Eine Rückkopplung, auch Rückkoppelung, Rückmeldung oder Feedback (engl.), ist ein Mechanismus in signalverstärkenden oder informationsverarbeitenden Systemen, bei dem ein Teil der Ausgangsgröße direkt oder in modifizierter Form auf den Eingang des Systems zurückgeführt wird.
Feedback
praktisches Beispiel
Selbst die einfachste Aufgabe wird extrem schwierig, wenn man kein angemessenes Feedback bekommt
Schneller ist besser
Feedback in der Programmierung
- Entwickeln
- Ausprobieren
- Wiederholen
Wie oft schaffen Sie das in einer halben Stunden?
Diplomarbeit in Simulationsphysik
- Programmieren (einige Stunden bis Tage)
- Initialzustand erzeugen (30min)
- Programm ausführen (5Tage)
- Datenan alysieren (1-2Stunden)
- Debuggen oder auf den Nobelpreis hoffen
Nicht so geschickt
Automatische Unit Tests
- Testen kleinste Einheiten
- Methoden
- Klassen
- KLEINE Cluster von Klassen
- Kein I/O
- I/O ist langsam
- Keine Datenbank
- Keine File Zugriff
- Keine Netzwerkkommunikation
- Schnell
- 0.001s - 0.01s pro Test
- 100-1000 Tests pro Sekunde
- > 6000 Tests in der Minute
Struktur eines Test
-
Given
- Vorbedingungen
- When
- Die eigentlich zu testende Aktion
- Then
- Die Prüfung; Die Bedingung die am Ende erfüllt sein muss
Der ideale Test
- Hat genau einen Grund fehl zu schlagen
- Macht offensichtlich was er testet
- Muss nur angefasst werden, wenn das getestete Verhalten sich ändert.
- Ist schnell
- Ist unabhängig von anderen Tests
- Gibt beim Fehlschlagen klare Informationen wo das Problem ist
Der reale Test
... ist oft ...
- langsam
- fällt aus allen möglichen Gründen auf die Nase
- kann nur nach bestimmten anderen Tests ausgeführt werden
- darf auf keinen Fall parallel zu anderen Tests laufen.
- ist auch mal einfach so mal rot (und beim nächsten Lauf wieder grün)
Test First / TDD
- Während der Entwicklung muss man schon mehrfach testen
- Starten der Anwendung und ausprobieren kann sehr lang dauern
Erst den Test schreiben
TDD Zyklus
Red-Green-Refactor
Red
- Einen Test schreiben
- Ausführen
- Sicherstellen, dass er rot ist
- Sicherstellen, dass er aus dem richtigen Grund Rot ist
- Sicherstellen, dass die Fehlermeldung hilfreich ist
- Ein nicht kompilierender Test ist ein roter Test
Green
- produktiven Code schreiben
- so einfach wie möglich
- so wenig wie möglich
- nichts weil man es eh benötigt
- alle Tests ausführen
- Sind alle Grün?
Refactor
- Code ändern ohne das Verhalten zu ändern
- Nach jedem Schritt Tests ausführen
- Nur bei Grünen Tests
- Wenn die Implementierung zu einem Test ein Refactoring benötigt den Test erst noch einmal auskommentieren, um bei Green zu refactoren
Auswahl des nächsten Tests
- Möglichst einfach zu implementieren
- Aber so, dass er die Anwendung vorantreibt
- Erst über das Design nachdenken
Effekte
- Code wird zwangsläufig testbar
- Es entsteht eine umfangreiche Regressionstestsuite
- Fehler können schnell entdeckt werden
- reduziert die potentiell verantwortlichen Codezeilen
- Gut geschriebene Tests dienen als Spezifikation
TDD ist kein Silver Bullet
- Wirkt nur auf fein granulares Design
- Ein ungeigneter Algorithmus wird nicht besser
- Unit Tests sind nur eine von vielen notwendigen Testarten
Code Katas
Kata
Eine Form [(Kata)] in den Kampfkünsten ist eine genau festgelegte Abfolge von Bewegungen – wie Angriffen, Verteidigungen und Gegenangriffen - die einen Kampf gegen einen oder mehrere, reale oder imaginäre Gegner darstellt.
Code Kata
- Eine einfache Aufgabe wird implementiert
- TDD
- ca 30min
- Fertigstellung ist irrelevant, aber befriedigend
- übt TDD
- übt die effiziente Nutzung der IDE
- Auch mit diversen Einschränkungen
-
Keine Maus
- maximal 2 Attribute pro Klasse
- Nur 2min pro TDD Zyklus
Die Bowling Kata
10 Frames mit maximal zwei Würfen um 10 Pins abzuräumen.
Die geworfenen Pins zählen als Punkte.
Werden alle 10 Pins mit dem zweiten Wurf abgeräumt (Spare), zählt der nächste Wurf als Bonus dazu.
Werden alle 10 Pins mit dem ersten Wurf eines Frames geworfen (Strike) zählen die nächsten beiden Würfe als Bonus.
Im 10 Frame gibt es für die Bonusbestimmung gegebenenfalls einen dritten Wurf.
API
score() wird nur am Ende des Spiels aufgerufen.
negative pins; pins > 10; frames >10 und dergleichen müssen nicht geprüft werden.
Go
Aufgabe 1
Recherche: Was macht (Java) Code schwer testbar? Was macht in einfach testbar?
Aufgabe 2
Dieses Video anschauen und verstehen
Bis Minute 42:00
Aufgabe 3
- Installiert Git
- Legt ein Repository (a) an
- Legt eine Datei mit Inhalt in diesem Repository an (add + commit)
- Cloned das Repository in das Repository (b)
- Ändert die Datei in Repository (b) (add + commit)
- pusht die Änderung zu Repository (a)
- prüft das die Änderungen in (a) angekommen sind.
Aufgabe 4
Recherche: Was tut in Git
- rebase
- merge
- cherry-pick
?
Hilfreich
Code Retreat
- Einen Tag lang Code Katas machen
- Beliebige Programmiersprache
- Ordentliches kostenloses Essen
- Hervorragende Möglichkeit zu lernen
T-Systems onsite Services
14.12.2013
9:00 Uhr - 18:00 Uhr
Registrierung über: https://gdcr-wob.eventbrite.com/
softwaretechnik lesson2
By Jens Schauder
softwaretechnik lesson2
- 1,650