Specification-based testing aims to test the functionality of software according to the applicable requirements. This level of testing usually requires thorough
test cases to be provided to the tester, who then can simply verify that for a given input, the output value (or behavior), either "is" or "is not" the same as the expected value specified in the test case. Specific knowledge of the application's code, internal structure and programming knowledge in general is not required. The tester is aware of
what the software is supposed to do but is not aware of
how it does it. For instance, the tester is aware that a particular input returns a certain, invariable output but is not aware of
how the software produces the output in the first place.
Test cases Test cases are built around specifications and
requirements, i.e., what the application is supposed to do. Test cases are generally derived from external descriptions of the software, including specifications, requirements and design parameters. Although the tests used are primarily
functional in nature,
non-functional tests may also be used. The test designer selects both valid and invalid inputs and determines the correct output, often with the help of a
test oracle or a previous result that is known to be good, without any knowledge of the test object's internal structure.
Test design techniques Typical black-box test design techniques include
decision table testing,
all-pairs testing,
equivalence partitioning,
boundary value analysis,
cause–effect graph,
error guessing,
state transition testing,
use case testing,
user story testing,
domain analysis, and syntax testing. == Test coverage ==