Quality is never an accident; it is always the result of intelligent effort.
You haven't left this till last.. have you?
Unless you are practising a very old school Waterfall process this is not a step that happens independently it is integral to all the stages of the Software Development Life Cycle.
Type of testing
Like requirements, your testing can be broken down into functional and non-functional testing.
At a high level functional testing verifies the system against the functional requirements. Where possible you should ensure the tests are automated and run regularly as part of the development process
- Unit Testing - the first line of defence, unit tests help find bugs early and reduce over-all costs.
- Integration Testing - focused mainly on the interfaces and flow of data between the modules that make up the system.
- System Testing - check the behaviour of the whole, integrated system against the requirements.
- Regression testing - check the system as a whole continues to behave as expected following a code change (new feature, change in requirements or defect fix).
- User Acceptance Testing (UAT) - check the system is “correct and sufficient for intended use”. These tests should be done by “real” end users in a realistic environment.
Non-Functional testing checks the performance, reliability, scalability and other non-functional ‘qualities’ of the system.
- Load testing - check the system’s ability to perform under expected load. The aim is to identify performance bottlenecks before the software application goes live.
- Stress testing - check the system under extreme load. The aim is to identify the breaking point of the system.
- Endurance testing - check the system can handle the expected load over a long period of time. The aim is to identify resource leaks.
- Spike testing - tests the system’s reaction to sudden, large spikes in the load.
- Volume testing - the system is populated with large amounts of data and the overall software system’s behaviour is monitored. The aim is to identify the system’s performance once it has been live for some time and has a significant volume of data.
- Scalability testing - the aim of is to determine the system’s effectiveness in “scaling up and down” to support an variations in workload.
- Penetration testing - the aim is to find security vulnerabilities an attacker could exploit.
- Test early
- Test often
- Automate, automate, automate