As we progress through the software manufacturing process, we will rely on testing at various levels to maintain confidence in the final product. Here we present these Software Test Models and its different levels using a layered representation model, because ...
Onions are made of successive layers,
each layer being more powerful and intense than the previous one.
Also, onions -sometimes- make us cry.
Construction activities and software testing activities must coexist harmoniously. An isolated conception of «Testing» is not productive. Therefore, testing approaches are required according to the various development lifecycles.
So in a V-model or sequential type life cycle, we will typically seek to relate build levels to component, integration, system, and acceptance test levels.
If instead we choose iterative building models (or incremental), such as agile development models for example, we will apply to the result of each iteration levels of software tests (components, integration, system and acceptance) according to its size and scope. The incremental nature of the process will naturally lead us to enhance aspects such as regression or automation at all levels (for sheer survival;).
The onion layer model for Software Testing Levels (according to ISTQB) that we have developed for you allows you to visualize the potential volume of each level, its interdependence and its criticality (or flavor).
The outermost layer presents us with the Unit tests. These are usually relatively small and numerous tests. They tend to wrap a good part of the objects, classes or modules built. Functional and non-functional tests can be included, typically released with access to code under construction and supported by development environments. It usually results in the detection of defects that are quickly corrected by the developer.
The next level, Component Testing, is very similar to Unit Testing. The complexity of the elements to be tested marks us if there is a difference between them and the isolation of the rest of the elements to be tested marks the border with the next layer.
We reached a tastier layer, the level of Integration testing. These tests are usually performed by the development team and allow you to verify that the software components interact correctly, with each other and with other parts of the system (such as operating systems, file systems, or hardware). The focus of testing is interaction. The first sparks fly.
We advance, the level of System Testing it is the next layer of our onion. Serious thing, some tears are almost guaranteed. The global behavior of the product built so far will be the reference. that we will specify in a Test Plan for this level (if we want to finish the tests one day). Any aspect of interest must be challenged: risks, requirements, use cases, interactions, configurations, performances, customer comments on whatsapp, etc.. Additionally, this activity is typically performed by an independent test team, typically using a test environment that is as similar to the production environment as possible.
We already have a SYSTEM working!
The moment of truth arrives. We are at the heart of our model and here the most intense experiences await us. It is time to look face to face with the users of the system, we seek their trust. The level of Acceptance Tests will reveal to us if we meet your expectations, will this last bite be sweet or sour?
The usual contractual implications derived from the results of the Acceptance Tests have given rise to a wide variety of nuances in the way they are carried out: user acceptance tests, operational acceptance tests, or regulatory compliance tests are some examples. Moreover, if they are carried out at the manufacturer's house, they are called Alpha testing (there is still a hint of suspicion) while, if they are at the buyer's home, they are called beta testing (finally!).
Thanks to the Software Test Layers model presented,
we can visualize how to organize ourselves
to get to the core of all software manufacturing activity,
la satisfaction of customer expectations.
In any case, you may have asked yourself: BUT, how do you know if we are building the product correctly? (ie according to your specifications) or are we meeting customer expectations? These concerns, which accompany us throughout the life cycle, allow us to introduce a final concept:
The Types of Software Tests. Do you know them?
- Software Testing Blog, by Javier Zapata S.
- Software testing tools (among others) on Javier Garzás' blog.
- Creating the onion model, article by Mike Clayton.
Some interesting references on this topic, which we have consulted, are:
This is how I like it, putting the bell on the cat:
"Unit tests. … Functional and non-functional tests can be included, typically released with access to code under construction and supported by development environments. "
«Component Testing ... the isolation of the rest of the elements to be tested marks the border with the next layer.»
- Component or unit level functional tests -