under construction
Characterization Test are tests meant to characterize the effects of an
existing piece of software (legacy code).
The term 'characterization test' was fist coined by Michael Feathers in its "Working Effectively with Legacy Code" book.
Characterization Test are invariants for the behavior of a software component, to verify that modifications made to the software did not change its observable behavior.
As such there are useful when refactoring legacy code.
One essential difference with regression test is that they do not necessarily
verify the correct behavior of the software, they are built to verify the
actual behavior. Once the characterizated behavior has been validated,
they can be deemed as regression tests. Otherwise, they may need to be fixed
first.
Characterization Test can be black-box or white-box tests, depending on whether they rely on an external interface or directly poke inside the software to check the outcome.
Characterization Test are an alternative to Unit Tests when it comes
to put Legacy code under test as it is much easier to create Characterization
Tests for such code than to try to retrofit Unit Tests into code that is not
testable.
Characterization Tests can be used in a reverse engineering process.