Our web application is complicated, as are most modern apps. Typically, at the end of a release cycle, we branch our code and perform a regression test on the code. Additionally, all new features are thoroughly tested, as expected.
Because our application is complicated, and populating a set of data in order to perform the tests is time consuming, our QA utilizes the same database from previous tests. This database is old, probably over a year or two.
My position is that testing against a 'dirty' data set is approaching things incorrectly. From my understanding, when you perform a test, you want to test the application when the data is in a controlled and known state. What's happening now is we don't know the current state of the data, therefore when bugs come up we can't say with confidence whether the bugs are new, genuine bugs, or bugs that are the result of bad data. This can have us chasing our tails, and can lead to lots of wasted time.
My question is, am I correct in my position that we should have a clean test database, that is prepopulated with data in a known state? And if this is correct, how can I convince our QA that this is the right way to go?