The process of analyzing software with the objective of recovering its design and specification.
The process of existing software artifacts and knowledge to build new software.
Concerned with reimplementing legacy systems to make them more maintainable.
The process of analyzing software to create a representation of a higher level of abstraction and breaking software down into its parts to see how it works.