Here is the first in the series. Note that some of the terminologies used here are specific to the product we test - Visual C# (part of VisualStudio.Net).
Choosing the right test strategy is an important step to achieve efficient and robust test automation. The following section describes some of the important methods that teams should consider.
Layered approach to testing
Depending on the type of interaction between the tests and the system under test, our product can be divided into the following four layers. Choosing the right layer/level of testing at the right time in the product cycle is going to be the key to our team's success.
This is the level at which most users interact with the product, through the user interface by working with controls and windows.
Object model level
At this level tests interact with the product through the public object model (DTE). At this level the different components that make Visual Studio are still interacting between themselves in the same way as they normally run when the product is handled by a user.
At this level tests interact directly with the component under test. In most cases components will not be running in an environment similar to that of the first two levels and component will be hosted in isolation.
These tests usually are most robust as they the smallest surface area for false failures.
At this level the tests interact part of a component. These tests are written to test functions and methods of individual pieces of a component in isolation. E.g. Unit tests