Code Refactoring: Techniques, Benefits, and Drawbacks