SlideShare una empresa de Scribd logo
1 de 52
Descargar para leer sin conexión
Testing database applications with QuickCheck
                                          — Tutorial —


                                        Laura M. Castro

                                    Universidade da Coruña (Spain)


                                Stockholm, 15th November 2010




Erlang User Conference (2010)               Tutorial Workshop        Testing DB apps with QC   1 / 23
Outline



1    What is a database application?

2    Why do DB applications require special testing?

3    The theory: how to test a database application with QuickCheck

4    The practise: testing a simple e-shop

5    Summing up




    Erlang User Conference (2010)   Tutorial Workshop   Testing DB apps with QC   2 / 23
What is a database application?

A database or data-intensive application is a software system which:

     makes intensive use of great amounts of data,

     relies on external storage sources for persistence (e.g., a database).




 Erlang User Conference (2010)   Tutorial Workshop       Testing DB apps with QC   3 / 23
What is a database application?

A database or data-intensive application is a software system which:

     makes intensive use of great amounts of data,

     relies on external storage sources for persistence (e.g., a database).



                          online
                          shop




 Erlang User Conference (2010)     Tutorial Workshop     Testing DB apps with QC   3 / 23
What is a database application?

A database or data-intensive application is a software system which:

     makes intensive use of great amounts of data,

     relies on external storage sources for persistence (e.g., a database).



                           online
                           shop
                    task
                    flow




 Erlang User Conference (2010)      Tutorial Workshop    Testing DB apps with QC   3 / 23
What is a database application?

A database or data-intensive application is a software system which:

     makes intensive use of great amounts of data,

     relies on external storage sources for persistence (e.g., a database).



                         online
                      bank
                         shop
                       app
                    task
                    flow




 Erlang User Conference (2010)    Tutorial Workshop      Testing DB apps with QC   3 / 23
Why do DB applications require special testing?

Database or data-intensive applications are software systems which:

     impose complex constraints on the data they handle,

     their correct operation depends on their enforcement.




 Erlang User Conference (2010)   Tutorial Workshop    Testing DB apps with QC   4 / 23
Why do DB applications require special testing?

Database or data-intensive applications are software systems which:

     impose complex constraints on the data they handle,

     their correct operation depends on their enforcement.




 Erlang User Conference (2010)   Tutorial Workshop    Testing DB apps with QC   4 / 23
Why do DB applications require special testing?

Database or data-intensive applications are software systems which:

     impose complex constraints on the data they handle,

     their correct operation depends on their enforcement.




         These constraints are usually referred to as business rules.


 Erlang User Conference (2010)    Tutorial Workshop      Testing DB apps with QC   4 / 23
Business Rules
What are they?




      “Statements that define or constrain some aspect of a business (. . . )
      intended to assert business structure or to control or influence
      behavior”
      (B.R. Group, Defining Business Rules – What are they really?)

      “Definitions of how the business should be carried out and
      constraints on the business” (I. Sommerville, Software Engineering)

      “Software is the realization of business rules”
      (R.S. Pressman, Software Engineering – A practitioner’s approach)




  Erlang User Conference (2010)   Tutorial Workshop      Testing DB apps with QC   5 / 23
Business Rules
Where are they?



                                     APPLICATION INTERFACE




                                  APPLICATION BUSINESS LOGIC




                                       STORAGE ACCESS




  Erlang User Conference (2010)           Tutorial Workshop    Testing DB apps with QC   6 / 23
Business Rules
Where are they?



                                     APPLICATION INTERFACE




                                  APPLICATION BUSINESS LOGIC




                  only basic
                  constraints          STORAGE ACCESS
                    (E/R)




  Erlang User Conference (2010)           Tutorial Workshop    Testing DB apps with QC   6 / 23
Business Rules
Where are they?



                                     APPLICATION INTERFACE


                                                                   no
                                                               constraints
                                                                  at all
                                  APPLICATION BUSINESS LOGIC




                  only basic
                  constraints          STORAGE ACCESS
                    (E/R)




  Erlang User Conference (2010)           Tutorial Workshop          Testing DB apps with QC   6 / 23
Business Rules
Where are they?



                                     APPLICATION INTERFACE




                                  APPLICATION BUSINESS LOGIC




                                       STORAGE ACCESS




  Erlang User Conference (2010)           Tutorial Workshop    Testing DB apps with QC   6 / 23
Business Rules
When do we test them?



Since business rules are not located in a specific unit or component,

      they are not covered by unit testing.




  Erlang User Conference (2010)   Tutorial Workshop   Testing DB apps with QC   7 / 23
Business Rules
When do we test them?



Since business rules are not located in a specific unit or component,

      they are not covered by unit testing.

Since business rules dictate data-related constraints,

      they are not the scope of integration testing.




  Erlang User Conference (2010)   Tutorial Workshop      Testing DB apps with QC   7 / 23
Business Rules
When do we test them?



Since business rules are not located in a specific unit or component,

      they are not covered by unit testing.

Since business rules dictate data-related constraints,

      they are not the scope of integration testing.

Since business rules need to be respected at all times,

      they are not considered when testing the GUI.




  Erlang User Conference (2010)   Tutorial Workshop      Testing DB apps with QC   7 / 23
Business Rules
When do we test them?



Since business rules are not located in a specific unit or component,

      they are not covered by unit testing.

Since business rules dictate data-related constraints,

      they are not the scope of integration testing.

Since business rules need to be respected at all times,

      they are not considered when testing the GUI.


            Business rules must be tested as part of system testing.


  Erlang User Conference (2010)    Tutorial Workshop      Testing DB apps with QC   7 / 23
Why do DB applications require special testing?
Because of Business Rules




Therefore, database or data-intensive applications:

      include business rules that put constraints on the data they handle,

      business rules must be enforced by the system at all times,

      location of the business rules is unclear.




  Erlang User Conference (2010)   Tutorial Workshop     Testing DB apps with QC   8 / 23
Why do DB applications require special testing?
Because of Business Rules




Therefore, database or data-intensive applications:

      include business rules that put constraints on the data they handle,

      business rules must be enforced by the system at all times,

      location of the business rules is unclear.

                    In this tutorial, we will present a methodology to

                      test business rules at system testing level.




  Erlang User Conference (2010)        Tutorial Workshop        Testing DB apps with QC   8 / 23
The theory
How to test business rules with QuickCheck


To test that a data-intensive application complies with the data constraints

imposed by its business rules at all times, we use QuickCheck:

       an automatic testing tool,

       generates and runs random sequences of test cases,

       when an error is found, test sequence is shrunk to return a minimal

       test case.




   Erlang User Conference (2010)      Tutorial Workshop   Testing DB apps with QC   9 / 23
The theory
How to test business rules with QuickCheck


To test that a data-intensive application complies with the data constraints

imposed by its business rules at all times, we use QuickCheck:

       an automatic testing tool,

       generates and runs random sequences of test cases,

       when an error is found, test sequence is shrunk to return a minimal

       test case.

                In the rest of the tutorial we assume familiarity with Quviq QuickCheck testing
                tool. We will present the basics of how QuickCheck state machine library
                works, but explaining these concepts is not the purpose of this specific tutorial.



   Erlang User Conference (2010)           Tutorial Workshop             Testing DB apps with QC   9 / 23
