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.