Code 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-Fowler. In order to identify whether legacy software product requires code refactoring, one needs to know whether the existing system design is good or bad. The knowledge of bad design symptom also assists the designer to perform better.
Following are the symptoms of bad design
Rigidity: code/design is hard to change. Simple change requires lot of code changes.
Fragility: code/design is easy to break. code break in unexpected area.
Immobility:Hard to re-use code.
Viscosity:Make easier changes (hack) than fixing issues in-line with the current design.
Complexity: Too much anticipation of future need.
Repetition: Similar code in many places with slight change.
Low Cohesion: Less degree of connectivity among the elements of single class.
High Coupling: Interdependency between modules.