One of the standard definitions for a component is given by Clemens Szyperski [Szyp98]:
A software component is a unit of composition with contractually specified interfaces and explicit context dependencies only. A software component can be deployed independently and is subject to composition by third parties.
This addresses both the technical and market aspects of “component.” Even though we will continue to use our less formal definition, we will use this definition to organize our discussion of testing components.
A component is a “chunk” of functionality hidden within some type of package but advertised through one or more interfaces. The complete specification for a component is the list of services (we will use the term ...