Context-driven testing is a model for developing and debugging computer software that takes into account the ways in which the programs will be used or are expected to be used in the real world. In order to successfully conduct this type of testing, software developers must identify the intended market and evaluate the environments in which people are likely to employ the product.
Some adherents of context-driven testing call it a set of values rather than a process or technique. It revolves around the fact that software users are human beings with diverse preferences, needs, abilities and limitations. A program that works well for one person in a given situation might prove inadequate or inappropriate for another person or situation. For example, a word processor with mathematical symbols and a set of tools for positioning and manipulating them might be ideal for a college professor writing a physics textbook but cumbersome and annoying for a novelist. Conversely, a simple text editor may be preferred by the novelist but be rejected by the professor. Context-driven testing revolves around the fact that there is no single "best solution" that applies to all cases. In addition, it takes into account the fact that complex software projects often evolve in unpredictable ways. Context-driven testing is based on the notion that a computer program should be treated as a solution. It follows that if a program does not resolve the problem or situation it is meant to address, then it cannot be considered a success.
Advantages of context-driven testing include enhanced user-friendliness of the end product, optimized functionality for intended users and adaptability of the product to changing markets and social values. The context-driven methodology does not necessarily work well in all situations. Other approaches might prove better for developers who are under the direct supervision and control of an autocratic "boss" who takes responsibility for the results of work done. Context-driven testing would likely prove superfluous in stable environments where conditions rarely or never change.
The context-driven software development school was conceived in 1999 by Cem Kaner, James Bach, Brian Marick and Bret Pettichord. In 2001 they published a book based on their experiences in software development. Although context-driven testing is often associated with agile software development, the approach is also useful for non-Agile practices that accommodate flexibility.