SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
TDD with DbFit and Oracle
Writing readable,easyto maintain unitand integration testsfor
databasecode
Yavor Nikolov
BGOUG Conference, 2013-05-18
Agenda
#bgoug2013
Concepts (Testing, Test-Driven Development)
DbFit
Demo
2/56
What is a legacy system?
#bgoug2013
You spot an obvious design problem
know how to improve that,
but the thought about consequences gives you a
stomach ache.
source: Gojko Adzic, "Fighting the monster"
3/56
#bgoug2013
source: http://lisacrispin.com/2011/11/08/using-the-agile-testing-quadrants
4/56
Why (automated) testing?
#bgoug2013
Makes application change easier
Safety net - provides confidence/removes fear
Documentation
Help to localize where exactly a defect is located
Reduce the chance of new bugs
Automation enables earlier feedback, saves time,
helps focusing on solving the main problem. (Not
everything is feasible to automate)
5/56
Test Fixture
#bgoug2013
All the things we need to have in place in order to
run a test and expect a particular outcome
The test context
6/56
System Under Test (SUT)
The system that is being tested
#bgoug2013 7/56
Test execution cycle
#bgoug2013
Arrange (set up the Fixture)
Act (exercise the System Under Test)
Assert (verify results are as expected)
Tear Down the fixture (to isolate other tests from
this one)
1.
2.
3.
4.
8/56
Unit test
#bgoug2013
Tests small individual unit (module,
procedure/function)
In isolation (no interaction with other units)
Should run quickly (otherwise people won't run
them)
9/56
Integration test
#bgoug2013
Tests several modules as a group
Slower than unit tests (usually)
10/56
Acceptance test
#bgoug2013
Conducted to determine whether or not a system
satisfies its acceptance criteria
and to enable the customer to determine whether or
not to accept the system.
At least modeled and possibly even written by the
customer
End-to-end (slower than Integration & Unit tests)
11/56
Regression tests
(Regress vs progress)
Performed to make sure that previously working
functionality still works after changes elsewhere in
the system
#bgoug2013 12/56
Refactor
Is the the process of changing a system in such a way
that
Doing refactoring without tests is unsafe
#bgoug2013
doesn't alter external behaviour
and improves it's internal structure (design)
through small steps
13/56
TDD Cycle
#bgoug2013
source: Internet
14/56
Tests are not the main product in TDD
#bgoug2013
TDD is a design technique
The design emerges in small steps
15/56
Why test first?
#bgoug2013
Start with end in mind (think from point of view of
caller)
This perspective helps for better design
Test coverage is useful byproduct
Greatly reduces the need of debugging
16/56
Cost of change (traditional)
#bgoug2013 17/56
Cost of change (test early)
#bgoug2013 18/56
Why testing the Database?
#bgoug2013
For lot of businesses, data held in DB are the most
vital commercial asset they have
Business critical functions rely on this data
So it makes sense to validate that data is stored and
processed correctly
19/56
Challenges of Database testing...
#bgoug2013
Bad tools
Inherently hard to test. Isolation is difficult
Attitude ("it's not my job")
Too much boilerplate code
OO tools not directly applicable for RDBMS
Changes are persistent
Shared environment
Triggers, Constraints
20/56
How to isolate db tests?
Run tests in one transaction
#bgoug2013
Makes them repeatable and independent
When one transaction is not an option - clean up
after tests
21/56
How to isolate db tests (2)?
Dedicated database
#bgoug2013
One db per contributor
Separate schemas
Shared Dev db may work too
As a rule - avoid running tests on top of production
22/56
Other Tips
#bgoug2013
Make tests self-sufficient
Don't count on the order of tests
Prepare everything you need for the test in its set-up
23/56
#bgoug2013
DbFit
24/56
What is DbFit?
#bgoug2013
Initially created by Gojko Adzic:
Enables manipulating database objects and defining
tests in tabular form
Open source https://github.com/benilovj/dbfit
to enable efficient database testing
motivate database developers to use an
automated testing framework
25/56
DbFit, FIT and FitNesse
#bgoug2013
DbFit is based on FIT+FitNesse+DB Fixtures which
enable FIT/Fitnesse tests to execute directly against a
database.
FIT is Acceptance testing framework
FitNesse is Wiki-web based front-end for FIT
customer oriented
tests are described as tables
26/56
FitNesse architecture
#bgoug2013
source: Fittnesse User Guilde - One Minute Description
27/56
What is DbFit Fixture?
#bgoug2013
A fixture is interface between:
In general there is 1:1 mapping between Fit table
and fixture
the test instrumentation (Fit framework),
test cases (Fit tables),
and the system under test (e.g. a database
stored procedure)
28/56
Why DbFit?
#bgoug2013
Easy to use (even for non-technical people)
Provides all the plumbing:
Runs inside FitNesse - already integrated with lots of
other tools/libraries
Tests expressed and managed as tables
Web-Wiki front-end
Transaction management
Features based on meta-data
Parameter mapping
29/56
What is Wiki?
#bgoug2013
The simplest online database that could possibly
work. - Ward Cunningham
Allows users to freely create and edit Web page
content using any Web browser
A group communication mechanisms
Encourages democratic use of the Web and
promotes content composition by nontechnical
users
source: http://wiki.org/wiki.cgi?WhatIsWiki
30/56
Fitnesse Wiki
#bgoug2013
Hierarchies - SubWiki, Test Suites
Page types - Suite, Test, Static
Some special pages:
http://fitnesse.org/FitNesse.UserGuide
PageHeader, PageFooter
SetUp, TearDown, SuiteSetUp, SuiteTearDown
Inherited recurively by default; can be overriden
31/56
A Unit test with DbFit
#bgoug2013
Set up the input data (arrange).
Execute a function or procedure (act).
Run a query and compare actual vs expected data
(assert).
1.
2.
3.
32/56
Basic commands of DbFit
#bgoug2013
Query
Insert
Update
Execute Procedure
Execute
33/56
Advanced features
#bgoug2013
Inspect queries, tables, procedures to auto-generate
test tables and regression tests
Store and compare queries
Standalone mode for full control
34/56
Getting started
#bgoug2013
Needs Java to run
Download: http://benilovj.github.io/dbfit
Unzip
Copy Oracle JDBC driver (ojdbc6.jar) to lib subfolder
Run the startup script (startFitnesse.sh or
startFitnesse.bat)
Access via web browser - http://localhost:8085
1.
2.
3.
4.
5.
6.
35/56
Connecting to the database
Inline configuration:
Using properties file:
#bgoug2013
!|Connect|localhost:1521|username|password|dbname|
!|ConnectUsingFile|DBConnection.properties|
service=localhost:1521
username=username
password=password
database=dbname
36/56
Query
#bgoug2013
!|insert|testtbl|
|n |name |
|1 |NAME1 |
|3 |NAME3 |
|2 |NAME2 |
!|query|select*fromtesttbl|
|n |name |
|1 |NAME1 |
|3 |NAME3 |
|2 |NAME2 |
37/56
Ordered Query
#bgoug2013
!|OrderedQuery|select*fromtesttblorderbyn|
|n |name? |
|1 |NAME1 |
|3 |NAME3 |
|2 |NAME2 |
38/56
Insert
#bgoug2013
!|insert|testtbl|
|n |name |
|1 |NAME1 |
|3 |NAME3 |
|2 |NAME2 |
39/56
Execute Procedure
#bgoug2013
!2Noparameters
!|ExecuteProcedure|do_stuff|
!2Functions-returnvalueswith"?"
!|ExecuteProcedure|zlpad_notrunc |
|p_str |p_padded_len|? |
|'12' |5 |'00012'|
!2OUTparameters-"?"suffix
!|ExecuteProcedure|split_name|
|p_fullname|p_first_name?|p_last_name?|
|MikeyMouse|Mickey |Mouse |
!2INOUTparameters-specifytwice
!|ExecuteProcedure|make_double|
|x|x?|
|3|6|
40/56
Expect exception
#bgoug2013
!2ExpectORA-20013
!|Executeprocedureexpectexception|set_age|20013|
|p_age |
|-5 |
41/56
Parameters and fixture symbols
#bgoug2013
set parameterto set parameter directly
>>paramname- store a value
<<paramname- read the value
!|setparameter|ONE|1|
!|query|selectsysdatemytimefromdual|
|mytime? |
|>>current_time |
!|query|selectcount(*)cntfromdualwheresysdate>=:current_time|
|cnt |
|<<ONE |
42/56
Store Query
#bgoug2013
!|StoreQuery|select1nfromdualunionselect2nfromdual|firsttable|
!|query|<<firsttable|
|n |
|1 |
|2 |
43/56
Compare Stored Queries
#bgoug2013
!|insert|testtbl|
|n |name |
|1 |NAME1 |
|3 |NAME3 |
|2 |NAME2 |
|StoreQuery|select*fromtesttbl|fromtable|
|StoreQuery|!-select1n,'name1'namefromdual|fromdual|
|comparestoredqueries|fromtable|fromdual|
|name |n? |
Use ? suffix for non-key columns
44/56
Working Modes of fixtures
#bgoug2013
Flow
Standalone
45/56
Working Modes of fixtures (2)
Flow mode
#bgoug2013
A DatabaseTest fixture controls the whole page and
coordinates testing
Automatic rollback at the end (manual commit or
rollback is still possible)
Better isolation
Some additional features such as inspections of
stored procedure error results
OracleTest, MysqlTest, DerbyTest, DB2Test, ...
46/56
Working Modes of fixtures (3)
Standalone mode
#bgoug2013
We are responsible for transaction management
Enables more control over the database testing
process
Allows using other individual fixtures
We can supply our own database connection to
make sure that (Java) integration tests are running in
the same transaction
47/56
Connecting to databse
#bgoug2013
!3InFlowmode
!|dbfit.OracleTest|
!|Connect|ourhost:1521|dbusername|dbpassword|mydb|
#Alternatively-TNSdescriptorcanbeused:
#!|Connect|(DESCRIPTION=(ADDRESS=...))|
!3InStandalonemode
|importfixture|
|dbfit.fixture|
!|DatabaseEnvironment|oracle|
|connect|localhost:1521|dbusername|dbpassword|mydb|
48/56
Integration test with SQL*Loader
#bgoug2013
Compile CommandLineFixture (by Bob Martin)
Use it to run a shell script
!3LoadsomedatawithOracleSQL*Loader
|com.objectmentor.fixtures.CommandLineFixture |
|command|${PROJECT_ROOT}/loaderdemo/load_employee.sh|
!|Query|select*fromemployee |
|id |name?|dept? |salary?|
|100 |Thomas|Sales |5000 |
|200 |Jason|Technology|5500 |
|300 |Mayla|Technology|7000 |
|400 |Nisha|Marketing|9500 |
|500 |Randy|Technology|6000 |
|501 |Ritu |Accounting|5400 |
49/56
Automating tests execution
#bgoug2013
Running tests from command line
Run test or suite as RESTful service
http://fitnesse.org/FitNesse.UserGuide.RestfulServices
JUnit
java-jarfitnesse-standalone.jar
-d"${TESTS_DIR}"
-c"BgougDemoSuite?suite&format=text"
50/56
How tests are stored?
#bgoug2013
Simple text files
content.txt - test definition and other Wiki content
properties.xml - metadata (Test, Sute)
Easy to put under version control
51/56
#bgoug2013
Demo
52/56
Summary
#bgoug2013
Changes of database code and schema are often
relatively hard
This makes the systems considered legacy
TDD stimulates designing cleaner and easier to
change code
Development of RDBMS artefacts is lagging when it
comes to engineering practices and tools
DbFit can help
53/56
Resources
#bgoug2013
http://benilovj.github.io/dbfit - with links to:
https://github.com/javornikolov/tdd-with-dbfit-bgoug-201305
http://gojko.net/2007/11/20/fighting-the-monster
http://www.agiledata.org/essays/tdd.html, http://www.agiledata.org
Test Driven Development: By Example, Kent Beck
Refactoring Databases - Evolutionary Database Design, Scott W. Ambler, Pramodkumar J. Sadalage
download DbFit
docs, getting started information
mailing list - don't hesitate to participate and ask questions
code repository at github - reports for problems, suggestions and contributions are welcome
54/56
Thank You!
nikolov dot javor at gmail
Q&A
#bgoug2013 56/56

