Testing Data Consistency of Data-Intensive Applications using QuickCheck
Paper in proceedings, 2010
Many information systems are data-intensive, and most of them rely on trustworthy data management systems for data storage, such as Relational Database Management Systems (RDBMS). RDBMSs are used to store information in a structured manner and to define several types of constraints on the data, to keep basic consistencies.
There are several scenarios in which passing the responsibility of consistency checking completely onto the RDBMS is inconvenient, or simply not possible. In such cases, the alternative is to perform those consistency checks at the business logic level of the system. From a point of view of testing data-intensive applications, one of the most relevant aspects is to ensure correctness of the business logic.
In this article, we show how QuickCheck, a tool for random testing against specifications, can be used to test this business logic to increase confidence on data integrity. We build an abstract model of the data containing the minimum amount necessary to create meaningful test cases. This is important in order to make sure the state of the model is substantially smaller than the data in the complete database. From the abstract model we automatically generate and execute test cases which check that data invariants are preserved.