The theory
How to test business rules with QuickCheck



                                      APPLICATION INTERFACE




                                   APPLICATION BUSINESS LOGIC




                                        STORAGE ACCESS




   Erlang User Conference (2010)           Tutorial Workshop    Testing DB apps with QC   10 / 23
The theory
How to test business rules with QuickCheck



                                      APPLICATION INTERFACE

                       BR
                    enforced
                      here

                                   APPLICATION BUSINESS LOGIC




                                        STORAGE ACCESS




   Erlang User Conference (2010)           Tutorial Workshop    Testing DB apps with QC   10 / 23
The theory
How to test business rules with QuickCheck



                                      APPLICATION INTERFACE




                                   APPLICATION BUSINESS LOGIC




                                                                  or here
                                        STORAGE ACCESS          data will be
                                                                "corrupted"




   Erlang User Conference (2010)           Tutorial Workshop           Testing DB apps with QC   10 / 23
The theory
How to test business rules with QuickCheck



                                          QUICKCHECK




                                   APPLICATION BUSINESS LOGIC




                                        STORAGE ACCESS




   Erlang User Conference (2010)           Tutorial Workshop    Testing DB apps with QC   10 / 23
The theory
QuickCheck state machine library




In particular, we use QuickCheck state machine library:

      mechanism to easily implement a testing state machine

      (library callbacks),

      the testing state machine generates and runs test sequences,

      tests are sequences of calls to the functionalities under test.




  Erlang User Conference (2010)    Tutorial Workshop       Testing DB apps with QC   11 / 23
The theory
How are test sequences generated?



                            test sequence
                           length reached?                   YES
                                                   NO
                                          select                   SUCCESS
                                         operation

                                                     preconditions hold?
                                    FALSE
                                                  TRUE
                                          execute
                                         operation

                                                   postconditions hold?
                                  TRUE                   FALSE

                                                                   ERROR


  Erlang User Conference (2010)              Tutorial Workshop             Testing DB apps with QC   12 / 23
The theory
How are test sequences generated?



                            test sequence
                           length reached?                   YES
                                                   NO
                                          select                   SUCCESS
                                         operation

                                                     preconditions hold?
                                    FALSE
                                                  TRUE
                                          execute
                                         operation

                                                   postconditions hold?
                                  TRUE                   FALSE

                                                                   ERROR


  Erlang User Conference (2010)              Tutorial Workshop             Testing DB apps with QC   12 / 23
The theory
How are test sequences generated?



                            test sequence
                           length reached?                   YES
                                                   NO
                                          select                   SUCCESS
                                         operation

                                                     preconditions hold?
                                    FALSE
                                                  TRUE
                                          execute
                                         operation

                                                   postconditions hold?
                                  TRUE                   FALSE

                                                                   ERROR


  Erlang User Conference (2010)              Tutorial Workshop             Testing DB apps with QC   12 / 23
The theory
How are test sequences generated?



                            test sequence
                           length reached?                   YES
                                                   NO
                                          select                   SUCCESS
                                         operation

                                                     preconditions hold?
                                    FALSE
                                                  TRUE
                                          execute
                                         operation

                                                   postconditions hold?
                                  TRUE                   FALSE

                                                                   ERROR


  Erlang User Conference (2010)              Tutorial Workshop             Testing DB apps with QC   12 / 23
The theory
How are test sequences generated?



                            test sequence
                           length reached?                   YES
                                                   NO
                                          select                   SUCCESS
                                         operation

                                                     preconditions hold?
                                    FALSE
                                                  TRUE
                                          execute
                                         operation

                                                   postconditions hold?
                                  TRUE                   FALSE

                                                                   ERROR


  Erlang User Conference (2010)              Tutorial Workshop             Testing DB apps with QC   12 / 23
The theory
How are test sequences generated?



                            test sequence
                           length reached?                   YES
                                                   NO
                                          select                   SUCCESS
                                         operation

                                                     preconditions hold?
                                    FALSE
                                                  TRUE
                                          execute
                                         operation

                                                   postconditions hold?
                                  TRUE                   FALSE

                                                                   ERROR


  Erlang User Conference (2010)              Tutorial Workshop             Testing DB apps with QC   12 / 23
The theory
How are test sequences generated?



                            test sequence
                           length reached?                   YES
                                                   NO
                                          select                   SUCCESS
                                         operation

                                                     preconditions hold?
                                    FALSE
                                                  TRUE
                                          execute
                                         operation

                                                   postconditions hold?
                                  TRUE                   FALSE

                                                                   ERROR


  Erlang User Conference (2010)              Tutorial Workshop             Testing DB apps with QC   12 / 23
The theory
QuickCheck statem machine skeleton

               -module(test_eqc).
               -include_lib("eqc/include/eqc.hrl").
               -include_lib("eqc/include/eqc_statem.hrl").
               -compile(export_all).
               -record(state,{useful_info}).
               %% Initialize the state
               initial_state() ->
                   #state{useful_info = []}.
               %% Command generator, S is the state
               command(S) ->
                   oneof([ PUBLIC API OPERATIONS ]).
               %% Next state transformation, S is the current state
               next_state(S,_V,{call,_,_,_}) ->
                   S.
               %% Precondition, checked before command is added to the command sequence
               precondition(_S,{call,_,_,_}) ->
                   true.
               %% Postcondition, checked after command has been evaluated
               %% OBS: S is the state before next_state(S,_,<command>)
               postcondition(_S,{call,_,_,_},_Res) ->
                   true.
               prop_statem() ->
                   ?FORALL(Cmds,commands(?MODULE),
                           begin
                               {H,S,Res} = run_commands(?MODULE,Cmds),
                               ?WHENFAIL(
                                  io:format("History: ~p~nState: ~p~nRes: ~p~n",[H,S,Res]),
                                  Res == ok)
                           end).



  Erlang User Conference (2010)           Tutorial Workshop             Testing DB apps with QC   13 / 23
The practise
Testing a simple e-shop




Very simple online shop application:

                                                       Register new customer
                                                       Add new product to shop
                                                       Add product to cart
                                                       Remove product from cart
                                                       Place order
                                                       Cancel order




   Erlang User Conference (2010)   Tutorial Workshop                 Testing DB apps with QC   14 / 23
The practise
UML model: main components




  Erlang User Conference (2010)   Tutorial Workshop   Testing DB apps with QC   15 / 23
The practise
E/R model: basic data constraints




   Erlang User Conference (2010)    Tutorial Workshop   Testing DB apps with QC   16 / 23
The practise
Golden business rule



Example of business rule (complex data constraint).




  Erlang User Conference (2010)   Tutorial Workshop   Testing DB apps with QC   17 / 23
The practise
Golden business rule



Example of business rule (complex data constraint).




                                            Business rule
                                            Only golden customers may
                                            purchase golden products.




  Erlang User Conference (2010)   Tutorial Workshop         Testing DB apps with QC   17 / 23
The practise
Golden business rule



Example of business rule (complex data constraint).




                                            Business rule
                                            Only golden customers may
                                            purchase golden products.



Business rules may be implemented in different ways. . .




  Erlang User Conference (2010)   Tutorial Workshop         Testing DB apps with QC   17 / 23
The practise
Golden business rule



