You are a member of a music band. The band wants to perform the latest song on stage. Of course you want perform for an audience. A band does not go out to perform without any practice. They first try the new piece at home and practice there for hours. There is no interaction with other musicians now.
After a while you go to try out the piece with the other band members. It can be with other instruments that have more or less the same rhythm as you have. It is also possible that you rehearse with the complete band. After a while the quality of the music is high enough to play with an audience.
The band decides to do a try-out with some limited audience. This try-out is before the real performance to fine-tune the music. If everything went well, the band plays before an audience. The audience is then impressed by the music.
In software development it is exactly the same. You do not put the product immediately in production. You should test the product first. Afterwards we place the product in production.
Musicians first practice their music piece in isolation. At that time they create a first version of the piece. This is the same as with unit tests. They test the first version of the piece. Developers know the internals and write tests for the code.
Component testing is the next level of testing. We test a module or component in isolation. This is the same as a musician who rehearse with other band members. All the members have the same rhythm in the music. The purpose of these rehearsal is to see if they all interpret the music the same.
Before the real thing the musicians rehearse with all band members together. This is very intensive. Tests like functional testing, API testing, Usability testing are like this. The complete system is available. Or at least a huge part of the system. Not all functionality should be ready at this time.
It is time to test the product before sending it to production. This is the same as the band that has a try-out before the real concert. We have a better feeling when the little audience is happy. So if our ‘test users’ accept the product, we can place it to production. Now the world can enjoy our new product.
Happy Testing !