Martin Fowler maintains a list at http://www.refactoring.com/#tools The by far most powerfull refactoring browser I know is the one integrated in IntelliJ IDEA. I also had some good experiences with Instanciations JFactor. Currently I am using Eclipse. Its refactoring support is still evolving, but already quite usefull.
The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus
With my inadequate experience and knowledge on Refactoring, it seems to me that when TheBestSoftwareInTheWorld Inc. makes an IDE and touts its "Industry-level Refactoring Features", they are actually speaking about "Tools->Refactoring->Rename class". Well, I can see the enormous benefit of the above-mentioned feature when someone wants to change the name of a class some other developer invented ages ago, but where do you guys think refactoring has the biggest effect? What is it that developers want from refactoring in their CASE tools?
I have been using Eclipse and have been pretty impressed with its refactorings. Granted this is just a "baby step" as far as tool support -- but it is a step in the right direction. Some of the refactorings are simple things like "rename pkg" (which saves you a boatload in typing). Others are things like "Extract Method". Give it a try
I am going t have to agree with Ilja. IDEA by intelliJ is the simplest and most effective tool i have used for refactoring. I have tried borland's built in refactoring options, and was very dissapointed. I also looked at RefactorIT, it looks impressive, but i hvae never actually tried it, since my IDE of choice is IDEA. just my 2 cents worth ( not much since it is in canadian funds ) Tim
---<br />Nothing is impossible, only improbable !!!
Those two are some of the popular refactorings, sure. There are many others including inlining variables, "pulling up" a method to a base class, and so on. In essence, refactoring is the process of changing (and, hopefully, improving) the internals of a piece of software witout changing the public interface. Refactoring can take place at many different levels, from changing the name of a local variable or re-ordering a few lines in a small method, right up to moving a whole web application from .NET to J2EE. The important thing is that at whatever level you choose, the interface to users or to other software remains constant. In practice, refactoring is at its most useful when accompanied by an automated test framework. If you have a set of automated test "scaffolding" around the piece of software you are refactoring, you can proceed in a series of small, simple steps and re-run the tests after each one to make sure you haven't inadvertently "broken" anything. By judiciously choosing the refactoring steps, you can make sure that with each step the design of the software is immproved. For more details you might want to look at some of the books, such as Bent Beck's "Smalltalk Best Practice Patterns" and Martin Fowler's "Refactoring - improving the design of existing code".
I used RefactorIT a lot during its beta period. It does work well -- a bit too pricey for an IDE add-on, but it does its job. I couldn't justify the cost with most IDEs seeming to work on adding these features. As to what I used mostly: 1. Rename methods, classes, variables, and even packages. 2. Pulling methods up into a base class. The second one is really helpful. The first one is very convenient.
David G. Risner<br />Software Engineer<br />California State University, Los Angeles
I've used JRefactory with JBuilder 5. The refactorings were the common ones (moving variables, and methods, etc), but then those are where you make the really dumb mistakes. :-) I liked it, and found it useful and easy to use. It's free (may even be open source). --Mark