Example of business rule (complex data constraint).




                                            Business rule
                                            Only golden customers may
                                            purchase golden products.



Business rules may be implemented in different ways. . .
                                   . . . but we only care they actually are.


  Erlang User Conference (2010)   Tutorial Workshop         Testing DB apps with QC   17 / 23
The practise
Hands-on time!




  1   Explore the simple e-shop implementation given,




  Erlang User Conference (2010)   Tutorial Workshop     Testing DB apps with QC   18 / 23
The practise
Hands-on time!




  1   Explore the simple e-shop implementation given,

  2   inspect the simpleshop_eqc module stub




  Erlang User Conference (2010)   Tutorial Workshop     Testing DB apps with QC   18 / 23
The practise
Hands-on time!




  1   Explore the simple e-shop implementation given,

  2   inspect the simpleshop_eqc module stub

          1   and fill-in the gaps,




  Erlang User Conference (2010)      Tutorial Workshop   Testing DB apps with QC   18 / 23
The practise
Hands-on time!




  1   Explore the simple e-shop implementation given,

  2   inspect the simpleshop_eqc module stub

          1   and fill-in the gaps,

  3   find out if business rule is respected




  Erlang User Conference (2010)      Tutorial Workshop   Testing DB apps with QC   18 / 23
The practise
Hands-on time!




  1   Explore the simple e-shop implementation given,

  2   inspect the simpleshop_eqc module stub

          1   and fill-in the gaps,

  3   find out if business rule is respected (and if not, fix it!).




  Erlang User Conference (2010)      Tutorial Workshop       Testing DB apps with QC   18 / 23
The practise
Outcome: QuickCheck statem machine skeleton for BR testing (I)


               -module(testbr_eqc).
               -include_lib("eqc/include/eqc.hrl").
               -include_lib("eqc/include/eqc_statem.hrl").
               -compile(export_all).
               -record(state, {useful_info}).
               initial_state() ->
                   #state{useful_info = []}.
               command(S) ->
                   oneof([ PUBLIC API OPERATIONS (LOCAL WRAPPERS) ]).
               next_state(S,_V,{call,_,_,_}) ->
                   S.
               precondition(_S,{call,_,_,_}) ->
                   true.
               postcondition(_S,{call,_,_,_},_Res) ->
                   true.
               prop_brstatem() ->
                   ?FORALL(Cmds, commands(?MODULE),
                           begin
                               true = check_data_invariant(),
                               {H, S, Res} = run_commands(?MODULE, Cmds),
                               Invariant = check_data_invariant(),
                               clean_up(S),
                               ?WHENFAIL(io:format("H ~p~nS ~p~nRes ~p~n", [H, S, Res]),
                                         conjunction([{test_execution, Res == ok},
                                                      {business_rules, Invariant}]))
                            end).




  Erlang User Conference (2010)           Tutorial Workshop             Testing DB apps with QC   19 / 23
The practise
Outcome: QuickCheck statem machine skeleton for BR testing (& II)




               <command>_local(Args) ->
                   Expected = expected_result(<command>, Args),
                   Obtained = <command>(Args),
                   match(Expected, Obtained).
               check_data_invariant() ->
                   IMPLEMENTATION OF BUSINESS RULES AS STORAGE QUERIES.
               expected_result(<command>, Args) ->
                   QUERY STORAGE TO GUESS RESULT.
               clean_up(S) ->
                   EMPTY STATE BETWEEN TEST SEQUENCES.




  Erlang User Conference (2010)           Tutorial Workshop               Testing DB apps with QC   20 / 23
Summing up
Testing of data-intensive applications




When testing database or data-intensive applications,

       special attention must be paid to data-consistency business rules,

       data-consistency constraints cannot always be trusted to the data

       storage and can never be trusted to the user interface,

       business rules implementation may be spread over the system,

       system testing is the most adequate level to test for business rules

       compliance.


   Erlang User Conference (2010)         Tutorial Workshop   Testing DB apps with QC   21 / 23
Summing up
Methodology to test BR using QuickCheck



  1   Use a QuickCheck state machine,

  2   keep state minimum,

  3   add public API operations as commands/transitions,

              use local wrappers to predict the result according to existing data,

              and then match with the result actually obtained

  4   specify pre- and postconditions as true,

  5   formulate business rules (invariants) as queries to data storage,

  6   write property checking invariants after each test sequence.

  Erlang User Conference (2010)        Tutorial Workshop         Testing DB apps with QC   22 / 23
Summing up
I hope this tutorial has been useful!




                       Attendants ! thanks




                Get help subscribing to: quickcheck-questions@quviq.com
                Material for images came from: openclipart.org, kde-look.org




   Erlang User Conference (2010)        Tutorial Workshop       Testing DB apps with QC   23 / 23

Más contenido relacionado

La actualidad más candente

3 know more_about_rational_performance_tester_8-1-snehamoy_k
3 know more_about_rational_performance_tester_8-1-snehamoy_k3 know more_about_rational_performance_tester_8-1-snehamoy_k
3 know more_about_rational_performance_tester_8-1-snehamoy_kIBM
 
Less09 2 e_testermodule_8
Less09 2 e_testermodule_8Less09 2 e_testermodule_8
Less09 2 e_testermodule_8Suresh Mishra
 
Soap UI - Lesson3
Soap UI - Lesson3Soap UI - Lesson3
Soap UI - Lesson3Qualitest
 
Rpt ppt for training
Rpt ppt for trainingRpt ppt for training
Rpt ppt for trainingsindhu T
 
Crafted Design - ITAKE 2014
Crafted Design - ITAKE 2014Crafted Design - ITAKE 2014
Crafted Design - ITAKE 2014Sandro Mancuso
 
Pega Cssa Training With Real-time Project @santhoopega123@gmail.com&Whatsup@8...
Pega Cssa Training With Real-time Project @santhoopega123@gmail.com&Whatsup@8...Pega Cssa Training With Real-time Project @santhoopega123@gmail.com&Whatsup@8...
Pega Cssa Training With Real-time Project @santhoopega123@gmail.com&Whatsup@8...Santhoo Vardan
 
Crafted Design - LJC World Tour Mash Up 2014
Crafted Design - LJC World Tour Mash Up 2014Crafted Design - LJC World Tour Mash Up 2014
Crafted Design - LJC World Tour Mash Up 2014Sandro Mancuso
 
Qtp 9.2 tutorials
Qtp 9.2 tutorialsQtp 9.2 tutorials
Qtp 9.2 tutorialsmedsherb
 
IBM Performance Optimizaiton Toolkit for Rational Performance Tester
IBM Performance Optimizaiton Toolkit for Rational Performance TesterIBM Performance Optimizaiton Toolkit for Rational Performance Tester
IBM Performance Optimizaiton Toolkit for Rational Performance TesterAshish Patel
 
How much do we know about Object-Oriented Programming?
How much do we know about Object-Oriented Programming?How much do we know about Object-Oriented Programming?
How much do we know about Object-Oriented Programming?Sandro Mancuso
 
Soap UI - Lesson2
Soap UI - Lesson2Soap UI - Lesson2
Soap UI - Lesson2Qualitest
 
