Software includes operating systems and programs that are made to run on one or more of them. Software testing is a process of examining and using software during and after development, but before release, to verify that features are working, to detect bugs, to check bug fixes, and to make sure that it works well for users. Dynamic testing, also called dynamic analysis, is the process of evaluating software as it is being used. It stands in contrast to static testing, which is analysis of a program that is done without running the program. Other types of testing include response time testing and retrospective testing.
Static testing and dynamic testing together are two of the main types of software testing that are undertaken and they balance each other in certain ways. On the one hand, static testing finds syntax errors and other coding issues and covers the entire program. On the other hand, dynamic testing of a large and complex program often may not cover the entire program because not every possible scenario can be imagined or created in the time set aside for testing.
Dynamic testing analyzes the software program in different operating environments. This includes different brands of computers and other hardware differences, possibly including multiple monitors, different operating systems, and different sets of software applications coexisting on the machine. In addition, testers may have external modules or plug-ins that they use in connection with the software being testing that increases the differentiation of the testing environments in the dynamic testing.
Dynamic testing within a software development company is likely to follow the guidelines and protocols set by IEEE (Institute of Electrical and Electronics Engineers) for software testing and the testing plan that the company has developed in accordance with these. Beta testers external to a company are often used for additional testing, and these testers are usually entirely involved with dynamic testing. Attempts are usually made to have a diverse group of beta testers in terms of hardware, operating systems, and program usage, as applicable. Beta testers, who may have a non-disclosure agreement with the company, may have a protocol to follow or be asked to use the software in the way they would normally use it, or they may do some of each. There is generally a formal reporting system for beta testers to indicate crashes, suspected bugs, failure of features to work as described, or any other unusual, unexpected, or inconvenient aspects of working with the software.