There are two approaches to software testing; Manual Testing and Automated Testing.
Manual Testing: As the name implies, this involves manually clicking through an application or interacting with software and APIs with the goal of discovering bugs (defects) in software. This process is very expensive because it requires a human to setup the testing environment and execute all the tests themselves. It is also not very efficient because the tester is human, and the whole process is prone to omissions and errors.
Automated Testing: In software engineering, automated testing is more widely accepted as the correct way of running tests as manual tests are simply not sufficient. In automated testing, a machine is made to execute test scripts written in advance to detect possible defects in the software. These tests can vary a lot in complexity, from validating the results returned from a function to making sure that a sequence of complex actions on the front-end produce expected results.
The quality of automated testing depends on how well the test script is written.
The different types of tests
- Unit testing: This is a very low level type of testing that involves the testing of individual functions, classes, components or modules utilized by the software. When compared to the other forms of testing, Unit testing is relatively cheap to automate.
- Integration testing: Integration testing is used to verify that the various units of your software work well together. This is relatively expensive because it requires multiple units of the software to be running at the time the testing is being done.
- Functional testing: Functional testing focuses on ensuring that a given application meets its business requirements. A typical functional test will only check the output of an action without checking the intermediate stages of the system when performing that action.
- End-to-end testing: The end-to-end testing is used to replicate a user behaviour with software in a complete application environment. it does this by verifying that the user flow functions as expected. These kinds of tests are particularly useful, but very hard to maintain when they are automated.
- Acceptance testing: Acceptance testing is a more formal testing method executed to verify that a system meets its business requirements. This most times involves getting the end-users (customers) to interact with the system, to ensure that it meets their requirements before releasing the product into the market.
- Performance testing: Performance testing is used to check the behaviour of a software system under significant load. These are non-functional test used to understand the reliability, stability and availability of the system. These tests are expensive to implement due to their complex nature.
- Smoke testing: Smoke tests are very basic tests that ensure that the minimum functional requirement of a software system is met. They are quick to execute and the goal of this is to give you assurance that the major features of your system are working as expected.
In a nutshell, Automated testing saves time and money. Manual testing is costly and in-efficient. A good testing technique should be one that pushes your application to the limit in other to expose defects as early as possible in the software development cycle.