TEST AUTOMATION: AKA QUALITY CONTROL
TEST AUTOMATION: AKA QUALITY CONTROLTEST AUTOMATION: AKA QUALITY CONTROL
TEST AUTOMATION: AKA QUALITY CONTROLNyarai Tinashe Gomiwa
 
Legacy Code Hands-on Session
Legacy Code Hands-on Session Legacy Code Hands-on Session
Legacy Code Hands-on Session Sandro Mancuso
 
Crafted Design - GeeCON 2014
Crafted Design - GeeCON 2014Crafted Design - GeeCON 2014
Crafted Design - GeeCON 2014Sandro Mancuso
 
Less13 3 e_loadmodule_3
Less13 3 e_loadmodule_3Less13 3 e_loadmodule_3
Less13 3 e_loadmodule_3Suresh Mishra
 
J2EE Batch Processing
J2EE Batch ProcessingJ2EE Batch Processing
J2EE Batch ProcessingChris Adkin
 
Hybrid Automation Framework Developement
Hybrid Automation Framework DevelopementHybrid Automation Framework Developement
Hybrid Automation Framework DevelopementGlasdon Falcao
 

La actualidad más candente (19)

3 know more_about_rational_performance_tester_8-1-snehamoy_k
3 know more_about_rational_performance_tester_8-1-snehamoy_k3 know more_about_rational_performance_tester_8-1-snehamoy_k
3 know more_about_rational_performance_tester_8-1-snehamoy_k
 
Less09 2 e_testermodule_8
Less09 2 e_testermodule_8Less09 2 e_testermodule_8
Less09 2 e_testermodule_8
 
Soap UI - Lesson3
Soap UI - Lesson3Soap UI - Lesson3
Soap UI - Lesson3
 
Rpt ppt for training
Rpt ppt for trainingRpt ppt for training
Rpt ppt for training
 
Crafted Design - ITAKE 2014
Crafted Design - ITAKE 2014Crafted Design - ITAKE 2014
Crafted Design - ITAKE 2014
 
Pega Cssa Training With Real-time Project @santhoopega123@gmail.com&Whatsup@8...
Pega Cssa Training With Real-time Project @santhoopega123@gmail.com&Whatsup@8...Pega Cssa Training With Real-time Project @santhoopega123@gmail.com&Whatsup@8...
Pega Cssa Training With Real-time Project @santhoopega123@gmail.com&Whatsup@8...
 
Crafted Design - LJC World Tour Mash Up 2014
Crafted Design - LJC World Tour Mash Up 2014Crafted Design - LJC World Tour Mash Up 2014
Crafted Design - LJC World Tour Mash Up 2014
 
Qtp 9.2 tutorials
Qtp 9.2 tutorialsQtp 9.2 tutorials
Qtp 9.2 tutorials
 
IBM Performance Optimizaiton Toolkit for Rational Performance Tester
IBM Performance Optimizaiton Toolkit for Rational Performance TesterIBM Performance Optimizaiton Toolkit for Rational Performance Tester
IBM Performance Optimizaiton Toolkit for Rational Performance Tester
 
How much do we know about Object-Oriented Programming?
How much do we know about Object-Oriented Programming?How much do we know about Object-Oriented Programming?
How much do we know about Object-Oriented Programming?
 
Soap UI - Lesson2
Soap UI - Lesson2Soap UI - Lesson2
Soap UI - Lesson2
 
TEST AUTOMATION: AKA QUALITY CONTROL
TEST AUTOMATION: AKA QUALITY CONTROLTEST AUTOMATION: AKA QUALITY CONTROL
TEST AUTOMATION: AKA QUALITY CONTROL
 
Legacy Code Hands-on Session
Legacy Code Hands-on Session Legacy Code Hands-on Session
Legacy Code Hands-on Session
 
Crafted Design - GeeCON 2014
Crafted Design - GeeCON 2014Crafted Design - GeeCON 2014
Crafted Design - GeeCON 2014
 
Less13 3 e_loadmodule_3
Less13 3 e_loadmodule_3Less13 3 e_loadmodule_3
Less13 3 e_loadmodule_3
 
J2EE Batch Processing
J2EE Batch ProcessingJ2EE Batch Processing
J2EE Batch Processing
 
Hybrid Automation Framework Developement
Hybrid Automation Framework DevelopementHybrid Automation Framework Developement
Hybrid Automation Framework Developement
 
Database Testing
Database TestingDatabase Testing
Database Testing
 
Introduction to struts
Introduction to strutsIntroduction to struts
Introduction to struts
 

Destacado

WHITE BOX & BLACK BOX TESTING IN DATABASE
WHITE BOX & BLACK BOXTESTING IN DATABASEWHITE BOX & BLACK BOXTESTING IN DATABASE
WHITE BOX & BLACK BOX TESTING IN DATABASESalman Memon
 
Questions About Software Testing
Questions About Software TestingQuestions About Software Testing
Questions About Software TestingMayara Mônica
 
Introduction to Testing Industry
Introduction to Testing IndustryIntroduction to Testing Industry
Introduction to Testing IndustrySergejus Bartos
 
Testing Database Changes
Testing Database ChangesTesting Database Changes
Testing Database ChangesSazed Monsur
 
xUnit Style Database Testing
xUnit Style Database TestingxUnit Style Database Testing
xUnit Style Database TestingChris Oldwood
 
Database testing in postgresql query
Database testing  in postgresql query Database testing  in postgresql query
Database testing in postgresql query mohammed najim
 
Database Web Application Usability Testing
Database Web Application Usability TestingDatabase Web Application Usability Testing
Database Web Application Usability TestingTim Broadwater
 
01 software test engineering (manual testing)
01 software test engineering (manual testing)01 software test engineering (manual testing)
01 software test engineering (manual testing)Siddireddy Balu
 
Testing in Agile Projects
Testing in Agile ProjectsTesting in Agile Projects
Testing in Agile Projectssriks7
 
Agile QA presentation
Agile QA presentationAgile QA presentation
Agile QA presentationCarl Bruiners
 
Agile tour ncr test360_degree - agile testing on steroids
Agile tour ncr test360_degree - agile testing on steroidsAgile tour ncr test360_degree - agile testing on steroids
Agile tour ncr test360_degree - agile testing on steroidsVipul Gupta
 
Agile Testing: The Role Of The Agile Tester
Agile Testing: The Role Of The Agile TesterAgile Testing: The Role Of The Agile Tester
Agile Testing: The Role Of The Agile TesterDeclan Whelan
 
Types of databases
Types of databasesTypes of databases
Types of databasesPAQUIAAIZEL
 
Writing Test Cases in Agile
Writing Test Cases in AgileWriting Test Cases in Agile
Writing Test Cases in AgileSaroj Singh
 
Agile Testing Process
Agile Testing ProcessAgile Testing Process
Agile Testing ProcessIntetics
 

Destacado (20)

Database testing
Database testingDatabase testing
Database testing
 
WHITE BOX & BLACK BOX TESTING IN DATABASE
WHITE BOX & BLACK BOXTESTING IN DATABASEWHITE BOX & BLACK BOXTESTING IN DATABASE
WHITE BOX & BLACK BOX TESTING IN DATABASE
 
Presentation13
Presentation13Presentation13
Presentation13
 
