SlideShare ist ein Scribd-Unternehmen logo
Testing mit
Aber das hat gestern noch funktioniert
Samuel Nitsche
@Der_Pesse
derpesse@gmail.com
http://cleandatabase.wordpress.com
Senior Software Entwickler
bei Smart Enterprise Solutions, Pforzheim
Maintainer: utPLSQL cli + Java-API
Live-Code Beispiele:
https://github.com/pesse/sith-demo-db/tree/
apexconn19/presentation_stages
Automatisierte Selbst-Tests
https://www.martinfowler.com/bliki/SelfTestingCode.html
Demo
https://github.com/pesse/sith-demo-
db/tree/apexconn19/presentation_stages/1_the_unexpected_menace.sql
Episode I:
The Unexpected Menace
Sie sind Entwickler in der Imperialen
Armee, seit gestern zuständig für die
Datenbank, die die Einsatzkräfte der
dunklen Seite organisiert.
Ein mächtiger Sith-Lord hat sich
angekündigt und erwartet eine Last-
Minute-Änderung…
V_GROUPS
GROUP_NAME
1st Squad of 1st Platoon of
2nd Company of 5th Battalion
of 1st Brigade of 1st Division
Ehrung einer Soldaten-
Gruppe
Revan’s Ghosts
??
?
LEADER_NAME
LEADER_RANK_LABEL
Ein standardisierter
Test-Prozess
utPLSQL
Ultimate Testing
Framework For PL/SQL
• Frei
• Open-Source
• Aktive Weiterentwicklung
• Komplett in PL/SQL geschrieben
• Umfangreiches Tooling
• Installation:
http://utplsql.org/utPLSQL/latest/userguide/install.html
http://utplsql.org/utPLSQL/latest/userguide/expectations.html
ut.expect(aktuellerWert)
.to_equal(erwarteterWert)
.to_be_greater_than(value)
.to_be_between(min, max)
.to_be_like('%teilWert%')
.not_to_be_null()
.not_to_be_less_than(value)
…
Demo
https://github.com/pesse/sith-demo-
db/tree/apexconn19/presentation_stages/2_regression_hope.sql
Episode II:
Regression Hope
Nach der schrecklichen Erfahrung mit
Darth Ora machen Sie sich auf, das
sagenumwobene Artefakt utPLSQL zu
meistern und Ihren ersten Unit-Test zu
schreiben…
Vorteile • Schutz vor ungewollten Änderungen
bestehender Funktionalität
• Transportabel, beliebig wiederholbar
• Ausschluss einmal aufgetretener Fehler
• Beweis, dass vereinbarte Anforderungen
der Software erfüllt sind
Dynamisches
SQL?
Materialized View?
Vorteile • Schutz vor ungewollten Änderungen
bestehender Funktionalität
• Transportabel, beliebig wiederholbar
• Ausschluss einmal aufgetretener Fehler
• Beweis, dass vereinbarte Anforderungen
der Software erfüllt sind
• Fokus auf das was statt auf das wie
Karol D, https://www.pexels.com/photo/blooming-blossom-blur-bright-409696/
Historisch gewachsen
Demo
https://github.com/pesse/sith-demo-
db/tree/apexconn19/presentation_stages/3_the_tdd_awakens.sql
Episode III:
The TDD Awakens
Obwohl der erste Unit-Test die
Bedrohung durch Regression-Fehler
vorerst zurückgeschlagen hat, lauern
überall Gefahren für die Funktionalität
der Applikation.
Doch Sie spüren, wie die Macht des
Test-Driven-Development langsam in
Ihnen erwacht…
Assault
Group 1
Division
1
Brigade 1
Division
2
Brigade 1
Batallion
1
Batallion
2
Company
1
Platoon
1
Company
2
Platoon
1
Platoon
2
Brigade 2
Division
3
Brigade 1
1st Platoon of 2nd Company of 2nd Batallion of 1st
Brigade of 2nd Division of 1st Assault Group
Position innerhalb übergeordneter Gruppe: 1
Label Gruppentyp: Platoon
Ehrenname: Revan‘s Ghosts
Result = Revan‘s Ghosts
Position innerhalb übergeordneter Gruppe: 1
Label Gruppentyp: Platoon
Ehrenname: NULL
Result = 1st Platoon
GET_GROUP_NAME
Talk to me!
Wie weit gehen mit
Tests?
Demo
https://github.com/pesse/sith-demo-
db/tree/apexconn19/presentation_stages/4_attack_of_the_views.sql
Episode IV:
Attack of the Views
Ein Schritt Ihrer Mission zu stabiler
Funktionalität ist erreicht, doch nun gilt
es, die alte Legacy-View endgültig los zu
werden.
Ein alter, beinahe vergessener
Bekannter kommt dabei zur Hilfe…
https://vignette.wikia.nocoo
kie.net/starwars/images/e/e
4/Artoo_modifications.jpg
Demo
https://github.com/pesse/sith-demo-
db/tree/apexconn19/presentation_stages/5_return_of_the_unit_test.sql
Episode V:
Return of the Unit-Test
Ihre View erstrahlt in neu
refaktorisiertem Glanz und zum ersten
Mal seit langem ist die Aussicht auf
Wartbarkeit greifbar.
Nun ist es Zeit, sie vor zukünftigen
Angriffen zu schützen…
--%suite(Demo suite)
--%beforeall
procedure data_setup_before_all;
--%beforeeach
procedure thing_to_do_before_each_test;
--%test(Does a thing)
procedure test_the_thing;
--%test(Does stuff)
--%beforetest(setup_before_stuff)
--%aftertest(cleanup_after_stuff)
procedure test_stuff;
procedure setup_before_stuff;
procedure cleanup_after_stuff;
--%afterall
procedure cleanup_after_all_is_done;
data_setup_before_all
thing_to_do_before_each_test
test_the_thing
thing_to_do_before_each_test
setup_before_stuff
test_stuff
cleanup_after_stuff
cleanup_after_all_is_done
savepoint before_suite
Reihenfolge
savepoint before_test
rollback to before_suite
rollback to before_test
savepoint before_test
rollback to before_test
& Test Isolation
https://de.freeimages.com/photo/steps-in-beach-1541067
Small Step
+ Small Step
+ Small Step
Big Results
“One of the hardest things to do, however,
is to start testing thoroughly, relentlessly
and continuously.
Second one is convince your team to do
the same so you can trust tests done by
others, too.”
Jacek Gebal, Project-lead utPLSQL
Vorteile/Limit
s
Fehler/Bugs finden
• Schutz vor ungewollten Änderungen
bestehender Funktionalität
• Transportabel, beliebig wiederholbar
• Ausschluss einmal aufgetretener Fehler
• Beweis, dass vereinbarte Anforderungen
der Software erfüllt sind
• Fokus auf das was statt auf das wie
• Dokumentation und Beispiel
• Regen zu „einfacheren“, leichter testbaren
Programmierkonstrukten an
• Erhöhen Selbstvertrauen
• Schaffen Grundlage für ständiges
Refactoring
Nachdenken überflüssig
utPLSQL
Weitere Features
• Sehr mächtiger Cursor-Vergleich
• Kontexte und hierarchische Suites
• Code Coverage
• Commandline Interface
• Maven-PlugIn
• Java-API
• SQL Developer PlugIn
https://github.com/utplsql
Demo: https://github.com/pesse/sith-demo-db/tree/apexconn19
utPLSQL: http://utplsql.org
Clean-Database Blog: https://cleandatabase.wordpress.com
utPLSQL Beispiele + Tipps: https://twitter.com/Der_Pesse
#100CodeExamples
Möge die Macht mit
Ihnen sein!

