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).

Test strategy

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. 

UI level

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. 

Component level

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. 

API level

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