Monkey testing is a software testing technique in which the testing is performed on the system under test randomly.

Exploratory testing is simultaneous learning, test designing and execution.Tester does not follow a strictly defined process. So whats the difference between both test approaches? Also is Ad-hoc same as Exploratory?

5 Answers
5

I once tested a Windows client UI by randomly banging on the keyboard while my coworker randomly moved and clicked the mouse. I found bugs that way, and I could reproduce them, but (at least initially) I couldn't tell you the exact set of keystrokes and mouse clicks that triggered the problem. That is monkey testing.

Exploratory testing is testing without a script or a predefined set of test cases. Perhaps the main idea about exploratory testing is that it is possible (and productive) to start testing with an ambiguous or loosely-defined goal. Wikipedia says this about exploratory testing:

According to Cem Kaner & James Marcus Bach, exploratory testing is more a mindset or "...a way of thinking about testing" than a methodology. They also say that it crosses a continuum from slightly exploratory (slightly ambiguous or vaguely scripted testing) to highly exploratory (freestyle exploratory testing).

These are not meant to be non-overlapping categories of testing; rather, they are different ways of approaching the problem.

I don't know how ad-hoc testing is supposed to differ from exploratory testing.

"Ad hoc testing" would be something done as a "one-off," for example devising tests to diagnose the cause of a particular problem, as distinct from re-running a larger standard set of tests to check that the problem had been fixed correctly without causing any side-effects.

An ad hoc test could be exploratory testing, monkey testing, or any other test methodology that is appropriate to the problem.

Monkey testing has it's perks, particularly if a test is being recorded so that when an exception is generated there's an understanding of what caused the exception.

Ad hoc testing is useful for testing a resolution to a specific bug (retesting).

Scripted testing is great for regression situations where you need to exercise all of, or the bulk of, functionality of the software in a new version.

Exploratory testing (my personal favorite) is useful during development, particularly when coupled with Agile development. This allows QA Analysts and Testers to run through the software at their own leisure, often in between other types of testing that may be dictated by the development cycle, to run manual checks and balances against various functions and modules of a given piece of software.

In my current position, I tend to perform exploratory testing that is related to other ad hoc or scripted testing that I currently am doing as mandated by my tasks for the current sprint.

Exploratory Testing is a testing approach that allows you to apply your ability and skill as a tester in a powerful way.Testers have to understand the application first by exploring the application, finding out about the software. Exploratory testing is a simultaneous process of test design and test execution all done at the same time. The focus of exploratory testing is more on testing as a "thinking" activity. See it Pros and Cons. It is a bit formal process than Ad-hoc testing. Sometimes it is referred as improved version of Ad-hoc.

Ad-hoc testing is an informal testing type with an aim to break the system. This testing is usually an unplanned activity . It does not follow any test design techniques to create test cases. This testing is primarily performed if the knowledge of testers in the system under test is very high. This testing requires no documentation/ planning /process to be followed. Usually Ad-Hoc testing is performed after the formal test execution. It has following types:-

If you're working out the random inputs while you're in session and then learning something about the system behaviour from the outputs, then you're conducting monkey tests inside an exploratory testing session.

Ad-hoc testing refers to whether the test was planned or not.

Both monkey tests and exploratory test sessions can be planned or unplanned, thus either can be ad-hoc

A further question is, what is the broader question around this? Is it just theoretical or is there a practical need?