Weitere ähnliche Inhalte

Ähnlich wie Aber das hat gestern noch funktioniert - Testing mit utPLSQL

Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
gedoplan
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
Christian Mücke
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
André Goliath
 
Die nächsten 100 Microservices
Die nächsten 100 MicroservicesDie nächsten 100 Microservices
Die nächsten 100 Microservices
QAware GmbH
 
OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...
OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...
OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...
NETWAYS
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Oliver Klee
 
Der ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 EditionDer ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 Edition
Ralf Eggert
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershellCreasoft AG
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
gedoplan
 
GPM Vortrag: Modernes Management von Softwareprojekten
GPM Vortrag: Modernes Management von SoftwareprojektenGPM Vortrag: Modernes Management von Softwareprojekten
GPM Vortrag: Modernes Management von Softwareprojekten
Frank Düsterbeck
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-Universum
Nicholas Dille
 
JEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine EinführungJEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine Einführung
gedoplan
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit Docker
Nicholas Dille
 

Ähnlich wie Aber das hat gestern noch funktioniert - Testing mit utPLSQL (13)

Feige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-UmfeldFeige sein! Testen im Java-EE-Umfeld
Feige sein! Testen im Java-EE-Umfeld
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
 
Die nächsten 100 Microservices
Die nächsten 100 MicroservicesDie nächsten 100 Microservices
Die nächsten 100 Microservices
 
OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...
OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...
OSDC 2011 | Enterprise Cloud Lösung - Open Stack in der Praxis by Christian B...
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3
 
Der ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 EditionDer ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 Edition
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershell
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
GPM Vortrag: Modernes Management von Softwareprojekten
GPM Vortrag: Modernes Management von SoftwareprojektenGPM Vortrag: Modernes Management von Softwareprojekten
GPM Vortrag: Modernes Management von Softwareprojekten
 
Was gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-UniversumWas gibt es Neues im Docker-Universum
Was gibt es Neues im Docker-Universum
 
JEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine EinführungJEE-Microservices mit Quarkus – eine Einführung
JEE-Microservices mit Quarkus – eine Einführung
 
Tipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit DockerTipps und Tricks im Umgang mit Docker
Tipps und Tricks im Umgang mit Docker
 

Aber das hat gestern noch funktioniert - Testing mit utPLSQL