Questions About Software Testing
Questions About Software TestingQuestions About Software Testing
Questions About Software Testing
 
Introduction to Testing Industry
Introduction to Testing IndustryIntroduction to Testing Industry
Introduction to Testing Industry
 
Webinar - 'Test Case Immunity’- Optimize testing
Webinar - 'Test Case Immunity’- Optimize testing Webinar - 'Test Case Immunity’- Optimize testing
Webinar - 'Test Case Immunity’- Optimize testing
 
Testing Database Changes
Testing Database ChangesTesting Database Changes
Testing Database Changes
 
xUnit Style Database Testing
xUnit Style Database TestingxUnit Style Database Testing
xUnit Style Database Testing
 
Database testing in postgresql query
Database testing  in postgresql query Database testing  in postgresql query
Database testing in postgresql query
 
Software Database and Testing
Software Database and TestingSoftware Database and Testing
Software Database and Testing
 
Database Web Application Usability Testing
Database Web Application Usability TestingDatabase Web Application Usability Testing
Database Web Application Usability Testing
 
01 software test engineering (manual testing)
01 software test engineering (manual testing)01 software test engineering (manual testing)
01 software test engineering (manual testing)
 
Testing in Agile Projects
Testing in Agile ProjectsTesting in Agile Projects
Testing in Agile Projects
 
Agile QA presentation
Agile QA presentationAgile QA presentation
Agile QA presentation
 
Agile tour ncr test360_degree - agile testing on steroids
Agile tour ncr test360_degree - agile testing on steroidsAgile tour ncr test360_degree - agile testing on steroids
Agile tour ncr test360_degree - agile testing on steroids
 
Agile Testing
Agile TestingAgile Testing
Agile Testing
 
Agile Testing: The Role Of The Agile Tester
Agile Testing: The Role Of The Agile TesterAgile Testing: The Role Of The Agile Tester
Agile Testing: The Role Of The Agile Tester
 
Types of databases
Types of databasesTypes of databases
Types of databases
 
Writing Test Cases in Agile
Writing Test Cases in AgileWriting Test Cases in Agile
Writing Test Cases in Agile
 
Agile Testing Process
Agile Testing ProcessAgile Testing Process
Agile Testing Process
 

Similar a Testing database applications with QuickCheck

An Approach To Erp Testing Using Services
An Approach To Erp Testing Using ServicesAn Approach To Erp Testing Using Services
An Approach To Erp Testing Using ServicesSagi Schliesser
 
Unit Testing Essay
Unit Testing EssayUnit Testing Essay
Unit Testing EssayDani Cox
 
Bpm10gperformancetuning 476208
Bpm10gperformancetuning 476208Bpm10gperformancetuning 476208
Bpm10gperformancetuning 476208Vibhor Rastogi
 
Managing EBS Testing, Performance, Configurations, Change & User experience
Managing EBS Testing, Performance, Configurations, Change & User experienceManaging EBS Testing, Performance, Configurations, Change & User experience
Managing EBS Testing, Performance, Configurations, Change & User experienceInSync Conference
 
Resumeupdated
ResumeupdatedResumeupdated
Resumeupdatedsudha A
 
Web-Based System for Software Requirements Quality Analysis Using Case-Based ...
Web-Based System for Software Requirements Quality Analysis Using Case-Based ...Web-Based System for Software Requirements Quality Analysis Using Case-Based ...
Web-Based System for Software Requirements Quality Analysis Using Case-Based ...IOSR Journals
 
Automation Testing of Web based Application with Selenium and HP UFT (QTP)
Automation Testing of Web based Application with Selenium and HP UFT (QTP)Automation Testing of Web based Application with Selenium and HP UFT (QTP)
Automation Testing of Web based Application with Selenium and HP UFT (QTP)IRJET Journal
 
Keyword Driven Automation
Keyword Driven AutomationKeyword Driven Automation
Keyword Driven AutomationPankaj Goel
 
ScottBritt_newresume
ScottBritt_newresumeScottBritt_newresume
ScottBritt_newresumeScott Britt
 
Performance and load testing
Performance and load testingPerformance and load testing
Performance and load testingsonukalpana
 
Varalakhmi_Suresh_1
Varalakhmi_Suresh_1Varalakhmi_Suresh_1
Varalakhmi_Suresh_1varu suresh
 
Effektives Consulting - Performance Engineering
Effektives Consulting - Performance EngineeringEffektives Consulting - Performance Engineering
Effektives Consulting - Performance Engineeringhitdhits
 
Alex syvorotka - QA: Customer Oriented Testing Approaches in theory and practice
Alex syvorotka - QA: Customer Oriented Testing Approaches in theory and practiceAlex syvorotka - QA: Customer Oriented Testing Approaches in theory and practice
Alex syvorotka - QA: Customer Oriented Testing Approaches in theory and practiceCiklum Ukraine
 
Best practice adoption (and lack there of)
Best practice adoption (and lack there of)Best practice adoption (and lack there of)
Best practice adoption (and lack there of)John Pape
 
Workshop BI/DWH AGILE TESTING SNS Bank English
Workshop BI/DWH AGILE TESTING SNS Bank EnglishWorkshop BI/DWH AGILE TESTING SNS Bank English
Workshop BI/DWH AGILE TESTING SNS Bank EnglishMarcus Drost
 
Best practices for_large_oracle_apps_r12_implementations
Best practices for_large_oracle_apps_r12_implementationsBest practices for_large_oracle_apps_r12_implementations
Best practices for_large_oracle_apps_r12_implementationsAjith Narayanan
 
Dev ops and safety critical systems
Dev ops and safety critical systemsDev ops and safety critical systems
Dev ops and safety critical systemsLen Bass
 
CucumberSeleniumWD
CucumberSeleniumWDCucumberSeleniumWD
CucumberSeleniumWDVikas Sarin
 

Similar a Testing database applications with QuickCheck (20)

An Approach To Erp Testing Using Services
An Approach To Erp Testing Using ServicesAn Approach To Erp Testing Using Services
An Approach To Erp Testing Using Services
 
Unit Testing Essay
Unit Testing EssayUnit Testing Essay
Unit Testing Essay
 
Bpm10gperformancetuning 476208
Bpm10gperformancetuning 476208Bpm10gperformancetuning 476208
Bpm10gperformancetuning 476208
 
Managing EBS Testing, Performance, Configurations, Change & User experience
Managing EBS Testing, Performance, Configurations, Change & User experienceManaging EBS Testing, Performance, Configurations, Change & User experience
Managing EBS Testing, Performance, Configurations, Change & User experience
 
Resumeupdated
ResumeupdatedResumeupdated
Resumeupdated
 
Web-Based System for Software Requirements Quality Analysis Using Case-Based ...
Web-Based System for Software Requirements Quality Analysis Using Case-Based ...Web-Based System for Software Requirements Quality Analysis Using Case-Based ...
Web-Based System for Software Requirements Quality Analysis Using Case-Based ...
 
Automation Testing of Web based Application with Selenium and HP UFT (QTP)
Automation Testing of Web based Application with Selenium and HP UFT (QTP)Automation Testing of Web based Application with Selenium and HP UFT (QTP)
Automation Testing of Web based Application with Selenium and HP UFT (QTP)
 
