Monday Morning, Half Day
Refactoring: Improving the Design of Existing Code
Convention Ctr — Room 16
Martin Fowler, ThoughtWorks, Inc.
Josh MacKenzie, ThoughtWorks, Inc.

Almost every expert in object-oriented development stresses the importance of iterative development. As you proceed with iterative development, you need to add function to the existing code base. If you are really lucky, that code base is structured just right to support the new function while still preserving its design integrity. Of course, most of the time we are not lucky, and the code does not quite fit what we want to do. You could just add the function on top of the code base. But soon this leads to applying patch upon patch, making your system more complex than it needs to be. This complexity leads to bugs, and cripples your productivity. Refactoring is all about how you can avoid these problems by modifying your code in a controlled manner. Done well, you can make far-reaching changes to an existing system quickly, and without introducing new bugs. You can even take a procedural body of code and refactor it into an effective object-oriented design. With refactoring as part of your development process you can keep your design clean, make it hard for bugs to breed and keep your productivity high. In this tutorial we’ll show you an example of how a lump of poorly designed code can be put into good shape. In the process we’ll see how refactoring works, demonstrate a handful of example refactorings, and discuss the key things you need to do to succeed. This tutorial is an introduction to refactoring. No prior refactoring experience is assumed and the content covers much the same ground as opening a couple of chapters of the refactoring book.

Attendee Background: developers and analysts

Presenters: Martin Fowler is the Chief Scientist for ThoughtWorks Inc., an Internet professional services provider specializing in the delivery of highly strategic B2B e-Commerce solutions. For a decade he was an independent consultant pioneering the use of objects in developing business information systems. He’s worked with technologies including Smalltalk, C++, object and relational databases, and EJB with domains including leasing, payroll, derivatives trading and healthcare. He is particularly known for his work in patterns, the UML, lightweight methodologies, and refactoring. He has written four books: Analysis Patterns, Refactoring, the award winning UML Distilled, and Planning Extreme Programming.

Josh MacKenzie has been with ThoughtWorks for three years, serving as a developer, architect, and team lead. He has worked on projects in equipment leasing, insurance, and industrial supply and purchasing. These projects have utilized a wide variety of technologies, including J2EE, XML, Forte, and LDAP. Josh has also been instrumental in the exploration and adoption of agile methodologies on ThoughtWorks’ projects. Prior to ThoughtWorks, Josh served as a Senior Engineer for Motorola, Inc. Energy Systems, where he designed and developed real-time testing and analysis software for electrochemical capacitors. He holds a B.A. in Physics and Mathematics, and an almost-M.S. in Chemical Engineering. Josh presented tutorials at JavaCon2000 on “Refactoring” and “Business Objects in J2EE.”

at a Glance
Tutorials by Track
Full Description
of all Tutorials
Final Program