I wanted to continue exploring software testing. This post will focus on levels of testing. I’ve seen these terms used in different job descriptions that I have come across recently and I wanted to know a little more about them. From what I have read, there are four levels of testing:
- Unit testing
- Integration testing
- System testing
- Acceptance testing
Unit testing can also be known as component testing. This type of testing verifies the functionality of specific pieces of code, particularly at the function level. Do the functions work the way they are supposed to? If you are calculating sales tax, is the math correct? Is it grabbing the right multipliers? Is the answer in the correct format? Does the function produce the expected result?
I found that unit tests can be written by the developers as they are working on the code (this was referred to as ‘white-box style’). This type of testing focuses on the building blocks of the code and does not include whether all the building blocks work well together (this is leading to integration testing). Unit testing is usually performed by the software developer during the construction phase of the software development life cycle (SDLC). Instead of sending code to QA to test and then return to the developer multiple times (this does not seem very efficient), the developer will perform tests during construction in order to eliminate basic errors before the larger package of code is sent to QA.
Integration testing is the next step up from unit testing. It involves testing multiple components in a software product to make sure that they work well together. Some components may be tested and then additional components added to increase the level or depth of the tests. This is an iterative approach. Or you could use the ‘big bang’ approach where all components are lumped together for testing all interfaces and all levels of integration at once. It sounds like the iterative approach is favored, since it would be easier to identify issues among a smaller number of components.
System testing is also known as ‘end-to-end testing’ and involves tests over the entire software product or system. This level of testing looks at how the overall product works as well as checking to make sure that the software product does not interfere with the operating environment or other processes within that environment. Memory corruption, high loads on servers, and slow response times could be indications of the software product interfering with the overall operation environment.
Acceptance testing occurs when the system is delivered to the user and determines whether the user (or customer/client) ‘accepts’ the system.
I know this may seem like a basic topic to some, but it has really been helpful for me to research and learn about these terms and concepts. Now, when I read articles or job descriptions, I’ll have a much better idea of what they are talking about.