Keyword Driven Automation
Keyword Driven AutomationKeyword Driven Automation
Keyword Driven Automation
 
ScottBritt_newresume
ScottBritt_newresumeScottBritt_newresume
ScottBritt_newresume
 
Performance and load testing
Performance and load testingPerformance and load testing
Performance and load testing
 
Varalakhmi_Suresh_1
Varalakhmi_Suresh_1Varalakhmi_Suresh_1
Varalakhmi_Suresh_1
 
Effektives Consulting - Performance Engineering
Effektives Consulting - Performance EngineeringEffektives Consulting - Performance Engineering
Effektives Consulting - Performance Engineering
 
QAIBP
QAIBPQAIBP
QAIBP
 
Alex syvorotka - QA: Customer Oriented Testing Approaches in theory and practice
Alex syvorotka - QA: Customer Oriented Testing Approaches in theory and practiceAlex syvorotka - QA: Customer Oriented Testing Approaches in theory and practice
Alex syvorotka - QA: Customer Oriented Testing Approaches in theory and practice
 
Best practice adoption (and lack there of)
Best practice adoption (and lack there of)Best practice adoption (and lack there of)
Best practice adoption (and lack there of)
 
CV
CVCV
CV
 
Workshop BI/DWH AGILE TESTING SNS Bank English
Workshop BI/DWH AGILE TESTING SNS Bank EnglishWorkshop BI/DWH AGILE TESTING SNS Bank English
Workshop BI/DWH AGILE TESTING SNS Bank English
 
Best practices for_large_oracle_apps_r12_implementations
Best practices for_large_oracle_apps_r12_implementationsBest practices for_large_oracle_apps_r12_implementations
Best practices for_large_oracle_apps_r12_implementations
 
Dev ops and safety critical systems
Dev ops and safety critical systemsDev ops and safety critical systems
Dev ops and safety critical systems
 
CucumberSeleniumWD
CucumberSeleniumWDCucumberSeleniumWD
CucumberSeleniumWD
 

Más de Laura M. Castro

Ola, ChatGPT... que carreira sería boa para min?
Ola, ChatGPT... que carreira sería boa para min?Ola, ChatGPT... que carreira sería boa para min?
Ola, ChatGPT... que carreira sería boa para min?Laura M. Castro
 
IAs xerativas e nesgos de xénero
IAs xerativas e nesgos de xéneroIAs xerativas e nesgos de xénero
IAs xerativas e nesgos de xéneroLaura M. Castro
 
As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...
As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...
As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...Laura M. Castro
 
David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...
David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...
David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...Laura M. Castro
 
Why on Earth would I test if I have to just "Let it crash"?
Why on Earth would I test if I have to just "Let it crash"?Why on Earth would I test if I have to just "Let it crash"?
Why on Earth would I test if I have to just "Let it crash"?Laura M. Castro
 
How the BEAM will change your mind
How the BEAM will change your mindHow the BEAM will change your mind
How the BEAM will change your mindLaura M. Castro
 
So I used Erlang... is my system as scalable as they say it'd be?
So I used Erlang... is my system as scalable as they say it'd be?So I used Erlang... is my system as scalable as they say it'd be?
So I used Erlang... is my system as scalable as they say it'd be?Laura M. Castro
 
Elixir: the not-so-hidden path to Erlang
Elixir: the not-so-hidden path to ErlangElixir: the not-so-hidden path to Erlang
Elixir: the not-so-hidden path to ErlangLaura M. Castro
 
Automatic generation of UML sequence diagrams from test counterexamples
Automatic generation of UML sequence diagrams from test counterexamplesAutomatic generation of UML sequence diagrams from test counterexamples
Automatic generation of UML sequence diagrams from test counterexamplesLaura M. Castro
 
Making property-based testing easier to read for humans
Making property-based testing easier to read for humansMaking property-based testing easier to read for humans
Making property-based testing easier to read for humansLaura M. Castro
 
Erlang as a supporting technology for teaching Software Architecture
Erlang as a supporting technology for teaching Software ArchitectureErlang as a supporting technology for teaching Software Architecture
Erlang as a supporting technology for teaching Software ArchitectureLaura M. Castro
 
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...Laura M. Castro
 
Experiencias Industriales con Programación Declarativa
Experiencias Industriales con Programación DeclarativaExperiencias Industriales con Programación Declarativa
Experiencias Industriales con Programación DeclarativaLaura M. Castro
 
Functional programming goes to Hollywood... and around the world!
Functional programming goes to Hollywood... and around the world!Functional programming goes to Hollywood... and around the world!
Functional programming goes to Hollywood... and around the world!Laura M. Castro
 
Failover and takeover contingency mechanisms for network partition and node f...
Failover and takeover contingency mechanisms for network partition and node f...Failover and takeover contingency mechanisms for network partition and node f...
Failover and takeover contingency mechanisms for network partition and node f...Laura M. Castro
 
Editing documents with LaTeX
Editing documents with LaTeXEditing documents with LaTeX
Editing documents with LaTeXLaura M. Castro
 
Introdución á edición de textos con LaTeX
Introdución á edición de textos con LaTeXIntrodución á edición de textos con LaTeX
Introdución á edición de textos con LaTeXLaura M. Castro
 
Edición de textos con LaTeX
Edición de textos con LaTeXEdición de textos con LaTeX
Edición de textos con LaTeXLaura M. Castro
 
Edición de textos con LaTeX
Edición de textos con LaTeXEdición de textos con LaTeX
Edición de textos con LaTeXLaura M. Castro
 

Más de Laura M. Castro (20)

Ola, ChatGPT... que carreira sería boa para min?
Ola, ChatGPT... que carreira sería boa para min?Ola, ChatGPT... que carreira sería boa para min?
Ola, ChatGPT... que carreira sería boa para min?
 
IAs xerativas e nesgos de xénero
IAs xerativas e nesgos de xéneroIAs xerativas e nesgos de xénero
IAs xerativas e nesgos de xénero
 
As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...
As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...
As intelixencias artificiais como xeradoras de cultura: exploración dos nesgo...
 
David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...
David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...
David vs. Goliat: lecciones aprendidas de una experiencia fallida de adopción...
 
Why on Earth would I test if I have to just "Let it crash"?
Why on Earth would I test if I have to just "Let it crash"?Why on Earth would I test if I have to just "Let it crash"?
Why on Earth would I test if I have to just "Let it crash"?
 
How the BEAM will change your mind
How the BEAM will change your mindHow the BEAM will change your mind
How the BEAM will change your mind
 
Elixir vs Java
Elixir vs JavaElixir vs Java
Elixir vs Java
 
So I used Erlang... is my system as scalable as they say it'd be?
So I used Erlang... is my system as scalable as they say it'd be?So I used Erlang... is my system as scalable as they say it'd be?
So I used Erlang... is my system as scalable as they say it'd be?
 
Elixir: the not-so-hidden path to Erlang
Elixir: the not-so-hidden path to ErlangElixir: the not-so-hidden path to Erlang
Elixir: the not-so-hidden path to Erlang
 
Automatic generation of UML sequence diagrams from test counterexamples
Automatic generation of UML sequence diagrams from test counterexamplesAutomatic generation of UML sequence diagrams from test counterexamples
Automatic generation of UML sequence diagrams from test counterexamples
 
