In
software testing, monkey testing is a technique where the user tests the application or system by providing
random inputs and checking the behavior, or seeing whether the application or system will crash. Monkey testing is usually implemented as random, automated
unit tests
In computer programming, unit testing is a software testing method by which individual units of source code—sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures&mda ...
.
While the source of the name "monkey" is uncertain, it is believed by some that the name has to do with the
infinite monkey theorem,
which states that a monkey hitting keys at
random on a
typewriter keyboard
A typewriter is a machine, mechanical or electromechanical machine for typing characters. Typically, a typewriter has an array of Button (control), keys, and each one causes a different single character to be produced on paper by striking ...
for an infinite amount of time will
almost surely type a given text, such as the complete works of
William Shakespeare. Some others believe that the name comes from the
classic Mac OS
Mac OS (originally System Software; retronym: Classic Mac OS) is the series of operating systems developed for the Macintosh family of personal computers by Apple Computer from 1984 to 2001, starting with System 1 and ending with Mac OS 9. The ...
application "The Monkey" developed by
Steve Capps
Steve Capps is an American computer programmer, who was one of the designers of the original Apple Macintosh computer.
Capps started working at the Xerox Corporation while still a computer science student at the Rochester Institute of Technology. ...
prior to 1983. It used journaling hooks to feed random events into Mac programs, and was used to test for bugs in
MacPaint.
Monkey Testing is also included in
Android Studio as part of the standard testing tools for
stress testing
Stress testing (sometimes called torture testing) is a form of deliberately intense or thorough testing used to determine the stability of a given system, critical infrastructure or entity. It involves testing beyond normal operational capacity, ...
.
Types of monkey testing
Monkey testing can be categorized into smart monkey tests or dumb monkey tests.
Smart monkey tests
Smart monkeys are usually identified by the following characteristics:
* Have a brief idea about the application or system
* Know its own location, where it can go and where it has been
* Know its own capability and the system's capability
* Focus to break the system
* Report bugs they found
Some smart monkeys are also referred to as brilliant monkeys, which perform testing as per user's behavior and can specify some probabilities of bugs to be occurred.
Dumb monkey tests
Dumb monkeys, also known as "ignorant monkeys", are usually identified by the following characteristics:
* Have no knowledge about the application or system
* Don't know if their input or behavior is valid or invalid
* Don't know their or the system's capabilities, nor the flow of the application
* Can find fewer bugs than smart monkeys, but can also find important bugs that are hard to catch by smart monkeys
Advantages and disadvantages
Advantages
Monkey testing is an effective way to identify some out-of-the-box errors. Since the scenarios tested are usually
ad-hoc, monkey testing can also be a good way to perform load and stress testing. The intrinsic randomness of monkey testing also makes it a good way to find major bugs that can break the entire system. The setup of monkey testing is easy, therefore good for any application. Smart monkeys, if properly set up with an accurate state model, can be really good at finding various kinds of bugs.
Disadvantages
The randomness of monkey testing often makes the bugs found difficult or impossible to reproduce. Unexpected bugs found by monkey testing can also be challenging and time consuming to analyze. In some systems, monkey testing can go on for a long time before finding a bug. For smart monkeys, the ability highly depends on the state model provided, and developing a good state model can be expensive.
Similar techniques and distinctions
While monkey testing is sometimes treated the same as
fuzz testing
Fuzz may refer to:
* Fuzz (film), ''Fuzz'' (film), a 1972 American comedy
* ''Fuzz: When Nature Breaks the Law'', a nonfiction book by Mary Roach
* The fuzz, a List of slang terms for police officers, slang term for police officers
Music
* Fuzz ...
and the two terms are usually used together, some believe they are different by arguing that monkey testing is more about random actions while fuzz testing is more about random data input.
[{{Cite web, url=https://stackoverflow.com/questions/10241957/difference-between-fuzz-testing-and-monkey-test, title=Difference between "fuzz testing" and "monkey test", website=stackoverflow.com, access-date=2016-04-22] Monkey testing is also different from
ad-hoc testing in that ad-hoc testing is performed without planning and documentation and the objective of ad-hoc testing is to divide the system randomly into subparts and check their functionality, which is not the case in monkey testing.
See also
*
Random testing
References
Software testing