testgetriebene entwicklung
DESCRIPTION
Testgetriebene Entwicklung - Methode für agile SoftwareentwicklungTRANSCRIPT
![Page 1: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/1.jpg)
Testgetriebene Entwicklung
Methode für agile Softwareentwicklung
![Page 2: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/2.jpg)
Übersicht Themen
Wieso testen?TestartenWie viele Tests braucht man?Testgetriebenes EntwickelnKontinuierliche IntegrationBad-Practices & Test-SmellsTestrezepte
Gjero Krsteski13.04.2023 2
![Page 3: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/3.jpg)
Wieso PHP-Projekte testen?
Gjero Krsteski13.04.2023 3
Verändernd
Hohes Tempo
NeueFunktionalitäten
Wieder-verwendung
Genauigkeit
![Page 4: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/4.jpg)
Wieso PHP-Projekte testen?
Gjero Krsteski 4
Code nicht getestet = Code defekt
Code defekt = sehr teuer
13.04.2023
![Page 5: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/5.jpg)
Wieso PHP-Projekte testen?
Gjero Krsteski 5
Entwickler testet nicht
Tag 1 Kunde entdeckt Bug
Kunde enttäuscht
Kunde meldet Bug
Tag 2Bug fix
Tag 3Backport
13.04.2023
![Page 6: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/6.jpg)
Testarten
Black-Box-TestsTests, die ohne Kenntnis der Implementierung durchgeführt werden.
White-Box-TestsTests, die anhand des Quellcodes der zu testenden Anwendung entwickelt werden.
Gjero Krsteski 613.04.2023
![Page 7: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/7.jpg)
Die Test-Pyramide
Gjero Krsteski 7
E-to-ETests
E-to-ETests
Functional TestsFunctional Tests
Unit TestsUnit Tests
Groß = SeleniumGroß =
Selenium
Mittel = Komponenten
Mittel = Komponenten
Klein = Code Einheit
Klein = Code Einheit
13.04.2023
![Page 8: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/8.jpg)
Übersicht PHPUnit
Vorteileleicht erlernbar + erweiterbar + ausführbar
PraxisTestumgebung erstellenTest AufbauTest AbhängigkeitenTest Zusicherungen
Gjero Krsteski 813.04.2023
![Page 9: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/9.jpg)
Was sind Stub Objekte?
ersetzen Objekte oder Methoden mit Test-Dummysentkoppeln Code von externen Abhängigkeitenüberspringen langwierige Abläufe
Gjero Krsteski 913.04.2023
![Page 10: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/10.jpg)
Was sind Mock Objekte?
stellen wie Stubs Test-Dummys bereittesten, ob Methoden wie erwartet aufgerufen werdentesten die Kommunikation mit Komponenten, ohne einen tatsächlichen Aufruf loszutreten
Gjero Krsteski 1013.04.2023
![Page 11: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/11.jpg)
Wie viele Tests braucht man?
Codeabdeckung von kritischen StellenMinimal - MaximaltestsGrenzwerteHappy Pathunzulässige Eingaben
kurzfristiger Code + keine Änderung + kein Test = OKCode -> Wiederverwendung = Code + Test = OK
Gjero Krsteski 1113.04.2023
![Page 12: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/12.jpg)
Testgetriebene Entwicklung
Methode für agile Softwareentwicklung
Teil 2
![Page 13: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/13.jpg)
Testgetriebenes Entwickeln
Vorteilesteigert die Produktivität von Programmieren
Verzicht auf spekulative FeaturesVerzicht auf zukünftig eventuell notwendige Spezialfälle
WichtigAuch wenn kein TE -> Tests immer am selben Tag wie Produktionscode schreiben!
Gjero Krsteski 1313.04.2023
![Page 14: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/14.jpg)
Testgetriebenes Entwickeln – die Realität
Vermeiden durchType-Hints im Konstruktor & MethodenDependency InjectionInterfaces & AbstractsStatische Methoden vermeidenObjekte mit einziger & klar definierter Verantwortung
Gjero Krsteski 1413.04.2023
![Page 15: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/15.jpg)
Testgetriebenes Entwickeln – das Mantra
Gjero Krsteski 15
RefaktoriereRefaktoriereEntferne jeden redundanten Code, der dafür erstellt
wurde, den Test zum Laufen zu bringen
GrünGrünSorge dafür, dass der Test schnellst möglich läuft, egal
was für Sünden du dafür begehen musst
RotRotSchreibe einen Test, der nicht funktioniert
13.04.2023
![Page 16: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/16.jpg)
Testgetriebenes Entwickeln – Praxis
Aufgabe: TE1 – Teil 1 von 3Erstelle ein Objekt Opposite, das beim Instanziieren, ein Übergabeparameter vom Typ Integer bekommt. Erstelle dafür eine Methode getValue, die den Gegensatz zu den übergebenen Parameter liefert. Also bei 1 eine 0 und bei 0 eine 1. Achtung: Ein Vorprozess sorgt dafür, dass das Objekt immer eine 0 oder 1 beim Instanziieren bekommt.
Gjero Krsteski 1613.04.2023
![Page 17: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/17.jpg)
Testgetriebenes Entwickeln – Praxis
Aufgabe TE1 – Teil 2 von 3Das Objekt Opposite soll in anderen Projekten wiederverwendet werden. Der Vorprozess entfällt somit. Sorge dafür, dass das Objekt Opposite und seine getValue Methode weiterhin funktionieren und ein entsprechenden Ausnahmefehler auslösen.
Gjero Krsteski 1713.04.2023
![Page 18: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/18.jpg)
Testgetriebenes Entwickeln – Praxis
Aufgabe TE1 – Teil 3 von 3Erstelle eine neue Methode getValuePlusOne die den instanziierten Wert plus 1 zurückliefert. Teste das Verhalten der Methode getValuePlusOne mit Grenzwerten und unzulässige Eingaben.
Gjero Krsteski 1813.04.2023
![Page 19: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/19.jpg)
Testgetriebenes Entwickeln – Refaktorierung
Die RegelnEntwickeln oder Refaktorieren, nie beides zugleich!Immer nur mit Unit-Tests zur AbsicherungDiszipliniert vorgehen in kleinen Schritten
Was genau Refaktorieren?Duplizierter Code => Risiken & MehrarbeitLange Methode => schwer zu verstehen & pflegenGroße Klasse => beschäftigt mit zu vielen Dingen, Verdacht auf duplizierten Code.
Gjero Krsteski 1913.04.2023
![Page 20: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/20.jpg)
Was macht den Code nicht testbar?
Gott- Klassen & MethodenHart geschriebene AbhängigkeitenSachen privat machenLange MethodenLogik im KonstruktorStatische MehodenSingeltons
Gjero Krsteski 2013.04.2023
![Page 21: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/21.jpg)
Test Strategien
Black-Box TestSelenium -> UnitTest + Refrakturierung
PfadfinderregelTagesende -> Test erstellen & aufräumen
Fixed-T-TimesFeste Zeiten in der Woche zum Testen
Gjero Krsteski 2113.04.2023
![Page 22: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/22.jpg)
Kontinuierliche Integration
CodingKollektiver Besitz + TE + kont. Inspektion
TestenJeder Code hat UnitTestsTests schreiben -> Fehler beheben
DevOpsEntwicklung + Auslieferung = kein Big Bang
Gjero Krsteski 2213.04.2023
![Page 23: Testgetriebene Entwicklung](https://reader033.vdocuments.pub/reader033/viewer/2022060119/558cb27fd8b42a5f7a8b45ca/html5/thumbnails/23.jpg)
Danke für die Aufmerksamkeit!