Upload
gjero-krsteski
View
3.104
Download
0
Embed Size (px)
DESCRIPTION
Testgetriebene Entwicklung - Methode für agile Softwareentwicklung
Citation preview
Testgetriebene Entwicklung
Methode für agile Softwareentwicklung
Übersicht Themen
Wieso testen?TestartenWie viele Tests braucht man?Testgetriebenes EntwickelnKontinuierliche IntegrationBad-Practices & Test-SmellsTestrezepte
Gjero Krsteski13.04.2023 2
Wieso PHP-Projekte testen?
Gjero Krsteski13.04.2023 3
Verändernd
Hohes Tempo
NeueFunktionalitäten
Wieder-verwendung
Genauigkeit
Wieso PHP-Projekte testen?
Gjero Krsteski 4
Code nicht getestet = Code defekt
Code defekt = sehr teuer
13.04.2023
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
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
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
Übersicht PHPUnit
Vorteileleicht erlernbar + erweiterbar + ausführbar
PraxisTestumgebung erstellenTest AufbauTest AbhängigkeitenTest Zusicherungen
Gjero Krsteski 813.04.2023
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
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
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
Testgetriebene Entwicklung
Methode für agile Softwareentwicklung
Teil 2
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
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
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
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
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
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
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
Was macht den Code nicht testbar?
Gott- Klassen & MethodenHart geschriebene AbhängigkeitenSachen privat machenLange MethodenLogik im KonstruktorStatische MehodenSingeltons
Gjero Krsteski 2013.04.2023
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
Kontinuierliche Integration
CodingKollektiver Besitz + TE + kont. Inspektion
TestenJeder Code hat UnitTestsTests schreiben -> Fehler beheben
DevOpsEntwicklung + Auslieferung = kein Big Bang
Gjero Krsteski 2213.04.2023
Danke für die Aufmerksamkeit!
Gjero Krsteski Web-Programmierer, Berater, Trainer
Homepage: krsteski.deE-Mail: [email protected]