Mais conteúdo relacionado

Mais procurados

Hands on training on DbFit Part-I
Hands on training on DbFit Part-IHands on training on DbFit Part-I
Hands on training on DbFit Part-I
Babul Mirdha
 
Pitfalls Of Tdd Adoption by Bartosz Bankowski
Pitfalls Of Tdd Adoption by Bartosz BankowskiPitfalls Of Tdd Adoption by Bartosz Bankowski
Pitfalls Of Tdd Adoption by Bartosz Bankowski
Agileee
 
Fitnesse Testing Framework
Fitnesse Testing Framework Fitnesse Testing Framework
Fitnesse Testing Framework
Ajit Koti
 
Unit testing (workshop)
Unit testing (workshop)Unit testing (workshop)
Unit testing (workshop)
Foyzul Karim
 
Benefit From Unit Testing In The Real World
Benefit From Unit Testing In The Real WorldBenefit From Unit Testing In The Real World
Benefit From Unit Testing In The Real World
Dror Helper
 

Mais procurados (20)

Hands on training on DbFit Part-I
Hands on training on DbFit Part-IHands on training on DbFit Part-I
Hands on training on DbFit Part-I
 
Full Testing Experience - Visual Studio and TFS 2010
 Full Testing Experience - Visual Studio and TFS 2010 Full Testing Experience - Visual Studio and TFS 2010
