SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
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
Episode I:
The Unexpected Menace
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…
Episode II:
Regression Hope
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
Episode III:
The TDD Awakens
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…
Episode IV:
Attack of the Views
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…
Episode V:
Return of the Unit-Test
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
“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/Limits
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
Bonus:
The UI strikes back
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
Come to the
dark side
…we have stickers.
Möge
die Macht
mit
Euch sein!

Más contenido relacionado

Similar a Apex Meetup Stuttgart 2019 - Testing mit utPLSQL v3

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-Umfeldgedoplan
 
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
 
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
 
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
 
Die nächsten 100 Microservices
Die nächsten 100 MicroservicesDie nächsten 100 Microservices
Die nächsten 100 MicroservicesQAware GmbH
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerB1 Systems GmbH
 
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...LeanIX GmbH
 
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ührunggedoplan
 
070-685 Zertifizierungsprüfung deutsch
070-685 Zertifizierungsprüfung deutsch070-685 Zertifizierungsprüfung deutsch
070-685 Zertifizierungsprüfung deutschholgerschmitz2011
 
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 DockerNicholas Dille
 
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware MonitoringOSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware MonitoringNETWAYS
 
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-MonitoringsOSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-MonitoringsNETWAYS
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptSebastian Springer
 
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-UniversumNicholas Dille
 
Martin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdf
Martin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdfMartin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdf
Martin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdfCarolinaMatthies1
 
elemente websolutions - Zusammenfassung T3DD09
elemente websolutions - Zusammenfassung T3DD09elemente websolutions - Zusammenfassung T3DD09
elemente websolutions - Zusammenfassung T3DD09elemente websolutions
 
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
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Oliver Klee
 
May the forge be with you
May the forge be with youMay the forge be with you
May the forge be with youSandro Sonntag
 

Similar a Apex Meetup Stuttgart 2019 - Testing mit utPLSQL v3 (20)

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
 
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
 
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...
 
Die nächsten 100 Microservices
Die nächsten 100 MicroservicesDie nächsten 100 Microservices
Die nächsten 100 Microservices
 
Ausrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit DockerAusrollen von Multi-Tier-Applikationen mit Docker
Ausrollen von Multi-Tier-Applikationen mit Docker
 
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
 
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
 
070-685 Zertifizierungsprüfung deutsch
070-685 Zertifizierungsprüfung deutsch070-685 Zertifizierungsprüfung deutsch
070-685 Zertifizierungsprüfung deutsch
 
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
 
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware MonitoringOSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
OSMC 2016 - Hello Redfish, Goodbye IPMI - The future of Hardware Monitoring
 
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-MonitoringsOSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
OSMC 2016 | Hello Redfish, goodbye IPMI - Die Zukunft des Hardware-Monitorings
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
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
 
Martin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdf
Martin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdfMartin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdf
Martin Schurz - Testing ist nicht nur etwas für Anwendungssoftware.pdf
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
elemente websolutions - Zusammenfassung T3DD09
elemente websolutions - Zusammenfassung T3DD09elemente websolutions - Zusammenfassung T3DD09
elemente websolutions - Zusammenfassung T3DD09
 
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...
 
Test-driven Development mit TYPO3
Test-driven Development mit TYPO3Test-driven Development mit TYPO3
Test-driven Development mit TYPO3
 
May the forge be with you
May the forge be with youMay the forge be with you
May the forge be with you
 

Apex Meetup Stuttgart 2019 - Testing mit utPLSQL v3