Verifies individual components or "units" of code, like functions or methods, to ensure they function correctly in isolation.
Tests the interaction between different modules or units of code to ensure they work together correctly.
Evaluates the entire software system as a whole, treating it as a black box, to ensure it meets all functional and non-functional requirements.
Verifies that the software meets the requirements of the end-users, from their perspective.
After making changes or fixes to the software, this testing ensures that the new changes don't introduce any new issues or break existing functionality.
Evaluates the system's performance under different conditions (e.g., speed, scalability, and response time).