Full Testing Experience - Visual Studio and TFS 2010
 
Unit vs. Integration Tests
Unit vs. Integration TestsUnit vs. Integration Tests
Unit vs. Integration Tests
 
Principles and patterns for test driven development
Principles and patterns for test driven developmentPrinciples and patterns for test driven development
Principles and patterns for test driven development
 
Pitfalls Of Tdd Adoption by Bartosz Bankowski
Pitfalls Of Tdd Adoption by Bartosz BankowskiPitfalls Of Tdd Adoption by Bartosz Bankowski
Pitfalls Of Tdd Adoption by Bartosz Bankowski
 
Fitnesse Testing Framework
Fitnesse Testing Framework Fitnesse Testing Framework
Fitnesse Testing Framework
 
Testing in FrontEnd World by Nikita Galkin
Testing in FrontEnd World by Nikita GalkinTesting in FrontEnd World by Nikita Galkin
Testing in FrontEnd World by Nikita Galkin
 
Test automation lesson
Test automation lessonTest automation lesson
Test automation lesson
 
Unit testing (workshop)
Unit testing (workshop)Unit testing (workshop)
Unit testing (workshop)
 
Unit Test + Functional Programming = Love
Unit Test + Functional Programming = LoveUnit Test + Functional Programming = Love
Unit Test + Functional Programming = Love
 
