SlideShare ist ein Scribd-Unternehmen logo
1 von 34
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
Du bist 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 machst Du Dich auf, das
sagenumwobene Artefakt utPLSQL zu
meistern und Deinen 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?
Anforderungen
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 Du spürst, wie die Macht des Test-
Driven-Development langsam in Dir
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 Deiner 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
Deine 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…
savepoint before_suite
setup_a_test_group
savepoint before_test
set_some_global_variables
update_group_without_honor_name
reset_some_global_variables
rollback before_test
savepoint before_test
set_some_global_variables
setup_honor_name
update_group_with_honor_name
you_can_just_do_this
reset_some_global_variables
rollback before_test
cleanup_non_transactional_stuff
rollback before_suite
--%suite(Change groupname)
--%beforeall
procedure setup_a_test_group;
--%beforeeach
procedure set_some_global_variables;
--%test(Update group without honor name will set one)
procedure update_group_withouth_honor_name;
--%test(Update group with honor name will change it)
--%beforetest(setup_honor_name)
--%aftertest(you_can_just_do_this)
procedure update_group_with_honor_name;
procedure setup_honor_name;
procedure you_can_just_do_this;
--%aftereach
procedure reset_some_global_variables;
--%afterall
procedure cleanup_non_transactional_stuff;
--%suite(Change groupname)
--%beforeall
procedure setup_a_test_group;
--%beforeeach
procedure set_some_global_variables;
--%test(Update group without honor name will set one)
procedure update_group_withouth_honor_name;
--%test(Update group with honor name will change it)
--%beforetest(setup_honor_name)
--%aftertest(you_can_just_do_this)
procedure update_group_with_honor_name;
procedure setup_honor_name;
procedure you_can_just_do_this;
--%aftereach
procedure reset_some_global_variables;
--%afterall
procedure cleanup_non_transactional_stuff;
https://de.freeimages.com/photo/steps-in-beach-1541067
Small Step
+ Small Step
+ Small Step
Big Results
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
Resources: http://utplsql.org/resources
Clean-Database Blog: https://cleandatabase.wordpress.com
utPLSQL Beispiele + Tipps: https://twitter.com/Der_Pesse
Come to the
dark side
…we have stickers.
Möge
die Macht
mit
Euch sein!

Weitere ähnliche Inhalte

Ähnlich wie Apex Meetup Dresden 09/19 - Testing mit utPLSQL v3

Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenOPITZ CONSULTING Deutschland
 
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.2018Christian Mücke
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenAndré Goliath
 
GPM Vortrag: Modernes Management von Softwareprojekten
GPM Vortrag: Modernes Management von SoftwareprojektenGPM Vortrag: Modernes Management von Softwareprojekten
GPM Vortrag: Modernes Management von SoftwareprojektenFrank Düsterbeck
 
Die nächsten 100 Microservices
Die nächsten 100 MicroservicesDie nächsten 100 Microservices
Die nächsten 100 MicroservicesQAware GmbH
 
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 EditionRalf Eggert
 
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
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershellCreasoft AG
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Oliver Klee
 
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
 

Ähnlich wie Apex Meetup Dresden 09/19 - Testing mit utPLSQL v3 (10)

Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
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
 
GPM Vortrag: Modernes Management von Softwareprojekten
GPM Vortrag: Modernes Management von SoftwareprojektenGPM Vortrag: Modernes Management von Softwareprojekten
GPM Vortrag: Modernes Management von Softwareprojekten
 
Die nächsten 100 Microservices
Die nächsten 100 MicroservicesDie nächsten 100 Microservices
Die nächsten 100 Microservices
 
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
 
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...
 
Creasoft - Windows powershell
Creasoft - Windows powershellCreasoft - Windows powershell
Creasoft - Windows powershell
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3
 
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...
 

Apex Meetup Dresden 09/19 - Testing mit utPLSQL v3