Software is tested to confirm that all valid inputs are correctly interpreted and executed, while incorrect inputs are thrown out. Tests also verify that results are generated efficiently, and that a large volume of data can be handled without hiccups. Testing can be carried out manually or electronically. Automated software testing involves the use of specialized software to test the code that is under development. Such testing benefits the software development process, when applied judiciously.
Manual tests depend on the meticulousness of the people doing the testing. Manual software testing is time-consuming, and needs a significant ratio of testers to developers for most applications. This raises the cost of development. In addition, manual testing has the limitation that large amounts of data, or large numbers of simultaneous users or inputs, cannot be tested easily.
Automated software testing programmatically controls test execution, and the evaluation of output. The testing software provides inputs, which correspond to different conditions, to the software that is being evaluated. For each set of conditions, the testing software compares the actual results to desired results, and maintains statistics on the aggregate behavior of the target software. Following a “run”, the testing software typically provides summary results so that people can rapidly determine what to remedy.
In automated software testing, the tedious tasks involved in testing such as logging in, or entering data like postal addresses are mechanized. Vast combinations of conditions can be tested in each run. Since automated testing involves the use of computers and software, it also enables the simulation of large loads of input data or extremely rapid inputs. Each run of a number of test conditions can be completed in a matter of hours. Hence, automated testing is very useful for regression testing, which ensures that a new feature or bug fix did not inadvertently break previously working code.
Some recent development methodologies such as Extreme Programming emphasize that tests be available before coding. The development methodologies emphasize that regression testing be carried out multiple times each day to ensure the correctness of software as it develops. If the software team has to adhere to this methodology for any significant software, it becomes mandatory that automated software testing is used.
The automation testing software has to be fed the desired inputs and outputs. One way to do this is to store manual test conditions into the software. Another way is to write code to generate various conditions, within the acceptable limits of the software to be tested. Thus, the basis of automated software testing is definitely human effort. The automated testing software cannot go beyond this on its own.
Automated software testing has a significant cost in terms of the software to be acquired as well in its use. So, whether to automate, and what part of the testing to automate, are key decisions. Automated testing is not appropriate for features and environments that are expected to change significantly. In most applications, a mix of manual and automated testing is suitable.