Benefit From Unit Testing In The Real World
Benefit From Unit Testing In The Real WorldBenefit From Unit Testing In The Real World
Benefit From Unit Testing In The Real World
 
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testing
 
Writing useful automated tests for the single page applications you build
Writing useful automated tests for the single page applications you buildWriting useful automated tests for the single page applications you build
Writing useful automated tests for the single page applications you build
 
Testing and Mocking Object - The Art of Mocking.
Testing and Mocking Object - The Art of Mocking.Testing and Mocking Object - The Art of Mocking.
Testing and Mocking Object - The Art of Mocking.
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
An Introduction to Unit Testing
An Introduction to Unit TestingAn Introduction to Unit Testing
An Introduction to Unit Testing
 
Test automation engineer
Test automation engineerTest automation engineer
Test automation engineer
 
Writing Acceptance Tests Using Fitnesse
Writing Acceptance Tests Using FitnesseWriting Acceptance Tests Using Fitnesse
Writing Acceptance Tests Using Fitnesse
 
TDD And Refactoring
TDD And RefactoringTDD And Refactoring
TDD And Refactoring
 
Ivan Pashko - Simplifying test automation with design patterns
Ivan Pashko - Simplifying test automation with design patternsIvan Pashko - Simplifying test automation with design patterns
Ivan Pashko - Simplifying test automation with design patterns
 

