Producing software is a very complex process that takes a considerable time to evolve. To help with development there are a number of software lifecycle models which aid to manage this process.A model breaks down the problem into smaller more manageable parts that are individually _ developed iteratively until all the requirements are met.
However using such models do not take into consideration some reality factors that have direct influence on developing software. These factors are, the requirements changing to accommodate clients' needs, new functionality arises, pressures of meeting deadlines and the evolution of developers changing have an over all effect on the whole quality of the system design. These are some of the problems that relate to maintaining software. Software maintenance is described formally as "the process of modifying a software system or component after delivery to correct faults, improve performance or other attributes, or adapt to a changed environment".
Software maintenance can take up to 50% of the overall development costs of producing software. Boehm carried out a study in 1975 on a project being developed and concluded that it cost $30 per line of code during development which increased to $4,000 per line for maintenance costs.
One of the main attributes to these high costs is poorly designed code, which makes it difficult for developers to understand the system even before considering implementing new code. Understanding a system requires the "Software engineer to extract high-level information from low
level code". These high level abstractions use approximations to produce abstract models of the underlying system. These models will produce a limited level of under-standing of the system through information that has been lost in using the approximations to produce these models.
This makes the design of code an increasingly important part of the overall development I of software. 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" Refactoring can have a direct influence on reducing the cost of software maintenance through changing the internal structure of the code to increase the design which helps the present and future developers evolve and understand the system. The aim of this report is to outline the importance of refactoring through a comprehensive literature review and also identifying possible research questions, which could be considered for future work.
Refactoring is relatively a new area of research and so is not well defined. There are a vast number of definitions for refactoring, most of them are mentioned below. This list is quite large to correlate to the many different areas which refactoring covers.
Refactoring (noun): a change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior. Refactoring (verb): to restructure software by applying a series of Refactoring without changing its observable behavior. Refactoring is the process of taking an object design and rearranging it in various ways to make the design more flexible and/or reusable. There are several reasons you might want to do this, efficiency and maintainability being probably the most important.
To ref actor programming code is to rewrite the code, to "clean it up" Refactoring is the moving of units of functionality from one place to another in your program.
Refactoring has as a primary objective, getting each piece of functionality to exist in exactly one place in the software Refactoring is the process of taking an object design and rearranging it in various ways to make the design more flexible and/or reusable. There are several reasons you might want to do this, efficiency and maintainability being probably the most important.