Now a days software industry has reached a certain level where robustness and intuitively are no longer coexists together. We need to upgrade our system day by day as well as make it efficient with consider the facts of usability, at this crucial point “Refactoring” comes in. Refactoring refers to a moderate version of the current system where the main intention of the refactoring is to providing better solution in compere to the old solution of the system.
Software refactoring can be performing majorly in two ways:
1. Code refactoring
2. Architecture refactoring
From the distinguishable title we can identify the purposes of two type of refactoring.
Comparatively easier process of refactoring is code refactoring. Under code refactoring few following terms comes in such as , code complexity resolving, maintainability, removing defect prone code block, unit testing and test code coverage. This main factor improves the code standard of the software as well as maintainability of the software but it doesn’t confirm that the system will run with full efficiency with increasing complexity of the software and load. To overcome from this bottle neck we have to perform Architecture refactoring.
Architecture refactoring confirms that the existing system will perform better in various respect with maintaining the exiting service as well as data (as long as the product owner changes the decision regarding existing service and data). Through architecture refactoring we will achieve scalability, extensibility and robustness. The main challenge of the architecture refactoring is changing the full or partial work process of a system through code modification and reusing.
Code refactoring can be performed in code review or during bug fixing and feature enhancement. But for Architecture refactor it will need to take major decision on certain factors, such as :
1. Resource allocation and management
2. Cost management
3. Return Of Investment (ROI) calculation
4. Time management
If someone proceeds for architecture refactoring of a system without considering these factors of a robust system then there is a high possibility to fall in a deep hole in the name of Architecture refactoring.