Destaque

Hands on training on DbFit Part-II
Hands on training on DbFit Part-IIHands on training on DbFit Part-II
Hands on training on DbFit Part-II
Babul Mirdha
 

Destaque (10)

Hands on training on DbFit Part-II
Hands on training on DbFit Part-IIHands on training on DbFit Part-II
Hands on training on DbFit Part-II
 
Testing regression
Testing regressionTesting regression
Testing regression
 
Deliberate Practice (Agile Slovenia 2015)
Deliberate Practice (Agile Slovenia 2015)Deliberate Practice (Agile Slovenia 2015)
Deliberate Practice (Agile Slovenia 2015)
 
見守りサービスMiimaミーマ 資料
見守りサービスMiimaミーマ 資料見守りサービスMiimaミーマ 資料
見守りサービスMiimaミーマ 資料
 
Open Source BI Overview
Open Source BI Overview Open Source BI Overview
Open Source BI Overview
 
Trivadis TechEvent 2016 A few thoughts on the subject Continuous integration ...
Trivadis TechEvent 2016 A few thoughts on the subject Continuous integration ...Trivadis TechEvent 2016 A few thoughts on the subject Continuous integration ...
Trivadis TechEvent 2016 A few thoughts on the subject Continuous integration ...
 
Agile WTF
Agile WTFAgile WTF
Agile WTF
 
Lynn Winterboer : Test automation
Lynn Winterboer : Test automation Lynn Winterboer : Test automation
Lynn Winterboer : Test automation
 
Agile Methods and Data Warehousing (2016 update)
Agile Methods and Data Warehousing (2016 update)Agile Methods and Data Warehousing (2016 update)
Agile Methods and Data Warehousing (2016 update)
 
TDD - Test Driven Dvelopment | Test First Design
TDD -  Test Driven Dvelopment | Test First DesignTDD -  Test Driven Dvelopment | Test First Design
TDD - Test Driven Dvelopment | Test First Design
 

Semelhante a Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 2013-05-18

Curious Coders Java Web Frameworks Comparison
Curious Coders Java Web Frameworks ComparisonCurious Coders Java Web Frameworks Comparison
Curious Coders Java Web Frameworks Comparison
Hamed Hatami
 
Developer Productivity Engineering with Gradle
Developer Productivity Engineering with GradleDeveloper Productivity Engineering with Gradle
Developer Productivity Engineering with Gradle
All Things Open
 
Advanced A/B Testing at Wix - Aviran Mordo and Sagy Rozman, Wix.com
Advanced A/B Testing at Wix - Aviran Mordo and Sagy Rozman, Wix.comAdvanced A/B Testing at Wix - Aviran Mordo and Sagy Rozman, Wix.com
Advanced A/B Testing at Wix - Aviran Mordo and Sagy Rozman, Wix.com
DevOpsDays Tel Aviv
 
ESG Labs Testing and Performance Audit of the NetBackup 5330 Appliance
ESG Labs Testing and Performance Audit of the NetBackup 5330 ApplianceESG Labs Testing and Performance Audit of the NetBackup 5330 Appliance
ESG Labs Testing and Performance Audit of the NetBackup 5330 Appliance
Symantec
 

Semelhante a Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 2013-05-18 (20)

Always Be Deploying. How to make R great for machine learning in (not only) E...
Always Be Deploying. How to make R great for machine learning in (not only) E...Always Be Deploying. How to make R great for machine learning in (not only) E...
Always Be Deploying. How to make R great for machine learning in (not only) E...
 
Api gitlab: configurazione dei progetti as a service
Api gitlab: configurazione dei progetti as a serviceApi gitlab: configurazione dei progetti as a service
Api gitlab: configurazione dei progetti as a service
 
Curious Coders Java Web Frameworks Comparison
Curious Coders Java Web Frameworks ComparisonCurious Coders Java Web Frameworks Comparison
Curious Coders Java Web Frameworks Comparison
 