Making property-based testing easier to read for humans
Making property-based testing easier to read for humansMaking property-based testing easier to read for humans
Making property-based testing easier to read for humans
 
Erlang as a supporting technology for teaching Software Architecture
Erlang as a supporting technology for teaching Software ArchitectureErlang as a supporting technology for teaching Software Architecture
Erlang as a supporting technology for teaching Software Architecture
 
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...
A Backpack to go the Extra-Functional Mile (a hitched hike by the PROWESS pro...
 
Experiencias Industriales con Programación Declarativa
Experiencias Industriales con Programación DeclarativaExperiencias Industriales con Programación Declarativa
Experiencias Industriales con Programación Declarativa
 
Functional programming goes to Hollywood... and around the world!
Functional programming goes to Hollywood... and around the world!Functional programming goes to Hollywood... and around the world!
Functional programming goes to Hollywood... and around the world!
 
Failover and takeover contingency mechanisms for network partition and node f...
Failover and takeover contingency mechanisms for network partition and node f...Failover and takeover contingency mechanisms for network partition and node f...
Failover and takeover contingency mechanisms for network partition and node f...
 
Editing documents with LaTeX
Editing documents with LaTeXEditing documents with LaTeX
Editing documents with LaTeX
 
Introdución á edición de textos con LaTeX
Introdución á edición de textos con LaTeXIntrodución á edición de textos con LaTeX
Introdución á edición de textos con LaTeX
 
Edición de textos con LaTeX
Edición de textos con LaTeXEdición de textos con LaTeX
Edición de textos con LaTeX
 
Edición de textos con LaTeX
Edición de textos con LaTeXEdición de textos con LaTeX
Edición de textos con LaTeX
 

Último

Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 

Último (20)

Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 

Testing database applications with QuickCheck

  • 1. Testing database applications with QuickCheck — Tutorial — Laura M. Castro Universidade da Coruña (Spain) Stockholm, 15th November 2010 Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 1 / 23
  • 2. Outline 1 What is a database application? 2 Why do DB applications require special testing? 3 The theory: how to test a database application with QuickCheck 4 The practise: testing a simple e-shop 5 Summing up Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 2 / 23
  • 3. What is a database application? A database or data-intensive application is a software system which: makes intensive use of great amounts of data, relies on external storage sources for persistence (e.g., a database). Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 3 / 23
  • 4. What is a database application? A database or data-intensive application is a software system which: makes intensive use of great amounts of data, relies on external storage sources for persistence (e.g., a database). online shop Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 3 / 23
  • 5. What is a database application? A database or data-intensive application is a software system which: makes intensive use of great amounts of data, relies on external storage sources for persistence (e.g., a database). online shop task flow Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 3 / 23
  • 6. What is a database application? A database or data-intensive application is a software system which: makes intensive use of great amounts of data, relies on external storage sources for persistence (e.g., a database). online bank shop app task flow Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 3 / 23
  • 7. Why do DB applications require special testing? Database or data-intensive applications are software systems which: impose complex constraints on the data they handle, their correct operation depends on their enforcement. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 4 / 23
  • 8. Why do DB applications require special testing? Database or data-intensive applications are software systems which: impose complex constraints on the data they handle, their correct operation depends on their enforcement. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 4 / 23
  • 9. Why do DB applications require special testing? Database or data-intensive applications are software systems which: impose complex constraints on the data they handle, their correct operation depends on their enforcement. These constraints are usually referred to as business rules. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 4 / 23
  • 10. Business Rules What are they? “Statements that define or constrain some aspect of a business (. . . ) intended to assert business structure or to control or influence behavior” (B.R. Group, Defining Business Rules – What are they really?) “Definitions of how the business should be carried out and constraints on the business” (I. Sommerville, Software Engineering) “Software is the realization of business rules” (R.S. Pressman, Software Engineering – A practitioner’s approach) Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 5 / 23
  • 11. Business Rules Where are they? APPLICATION INTERFACE APPLICATION BUSINESS LOGIC STORAGE ACCESS Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 6 / 23
  • 12. Business Rules Where are they? APPLICATION INTERFACE APPLICATION BUSINESS LOGIC only basic constraints STORAGE ACCESS (E/R) Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 6 / 23
  • 13. Business Rules Where are they? APPLICATION INTERFACE no constraints at all APPLICATION BUSINESS LOGIC only basic constraints STORAGE ACCESS (E/R) Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 6 / 23
  • 14. Business Rules Where are they? APPLICATION INTERFACE APPLICATION BUSINESS LOGIC STORAGE ACCESS Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 6 / 23
  • 15. Business Rules When do we test them? Since business rules are not located in a specific unit or component, they are not covered by unit testing. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 7 / 23
  • 16. Business Rules When do we test them? Since business rules are not located in a specific unit or component, they are not covered by unit testing. Since business rules dictate data-related constraints, they are not the scope of integration testing. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 7 / 23
  • 17. Business Rules When do we test them? Since business rules are not located in a specific unit or component, they are not covered by unit testing. Since business rules dictate data-related constraints, they are not the scope of integration testing. Since business rules need to be respected at all times, they are not considered when testing the GUI. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 7 / 23
  • 18. Business Rules When do we test them? Since business rules are not located in a specific unit or component, they are not covered by unit testing. Since business rules dictate data-related constraints, they are not the scope of integration testing. Since business rules need to be respected at all times, they are not considered when testing the GUI. Business rules must be tested as part of system testing. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 7 / 23
  • 19. Why do DB applications require special testing? Because of Business Rules Therefore, database or data-intensive applications: include business rules that put constraints on the data they handle, business rules must be enforced by the system at all times, location of the business rules is unclear. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 8 / 23
  • 20. Why do DB applications require special testing? Because of Business Rules Therefore, database or data-intensive applications: include business rules that put constraints on the data they handle, business rules must be enforced by the system at all times, location of the business rules is unclear. In this tutorial, we will present a methodology to test business rules at system testing level. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 8 / 23
  • 21. The theory How to test business rules with QuickCheck To test that a data-intensive application complies with the data constraints imposed by its business rules at all times, we use QuickCheck: an automatic testing tool, generates and runs random sequences of test cases, when an error is found, test sequence is shrunk to return a minimal test case. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 9 / 23
  • 22. The theory How to test business rules with QuickCheck To test that a data-intensive application complies with the data constraints imposed by its business rules at all times, we use QuickCheck: an automatic testing tool, generates and runs random sequences of test cases, when an error is found, test sequence is shrunk to return a minimal test case. In the rest of the tutorial we assume familiarity with Quviq QuickCheck testing tool. We will present the basics of how QuickCheck state machine library works, but explaining these concepts is not the purpose of this specific tutorial. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 9 / 23
  • 23. The theory How to test business rules with QuickCheck APPLICATION INTERFACE APPLICATION BUSINESS LOGIC STORAGE ACCESS Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 10 / 23
  • 24. The theory How to test business rules with QuickCheck APPLICATION INTERFACE BR enforced here APPLICATION BUSINESS LOGIC STORAGE ACCESS Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 10 / 23
  • 25. The theory How to test business rules with QuickCheck APPLICATION INTERFACE APPLICATION BUSINESS LOGIC or here STORAGE ACCESS data will be "corrupted" Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 10 / 23
  • 26. The theory How to test business rules with QuickCheck QUICKCHECK APPLICATION BUSINESS LOGIC STORAGE ACCESS Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 10 / 23
  • 27. The theory QuickCheck state machine library In particular, we use QuickCheck state machine library: mechanism to easily implement a testing state machine (library callbacks), the testing state machine generates and runs test sequences, tests are sequences of calls to the functionalities under test. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 11 / 23
  • 28. The theory How are test sequences generated? test sequence length reached? YES NO select SUCCESS operation preconditions hold? FALSE TRUE execute operation postconditions hold? TRUE FALSE ERROR Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 12 / 23
  • 29. The theory How are test sequences generated? test sequence length reached? YES NO select SUCCESS operation preconditions hold? FALSE TRUE execute operation postconditions hold? TRUE FALSE ERROR Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 12 / 23
  • 30. The theory How are test sequences generated? test sequence length reached? YES NO select SUCCESS operation preconditions hold? FALSE TRUE execute operation postconditions hold? TRUE FALSE ERROR Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 12 / 23
  • 31. The theory How are test sequences generated? test sequence length reached? YES NO select SUCCESS operation preconditions hold? FALSE TRUE execute operation postconditions hold? TRUE FALSE ERROR Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 12 / 23
  • 32. The theory How are test sequences generated? test sequence length reached? YES NO select SUCCESS operation preconditions hold? FALSE TRUE execute operation postconditions hold? TRUE FALSE ERROR Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 12 / 23
  • 33. The theory How are test sequences generated? test sequence length reached? YES NO select SUCCESS operation preconditions hold? FALSE TRUE execute operation postconditions hold? TRUE FALSE ERROR Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 12 / 23
  • 34. The theory How are test sequences generated? test sequence length reached? YES NO select SUCCESS operation preconditions hold? FALSE TRUE execute operation postconditions hold? TRUE FALSE ERROR Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 12 / 23
  • 35. The theory QuickCheck statem machine skeleton -module(test_eqc). -include_lib("eqc/include/eqc.hrl"). -include_lib("eqc/include/eqc_statem.hrl"). -compile(export_all). -record(state,{useful_info}). %% Initialize the state initial_state() -> #state{useful_info = []}. %% Command generator, S is the state command(S) -> oneof([ PUBLIC API OPERATIONS ]). %% Next state transformation, S is the current state next_state(S,_V,{call,_,_,_}) -> S. %% Precondition, checked before command is added to the command sequence precondition(_S,{call,_,_,_}) -> true. %% Postcondition, checked after command has been evaluated %% OBS: S is the state before next_state(S,_,<command>) postcondition(_S,{call,_,_,_},_Res) -> true. prop_statem() -> ?FORALL(Cmds,commands(?MODULE), begin {H,S,Res} = run_commands(?MODULE,Cmds), ?WHENFAIL( io:format("History: ~p~nState: ~p~nRes: ~p~n",[H,S,Res]), Res == ok) end). Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 13 / 23
  • 36. The practise Testing a simple e-shop Very simple online shop application: Register new customer Add new product to shop Add product to cart Remove product from cart Place order Cancel order Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 14 / 23
  • 37. The practise UML model: main components Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 15 / 23
  • 38. The practise E/R model: basic data constraints Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 16 / 23
  • 39. The practise Golden business rule Example of business rule (complex data constraint). Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 17 / 23
  • 40. The practise Golden business rule Example of business rule (complex data constraint). Business rule Only golden customers may purchase golden products. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 17 / 23
  • 41. The practise Golden business rule Example of business rule (complex data constraint). Business rule Only golden customers may purchase golden products. Business rules may be implemented in different ways. . . Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 17 / 23
  • 42. The practise Golden business rule Example of business rule (complex data constraint). Business rule Only golden customers may purchase golden products. Business rules may be implemented in different ways. . . . . . but we only care they actually are. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 17 / 23
  • 43. The practise Hands-on time! 1 Explore the simple e-shop implementation given, Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 18 / 23
  • 44. The practise Hands-on time! 1 Explore the simple e-shop implementation given, 2 inspect the simpleshop_eqc module stub Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 18 / 23
  • 45. The practise Hands-on time! 1 Explore the simple e-shop implementation given, 2 inspect the simpleshop_eqc module stub 1 and fill-in the gaps, Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 18 / 23
  • 46. The practise Hands-on time! 1 Explore the simple e-shop implementation given, 2 inspect the simpleshop_eqc module stub 1 and fill-in the gaps, 3 find out if business rule is respected Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 18 / 23
  • 47. The practise Hands-on time! 1 Explore the simple e-shop implementation given, 2 inspect the simpleshop_eqc module stub 1 and fill-in the gaps, 3 find out if business rule is respected (and if not, fix it!). Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 18 / 23
  • 48. The practise Outcome: QuickCheck statem machine skeleton for BR testing (I) -module(testbr_eqc). -include_lib("eqc/include/eqc.hrl"). -include_lib("eqc/include/eqc_statem.hrl"). -compile(export_all). -record(state, {useful_info}). initial_state() -> #state{useful_info = []}. command(S) -> oneof([ PUBLIC API OPERATIONS (LOCAL WRAPPERS) ]). next_state(S,_V,{call,_,_,_}) -> S. precondition(_S,{call,_,_,_}) -> true. postcondition(_S,{call,_,_,_},_Res) -> true. prop_brstatem() -> ?FORALL(Cmds, commands(?MODULE), begin true = check_data_invariant(), {H, S, Res} = run_commands(?MODULE, Cmds), Invariant = check_data_invariant(), clean_up(S), ?WHENFAIL(io:format("H ~p~nS ~p~nRes ~p~n", [H, S, Res]), conjunction([{test_execution, Res == ok}, {business_rules, Invariant}])) end). Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 19 / 23
  • 49. The practise Outcome: QuickCheck statem machine skeleton for BR testing (& II) <command>_local(Args) -> Expected = expected_result(<command>, Args), Obtained = <command>(Args), match(Expected, Obtained). check_data_invariant() -> IMPLEMENTATION OF BUSINESS RULES AS STORAGE QUERIES. expected_result(<command>, Args) -> QUERY STORAGE TO GUESS RESULT. clean_up(S) -> EMPTY STATE BETWEEN TEST SEQUENCES. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 20 / 23
  • 50. Summing up Testing of data-intensive applications When testing database or data-intensive applications, special attention must be paid to data-consistency business rules, data-consistency constraints cannot always be trusted to the data storage and can never be trusted to the user interface, business rules implementation may be spread over the system, system testing is the most adequate level to test for business rules compliance. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 21 / 23
  • 51. Summing up Methodology to test BR using QuickCheck 1 Use a QuickCheck state machine, 2 keep state minimum, 3 add public API operations as commands/transitions, use local wrappers to predict the result according to existing data, and then match with the result actually obtained 4 specify pre- and postconditions as true, 5 formulate business rules (invariants) as queries to data storage, 6 write property checking invariants after each test sequence. Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 22 / 23
  • 52. Summing up I hope this tutorial has been useful! Attendants ! thanks Get help subscribing to: quickcheck-questions@quviq.com Material for images came from: openclipart.org, kde-look.org Erlang User Conference (2010) Tutorial Workshop Testing DB apps with QC 23 / 23