The number and type of tests for even simple software is nearly infinite. Once a bug (error or defect) is found and fixed, it can create or unleash new bugs. The goal of a software testing company is to create a plan for finding as many bugs as possible within the constraints of time and budget that the developing company dictates. Using the testers collective experience and knowledge this can be achieved efficiently within the set parameters. (Although keep in mind, it is your responsibility to fix the bugs, the testers just find them for you).
Basically testing can follow several paths.
Black-box testing: The tester does not know what the internal functioning or source code of the product is. He or she may only know what the product is supposed to do, but not how it does it. This is comparable to experience of the end-user with the product.
White-box testing: The tester can see/know the source code and tests the internal structuring of the product.
What this means is that you have options on how you want your software tested, how deep you want the testers to go, and how long.