Experimenting on Humans - Advanced A/B Tests - QCon SF 2014
Experimenting on Humans - Advanced A/B Tests - QCon SF 2014Experimenting on Humans - Advanced A/B Tests - QCon SF 2014
Experimenting on Humans - Advanced A/B Tests - QCon SF 2014
 
Developer Productivity Engineering with Gradle
Developer Productivity Engineering with GradleDeveloper Productivity Engineering with Gradle
Developer Productivity Engineering with Gradle
 
Workflow Management Systems Comparison Study
 Workflow Management Systems Comparison Study Workflow Management Systems Comparison Study
Workflow Management Systems Comparison Study
 
Canadian Experts Discuss Modern Data Stacks and Cloud Computing for 5 Years o...
Canadian Experts Discuss Modern Data Stacks and Cloud Computing for 5 Years o...Canadian Experts Discuss Modern Data Stacks and Cloud Computing for 5 Years o...
Canadian Experts Discuss Modern Data Stacks and Cloud Computing for 5 Years o...
 
Ride the database in JUnit tests with Database Rider
Ride the database in JUnit tests with Database RiderRide the database in JUnit tests with Database Rider
Ride the database in JUnit tests with Database Rider
 
Exploratory Testing As Code Eurostar23
Exploratory Testing As Code Eurostar23Exploratory Testing As Code Eurostar23
Exploratory Testing As Code Eurostar23
 
Exploratory Testing As Code
Exploratory Testing As CodeExploratory Testing As Code
Exploratory Testing As Code
 
Django
Django Django
Django
 
Mastering BDD - Eran Kinsbruner Workshop Quest 2018
Mastering BDD - Eran Kinsbruner Workshop Quest 2018Mastering BDD - Eran Kinsbruner Workshop Quest 2018
Mastering BDD - Eran Kinsbruner Workshop Quest 2018
 
Django
DjangoDjango
Django
 
STATISTICAL ANALYSIS FOR PERFORMANCE COMPARISON
STATISTICAL ANALYSIS FOR PERFORMANCE COMPARISONSTATISTICAL ANALYSIS FOR PERFORMANCE COMPARISON
STATISTICAL ANALYSIS FOR PERFORMANCE COMPARISON
 
Advanced A/B Testing at Wix - Aviran Mordo and Sagy Rozman, Wix.com
Advanced A/B Testing at Wix - Aviran Mordo and Sagy Rozman, Wix.comAdvanced A/B Testing at Wix - Aviran Mordo and Sagy Rozman, Wix.com
Advanced A/B Testing at Wix - Aviran Mordo and Sagy Rozman, Wix.com
 
GDG DevFest Ukraine - Powering Interactive Data Analysis with Google BigQuery
GDG DevFest Ukraine - Powering Interactive Data Analysis with Google BigQueryGDG DevFest Ukraine - Powering Interactive Data Analysis with Google BigQuery
GDG DevFest Ukraine - Powering Interactive Data Analysis with Google BigQuery
 
Datastage training-course-navi-mumbai-datastage-course-provider-navi-mumbai
Datastage training-course-navi-mumbai-datastage-course-provider-navi-mumbaiDatastage training-course-navi-mumbai-datastage-course-provider-navi-mumbai
Datastage training-course-navi-mumbai-datastage-course-provider-navi-mumbai
 
Works on My Machine Syndrome
Works on My Machine SyndromeWorks on My Machine Syndrome
Works on My Machine Syndrome
 
Infrastructure as Code for Network
Infrastructure as Code for NetworkInfrastructure as Code for Network
Infrastructure as Code for Network
 
ESG Labs Testing and Performance Audit of the NetBackup 5330 Appliance
ESG Labs Testing and Performance Audit of the NetBackup 5330 ApplianceESG Labs Testing and Performance Audit of the NetBackup 5330 Appliance
ESG Labs Testing and Performance Audit of the NetBackup 5330 Appliance
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Último (20)

Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 

Test-Driven Development with DbFit and Oracle database, BGOUG Conference, 2013-05-18