Well, we all know what testing means. You have created something and now you check whether or not it meets your expectations. You will find some tasks and perform them using this newly created “Something”. Then you will see and validate whether this “Something” performs well. Maybe you will find that your creation is perfectly suited to perform your tasks or maybe it has missed the goal completely; or maybe it breaks in the middle of the process or shows other defects which hinder you from performing your tasks.

But let’s look at this in a more systematical way. Where do your expectations come from? I think they derive from a model of that “Something” you created. Knowingly or unknowingly, you use a model to find out how your creation should behave and test this expected behavior against the observed behavior.

That’s a test.

That’s not a big surprise, I guess, but it leads to some questions. Where does your model come from? Is it correct? Who could tell you? Who owns your model?

You may say “I don’t do modeling!” but that only means you do it unknowingly and your model is not visible. What are the implications on testing? First of all, make your model visible to someone who can validate it. Make sure your testing tasks are real world tasks and not created from your model. Discuss the expected behavior with folks who have real world experience. This will further enable you to test your model and ensure that you are using testing tasks that are able to prove the correctness and relevance of your creation.