What is testing?
Typically we use a set of software requirements or specification documents as basis of generating our tests. What requirements are saying will be the things covered by testing. The major advantage of this approach is the ease of designing our tests and managing the test coverage, however, if with this approach, we are only doing “checking” instead of “testing” like James Bach’s say. We’re checking whether a login function is working as its requirements describe; we’re checking if a flight reservation is not allowed when booking time just passes flight time that its requirements indicate. Testing is more than that. It's comprised of checking and learning rapidly software to have many views about software.
Don’t let requirements trap your thinking
How many kinds of fruits do you see in the picture below?
And what’s now? Do you see something else? If not, let’s defocus your attention and think of other sides of the picture. Now, I’m rotating the picture like this.
Aha!!! There is a human face shape. This is only a brain game to prove that we believe in what we are told. I tell fruits and you see fruits only. Reading requirements and only use them to design your tests like you view the picture with only one side, nothing else can be unveiled. Our thinking is really in a trap of requirements because we trust it’s totally perfect. Designers and developers say it and testers believe it. Unfortunately, it’s not really that.
From my standpoint, to more efficient in testing, let’s use product knowledge or domain knowledge, think logically and creatively, using critical thinking to look for mistakes and always questioning premises to uncover the truth about a product.
Don’t stop using Heuristic
Heuristics are one of the keys to thinking like a tester - along with seeing what others cannot see, modeling what you're testing and test against the model, and asking more questions. Heuristics are anything that helps you test. E.g.: I’m using WordPad like an oracle to test MS Word; I’m using functional diagrams to test for order functions. Heuristics help us modeling better the tests.
For example: You are assigned to test a new design of “House”
Your heuristics turn out a model of the house like this picture.
However, what are your tests if my model as the following.
Whatever techniques you use, testing purpose is to uncover hidden facts, it is a journey of learning the product along with that is how to use heuristics to help you having more facets about the product and making your tests more efficient.