Automatic refactoring history reconstruction and dynamic component adaptation frameworks for refactoring-based software component evolution