I have no idea if "reconstruction" has a formal definition or not. "refactoring" is usually defined as "changing my program to improve its structure / architecture without changing its functionality" That's important. If you're adding or changing or debugging functionality, you aren't refactoring. read more
“Refactoring is the process of changing a software system in such a way that it does not alter the external behavior of the code, yet improves its internal structure. read more
A major motivation behind UnitTests is precisely to ensure that refactoring transformations do not break code. Good automated testing is a prerequisite of being able to refactor. And refactoring is a prerequisite of being able to adapt the structure of software to changing requirements. read more