<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mnallap</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mnallap"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Mnallap"/>
	<updated>2026-08-12T11:26:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=19094</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=19094"/>
		<updated>2009-09-12T15:17:19Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way, while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the  existing [http://en.wikipedia.org/wiki/Codebase codebase] for other purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the most important aspect of any software meant for real world applications is its ability to evolve.Many surveys conducted by major software organizations have reavealed that, maintenance is the major part of the total [http://en.wikipedia.org/wiki/Systems_Development_Life_Cycle Software Development life cycle]. Maintenance of the code would be much less difficult, if the code has the capacity to evolve, where in refactoring comes into picture.&lt;br /&gt;
Refactoring improves the internal structure of the codebase keeping the behaviour/functionality of the program same as before and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence, it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
Code smell:&lt;br /&gt;
[http://en.wikipedia.org/wiki/Code_smell Code smell] is the surface indication that usually corresponds to problem in the code [system]. &lt;br /&gt;
&lt;br /&gt;
So of the common code smell examples are:&lt;br /&gt;
*A class that has grown too large.&lt;br /&gt;
*A class that uses methods of another class excessively.&lt;br /&gt;
*Classes that depend on the implementation details of other classes.&lt;br /&gt;
*Identical or very similar code exists in more than one location.&lt;br /&gt;
*A class that does too little or which can be implemented as a method in some other class.&lt;br /&gt;
*A method, function, or procedure that has grown too large.&lt;br /&gt;
*A method, function, or procedure that is very similar to another.&lt;br /&gt;
*A situation where in a complicated design pattern is chosen over a simple design which would be sufficient.&lt;br /&gt;
&lt;br /&gt;
These are some of the indications that code refactoring needs to be done. Code Refactoring is done to remove the above specified code smells.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Code Smell(Duplicate Code) example&lt;br /&gt;
&lt;br /&gt;
  if (this.o.ChkSum()) {&lt;br /&gt;
    Operation1();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  and in another method you have: &lt;br /&gt;
  &lt;br /&gt;
  if (this.o.ChkSum()) {&lt;br /&gt;
    Operation2();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
Most of Refactoring tool features can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1. Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and [http://en.wikipedia.org/wiki/Interface_(computer_science) interfaces], and moving [http://en.wikipedia.org/wiki/Software_package_(programming) packages] and classes.&lt;br /&gt;
&lt;br /&gt;
2. Changing the logical organization of code at the class level, including turning [http://en.wikipedia.org/wiki/Class_(computer_science) anonymous classes] &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3. Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
Given below is an example of Refactoring, demonstrating how it enhances reusability&lt;br /&gt;
&lt;br /&gt;
  void displayValues() {&lt;br /&gt;
    	double averageSalary = 0;&lt;br /&gt;
  	double totalCars = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  		averageSalary += people[i].salary;&lt;br /&gt;
  		totalCars += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	averageSalary = averageSalary / people.length;&lt;br /&gt;
  	System.out.println(averageSalary);&lt;br /&gt;
  	System.out.println(totalCars);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
The refactored code:&lt;br /&gt;
  &lt;br /&gt;
  void printValues() {&lt;br /&gt;
  	System.out.println(averageSalary());&lt;br /&gt;
  	System.out.println(totalCars());&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double averageSalary() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].salary;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result / people.length;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double totalCars() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
Given below is the list of most used automated refactoring tools&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Aptana Aptana for Ruby](Can be used as a Plug-in for Eclipse)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/IntelliJ_IDEA IntelliJ IDEA]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Eclipse_(software) Eclipse's JDT] &lt;br /&gt;
* [http://en.wikipedia.org/wiki/NetBeans NetBeans] (for Java)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Microsoft_Visual_Studio Visual Studio 2008] (for .NET)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/ReSharper ReSharper] (An addon for Visual Studio)&lt;br /&gt;
* [http://weblogs.asp.net/bsimser/archive/2006/03/02/439473.aspx Refactor Pro] (An addon for Visual Studio)&lt;br /&gt;
&lt;br /&gt;
==Academic underpinnings behind the refactoring work==&lt;br /&gt;
[http://en.wikipedia.org/wiki/William_Opdyke William F. Opdyke], who is one of the important person behind the success of refactoring, was the first to think in the lines of &amp;quot;why people could be reluctant to refactor their software, given that refactoring improves the software.They found mainly four reasons&lt;br /&gt;
 &lt;br /&gt;
1. &amp;quot;I don't understand how to refactor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;If the benefits are long-term, why exert the effort now? In the long term, I may no longer be with the project.”&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;Refactoring code is an overhead activity; I’m paid to write new features.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4. &amp;quot;Refactoring might break the code.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The first two issues were addressed by defining a taxonomy of refactoring, which helped both in short term as well as in long term. For example, when defining a new feature that is a variant on&lt;br /&gt;
an existing feature, one can define classes (usually [http://en.wikipedia.org/wiki/Abstract_type abstract] classes) that&lt;br /&gt;
capture the common behavior, and use subclassing to capture the feature&lt;br /&gt;
differences.&lt;br /&gt;
The approach for addressing the latter two of these issues was by providing automated assistance, which help to increase the speed of program restructuring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
William F. Opdyke, in one his other research found that, object-oriented programming makes program components more reusable, but in the long run reusing the design of an application is more important than reusing the implementation of any&lt;br /&gt;
one of its components. An important object-oriented technique to facilitate design-level reuse is an application frame-&lt;br /&gt;
work, which is an abstract design of an application, consisting of an abstract class for each&lt;br /&gt;
major component. The important aspects of the framework are given below, most of which are self explainatory &lt;br /&gt;
&lt;br /&gt;
* Preserving Behavior During Refactoring: Refactoring is likely to violate seven properties: a class is allowed to have no more than one superclass, which cannot be one of its subclasses; class names and memeber names must be distinct; inherited member variables should not be overridden; signatures compatibility between [http://en.wikipedia.org/wiki/Method_overriding overriding] methods and the overridden method; assignments must always be [http://en.wikipedia.org/wiki/Type_safety typesafe]; semantic equivalence between references and operations i.e., the mapping of inputs to outputs must be the same.&lt;br /&gt;
&lt;br /&gt;
* Twenty-six low-level refactorings whose correctness is argued, fall in one of the categories:Creating a Program Entity, Deleting a Program Entity, Changing Program Entity, Moving a member variables.&lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Generalize: Creating An [http://en.wikipedia.org/wiki/Abstract_type Abstract] Super-class involves, identifying and moving common features between classes to an abstract superclass.&lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Specialize: Subclassing and Simplifying Conditionals.&lt;br /&gt;
&lt;br /&gt;
*  Capturing [http://en.wikipedia.org/wiki/Object_composition Aggregations and Components]: Refactorings involving aggregations include moving members between an aggregate and component classes and converting inheritance to aggregation. These require that components be distinguishable from non-component members and that all components be exclusive, i.e., exist in only one aggregate object at any time. &amp;lt;br&amp;gt; We take a Matrix and 2D array example to demonstrate, why refactoring preferably converts inheritance to aggregation. Matrix class inheriting from 2D array, which in turn has an array to store elements and get/set operations to access elements, seems resonable at one glance. Lets take a function of matrix multiply as shown below &lt;br /&gt;
&lt;br /&gt;
  Matrix matrixMultiply(Matrix m){&lt;br /&gt;
     j=get(x,y);&lt;br /&gt;
     put(k,x,y);&lt;br /&gt;
     ...&lt;br /&gt;
     ...&lt;br /&gt;
  }&lt;br /&gt;
There is a problem with this representation because, if a matrix is a special matrix like   [http://en.wikipedia.org/wiki/Sparse_matrix sparse], it can be more efficiently stored than storing in a 2D array. In inheritance, the matrix class is tighlty coupled to the 2D class, so it cannot be changed. A matrix ''has a representation'' and is ''not a representation''. So, the operations on abstraction and representation class need to be separated.So, we introduce a new class Matrix representation and we can create an instance of 2D array class inside the aggregate of Matrix class given as below.&lt;br /&gt;
&lt;br /&gt;
  Matrix matrixMultiply(Matrix m){&lt;br /&gt;
     j=matrixRep-&amp;gt;get(x,y);&lt;br /&gt;
     matrixRep-&amp;gt;put(k,x,y);&lt;br /&gt;
     ...&lt;br /&gt;
     ...&lt;br /&gt;
  } &lt;br /&gt;
&lt;br /&gt;
Now, the get and set are referenced through new component and inheritance link can be modified.&lt;br /&gt;
&lt;br /&gt;
==Improvements Current Refactoring Tools need==&lt;br /&gt;
&lt;br /&gt;
Tools that help the programmers with refactoring should:&lt;br /&gt;
&lt;br /&gt;
* Be lightweight. Users can normally [http://www.acm.org/src/subpages/murphy-hill/acm_src_final.html select code quickly] and efficiently, and any tool to assist selection should not add overhead to slow down the common case.&lt;br /&gt;
&lt;br /&gt;
* Help the programmer overcome unfamiliar or unusual code formatting.&lt;br /&gt;
&lt;br /&gt;
* Allow the programmer to select code in a manner specific to the task they are performing. For example, while bracket matching can be helpful, bracketed statements are not the only meaningful program construct that a programmer needs to select.&lt;br /&gt;
&lt;br /&gt;
* Language Independent, all of the current refactoring tools depend on language-dependent refactoring engines, which prevents a smooth integration with mainstream development environments.They should minimize the language-dependent part of refactoring tools, providing a standard way for programmers and tools to perform refactorings no matter what language they work in.&lt;br /&gt;
** Meta-model Approach &lt;br /&gt;
*:Program Auditing facilities like [http://en.wikipedia.org/wiki/Unified_Modeling_Language UML] diagrams, documentation etc help in understanding the programs better and a tight integration between these auditing facilities and refactory tools will be real good. Most commonly, integration in software development environments is achieved by means of a repository: a shared database accumulating all knowledge about the software system underdevelopment. Thus, for refactoring tools to become part of mainstream software development environments, the most natural way would be to adhere to a repository architecture. Such a repository architecture requires a central data model (the so-called meta-model) which should be highly language independent and contain sufficient information to represent refactorings.&lt;br /&gt;
&lt;br /&gt;
* Capable of performing Security Oriented transformation, which mean automated transformations that change programs to eliminate security threats;they can be source to source or binary to binary transformations. They improve the security of systems, which means that they do not preserve all types of behavior (although this is against the very definition of refactoring). They preserve expected behavior, but should change a system’s response to security attacks.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Refactoring is an integral part of all software development projects and it is very important for refactoring tools to make refactoring fast and functionality preserving. There are many improvements that have been suggested for code refactoring and it is required that it gets implemented to reduce code smell, provide easier understanding of code, as well as re usability of code. These qualities will be adopted by new refactoring tools, making them usable and thus more used, and eventually contribute to the production of more reliable, on-time refactored  software. It is also important that the refactoring tools improve the experience of refactoring, help programmers correctly identify problems with a proposed refactoring, and increase speed of the refactoring process.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [http://books.google.com/books?id=1MsETFPD3I0C&amp;amp;dq=refactoring+fowler&amp;amp;printsec=frontcover&amp;amp;source=bn&amp;amp;hl=en&amp;amp;ei=cMimSqP0J5GCtgeAkb2ZCA&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=4#v=onepage&amp;amp;q=&amp;amp;f=false Refactoring: Improving the Design of Existing Code by Martin Fowler, Kent Beck, John Brant]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design pattern (computer science)]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Code_refactoring Code Factoring]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Redesign_(software) Redesign (software)]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] http://www.refactoring.com &amp;lt;br&amp;gt;&lt;br /&gt;
[2] https://netfiles.uiuc.edu/dig/RefactoringInfo/ &amp;lt;br&amp;gt;&lt;br /&gt;
[3] William F. Opdyke. Refactoring Object-Oriented Frameworks. Ph.D.thesis, University of Illinois at Urbana-Champaign, 1992. &amp;lt;br&amp;gt;&lt;br /&gt;
[4] A Meta-model for Language-Independent Refactoring (2000) Sander Tichelaar ,  Stéphane Ducasse ,  Serge Demeyer ,  Oscar Nierstrasz &amp;lt;br&amp;gt;&lt;br /&gt;
[5] Refactoring Object-Oriented Software to Support Evolution and Reuse, William F. Opdyke &amp;lt;br&amp;gt;&lt;br /&gt;
[6] Security Oriented ProgramTransformations (Or How to Add Security on Demand), Munawar Hafiz&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=19093</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=19093"/>
		<updated>2009-09-12T15:17:10Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way, while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the  existing [http://en.wikipedia.org/wiki/Codebase codebase] for other purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the most important aspect of any software meant for real world applications is its ability to evolve.Many surveys conducted by major software organizations have reavealed that, maintenance is the major part of the total [http://en.wikipedia.org/wiki/Systems_Development_Life_Cycle Software Development life cycle]. Maintenance of the code would be much less difficult, if the code has the capacity to evolve, where in refactoring comes into picture.&lt;br /&gt;
Refactoring improves the internal structure of the codebase keeping the behaviour/functionality of the program same as before and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence, it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
Code smell:&lt;br /&gt;
[http://en.wikipedia.org/wiki/Code_smell Code smell] is the surface indication that usually corresponds to problem in the code [system]. &lt;br /&gt;
&lt;br /&gt;
So of the common code smell examples are:&lt;br /&gt;
*A class that has grown too large.&lt;br /&gt;
*A class that uses methods of another class excessively.&lt;br /&gt;
*Classes that depend on the implementation details of other classes.&lt;br /&gt;
*Identical or very similar code exists in more than one location.&lt;br /&gt;
*A class that does too little or which can be implemented as a method in some other class.&lt;br /&gt;
*A method, function, or procedure that has grown too large.&lt;br /&gt;
*A method, function, or procedure that is very similar to another.&lt;br /&gt;
*A situation where in a complicated design pattern is chosen over a simple design which would be sufficient.&lt;br /&gt;
&lt;br /&gt;
These are some of the indications that code refactoring needs to be done. Code Refactoring is done to remove the above specified code smells.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Code Smell(Duplicate Code) example&lt;br /&gt;
&lt;br /&gt;
  if (this.o.ChkSum()) {&lt;br /&gt;
    Operation1();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  and in another method you have: &lt;br /&gt;
  &lt;br /&gt;
  if (this.o.ChkSum()) {&lt;br /&gt;
    Operation2();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
Most of Refactoring tool features can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1. Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and [http://en.wikipedia.org/wiki/Interface_(computer_science) interfaces], and moving [http://en.wikipedia.org/wiki/Software_package_(programming) packages] and classes.&lt;br /&gt;
&lt;br /&gt;
2. Changing the logical organization of code at the class level, including turning [http://en.wikipedia.org/wiki/Class_(computer_science) anonymous classes] &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3. Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
Given below is an example of Refactoring, demonstrating how it enhances reusability&lt;br /&gt;
&lt;br /&gt;
  void displayValues() {&lt;br /&gt;
    	double averageSalary = 0;&lt;br /&gt;
  	double totalCars = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  		averageSalary += people[i].salary;&lt;br /&gt;
  		totalCars += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	averageSalary = averageSalary / people.length;&lt;br /&gt;
  	System.out.println(averageSalary);&lt;br /&gt;
  	System.out.println(totalCars);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
The refactored code:&lt;br /&gt;
  &lt;br /&gt;
  void printValues() {&lt;br /&gt;
  	System.out.println(averageSalary());&lt;br /&gt;
  	System.out.println(totalCars());&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double averageSalary() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].salary;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result / people.length;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double totalCars() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
Given below is the list of most used automated refactoring tools&lt;br /&gt;
&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Aptana Aptana for Ruby](Can be used as a Plug-in for Eclipse)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/IntelliJ_IDEA IntelliJ IDEA]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Eclipse_(software) Eclipse's JDT] &lt;br /&gt;
* [http://en.wikipedia.org/wiki/NetBeans NetBeans] (for Java)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Microsoft_Visual_Studio Visual Studio 2008] (for .NET)&lt;br /&gt;
* [http://en.wikipedia.org/wiki/ReSharper ReSharper] (An addon for Visual Studio)&lt;br /&gt;
* [http://weblogs.asp.net/bsimser/archive/2006/03/02/439473.aspx Refactor Pro] (An addon for Visual Studio)&lt;br /&gt;
&lt;br /&gt;
==Academic underpinnings behind the refactoring work==&lt;br /&gt;
[http://en.wikipedia.org/wiki/William_Opdyke William F. Opdyke], who is one of the important person behind the success of refactoring, was the first to think in the lines of &amp;quot;why people could be reluctant to refactor their software, given that refactoring improves the software.They found mainly four reasons&lt;br /&gt;
 &lt;br /&gt;
1. &amp;quot;I don't understand how to refactor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;If the benefits are long-term, why exert the effort now? In the long term, I may no longer be with the project.”&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;Refactoring code is an overhead activity; I’m paid to write new features.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4. &amp;quot;Refactoring might break the code.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The first two issues were addressed by defining a taxonomy of refactoring, which helped both in short term as well as in long term. For example, when defining a new feature that is a variant on&lt;br /&gt;
an existing feature, one can define classes (usually [http://en.wikipedia.org/wiki/Abstract_type abstract] classes) that&lt;br /&gt;
capture the common behavior, and use subclassing to capture the feature&lt;br /&gt;
differences.&lt;br /&gt;
The approach for addressing the latter two of these issues was by providing automated assistance, which help to increase the speed of program restructuring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
William F. Opdyke, in one his other research found that, object-oriented programming makes program components more reusable, but in the long run reusing the design of an application is more important than reusing the implementation of any&lt;br /&gt;
one of its components. An important object-oriented technique to facilitate design-level reuse is an application frame-&lt;br /&gt;
work, which is an abstract design of an application, consisting of an abstract class for each&lt;br /&gt;
major component. The important aspects of the framework are given below, most of which are self explainatory &lt;br /&gt;
&lt;br /&gt;
* Preserving Behavior During Refactoring: Refactoring is likely to violate seven properties: a class is allowed to have no more than one superclass, which cannot be one of its subclasses; class names and memeber names must be distinct; inherited member variables should not be overridden; signatures compatibility between [http://en.wikipedia.org/wiki/Method_overriding overriding] methods and the overridden method; assignments must always be [http://en.wikipedia.org/wiki/Type_safety typesafe]; semantic equivalence between references and operations i.e., the mapping of inputs to outputs must be the same.&lt;br /&gt;
&lt;br /&gt;
* Twenty-six low-level refactorings whose correctness is argued, fall in one of the categories:Creating a Program Entity, Deleting a Program Entity, Changing Program Entity, Moving a member variables.&lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Generalize: Creating An [http://en.wikipedia.org/wiki/Abstract_type Abstract] Super-class involves, identifying and moving common features between classes to an abstract superclass.&lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Specialize: Subclassing and Simplifying Conditionals.&lt;br /&gt;
&lt;br /&gt;
*  Capturing [http://en.wikipedia.org/wiki/Object_composition Aggregations and Components]: Refactorings involving aggregations include moving members between an aggregate and component classes and converting inheritance to aggregation. These require that components be distinguishable from non-component members and that all components be exclusive, i.e., exist in only one aggregate object at any time. &amp;lt;br&amp;gt; We take a Matrix and 2D array example to demonstrate, why refactoring preferably converts inheritance to aggregation. Matrix class inheriting from 2D array, which in turn has an array to store elements and get/set operations to access elements, seems resonable at one glance. Lets take a function of matrix multiply as shown below &lt;br /&gt;
&lt;br /&gt;
  Matrix matrixMultiply(Matrix m){&lt;br /&gt;
     j=get(x,y);&lt;br /&gt;
     put(k,x,y);&lt;br /&gt;
     ...&lt;br /&gt;
     ...&lt;br /&gt;
  }&lt;br /&gt;
There is a problem with this representation because, if a matrix is a special matrix like   [http://en.wikipedia.org/wiki/Sparse_matrix sparse], it can be more efficiently stored than storing in a 2D array. In inheritance, the matrix class is tighlty coupled to the 2D class, so it cannot be changed. A matrix ''has a representation'' and is ''not a representation''. So, the operations on abstraction and representation class need to be separated.So, we introduce a new class Matrix representation and we can create an instance of 2D array class inside the aggregate of Matrix class given as below.&lt;br /&gt;
&lt;br /&gt;
  Matrix matrixMultiply(Matrix m){&lt;br /&gt;
     j=matrixRep-&amp;gt;get(x,y);&lt;br /&gt;
     matrixRep-&amp;gt;put(k,x,y);&lt;br /&gt;
     ...&lt;br /&gt;
     ...&lt;br /&gt;
  } &lt;br /&gt;
&lt;br /&gt;
Now, the get and set are referenced through new component and inheritance link can be modified.&lt;br /&gt;
&lt;br /&gt;
==Improvements Current Refactoring Tools need==&lt;br /&gt;
&lt;br /&gt;
Tools that help the programmers with refactoring should:&lt;br /&gt;
&lt;br /&gt;
* Be lightweight. Users can normally [http://www.acm.org/src/subpages/murphy-hill/acm_src_final.html select code quickly] and efficiently, and any tool to assist selection should not add overhead to slow down the common case.&lt;br /&gt;
&lt;br /&gt;
* Help the programmer overcome unfamiliar or unusual code formatting.&lt;br /&gt;
&lt;br /&gt;
* Allow the programmer to select code in a manner specific to the task they are performing. For example, while bracket matching can be helpful, bracketed statements are not the only meaningful program construct that a programmer needs to select.&lt;br /&gt;
&lt;br /&gt;
* Language Independent, all of the current refactoring tools depend on language-dependent refactoring engines, which prevents a smooth integration with mainstream development environments.They should minimize the language-dependent part of refactoring tools, providing a standard way for programmers and tools to perform refactorings no matter what language they work in.&lt;br /&gt;
** Meta-model Approach &lt;br /&gt;
*:Program Auditing facilities like [http://en.wikipedia.org/wiki/Unified_Modeling_Language UML] diagrams, documentation etc help in understanding the programs better and a tight integration between these auditing facilities and refactory tools will be real good. Most commonly, integration in software development environments is achieved by means of a repository: a shared database accumulating all knowledge about the software system underdevelopment. Thus, for refactoring tools to become part of mainstream software development environments, the most natural way would be to adhere to a repository architecture. Such a repository architecture requires a central data model (the so-called meta-model) which should be highly language independent and contain sufficient information to represent refactorings.&lt;br /&gt;
&lt;br /&gt;
* Capable of performing Security Oriented transformation, which mean automated transformations that change programs to eliminate security threats;they can be source to source or binary to binary transformations. They improve the security of systems, which means that they do not preserve all types of behavior (although this is against the very definition of refactoring). They preserve expected behavior, but should change a system’s response to security attacks.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Refactoring is an integral part of all software development projects and it is very important for refactoring tools to make refactoring fast and functionality preserving. There are many improvements that have been suggested for code refactoring and it is required that it gets implemented to reduce code smell, provide easier understanding of code, as well as re usability of code. These qualities will be adopted by new refactoring tools, making them usable and thus more used, and eventually contribute to the production of more reliable, on-time refactored  software. It is also important that the refactoring tools improve the experience of refactoring, help programmers correctly identify problems with a proposed refactoring, and increase speed of the refactoring process&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [http://books.google.com/books?id=1MsETFPD3I0C&amp;amp;dq=refactoring+fowler&amp;amp;printsec=frontcover&amp;amp;source=bn&amp;amp;hl=en&amp;amp;ei=cMimSqP0J5GCtgeAkb2ZCA&amp;amp;sa=X&amp;amp;oi=book_result&amp;amp;ct=result&amp;amp;resnum=4#v=onepage&amp;amp;q=&amp;amp;f=false Refactoring: Improving the Design of Existing Code by Martin Fowler, Kent Beck, John Brant]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Design_pattern_(computer_science) Design pattern (computer science)]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Code_refactoring Code Factoring]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Redesign_(software) Redesign (software)]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] http://www.refactoring.com &amp;lt;br&amp;gt;&lt;br /&gt;
[2] https://netfiles.uiuc.edu/dig/RefactoringInfo/ &amp;lt;br&amp;gt;&lt;br /&gt;
[3] William F. Opdyke. Refactoring Object-Oriented Frameworks. Ph.D.thesis, University of Illinois at Urbana-Champaign, 1992. &amp;lt;br&amp;gt;&lt;br /&gt;
[4] A Meta-model for Language-Independent Refactoring (2000) Sander Tichelaar ,  Stéphane Ducasse ,  Serge Demeyer ,  Oscar Nierstrasz &amp;lt;br&amp;gt;&lt;br /&gt;
[5] Refactoring Object-Oriented Software to Support Evolution and Reuse, William F. Opdyke &amp;lt;br&amp;gt;&lt;br /&gt;
[6] Security Oriented ProgramTransformations (Or How to Add Security on Demand), Munawar Hafiz&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18481</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18481"/>
		<updated>2009-09-08T01:22:36Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the most important aspect of any software meant for real world applications is its ability to evolve.Many surveys conducted by major software organizations have reavealed that, maintenance is the major part of the total Software Development life cycle. Maintenance of the code would be much less difficult, if the code has the capacity to evolve, where in refactoring comes into picture.&lt;br /&gt;
Refactoring improves the internal structure of the codebase keeping the behaviour/functionality of the program same as before and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
Code smell:&lt;br /&gt;
Code smell is the surface indication that usually corresponds to problem in the code [system]. It is called code smell as it is an indication of something wrong that may be related to the system.&lt;br /&gt;
&lt;br /&gt;
So of the common code smell examples are:&lt;br /&gt;
*A class that has grown too large.&lt;br /&gt;
*A class that uses methods of another class excessively.&lt;br /&gt;
*Classes that depend on the implementation details of other classes.&lt;br /&gt;
*Identical or very similar code exists in more than one location.&lt;br /&gt;
*A class that does too little or which can be implemented as a method in some other class.&lt;br /&gt;
*A method, function, or procedure that has grown too large.&lt;br /&gt;
*A method, function, or procedure that is very similar to another.&lt;br /&gt;
*A situation where in a complicated design pattern is chosen over a simple design which would be sufficient.&lt;br /&gt;
&lt;br /&gt;
These are some of the indications that code refactoring needs to be done. Code Refactoring is done to remove the above specified code smells.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
Most of Refactoring tool features can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1. Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes.&lt;br /&gt;
&lt;br /&gt;
2. Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3. Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
Given below is an example of Refactoring, demonstrating how it enhances reusability&lt;br /&gt;
&lt;br /&gt;
  void displayValues() {&lt;br /&gt;
    	double averageSalary = 0;&lt;br /&gt;
  	double totalCars = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  		averageSalary += people[i].salary;&lt;br /&gt;
  		totalCars += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	averageSalary = averageSalary / people.length;&lt;br /&gt;
  	System.out.println(averageSalary);&lt;br /&gt;
  	System.out.println(totalCars);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
The refactored code:&lt;br /&gt;
  &lt;br /&gt;
  void printValues() {&lt;br /&gt;
  	System.out.println(averageSalary());&lt;br /&gt;
  	System.out.println(totalCars());&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double averageSalary() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].salary;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result / people.length;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double totalCars() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
Given below is the list of most used automated refactoring tools&lt;br /&gt;
&lt;br /&gt;
* [[Aptana for Ruby]](Can be used as a Plug-in for Eclipse)&lt;br /&gt;
* [[IntelliJ IDEA]]&lt;br /&gt;
* [[Eclipse (software)|Eclipse's JDT]] &lt;br /&gt;
* [[NetBeans]] (for Java)&lt;br /&gt;
* [[Visual Studio 2008]] (for .NET)&lt;br /&gt;
* [[ReSharper]] (An addon for Visual Studio)&lt;br /&gt;
* [[Refactor Pro]] (An addon for Visual Studio)&lt;br /&gt;
&lt;br /&gt;
==Academic underpinnings behind the refactoring work==&lt;br /&gt;
William F. Opdyke, who is one of the important person behind the success of refactoring, was the first to think in the lines of &amp;quot;why people could be reluctant to refactor their software given refactoring improves the software.They found mainly four reasons&lt;br /&gt;
 &lt;br /&gt;
1. &amp;quot;I don't understand how to refactor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;If the benefits are long-term, why exert the effort now? In the long term, I may no longer be with the project.”&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;Refactoring code is an overhead activity; I’m paid to write new features.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4. &amp;quot;Refactoring might break the code.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The first two issues were addressed by defining a taxonomy of refactoring, which helped both in short term as well as in long term. For example, when defining a new feature that is a variant on&lt;br /&gt;
an existing feature, one can define classes (usually abstract classes) that&lt;br /&gt;
capture the common behavior, and use subclassing to capture the feature&lt;br /&gt;
differences.&lt;br /&gt;
The approach for addressing the latter two of these issues was by providing automated assistance, which help to increase the speed of program restructuring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
William F. Opdyke, in one his other research found that, object-oriented programming makes program components more reusable, but in the long run reusing the design of an application is more important than reusing the implementation of any&lt;br /&gt;
one of its components. An important object-oriented technique to facilitate design-level reuse is an application frame-&lt;br /&gt;
work, which is an abstract design of an application, consisting of an abstract class for each&lt;br /&gt;
major component. The framework has following operations, all of which are self explainatory &lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Generalize: Creating An Abstract Super-class.&lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Specialize: Subclassing and Simplifying Conditionals.&lt;br /&gt;
&lt;br /&gt;
*  Capturing Aggregations and Components.&lt;br /&gt;
&lt;br /&gt;
==Improvements Current Refactoring Tools need==&lt;br /&gt;
&lt;br /&gt;
Tools that help the programmers with refactoring should:&lt;br /&gt;
&lt;br /&gt;
* Be lightweight. Users can normally select code quickly and efficiently, and any tool to assist selection should not add overhead to slow down the common case.&lt;br /&gt;
&lt;br /&gt;
* Help the programmer overcome unfamiliar or unusual code formatting.&lt;br /&gt;
&lt;br /&gt;
* Allow the programmer to select code in a manner specific to the task they are performing. For example, while bracket matching can be helpful, bracketed statements are not the only meaningful program construct that a programmer needs to select.&lt;br /&gt;
&lt;br /&gt;
* Language Independent, all of the current refactoring tools depend on language-dependent refactoring engines, which prevents a smooth integration with mainstream development environments.They should minimize the language-dependent part of refactoring tools, providing a standard way for programmers and tools to perform refactorings no matter what language they work in.&lt;br /&gt;
** Meta-model Approach &lt;br /&gt;
*:Program Auditing facilities like UML diagrams, documentation etc help in understanding the programs better and a tight integration between these auditing facilities and refactory tools will be real good. Most commonly, integration in software development environments is achieved by means of a repository: a shared database accumulating all knowledge about the software system underdevelopment. Thus, for refactoring tools to become part of mainstream software development environments, the most natural way would be to adhere to a repository architecture. Such a repository architecture requires a central data model (the so-called meta-model) which should be highly language independent and contain sufficient information to represent refactorings.&lt;br /&gt;
&lt;br /&gt;
* Capable of performing Security Oriented transformation. They are automated transformations that change programs to eliminate security threats;they can be source to source or binary to binary transformations. They improve the security of systems, which means that they do not preserve all types of behavior (although this is against the very definition of refactoring). They preserve expected behavior, but should change a system’s response to security attacks.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Refactoring is an integral part of all software development projects and it is very important for refactoring tools to make refactoring fast and functionality preserving. There are many improvements that have been suggested for code refactoring and it is required that it gets implemented to reduce code smell, provide easier understanding of code, as well as re usability of code. These qualities will be adopted by new refactoring tools, making them usable and thus more used, and eventually contribute to the production of more reliable, on-time refactored  software. It is also important that the refactoring tools improve the experience of refactoring, help programmers correctly identify problems with a proposed refactoring, and increase speed of the refactoring process.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Design pattern (computer science)]]&lt;br /&gt;
* [[Software Development Rhythms]]&lt;br /&gt;
* [[Code Factoring]]&lt;br /&gt;
* [[Redesign (software)]]&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Martin&lt;br /&gt;
 | last = Fowler&lt;br /&gt;
 | authorlink = Martin Fowler&lt;br /&gt;
 | year = 1999&lt;br /&gt;
 | title = Refactoring. Improving the Design of Existing Code&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-201-48567-2&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Joshua&lt;br /&gt;
 | last = Kerievsky&lt;br /&gt;
 | authorlink = Joshua Kerievsky &lt;br /&gt;
 | year = 2004&lt;br /&gt;
 | title = Refactoring To Patterns&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-321-21335-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2008&lt;br /&gt;
 | title = Professional Refactoring in Visual Basic&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 0-47-017979-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2009&lt;br /&gt;
 | title = Professional Refactoring in C# and ASP.NET&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 978-0470434529&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] http://www.refactoring.com &amp;lt;br&amp;gt;&lt;br /&gt;
[2] https://netfiles.uiuc.edu/dig/RefactoringInfo/ &amp;lt;br&amp;gt;&lt;br /&gt;
[3] William F. Opdyke. Refactoring Object-Oriented Frameworks. Ph.D.thesis, University of Illinois at Urbana-Champaign, 1992. &amp;lt;br&amp;gt;&lt;br /&gt;
[4] A Meta-model for Language-Independent Refactoring (2000) Sander Tichelaar ,  Stéphane Ducasse ,  Serge Demeyer ,  Oscar Nierstrasz &amp;lt;br&amp;gt;&lt;br /&gt;
[5] Refactoring Object-Oriented Software to Support Evolution and Reuse, William F. Opdyke&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18479</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18479"/>
		<updated>2009-09-08T01:22:14Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the most important aspect of any software meant for real world applications is its ability to evolve.Many surveys conducted by major software organizations have reavealed that, maintenance is the major part of the total Software Development life cycle. Maintenance of the code would be much less difficult, if the code has the capacity to evolve, where in refactoring comes into picture.&lt;br /&gt;
Refactoring improves the internal structure of the codebase keeping the behaviour/functionality of the program same as before and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
Code smell:&lt;br /&gt;
Code smell is the surface indication that usually corresponds to problem in the code [system]. It is called code smell as it is an indication of something wrong that may be related to the system.&lt;br /&gt;
&lt;br /&gt;
So of the common code smell examples are:&lt;br /&gt;
*A class that has grown too large.&lt;br /&gt;
*A class that uses methods of another class excessively.&lt;br /&gt;
*Classes that depend on the implementation details of other classes.&lt;br /&gt;
*Identical or very similar code exists in more than one location.&lt;br /&gt;
*A class that does too little or which can be implemented as a method in some other class.&lt;br /&gt;
*A method, function, or procedure that has grown too large.&lt;br /&gt;
*A method, function, or procedure that is very similar to another.&lt;br /&gt;
*A situation where in a complicated design pattern is chosen over a simple design which would be sufficient.&lt;br /&gt;
Are some of the common smells&lt;br /&gt;
&lt;br /&gt;
These are some of the indications that code refactoring needs to be done. Code Refactoring is done to remove the above specified code smells.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
Most of Refactoring tool features can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1. Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes.&lt;br /&gt;
&lt;br /&gt;
2. Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3. Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
Given below is an example of Refactoring, demonstrating how it enhances reusability&lt;br /&gt;
&lt;br /&gt;
  void displayValues() {&lt;br /&gt;
    	double averageSalary = 0;&lt;br /&gt;
  	double totalCars = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  		averageSalary += people[i].salary;&lt;br /&gt;
  		totalCars += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	averageSalary = averageSalary / people.length;&lt;br /&gt;
  	System.out.println(averageSalary);&lt;br /&gt;
  	System.out.println(totalCars);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
The refactored code:&lt;br /&gt;
  &lt;br /&gt;
  void printValues() {&lt;br /&gt;
  	System.out.println(averageSalary());&lt;br /&gt;
  	System.out.println(totalCars());&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double averageSalary() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].salary;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result / people.length;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double totalCars() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
Given below is the list of most used automated refactoring tools&lt;br /&gt;
&lt;br /&gt;
* [[Aptana for Ruby]](Can be used as a Plug-in for Eclipse)&lt;br /&gt;
* [[IntelliJ IDEA]]&lt;br /&gt;
* [[Eclipse (software)|Eclipse's JDT]] &lt;br /&gt;
* [[NetBeans]] (for Java)&lt;br /&gt;
* [[Visual Studio 2008]] (for .NET)&lt;br /&gt;
* [[ReSharper]] (An addon for Visual Studio)&lt;br /&gt;
* [[Refactor Pro]] (An addon for Visual Studio)&lt;br /&gt;
&lt;br /&gt;
==Academic underpinnings behind the refactoring work==&lt;br /&gt;
William F. Opdyke, who is one of the important person behind the success of refactoring, was the first to think in the lines of &amp;quot;why people could be reluctant to refactor their software given refactoring improves the software.They found mainly four reasons&lt;br /&gt;
 &lt;br /&gt;
1. &amp;quot;I don't understand how to refactor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;If the benefits are long-term, why exert the effort now? In the long term, I may no longer be with the project.”&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;Refactoring code is an overhead activity; I’m paid to write new features.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4. &amp;quot;Refactoring might break the code.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The first two issues were addressed by defining a taxonomy of refactoring, which helped both in short term as well as in long term. For example, when defining a new feature that is a variant on&lt;br /&gt;
an existing feature, one can define classes (usually abstract classes) that&lt;br /&gt;
capture the common behavior, and use subclassing to capture the feature&lt;br /&gt;
differences.&lt;br /&gt;
The approach for addressing the latter two of these issues was by providing automated assistance, which help to increase the speed of program restructuring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
William F. Opdyke, in one his other research found that, object-oriented programming makes program components more reusable, but in the long run reusing the design of an application is more important than reusing the implementation of any&lt;br /&gt;
one of its components. An important object-oriented technique to facilitate design-level reuse is an application frame-&lt;br /&gt;
work, which is an abstract design of an application, consisting of an abstract class for each&lt;br /&gt;
major component. The framework has following operations, all of which are self explainatory &lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Generalize: Creating An Abstract Super-class.&lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Specialize: Subclassing and Simplifying Conditionals.&lt;br /&gt;
&lt;br /&gt;
*  Capturing Aggregations and Components.&lt;br /&gt;
&lt;br /&gt;
==Improvements Current Refactoring Tools need==&lt;br /&gt;
&lt;br /&gt;
Tools that help the programmers with refactoring should:&lt;br /&gt;
&lt;br /&gt;
* Be lightweight. Users can normally select code quickly and efficiently, and any tool to assist selection should not add overhead to slow down the common case.&lt;br /&gt;
&lt;br /&gt;
* Help the programmer overcome unfamiliar or unusual code formatting.&lt;br /&gt;
&lt;br /&gt;
* Allow the programmer to select code in a manner specific to the task they are performing. For example, while bracket matching can be helpful, bracketed statements are not the only meaningful program construct that a programmer needs to select.&lt;br /&gt;
&lt;br /&gt;
* Language Independent, all of the current refactoring tools depend on language-dependent refactoring engines, which prevents a smooth integration with mainstream development environments.They should minimize the language-dependent part of refactoring tools, providing a standard way for programmers and tools to perform refactorings no matter what language they work in.&lt;br /&gt;
** Meta-model Approach &lt;br /&gt;
*:Program Auditing facilities like UML diagrams, documentation etc help in understanding the programs better and a tight integration between these auditing facilities and refactory tools will be real good. Most commonly, integration in software development environments is achieved by means of a repository: a shared database accumulating all knowledge about the software system underdevelopment. Thus, for refactoring tools to become part of mainstream software development environments, the most natural way would be to adhere to a repository architecture. Such a repository architecture requires a central data model (the so-called meta-model) which should be highly language independent and contain sufficient information to represent refactorings.&lt;br /&gt;
&lt;br /&gt;
* Capable of performing Security Oriented transformation. They are automated transformations that change programs to eliminate security threats;they can be source to source or binary to binary transformations. They improve the security of systems, which means that they do not preserve all types of behavior (although this is against the very definition of refactoring). They preserve expected behavior, but should change a system’s response to security attacks.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Refactoring is an integral part of all software development projects and it is very important for refactoring tools to make refactoring fast and functionality preserving. There are many improvements that have been suggested for code refactoring and it is required that it gets implemented to reduce code smell, provide easier understanding of code, as well as re usability of code. These qualities will be adopted by new refactoring tools, making them usable and thus more used, and eventually contribute to the production of more reliable, on-time refactored  software. It is also important that the refactoring tools improve the experience of refactoring, help programmers correctly identify problems with a proposed refactoring, and increase speed of the refactoring process.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Design pattern (computer science)]]&lt;br /&gt;
* [[Software Development Rhythms]]&lt;br /&gt;
* [[Code Factoring]]&lt;br /&gt;
* [[Redesign (software)]]&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Martin&lt;br /&gt;
 | last = Fowler&lt;br /&gt;
 | authorlink = Martin Fowler&lt;br /&gt;
 | year = 1999&lt;br /&gt;
 | title = Refactoring. Improving the Design of Existing Code&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-201-48567-2&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Joshua&lt;br /&gt;
 | last = Kerievsky&lt;br /&gt;
 | authorlink = Joshua Kerievsky &lt;br /&gt;
 | year = 2004&lt;br /&gt;
 | title = Refactoring To Patterns&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-321-21335-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2008&lt;br /&gt;
 | title = Professional Refactoring in Visual Basic&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 0-47-017979-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2009&lt;br /&gt;
 | title = Professional Refactoring in C# and ASP.NET&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 978-0470434529&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] http://www.refactoring.com &amp;lt;br&amp;gt;&lt;br /&gt;
[2] https://netfiles.uiuc.edu/dig/RefactoringInfo/ &amp;lt;br&amp;gt;&lt;br /&gt;
[3] William F. Opdyke. Refactoring Object-Oriented Frameworks. Ph.D.thesis, University of Illinois at Urbana-Champaign, 1992. &amp;lt;br&amp;gt;&lt;br /&gt;
[4] A Meta-model for Language-Independent Refactoring (2000) Sander Tichelaar ,  Stéphane Ducasse ,  Serge Demeyer ,  Oscar Nierstrasz &amp;lt;br&amp;gt;&lt;br /&gt;
[5] Refactoring Object-Oriented Software to Support Evolution and Reuse, William F. Opdyke&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18476</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18476"/>
		<updated>2009-09-08T01:21:22Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the most important aspect of any software meant for real world applications is its ability to evolve.Many surveys conducted by major software organizations have reavealed that, maintenance is the major part of the total Software Development life cycle. Maintenance of the code would be much less difficult, if the code has the capacity to evolve, where in refactoring comes into picture.&lt;br /&gt;
Refactoring improves the internal structure of the codebase keeping the behaviour/functionality of the program same as before and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
Code smell:&lt;br /&gt;
Code smell is the surface indication that usually corresponds to problem in the code [system]. It is called code smell as it is an indication of something wrong that may be related to the system.&lt;br /&gt;
&lt;br /&gt;
So of the common code smell examples are:&lt;br /&gt;
*A class that has grown too large.&lt;br /&gt;
*A class that uses methods of another class excessively.&lt;br /&gt;
*Classes that depend on the implementation details of other classes.&lt;br /&gt;
*Identical or very similar code exists in more than one location.&lt;br /&gt;
*A class that does too little or which can be implemented as a method in some other class.&lt;br /&gt;
*A method, function, or procedure that has grown too large.&lt;br /&gt;
*A method, function, or procedure that is very similar to another.&lt;br /&gt;
*A situation where in a complicated design pattern is chosen over a simple design which would be sufficient.&lt;br /&gt;
&lt;br /&gt;
These are some of the indications to code refactoring. Code Refactoring is done to remove the above specified code smells.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
Most of Refactoring tool features can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1. Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes.&lt;br /&gt;
&lt;br /&gt;
2. Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3. Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
Given below is an example of Refactoring, demonstrating how it enhances reusability&lt;br /&gt;
&lt;br /&gt;
  void displayValues() {&lt;br /&gt;
    	double averageSalary = 0;&lt;br /&gt;
  	double totalCars = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  		averageSalary += people[i].salary;&lt;br /&gt;
  		totalCars += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	averageSalary = averageSalary / people.length;&lt;br /&gt;
  	System.out.println(averageSalary);&lt;br /&gt;
  	System.out.println(totalCars);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
The refactored code:&lt;br /&gt;
  &lt;br /&gt;
  void printValues() {&lt;br /&gt;
  	System.out.println(averageSalary());&lt;br /&gt;
  	System.out.println(totalCars());&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double averageSalary() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].salary;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result / people.length;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double totalCars() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
Given below is the list of most used automated refactoring tools&lt;br /&gt;
&lt;br /&gt;
* [[Aptana for Ruby]](Can be used as a Plug-in for Eclipse)&lt;br /&gt;
* [[IntelliJ IDEA]]&lt;br /&gt;
* [[Eclipse (software)|Eclipse's JDT]] &lt;br /&gt;
* [[NetBeans]] (for Java)&lt;br /&gt;
* [[Visual Studio 2008]] (for .NET)&lt;br /&gt;
* [[ReSharper]] (An addon for Visual Studio)&lt;br /&gt;
* [[Refactor Pro]] (An addon for Visual Studio)&lt;br /&gt;
&lt;br /&gt;
==Academic underpinnings behind the refactoring work==&lt;br /&gt;
William F. Opdyke, who is one of the important person behind the success of refactoring, was the first to think in the lines of &amp;quot;why people could be reluctant to refactor their software given refactoring improves the software.They found mainly four reasons&lt;br /&gt;
 &lt;br /&gt;
1. &amp;quot;I don't understand how to refactor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;If the benefits are long-term, why exert the effort now? In the long term, I may no longer be with the project.”&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;Refactoring code is an overhead activity; I’m paid to write new features.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4. &amp;quot;Refactoring might break the code.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The first two issues were addressed by defining a taxonomy of refactoring, which helped both in short term as well as in long term. For example, when defining a new feature that is a variant on&lt;br /&gt;
an existing feature, one can define classes (usually abstract classes) that&lt;br /&gt;
capture the common behavior, and use subclassing to capture the feature&lt;br /&gt;
differences.&lt;br /&gt;
The approach for addressing the latter two of these issues was by providing automated assistance, which help to increase the speed of program restructuring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
William F. Opdyke, in one his other research found that, object-oriented programming makes program components more reusable, but in the long run reusing the design of an application is more important than reusing the implementation of any&lt;br /&gt;
one of its components. An important object-oriented technique to facilitate design-level reuse is an application frame-&lt;br /&gt;
work, which is an abstract design of an application, consisting of an abstract class for each&lt;br /&gt;
major component. The framework has following operations, all of which are self explainatory &lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Generalize: Creating An Abstract Super-class.&lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Specialize: Subclassing and Simplifying Conditionals.&lt;br /&gt;
&lt;br /&gt;
*  Capturing Aggregations and Components.&lt;br /&gt;
&lt;br /&gt;
==Improvements Current Refactoring Tools need==&lt;br /&gt;
&lt;br /&gt;
Tools that help the programmers with refactoring should:&lt;br /&gt;
&lt;br /&gt;
* Be lightweight. Users can normally select code quickly and efficiently, and any tool to assist selection should not add overhead to slow down the common case.&lt;br /&gt;
&lt;br /&gt;
* Help the programmer overcome unfamiliar or unusual code formatting.&lt;br /&gt;
&lt;br /&gt;
* Allow the programmer to select code in a manner specific to the task they are performing. For example, while bracket matching can be helpful, bracketed statements are not the only meaningful program construct that a programmer needs to select.&lt;br /&gt;
&lt;br /&gt;
* Language Independent, all of the current refactoring tools depend on language-dependent refactoring engines, which prevents a smooth integration with mainstream development environments.They should minimize the language-dependent part of refactoring tools, providing a standard way for programmers and tools to perform refactorings no matter what language they work in.&lt;br /&gt;
** Meta-model Approach &lt;br /&gt;
*:Program Auditing facilities like UML diagrams, documentation etc help in understanding the programs better and a tight integration between these auditing facilities and refactory tools will be real good. Most commonly, integration in software development environments is achieved by means of a repository: a shared database accumulating all knowledge about the software system underdevelopment. Thus, for refactoring tools to become part of mainstream software development environments, the most natural way would be to adhere to a repository architecture. Such a repository architecture requires a central data model (the so-called meta-model) which should be highly language independent and contain sufficient information to represent refactorings.&lt;br /&gt;
&lt;br /&gt;
* Capable of performing Security Oriented transformation. They are automated transformations that change programs to eliminate security threats;they can be source to source or binary to binary transformations. They improve the security of systems, which means that they do not preserve all types of behavior (although this is against the very definition of refactoring). They preserve expected behavior, but should change a system’s response to security attacks.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Refactoring is an integral part of all software development projects and it is very important for refactoring tools to make refactoring fast and functionality preserving. There are many improvements that have been suggested for code refactoring and it is required that it gets implemented to reduce code smell, provide easier understanding of code, as well as re usability of code. These qualities will be adopted by new refactoring tools, making them usable and thus more used, and eventually contribute to the production of more reliable, on-time refactored  software. It is also important that the refactoring tools improve the experience of refactoring, help programmers correctly identify problems with a proposed refactoring, and increase speed of the refactoring process.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Design pattern (computer science)]]&lt;br /&gt;
* [[Software Development Rhythms]]&lt;br /&gt;
* [[Code Factoring]]&lt;br /&gt;
* [[Redesign (software)]]&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Martin&lt;br /&gt;
 | last = Fowler&lt;br /&gt;
 | authorlink = Martin Fowler&lt;br /&gt;
 | year = 1999&lt;br /&gt;
 | title = Refactoring. Improving the Design of Existing Code&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-201-48567-2&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Joshua&lt;br /&gt;
 | last = Kerievsky&lt;br /&gt;
 | authorlink = Joshua Kerievsky &lt;br /&gt;
 | year = 2004&lt;br /&gt;
 | title = Refactoring To Patterns&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-321-21335-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2008&lt;br /&gt;
 | title = Professional Refactoring in Visual Basic&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 0-47-017979-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2009&lt;br /&gt;
 | title = Professional Refactoring in C# and ASP.NET&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 978-0470434529&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] http://www.refactoring.com &amp;lt;br&amp;gt;&lt;br /&gt;
[2] https://netfiles.uiuc.edu/dig/RefactoringInfo/ &amp;lt;br&amp;gt;&lt;br /&gt;
[3] William F. Opdyke. Refactoring Object-Oriented Frameworks. Ph.D.thesis, University of Illinois at Urbana-Champaign, 1992. &amp;lt;br&amp;gt;&lt;br /&gt;
[4] A Meta-model for Language-Independent Refactoring (2000) Sander Tichelaar ,  Stéphane Ducasse ,  Serge Demeyer ,  Oscar Nierstrasz &amp;lt;br&amp;gt;&lt;br /&gt;
[5] Refactoring Object-Oriented Software to Support Evolution and Reuse, William F. Opdyke&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18464</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18464"/>
		<updated>2009-09-08T01:15:22Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the most important aspect of any software meant for real world applications is its ability to evolve.Many surveys conducted by major software organizations have reavealed that, maintenance is the major part of the total Software Development life cycle. Maintenance of the code would be much less difficult, if the code has the capacity to evolve, where in refactoring comes into picture.&lt;br /&gt;
Refactoring improves the internal structure of the codebase keeping the behaviour/functionality of the program same as before and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
Code smell:&lt;br /&gt;
Code smell is the surface indication that usually corresponds to problem in the code [system]. It is called code smell as it is an indication of something wrong that may be related to the system.&lt;br /&gt;
&lt;br /&gt;
So of the common code smell examples are:&lt;br /&gt;
*Duplicate code: identical or very similar code exists in more than one location.&lt;br /&gt;
*Large method: a method, function, or procedure that has grown too large.&lt;br /&gt;
*Large class: a class that has grown too large, see God object.&lt;br /&gt;
*Feature envy: a class that uses methods of another class excessively.&lt;br /&gt;
*Inappropriate intimacy: a class that has dependencies on implementation details of another class.&lt;br /&gt;
*Refused bequest: a class that overrides a method of a base class in such a way that the contract of the base class is not honored by derived class. See Liskov substitution principle.&lt;br /&gt;
*Lazy class: a class that does too little.&lt;br /&gt;
*Duplicated method: a method, function, or procedure that is very similar to another.&lt;br /&gt;
*Contrived Complexity: forced usage of overly complicated design patterns where simpler design would suffice.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
Most of Refactoring tool features can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1. Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes.&lt;br /&gt;
&lt;br /&gt;
2. Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3. Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
Given below is an example of Refactoring, demonstrating how it enhances reusability&lt;br /&gt;
&lt;br /&gt;
  void displayValues() {&lt;br /&gt;
    	double averageSalary = 0;&lt;br /&gt;
  	double totalCars = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  		averageSalary += people[i].salary;&lt;br /&gt;
  		totalCars += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	averageSalary = averageSalary / people.length;&lt;br /&gt;
  	System.out.println(averageSalary);&lt;br /&gt;
  	System.out.println(totalCars);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
The refactored code:&lt;br /&gt;
  &lt;br /&gt;
  void printValues() {&lt;br /&gt;
  	System.out.println(averageSalary());&lt;br /&gt;
  	System.out.println(totalCars());&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double averageSalary() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].salary;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result / people.length;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double totalCars() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
Given below is the list of most used automated refactoring tools&lt;br /&gt;
&lt;br /&gt;
* [[Aptana for Ruby]](Can be used as a Plug-in for Eclipse)&lt;br /&gt;
* [[IntelliJ IDEA]]&lt;br /&gt;
* [[Eclipse (software)|Eclipse's JDT]] &lt;br /&gt;
* [[NetBeans]] (for Java)&lt;br /&gt;
* [[Visual Studio 2008]] (for .NET)&lt;br /&gt;
* [[ReSharper]] (An addon for Visual Studio)&lt;br /&gt;
* [[Refactor Pro]] (An addon for Visual Studio)&lt;br /&gt;
&lt;br /&gt;
==Academic underpinnings behind the refactoring work==&lt;br /&gt;
William F. Opdyke, who is one of the important person behind the success of refactoring, was the first to think in the lines of &amp;quot;why people could be reluctant to refactor their software given refactoring improves the software.They found mainly four reasons&lt;br /&gt;
 &lt;br /&gt;
1. &amp;quot;I don't understand how to refactor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;If the benefits are long-term, why exert the effort now? In the long term, I may no longer be with the project.”&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;Refactoring code is an overhead activity; I’m paid to write new features.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4. &amp;quot;Refactoring might break the code.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The first two issues were addressed by defining a taxonomy of refactoring, which helped both in short term as well as in long term. For example, when defining a new feature that is a variant on&lt;br /&gt;
an existing feature, one can define classes (usually abstract classes) that&lt;br /&gt;
capture the common behavior, and use subclassing to capture the feature&lt;br /&gt;
differences.&lt;br /&gt;
The approach for addressing the latter two of these issues was by providing automated assistance, which help to increase the speed of program restructuring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
William F. Opdyke, in one his other research found that, object-oriented programming makes program components more reusable, but in the long run reusing the design of an application is more important than reusing the implementation of any&lt;br /&gt;
one of its components. An important object-oriented technique to facilitate design-level reuse is an application frame-&lt;br /&gt;
work, which is an abstract design of an application, consisting of an abstract class for each&lt;br /&gt;
major component. The framework has following operations, all of which are self explainatory &lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Generalize: Creating An Abstract Super-class.&lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Specialize: Subclassing and Simplifying Conditionals.&lt;br /&gt;
&lt;br /&gt;
*  Capturing Aggregations and Components.&lt;br /&gt;
&lt;br /&gt;
==Improvements Current Refactoring Tools need==&lt;br /&gt;
&lt;br /&gt;
Tools that help the programmers with refactoring should:&lt;br /&gt;
&lt;br /&gt;
* Be lightweight. Users can normally select code quickly and efficiently, and any tool to assist selection should not add overhead to slow down the common case.&lt;br /&gt;
&lt;br /&gt;
* Help the programmer overcome unfamiliar or unusual code formatting.&lt;br /&gt;
&lt;br /&gt;
* Allow the programmer to select code in a manner specific to the task they are performing. For example, while bracket matching can be helpful, bracketed statements are not the only meaningful program construct that a programmer needs to select.&lt;br /&gt;
&lt;br /&gt;
* Language Independent, all of the current refactoring tools depend on language-dependent refactoring engines, which prevents a smooth integration with mainstream development environments.They should minimize the language-dependent part of refactoring tools, providing a standard way for programmers and tools to perform refactorings no matter what language they work in.&lt;br /&gt;
** Meta-model Approach &lt;br /&gt;
*:Program Auditing facilities like UML diagrams, documentation etc help in understanding the programs better and a tight integration between these auditing facilities and refactory tools will be real good. Most commonly, integration in software development environments is achieved by means of a repository: a shared database accumulating all knowledge about the software system underdevelopment. Thus, for refactoring tools to become part of mainstream software development environments, the most natural way would be to adhere to a repository architecture. Such a repository architecture requires a central data model (the so-called meta-model) which should be highly language independent and contain sufficient information to represent refactorings.&lt;br /&gt;
&lt;br /&gt;
* Capable of performing Security Oriented transformation. They are automated transformations that change programs to eliminate security threats;they can be source to source or binary to binary transformations. They improve the security of systems, which means that they do not preserve all types of behavior (although this is against the very definition of refactoring). They preserve expected behavior, but should change a system’s response to security attacks.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Refactoring is an integral part of all software development projects and it is very important for refactoring tools to make refactoring fast and functionality preserving. There are many improvements that have been suggested for code refactoring and it is required that it gets implemented to reduce code smell, provide easier understanding of code, as well as re usability of code. These qualities will be adopted by new refactoring tools, making them usable and thus more used, and eventually contribute to the production of more reliable, on-time refactored  software. It is also important that the refactoring tools improve the experience of refactoring, help programmers correctly identify problems with a proposed refactoring, and increase speed of the refactoring process.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Design pattern (computer science)]]&lt;br /&gt;
* [[Software Development Rhythms]]&lt;br /&gt;
* [[Code Factoring]]&lt;br /&gt;
* [[Redesign (software)]]&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Martin&lt;br /&gt;
 | last = Fowler&lt;br /&gt;
 | authorlink = Martin Fowler&lt;br /&gt;
 | year = 1999&lt;br /&gt;
 | title = Refactoring. Improving the Design of Existing Code&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-201-48567-2&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Joshua&lt;br /&gt;
 | last = Kerievsky&lt;br /&gt;
 | authorlink = Joshua Kerievsky &lt;br /&gt;
 | year = 2004&lt;br /&gt;
 | title = Refactoring To Patterns&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-321-21335-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2008&lt;br /&gt;
 | title = Professional Refactoring in Visual Basic&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 0-47-017979-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2009&lt;br /&gt;
 | title = Professional Refactoring in C# and ASP.NET&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 978-0470434529&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] http://www.refactoring.com &amp;lt;br&amp;gt;&lt;br /&gt;
[2] https://netfiles.uiuc.edu/dig/RefactoringInfo/ &amp;lt;br&amp;gt;&lt;br /&gt;
[3] William F. Opdyke. Refactoring Object-Oriented Frameworks. Ph.D.thesis, University of Illinois at Urbana-Champaign, 1992. &amp;lt;br&amp;gt;&lt;br /&gt;
[4] A Meta-model for Language-Independent Refactoring (2000) Sander Tichelaar ,  Stéphane Ducasse ,  Serge Demeyer ,  Oscar Nierstrasz &amp;lt;br&amp;gt;&lt;br /&gt;
[5] Refactoring Object-Oriented Software to Support Evolution and Reuse, William F. Opdyke&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18461</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18461"/>
		<updated>2009-09-08T01:13:06Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the most important aspect of any software meant for real world applications is its ability to evolve.Many surveys conducted by major software organizations have reavealed that, maintenance is the major part of the total Software Development life cycle. Maintenance of the code would be much less difficult, if the code has the capacity to evolve, where in refactoring comes into picture.&lt;br /&gt;
Refactoring improves the internal structure of the codebase keeping the behaviour/functionality of the program same as before and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
Code smell:&lt;br /&gt;
Code smell is the surface indication that usually corresponds to problem in the code [system]. It is called code smell as it is an indication of something wrong that may be related to the system.&lt;br /&gt;
&lt;br /&gt;
So of the common code smell examples are:&lt;br /&gt;
* ''[[Duplicate code]]'': identical or very similar code exists in more than one location.&lt;br /&gt;
* ''Large method'': a [[Method (computer science)|method]], function, or procedure that has grown too large.&lt;br /&gt;
* ''Large class'': a [[Class (computer science)|class]] that has grown too large, see [[God object]].&lt;br /&gt;
* ''Feature envy'': a class that uses methods of another class excessively.&lt;br /&gt;
* ''Inappropriate intimacy'': a class that has dependencies on implementation details of another class.&lt;br /&gt;
* ''Refused bequest'': a class that [[Method overriding (programming)|override]]s a method of a base class in such a way that the contract of the base class is not honored by derived class.  See [[Liskov substitution principle]].&lt;br /&gt;
* ''Lazy class'': a class that does too little.&lt;br /&gt;
* ''Duplicated method'': a method, function, or procedure that is very similar to another.&lt;br /&gt;
* ''Contrived Complexity'': forced usage of overly complicated [[Design pattern (computer science)|design patterns]] where simpler design would suffice.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
Most of Refactoring tool features can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1. Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes.&lt;br /&gt;
&lt;br /&gt;
2. Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3. Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
Given below is an example of Refactoring, demonstrating how it enhances reusability&lt;br /&gt;
&lt;br /&gt;
  void displayValues() {&lt;br /&gt;
    	double averageSalary = 0;&lt;br /&gt;
  	double totalCars = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  		averageSalary += people[i].salary;&lt;br /&gt;
  		totalCars += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	averageSalary = averageSalary / people.length;&lt;br /&gt;
  	System.out.println(averageSalary);&lt;br /&gt;
  	System.out.println(totalCars);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
The refactored code:&lt;br /&gt;
  &lt;br /&gt;
  void printValues() {&lt;br /&gt;
  	System.out.println(averageSalary());&lt;br /&gt;
  	System.out.println(totalCars());&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double averageSalary() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].salary;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result / people.length;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double totalCars() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
Given below is the list of most used automated refactoring tools&lt;br /&gt;
&lt;br /&gt;
* [[Aptana for Ruby]](Can be used as a Plug-in for Eclipse)&lt;br /&gt;
* [[IntelliJ IDEA]]&lt;br /&gt;
* [[Eclipse (software)|Eclipse's JDT]] &lt;br /&gt;
* [[NetBeans]] (for Java)&lt;br /&gt;
* [[Visual Studio 2008]] (for .NET)&lt;br /&gt;
* [[ReSharper]] (An addon for Visual Studio)&lt;br /&gt;
* [[Refactor Pro]] (An addon for Visual Studio)&lt;br /&gt;
&lt;br /&gt;
==Academic underpinnings behind the refactoring work==&lt;br /&gt;
William F. Opdyke, who is one of the important person behind the success of refactoring, was the first to think in the lines of &amp;quot;why people could be reluctant to refactor their software given refactoring improves the software.They found mainly four reasons&lt;br /&gt;
 &lt;br /&gt;
1. &amp;quot;I don't understand how to refactor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;If the benefits are long-term, why exert the effort now? In the long term, I may no longer be with the project.”&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;Refactoring code is an overhead activity; I’m paid to write new features.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4. &amp;quot;Refactoring might break the code.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The first two issues were addressed by defining a taxonomy of refactoring, which helped both in short term as well as in long term. For example, when defining a new feature that is a variant on&lt;br /&gt;
an existing feature, one can define classes (usually abstract classes) that&lt;br /&gt;
capture the common behavior, and use subclassing to capture the feature&lt;br /&gt;
differences.&lt;br /&gt;
The approach for addressing the latter two of these issues was by providing automated assistance, which help to increase the speed of program restructuring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
William F. Opdyke, in one his other research found that, object-oriented programming makes program components more reusable, but in the long run reusing the design of an application is more important than reusing the implementation of any&lt;br /&gt;
one of its components. An important object-oriented technique to facilitate design-level reuse is an application frame-&lt;br /&gt;
work, which is an abstract design of an application, consisting of an abstract class for each&lt;br /&gt;
major component. The framework has following operations, all of which are self explainatory &lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Generalize: Creating An Abstract Super-class.&lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Specialize: Subclassing and Simplifying Conditionals.&lt;br /&gt;
&lt;br /&gt;
*  Capturing Aggregations and Components.&lt;br /&gt;
&lt;br /&gt;
==Improvements Current Refactoring Tools need==&lt;br /&gt;
&lt;br /&gt;
Tools that help the programmers with refactoring should:&lt;br /&gt;
&lt;br /&gt;
* Be lightweight. Users can normally select code quickly and efficiently, and any tool to assist selection should not add overhead to slow down the common case.&lt;br /&gt;
&lt;br /&gt;
* Help the programmer overcome unfamiliar or unusual code formatting.&lt;br /&gt;
&lt;br /&gt;
* Allow the programmer to select code in a manner specific to the task they are performing. For example, while bracket matching can be helpful, bracketed statements are not the only meaningful program construct that a programmer needs to select.&lt;br /&gt;
&lt;br /&gt;
* Language Independent, all of the current refactoring tools depend on language-dependent refactoring engines, which prevents a smooth integration with mainstream development environments.They should minimize the language-dependent part of refactoring tools, providing a standard way for programmers and tools to perform refactorings no matter what language they work in.&lt;br /&gt;
** Meta-model Approach &lt;br /&gt;
*:Program Auditing facilities like UML diagrams, documentation etc help in understanding the programs better and a tight integration between these auditing facilities and refactory tools will be real good. Most commonly, integration in software development environments is achieved by means of a repository: a shared database accumulating all knowledge about the software system underdevelopment. Thus, for refactoring tools to become part of mainstream software development environments, the most natural way would be to adhere to a repository architecture. Such a repository architecture requires a central data model (the so-called meta-model) which should be highly language independent and contain sufficient information to represent refactorings.&lt;br /&gt;
&lt;br /&gt;
* Capable of performing Security Oriented transformation. They are automated transformations that change programs to eliminate security threats;they can be source to source or binary to binary transformations. They improve the security of systems, which means that they do not preserve all types of behavior (although this is against the very definition of refactoring). They preserve expected behavior, but should change a system’s response to security attacks.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Refactoring is an integral part of all software development projects and it is very important for refactoring tools to make refactoring fast and functionality preserving. There are many improvements that have been suggested for code refactoring and it is required that it gets implemented to reduce code smell, provide easier understanding of code, as well as re usability of code. These qualities will be adopted by new refactoring tools, making them usable and thus more used, and eventually contribute to the production of more reliable, on-time refactored  software. It is also important that the refactoring tools improve the experience of refactoring, help programmers correctly identify problems with a proposed refactoring, and increase speed of the refactoring process.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Design pattern (computer science)]]&lt;br /&gt;
* [[Software Development Rhythms]]&lt;br /&gt;
* [[Code Factoring]]&lt;br /&gt;
* [[Redesign (software)]]&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Martin&lt;br /&gt;
 | last = Fowler&lt;br /&gt;
 | authorlink = Martin Fowler&lt;br /&gt;
 | year = 1999&lt;br /&gt;
 | title = Refactoring. Improving the Design of Existing Code&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-201-48567-2&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Joshua&lt;br /&gt;
 | last = Kerievsky&lt;br /&gt;
 | authorlink = Joshua Kerievsky &lt;br /&gt;
 | year = 2004&lt;br /&gt;
 | title = Refactoring To Patterns&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-321-21335-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2008&lt;br /&gt;
 | title = Professional Refactoring in Visual Basic&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 0-47-017979-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2009&lt;br /&gt;
 | title = Professional Refactoring in C# and ASP.NET&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 978-0470434529&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] http://www.refactoring.com &amp;lt;br&amp;gt;&lt;br /&gt;
[2] https://netfiles.uiuc.edu/dig/RefactoringInfo/ &amp;lt;br&amp;gt;&lt;br /&gt;
[3] William F. Opdyke. Refactoring Object-Oriented Frameworks. Ph.D.thesis, University of Illinois at Urbana-Champaign, 1992. &amp;lt;br&amp;gt;&lt;br /&gt;
[4] A Meta-model for Language-Independent Refactoring (2000) Sander Tichelaar ,  Stéphane Ducasse ,  Serge Demeyer ,  Oscar Nierstrasz &amp;lt;br&amp;gt;&lt;br /&gt;
[5] Refactoring Object-Oriented Software to Support Evolution and Reuse, William F. Opdyke&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18416</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18416"/>
		<updated>2009-09-08T00:49:00Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the most important aspect of any software meant for real world applications is its ability to evolve.Many surveys conducted by major software organizations have reavealed that, maintenance is the major part of the total Software Development life cycle. Maintenance of the code would be much less difficult, if the code has the capacity to evolve, where in refactoring comes into picture.&lt;br /&gt;
Refactoring improves the internal structure of the codebase keeping the behaviour/functionality of the program same as before and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
Code smell:&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
Most of Refactoring tool features can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1. Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes.&lt;br /&gt;
&lt;br /&gt;
2. Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3. Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
Given below is an example of Refactoring, demonstrating how it enhances reusability&lt;br /&gt;
&lt;br /&gt;
  void displayValues() {&lt;br /&gt;
    	double averageSalary = 0;&lt;br /&gt;
  	double totalCars = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  		averageSalary += people[i].salary;&lt;br /&gt;
  		totalCars += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	averageSalary = averageSalary / people.length;&lt;br /&gt;
  	System.out.println(averageSalary);&lt;br /&gt;
  	System.out.println(totalCars);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
The refactored code:&lt;br /&gt;
  &lt;br /&gt;
  void printValues() {&lt;br /&gt;
  	System.out.println(averageSalary());&lt;br /&gt;
  	System.out.println(totalCars());&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double averageSalary() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].salary;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result / people.length;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double totalCars() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
Given below is the list of most used automated refactoring tools&lt;br /&gt;
&lt;br /&gt;
* [[Aptana for Ruby]](Can be used as a Plug-in for Eclipse)&lt;br /&gt;
* [[IntelliJ IDEA]]&lt;br /&gt;
* [[Eclipse (software)|Eclipse's JDT]] &lt;br /&gt;
* [[NetBeans]] (for Java)&lt;br /&gt;
* [[Visual Studio 2008]] (for .NET)&lt;br /&gt;
* [[ReSharper]] (An addon for Visual Studio)&lt;br /&gt;
* [[Refactor Pro]] (An addon for Visual Studio)&lt;br /&gt;
&lt;br /&gt;
==Academic underpinnings behind the refactoring work==&lt;br /&gt;
William F. Opdyke, who is one of the important person behind the success of refactoring, was the first to think in the lines of &amp;quot;why people could be reluctant to refactor their software given refactoring improves the software.They found mainly four reasons&lt;br /&gt;
 &lt;br /&gt;
1. &amp;quot;I don't understand how to refactor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;If the benefits are long-term, why exert the effort now? In the long term, I may no longer be with the project.”&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;Refactoring code is an overhead activity; I’m paid to write new features.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4. &amp;quot;Refactoring might break the code.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The first two issues were addressed by defining a taxonomy of refactoring, which helped both in short term as well as in long term. For example, when defining a new feature that is a variant on&lt;br /&gt;
an existing feature, one can define classes (usually abstract classes) that&lt;br /&gt;
capture the common behavior, and use subclassing to capture the feature&lt;br /&gt;
differences.&lt;br /&gt;
The approach for addressing the latter two of these issues was by providing automated assistance, which help to increase the speed of program restructuring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
William F. Opdyke, in one his other research found that, object-oriented programming makes program components more reusable, but in the long run reusing the design of an application is more important than reusing the implementation of any&lt;br /&gt;
one of its components. An important object-oriented technique to facilitate design-level reuse is an application frame-&lt;br /&gt;
work, which is an abstract design of an application, consisting of an abstract class for each&lt;br /&gt;
major component. The framework has following operations, all of which are self explainatory &lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Generalize: Creating An Abstract Super-class.&lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Specialize: Subclassing and Simplifying Conditionals.&lt;br /&gt;
&lt;br /&gt;
*  Capturing Aggregations and Components.&lt;br /&gt;
&lt;br /&gt;
==Improvements Current Refactoring Tools need==&lt;br /&gt;
&lt;br /&gt;
Tools that help the programmers with refactoring should:&lt;br /&gt;
&lt;br /&gt;
* Be lightweight. Users can normally select code quickly and efficiently, and any tool to assist selection should not add overhead to slow down the common case.&lt;br /&gt;
&lt;br /&gt;
* Help the programmer overcome unfamiliar or unusual code formatting.&lt;br /&gt;
&lt;br /&gt;
* Allow the programmer to select code in a manner specific to the task they are performing. For example, while bracket matching can be helpful, bracketed statements are not the only meaningful program construct that a programmer needs to select.&lt;br /&gt;
&lt;br /&gt;
* Language Independent, all of the current refactoring tools depend on language-dependent refactoring engines, which prevents a smooth integration with mainstream development environments.They should minimize the language-dependent part of refactoring tools, providing a standard way for programmers and tools to perform refactorings no matter what language they work in.&lt;br /&gt;
** Meta-model Approach &lt;br /&gt;
*:Program Auditing facilities like UML diagrams, documentation etc help in understanding the programs better and a tight integration between these auditing facilities and refactory tools will be real good. Most commonly, integration in software development environments is achieved by means of a repository: a shared database accumulating all knowledge about the software system underdevelopment. Thus, for refactoring tools to become part of mainstream software development environments, the most natural way would be to adhere to a repository architecture. Such a repository architecture requires a central data model (the so-called meta-model) which should be highly language independent and contain sufficient information to represent refactorings.&lt;br /&gt;
&lt;br /&gt;
* Capable of performing Security Oriented transformation. They are automated transformations that change programs to eliminate security threats;they can be source to source or binary to binary transformations. They improve the security of systems, which means that they do not preserve all types of behavior (although this is against the very definition of refactoring). They preserve expected behavior, but should change a system’s response to security attacks.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Refactoring is an integral part of all software development projects and it is very important for refactoring tools to make refactoring fast and functionality preserving. There are many improvements that have been suggested for code refactoring and it is required that it gets implemented to reduce code smell, provide easier understanding of code, as well as re usability of code. These qualities will be adopted by new refactoring tools, making them usable and thus more used, and eventually contribute to the production of more reliable, on-time refactored  software. It is also important that the refactoring tools improve the experience of refactoring, help programmers correctly identify problems with a proposed refactoring, and increase speed of the refactoring process.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Design pattern (computer science)]]&lt;br /&gt;
* [[Software Development Rhythms]]&lt;br /&gt;
* [[Code Factoring]]&lt;br /&gt;
* [[Redesign (software)]]&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Martin&lt;br /&gt;
 | last = Fowler&lt;br /&gt;
 | authorlink = Martin Fowler&lt;br /&gt;
 | year = 1999&lt;br /&gt;
 | title = Refactoring. Improving the Design of Existing Code&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-201-48567-2&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Joshua&lt;br /&gt;
 | last = Kerievsky&lt;br /&gt;
 | authorlink = Joshua Kerievsky &lt;br /&gt;
 | year = 2004&lt;br /&gt;
 | title = Refactoring To Patterns&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-321-21335-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2008&lt;br /&gt;
 | title = Professional Refactoring in Visual Basic&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 0-47-017979-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2009&lt;br /&gt;
 | title = Professional Refactoring in C# and ASP.NET&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 978-0470434529&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] http://www.refactoring.com &amp;lt;br&amp;gt;&lt;br /&gt;
[2] https://netfiles.uiuc.edu/dig/RefactoringInfo/ &amp;lt;br&amp;gt;&lt;br /&gt;
[3] William F. Opdyke. Refactoring Object-Oriented Frameworks. Ph.D.thesis, University of Illinois at Urbana-Champaign, 1992. &amp;lt;br&amp;gt;&lt;br /&gt;
[4] A Meta-model for Language-Independent Refactoring (2000) Sander Tichelaar ,  Stéphane Ducasse ,  Serge Demeyer ,  Oscar Nierstrasz &amp;lt;br&amp;gt;&lt;br /&gt;
[5] Refactoring Object-Oriented Software to Support Evolution and Reuse, William F. Opdyke&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18413</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=18413"/>
		<updated>2009-09-08T00:45:29Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
One of the most important aspect of any software meant for real world applications is its ability to evolve.Many surveys conducted by major software organizations have reavealed that, maintenance is the major part of the total Software Development life cycle. Maintenance of the code would be much less difficult, if the code has the capacity to evolve, where in refactoring comes into picture.&lt;br /&gt;
Refactoring improves the internal structure of the codebase keeping the behaviour/functionality of the program same as before and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
Most of Refactoring tool features can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1. Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes.&lt;br /&gt;
&lt;br /&gt;
2. Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3. Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
Given below is an example of Refactoring, demonstrating how it enhances reusability&lt;br /&gt;
&lt;br /&gt;
  void displayValues() {&lt;br /&gt;
    	double averageSalary = 0;&lt;br /&gt;
  	double totalCars = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  		averageSalary += people[i].salary;&lt;br /&gt;
  		totalCars += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	averageSalary = averageSalary / people.length;&lt;br /&gt;
  	System.out.println(averageSalary);&lt;br /&gt;
  	System.out.println(totalCars);&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
The refactored code:&lt;br /&gt;
  &lt;br /&gt;
  void printValues() {&lt;br /&gt;
  	System.out.println(averageSalary());&lt;br /&gt;
  	System.out.println(totalCars());&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double averageSalary() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].salary;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result / people.length;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  private double totalCars() {&lt;br /&gt;
  	double result = 0;&lt;br /&gt;
  	for (int i = 0; i &amp;lt; people.length; i++) {&lt;br /&gt;
  			result += people[i].carCount;&lt;br /&gt;
  	}&lt;br /&gt;
  	return result;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
Given below is the list of most used automated refactoring tools&lt;br /&gt;
&lt;br /&gt;
* [[Aptana for Ruby]](Can be used as a Plug-in for Eclipse)&lt;br /&gt;
* [[IntelliJ IDEA]]&lt;br /&gt;
* [[Eclipse (software)|Eclipse's JDT]] &lt;br /&gt;
* [[NetBeans]] (for Java)&lt;br /&gt;
* [[Visual Studio 2008]] (for .NET)&lt;br /&gt;
* [[ReSharper]] (An addon for Visual Studio)&lt;br /&gt;
* [[Refactor Pro]] (An addon for Visual Studio)&lt;br /&gt;
&lt;br /&gt;
==Academic underpinnings behind the refactoring work==&lt;br /&gt;
William F. Opdyke, who is one of the important person behind the success of refactoring, was the first to think in the lines of &amp;quot;why people could be reluctant to refactor their software given refactoring improves the software.They found mainly four reasons&lt;br /&gt;
 &lt;br /&gt;
1. &amp;quot;I don't understand how to refactor.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;If the benefits are long-term, why exert the effort now? In the long term, I may no longer be with the project.”&lt;br /&gt;
&lt;br /&gt;
3. &amp;quot;Refactoring code is an overhead activity; I’m paid to write new features.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
4. &amp;quot;Refactoring might break the code.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The first two issues were addressed by defining a taxonomy of refactoring, which helped both in short term as well as in long term. For example, when defining a new feature that is a variant on&lt;br /&gt;
an existing feature, one can define classes (usually abstract classes) that&lt;br /&gt;
capture the common behavior, and use subclassing to capture the feature&lt;br /&gt;
differences.&lt;br /&gt;
The approach for addressing the latter two of these issues was by providing automated assistance, which help to increase the speed of program restructuring.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
William F. Opdyke, in one his other research found that, object-oriented programming makes program components more reusable, but in the long run reusing the design of an application is more important than reusing the implementation of any&lt;br /&gt;
one of its components. An important object-oriented technique to facilitate design-level reuse is an application frame-&lt;br /&gt;
work, which is an abstract design of an application, consisting of an abstract class for each&lt;br /&gt;
major component. The framework has following operations, all of which are self explainatory &lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Generalize: Creating An Abstract Super-class.&lt;br /&gt;
&lt;br /&gt;
*  Refactoring To Specialize: Subclassing and Simplifying Conditionals.&lt;br /&gt;
&lt;br /&gt;
*  Capturing Aggregations and Components.&lt;br /&gt;
&lt;br /&gt;
==Improvements Current Refactoring Tools need==&lt;br /&gt;
&lt;br /&gt;
Tools that help the programmers with refactoring should:&lt;br /&gt;
&lt;br /&gt;
* Be lightweight. Users can normally select code quickly and efficiently, and any tool to assist selection should not add overhead to slow down the common case.&lt;br /&gt;
&lt;br /&gt;
* Help the programmer overcome unfamiliar or unusual code formatting.&lt;br /&gt;
&lt;br /&gt;
* Allow the programmer to select code in a manner specific to the task they are performing. For example, while bracket matching can be helpful, bracketed statements are not the only meaningful program construct that a programmer needs to select.&lt;br /&gt;
&lt;br /&gt;
* Language Independent, all of the current refactoring tools depend on language-dependent refactoring engines, which prevents a smooth integration with mainstream development environments.They should minimize the language-dependent part of refactoring tools, providing a standard way for programmers and tools to perform refactorings no matter what language they work in.&lt;br /&gt;
** Meta-model Approach &lt;br /&gt;
*:Program Auditing facilities like UML diagrams, documentation etc help in understanding the programs better and a tight integration between these auditing facilities and refactory tools will be real good. Most commonly, integration in software development environments is achieved by means of a repository: a shared database accumulating all knowledge about the software system underdevelopment. Thus, for refactoring tools to become part of mainstream software development environments, the most natural way would be to adhere to a repository architecture. Such a repository architecture requires a central data model (the so-called meta-model) which should be highly language independent and contain sufficient information to represent refactorings.&lt;br /&gt;
&lt;br /&gt;
* Capable of performing Security Oriented transformation. They are automated transformations that change programs to eliminate security threats;they can be source to source or binary to binary transformations. They improve the security of systems, which means that they do not preserve all types of behavior (although this is against the very definition of refactoring). They preserve expected behavior, but should change a system’s response to security attacks.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Refactoring is an integral part of all software development projects and it is very important for refactoring tools to make refactoring fast and functionality preserving. There are many improvements that have been suggested for code refactoring and it is required that it gets implemented to reduce code smell, provide easier understanding of code, as well as re usability of code. These qualities will be adopted by new refactoring tools, making them usable and thus more used, and eventually contribute to the production of more reliable, on-time refactored  software. It is also important that the refactoring tools improve the experience of refactoring, help programmers correctly identify problems with a proposed refactoring, and increase speed of the refactoring process.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Design pattern (computer science)]]&lt;br /&gt;
* [[Software Development Rhythms]]&lt;br /&gt;
* [[Code Factoring]]&lt;br /&gt;
* [[Redesign (software)]]&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Martin&lt;br /&gt;
 | last = Fowler&lt;br /&gt;
 | authorlink = Martin Fowler&lt;br /&gt;
 | year = 1999&lt;br /&gt;
 | title = Refactoring. Improving the Design of Existing Code&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-201-48567-2&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Joshua&lt;br /&gt;
 | last = Kerievsky&lt;br /&gt;
 | authorlink = Joshua Kerievsky &lt;br /&gt;
 | year = 2004&lt;br /&gt;
 | title = Refactoring To Patterns&lt;br /&gt;
 | publisher = Addison-Wesley&lt;br /&gt;
 | isbn = 0-321-21335-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2008&lt;br /&gt;
 | title = Professional Refactoring in Visual Basic&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 0-47-017979-1&lt;br /&gt;
}}&lt;br /&gt;
*{{cite book&lt;br /&gt;
 | first = Danijel&lt;br /&gt;
 | last = Arsenovski&lt;br /&gt;
 | authorlink = Danijel Arsenovski&lt;br /&gt;
 | year = 2009&lt;br /&gt;
 | title = Professional Refactoring in C# and ASP.NET&lt;br /&gt;
 | publisher = Wrox&lt;br /&gt;
 | isbn = 978-0470434529&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
[1] http://www.refactoring.com &amp;lt;br&amp;gt;&lt;br /&gt;
[2] https://netfiles.uiuc.edu/dig/RefactoringInfo/ &amp;lt;br&amp;gt;&lt;br /&gt;
[3] William F. Opdyke. Refactoring Object-Oriented Frameworks. Ph.D.thesis, University of Illinois at Urbana-Champaign, 1992. &amp;lt;br&amp;gt;&lt;br /&gt;
[4] A Meta-model for Language-Independent Refactoring (2000) Sander Tichelaar ,  Stéphane Ducasse ,  Serge Demeyer ,  Oscar Nierstrasz &amp;lt;br&amp;gt;&lt;br /&gt;
[5] Refactoring Object-Oriented Software to Support Evolution and Reuse, William F. Opdyke&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17846</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17846"/>
		<updated>2009-09-06T20:07:32Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Improvement for Current Refactoring Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The fundamental work is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
Refactoring can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1.Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes.&lt;br /&gt;
&lt;br /&gt;
2.Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3.Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
Tools that help the programmers with selection should:&lt;br /&gt;
&lt;br /&gt;
1.Be lightweight. Users can normally select code quickly and efficiently, and any tool to assist selection should not add overhead to slow down the common case.&lt;br /&gt;
&lt;br /&gt;
2.Help the programmer overcome unfamiliar or unusual code formatting.&lt;br /&gt;
&lt;br /&gt;
3.Allow the programmer to select code in a manner specific to the task they are performing. For example, while bracket matching can be helpful, bracketed statements are not the only meaningful program construct that a programmer needs to select.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Refactoring is an important part of software development and refactoring tools are critical to making refactoring fast and behavior preserving. In this paper, I have presented three new tools that help programmers avoid selection errors and understand violations of refactoring preconditions. Through a user study, I have demonstrated that these tools exhibit several qualities that improve the experience of refactoring, help programmers correctly identify problems with a proposed refactoring, and increase speed of the refactoring process. I hope that these qualities will be adopted by new refactoring tools, make tools more usable and thus more used, and eventually contribute to the production of more reliable, on-time software.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17845</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17845"/>
		<updated>2009-09-06T20:07:16Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Improvement for Current Refactoring Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The fundamental work is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
Refactoring can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1.Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes.&lt;br /&gt;
&lt;br /&gt;
2.Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3.Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
Tools that help the programmers with selection should:&lt;br /&gt;
&lt;br /&gt;
1.Be lightweight. Users can normally select code quickly and efficiently, and any tool to assist selection should not add overhead to slow down the common case.&lt;br /&gt;
2.Help the programmer overcome unfamiliar or unusual code formatting.&lt;br /&gt;
3.Allow the programmer to select code in a manner specific to the task they are performing. For example, while bracket matching can be helpful, bracketed statements are not the only meaningful program construct that a programmer needs to select.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Refactoring is an important part of software development and refactoring tools are critical to making refactoring fast and behavior preserving. In this paper, I have presented three new tools that help programmers avoid selection errors and understand violations of refactoring preconditions. Through a user study, I have demonstrated that these tools exhibit several qualities that improve the experience of refactoring, help programmers correctly identify problems with a proposed refactoring, and increase speed of the refactoring process. I hope that these qualities will be adopted by new refactoring tools, make tools more usable and thus more used, and eventually contribute to the production of more reliable, on-time software.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17844</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17844"/>
		<updated>2009-09-06T20:06:56Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The fundamental work is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
Refactoring can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1.Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes.&lt;br /&gt;
&lt;br /&gt;
2.Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3.Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
Tools that help the programmers with selection should:&lt;br /&gt;
&lt;br /&gt;
Be lightweight. Users can normally select code quickly and efficiently, and any tool to assist selection should not add overhead to slow down the common case.&lt;br /&gt;
Help the programmer overcome unfamiliar or unusual code formatting.&lt;br /&gt;
Allow the programmer to select code in a manner specific to the task they are performing. For example, while bracket matching can be helpful, bracketed statements are not the only meaningful program construct that a programmer needs to select.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
Refactoring is an important part of software development and refactoring tools are critical to making refactoring fast and behavior preserving. In this paper, I have presented three new tools that help programmers avoid selection errors and understand violations of refactoring preconditions. Through a user study, I have demonstrated that these tools exhibit several qualities that improve the experience of refactoring, help programmers correctly identify problems with a proposed refactoring, and increase speed of the refactoring process. I hope that these qualities will be adopted by new refactoring tools, make tools more usable and thus more used, and eventually contribute to the production of more reliable, on-time software.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17843</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17843"/>
		<updated>2009-09-06T20:06:46Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Improvement for Current Refactoring Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The fundamental work is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
Refactoring can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1.Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes.&lt;br /&gt;
&lt;br /&gt;
2.Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3.Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
Tools that help the programmers with selection should:&lt;br /&gt;
&lt;br /&gt;
Be lightweight. Users can normally select code quickly and efficiently, and any tool to assist selection should not add overhead to slow down the common case.&lt;br /&gt;
Help the programmer overcome unfamiliar or unusual code formatting.&lt;br /&gt;
Allow the programmer to select code in a manner specific to the task they are performing. For example, while bracket matching can be helpful, bracketed statements are not the only meaningful program construct that a programmer needs to select.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17842</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17842"/>
		<updated>2009-09-06T19:57:43Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Features of some Refactoring Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The fundamental work is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
Refactoring can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1.Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes.&lt;br /&gt;
&lt;br /&gt;
2.Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3.Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17841</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17841"/>
		<updated>2009-09-06T19:57:13Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Features of some Refactoring Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The fundamental work is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
Refactoring tools can be grouped into three broad categories. &lt;br /&gt;
&lt;br /&gt;
1.Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes.&lt;br /&gt;
&lt;br /&gt;
2.Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3.Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17840</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17840"/>
		<updated>2009-09-06T19:56:26Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Java Refactoring Tool, Eclipse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The fundamental work is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
Refactoring tools can be grouped into three broad categories &lt;br /&gt;
&lt;br /&gt;
1.Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes&lt;br /&gt;
&lt;br /&gt;
2.Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3.Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17839</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17839"/>
		<updated>2009-09-06T19:55:01Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Java Refactoring Tool, Eclipse */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The fundamental work is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
Refactoring tools can be grouped into three broad categories &lt;br /&gt;
&lt;br /&gt;
1.Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes&lt;br /&gt;
&lt;br /&gt;
2.Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3.Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
http://www.eclipse.org/articles/Article-Unleashing-the-Power-of-Refactoring/images/figure1.png&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17838</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17838"/>
		<updated>2009-09-06T19:54:00Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Features of some Refactoring Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The fundamental work is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
Refactoring tools can be grouped into three broad categories &lt;br /&gt;
&lt;br /&gt;
1.Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes&lt;br /&gt;
&lt;br /&gt;
2.Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass.&lt;br /&gt;
&lt;br /&gt;
3.Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields.&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17837</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17837"/>
		<updated>2009-09-06T19:53:44Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Features of some Refactoring Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The fundamental work is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
Refactoring tools can be grouped into three broad categories &lt;br /&gt;
&lt;br /&gt;
1.Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes&lt;br /&gt;
&lt;br /&gt;
2.Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass&lt;br /&gt;
&lt;br /&gt;
3.Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17836</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17836"/>
		<updated>2009-09-06T19:50:44Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Features of some Refactoring Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The fundamental work is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
Refactoring tools can be grouped into three broad categories &lt;br /&gt;
(and this is the order in which they appear in the Refactoring menu):&lt;br /&gt;
&lt;br /&gt;
Changing the name and physical organization of code, including renaming fields, variables, classes, &lt;br /&gt;
and interfaces, and moving packages and classes&lt;br /&gt;
&lt;br /&gt;
Changing the logical organization of code at the class level, including turning anonymous classes &lt;br /&gt;
into nested classes, turning nested classes into top-level classes, creating interfaces from &lt;br /&gt;
concrete classes, and moving methods or fields from a class to a subclass or superclass&lt;br /&gt;
&lt;br /&gt;
Changing the code within a class, including turning local variables into class fields, turning &lt;br /&gt;
selected code in a method into a separate method, and generating getter and setter methods for &lt;br /&gt;
fields&lt;br /&gt;
&lt;br /&gt;
Several refactorings don't fit neatly into these three categories, particularly Change Method &lt;br /&gt;
Signature, which is included in the third category here. Apart from this exception, the sections &lt;br /&gt;
that follow will discuss Eclipse's refactoring tools in this order.&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17835</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17835"/>
		<updated>2009-09-06T19:42:50Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Fundamentals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
The fundamental work is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
  hi&lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17834</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17834"/>
		<updated>2009-09-06T19:39:55Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Fundamentals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
&lt;br /&gt;
The fundamental work is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes with preconditions which specifies under what circumstances &lt;br /&gt;
refactoring can be performed, also with the conformation that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
  hi&lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17833</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17833"/>
		<updated>2009-09-06T19:32:42Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Fundamentals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
&lt;br /&gt;
Refactoring is primarily focused on the definitions and mechanism of refactoring, and &lt;br /&gt;
proving their correctness. Refactoring means that the behaviour/functionality of the program does &lt;br /&gt;
not change and therefore any program  which meets its specifications before refactoring will &lt;br /&gt;
continue to meet those specifications even afterwards. Refactoring can be done on any codebase and it &lt;br /&gt;
is a general set of operations. Hence it comes witha precondition which specify under what circumstances &lt;br /&gt;
refactoring can be done, alos with demonstrations that the dependency graphs are unchanged even after the &lt;br /&gt;
refactoring is performed.&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
  hi&lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17832</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17832"/>
		<updated>2009-09-06T19:14:43Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Refactoring==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
  hi&lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17831</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17831"/>
		<updated>2009-09-06T19:13:17Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
Refactoring is the process of modifying existing source codebase in a structured and incremental &lt;br /&gt;
way while preserving its external behavior. This process preserves the functionality of the program  &lt;br /&gt;
without introducing new bugs. Refactoring also promotes reuse of the existing codebase for other &lt;br /&gt;
purposes thus increasing code reusability.&lt;br /&gt;
&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
  hi&lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17830</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17830"/>
		<updated>2009-09-06T18:48:31Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
==Introduction==&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
  hi&lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
 &lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
==Conclusion==&lt;br /&gt;
==See Also==&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17829</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17829"/>
		<updated>2009-09-06T18:46:57Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
==Introduction==&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /is/&lt;br /&gt;
  &amp;gt;&amp;gt; 2&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /hello/&lt;br /&gt;
  &amp;gt;&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;hi&amp;quot; =~ /is/&lt;br /&gt;
  &amp;gt;&amp;gt;2&lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
  &amp;quot;hi&amp;quot;&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
==Conclusion==&lt;br /&gt;
==See Also==&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17828</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17828"/>
		<updated>2009-09-06T18:46:41Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
==Introduction==&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /is/&lt;br /&gt;
  &amp;gt;&amp;gt; 2&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /hello/&lt;br /&gt;
  &amp;gt;&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;hi&amp;quot; =~ /is/&lt;br /&gt;
  &amp;gt;&amp;gt;2&lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&amp;quot;hi&amp;quot;&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
==Conclusion==&lt;br /&gt;
==See Also==&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17827</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17827"/>
		<updated>2009-09-06T18:46:20Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
==Introduction==&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /is/&lt;br /&gt;
  &amp;gt;&amp;gt; 2&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /hello/&lt;br /&gt;
  &amp;gt;&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;hi&amp;quot;=~ /is/&lt;br /&gt;
&amp;gt;&amp;gt;2&lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&amp;quot;hi&amp;quot;&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
==Conclusion==&lt;br /&gt;
==See Also==&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17826</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17826"/>
		<updated>2009-09-06T18:44:03Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
==Introduction==&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /is/&lt;br /&gt;
  &amp;gt;&amp;gt; 2&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /hello/&lt;br /&gt;
  &amp;gt;&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
&amp;quot;hi&amp;quot;=~ /is/&lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&amp;quot;hi&amp;quot;&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
==Conclusion==&lt;br /&gt;
==See Also==&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17825</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17825"/>
		<updated>2009-09-06T18:43:54Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
==Introduction==&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /is/&lt;br /&gt;
  &amp;gt;&amp;gt; 2&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /hello/&lt;br /&gt;
  &amp;gt;&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
hi=~ /is/&lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&amp;quot;hi&amp;quot;&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
==Conclusion==&lt;br /&gt;
==See Also==&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17824</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17824"/>
		<updated>2009-09-06T18:43:36Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
==Introduction==&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /is/&lt;br /&gt;
  &amp;gt;&amp;gt; 2&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /hello/&lt;br /&gt;
  &amp;gt;&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
&lt;br /&gt;
hi&lt;br /&gt;
&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&amp;quot;hi&amp;quot;&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
==Conclusion==&lt;br /&gt;
==See Also==&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17823</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17823"/>
		<updated>2009-09-06T18:43:11Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
==Introduction==&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /is/&lt;br /&gt;
  &amp;gt;&amp;gt; 2&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /hello/&lt;br /&gt;
  &amp;gt;&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
hi&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
&amp;quot;hi&amp;quot;&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
==Conclusion==&lt;br /&gt;
==See Also==&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17822</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17822"/>
		<updated>2009-09-06T18:42:39Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
==Introduction==&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /is/&lt;br /&gt;
  &amp;gt;&amp;gt; 2&lt;br /&gt;
  &amp;quot;This is a string&amp;quot; =~ /hello/&lt;br /&gt;
  &amp;gt;&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
==Conclusion==&lt;br /&gt;
==See Also==&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17821</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17821"/>
		<updated>2009-09-06T18:40:53Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
==Introduction==&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
==Academic Underpinning==&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
==Conclusion==&lt;br /&gt;
==See Also==&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17820</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17820"/>
		<updated>2009-09-06T18:39:19Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
==Introduction==&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
==Improvement for Current Refactoring Tools==&lt;br /&gt;
==Conclusion==&lt;br /&gt;
==See Also==&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17819</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17819"/>
		<updated>2009-09-06T18:38:50Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
==Introduction==&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
==Current Automated Refactoring Tools==&lt;br /&gt;
===Features of some Refactoring Tools===&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
==Improvement to Current Refactoring Tools==&lt;br /&gt;
==Conclusion==&lt;br /&gt;
==See Also==&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17818</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17818"/>
		<updated>2009-09-06T18:36:59Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Research in Refactoring Tools=&lt;br /&gt;
==Introduction==&lt;br /&gt;
==Fundamentals==&lt;br /&gt;
==Automated Refactoring Tools==&lt;br /&gt;
===Features of some Refactoring tools===&lt;br /&gt;
====Java Refactoring Tool, Eclipse====&lt;br /&gt;
====Ruby Refactoring Tool, Aptana====&lt;br /&gt;
====.NET Refactoring Tool, Visual Studio IDE====&lt;br /&gt;
==Conclusion==&lt;br /&gt;
==See Also==&lt;br /&gt;
==References==&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17817</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17817"/>
		<updated>2009-09-06T18:31:58Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hi this is the page of sniper and wiki master=&lt;br /&gt;
==Thank you==&lt;br /&gt;
===Wiki master===&lt;br /&gt;
=====Sniper=====&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17816</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17816"/>
		<updated>2009-09-06T18:31:38Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hi this is the page of sniper and wiki master=&lt;br /&gt;
==Thank you=&lt;br /&gt;
===Wiki master=&lt;br /&gt;
=====Sniper=&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17815</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17815"/>
		<updated>2009-09-06T18:31:17Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Hi this is the page of sniper and wiki master&lt;br /&gt;
==Thank you&lt;br /&gt;
===Wiki master&lt;br /&gt;
=====Sniper&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17814</id>
		<title>CSC/ECE 517 Fall 2009/wiki1a 9 mk</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2009/wiki1a_9_mk&amp;diff=17814"/>
		<updated>2009-09-06T18:29:28Z</updated>

		<summary type="html">&lt;p&gt;Mnallap: Created  a page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi this is the page of sniper and wiki master&lt;br /&gt;
Thank you&lt;br /&gt;
Wiki master&lt;br /&gt;
Sniper&lt;/div&gt;</summary>
		<author><name>Mnallap</name></author>
	</entry>
</feed>