Refactoring Delphi 2005 Win32

Preview:

DESCRIPTION

Refactoring Delphi 2005 Win32. Agenda. Motivation What is Refactoring? When to Refactor Refactoring Safely Refactoring using Delphi 2005 .net example; applies to Win32 Refactoring Using Delphi 5-7 Summary. Motivation. To look at refactoring support in Delphi 2005 - PowerPoint PPT Presentation

Citation preview

© 2001-2005 Craig Murphy

RefactoringDelphi 2005 Win32

Delphi 2005 RefactoringDelphi 2005 Refactoring 2

Agenda

Motivation What is Refactoring? When to Refactor Refactoring Safely Refactoring using Delphi 2005

.net example; applies to Win32 Refactoring Using Delphi 5-7 Summary

Delphi 2005 RefactoringDelphi 2005 Refactoring 3

Motivation To look at refactoring support in Delphi 2005

To consider how “new” features can be used in earlier versions of Delphi If you’re not [knowingly] refactoring now, this session

will give you a flavour of what it’s all about Tool support for earlier versions of Delphi

Ultimately…to become more productive inside the IDE Avoid search’n’replace (and undo!) Avoid manually making a small change in more than

one place Avoid “stupid” cut’n’paste bugs

Delphi 2005 RefactoringDelphi 2005 Refactoring 4

What is Refactoring? “Refactoring is a disciplined technique for

restructuring an existing body of code, altering its internal structure without changing its external behaviour”

--- Martin Fowler

Improving the design of existing code

Minimising the chances of introducing “new” bugs

Delphi 2005 RefactoringDelphi 2005 Refactoring 5

What is Refactoring? Small, localised changes

…sometimes just changing one occurrence, other times changing many occurrences

…sometimes larger, more sweeping refactorings can be applied too

Can be applied by hand, manually Not recommended

not consistent not guaranteed to be repeatable

It’s very likely that you have already been refactoring, but didn’t realise it Everybody wants to improve the design of their existing

code

Delphi 2005 RefactoringDelphi 2005 Refactoring 6

When to Refactor When a piece of code is difficult to understand

Code smells, from the eXtreme Programming community, not exhaustive: Comments Duplicated Code Long Method Conditional logic, switch statement (simulated

inheritance) Large class Magic Numbers Name does not convey intent (uncommunicative name)

Delphi 2005 RefactoringDelphi 2005 Refactoring 7

Refactoring Safely How do we ensure that our refactorings have

not altered or broken the original functionality? Tests Repeatable Tests Automated, Repeatable Tests

Delphi 2005 ships with NUnit and DUnit Offers us an automated testing framework NUnit/DUnit for .net DUnit for Win32 (Delphi 5-7 can use DUnit)

Ideally, we should write tests before we refactor our code…

Delphi 2005 RefactoringDelphi 2005 Refactoring 8

Problems with Refactoring If it ain’t broke, don’t touch it?

Early design decisions may limit future development Performance issues Code reviews

What do you tell your manager? “Refactoring is a pointless exercise, we’ve shipped”

Analogies Car manufacturer Clean desk

You tell your manager that you are improving the code’s inherent value: code is an asset

For most of us, code pays our salary The ability to keep an eye on your assets is important

Delphi 2005 RefactoringDelphi 2005 Refactoring 9

Available RefactoringsDelphi 2005

Rename Parameter/Variable

Extract Method Declare Variable Declare Field Extract Resource String

Sync Edit Find Unit

Visual Studio 2005 (Whidbey)

Rename Extract Method Encapsulate Field Extract Interface Promote Local

Variable to Parameter

Remove Parameters Reorder Parameters

Delphi 2005 RefactoringDelphi 2005 Refactoring 10

demo

Refactoring Using Delphi 2005

Delphi 2005 RefactoringDelphi 2005 Refactoring 11

Refactoring Using Delphi 5-7 What tool support is there?

Productivity and IDE enhancers: Castalia 3

Supports Delphi 5, 6, 7, 8 and 2005 Faithful to Fowler

ModelMaker’s Code Explorer Supports Delphi 5, 6, 7, 8 and 2005

Delphi 2005 RefactoringDelphi 2005 Refactoring 12

Castalia 3 Offers a “Refactoring Explorer” similar to Delphi’s

Refactoring dock window:

Find References Rename Class Move Class Rename Method Extract Method

Add Parameter Rename Local Variable Inline Temporary

Variable/Replace temp with query Split Temporary Variable

Delphi 2005 RefactoringDelphi 2005 Refactoring 14

Summary Code is an asset, refactoring helps us improve

the value of that asset

Refactoring lets us extend the life of an application with very little extra cost

Refactoring and Test-Driven Development go hand-in-hand Bob Swart - Unit Testing with DUnit/NUnit

Delphi 2005 RefactoringDelphi 2005 Refactoring 15

Summary Delphi 2005’s refactorings are a step in the

right direction Let’s hope Corbin opens up the refactoring API Let’s see more refactorings!

Generally, they work, but currently provide some interesting results Particularly if you are extracting a method that is

part of a IF condition

Look out for an article comparing the refactoring results of:

Delphi 2005, Visual Studio.net 2005 (Whidbey), Castalia 3.x, Code Explorer

Delphi 2005 RefactoringDelphi 2005 Refactoring 16

Summary

“Things should be made as simple as possible, but no simpler.”

Albert Einstein

Delphi 2005 RefactoringDelphi 2005 Refactoring 17

Resources (web-sites) Martin Fowler’s refactoring library:

http://www.refactoring.com/

Joshua Kerievsky’s Refactoring To Patterns http://industriallogic.com/xp/refactoring/catalog.html

An Introduction to Test-Driven Development DUnit for Delphi 5-7 csUnit for Delphi 8 and Visual Basic.net http://www.craigmurphy.com/bug

Delphi 2005 RefactoringDelphi 2005 Refactoring 18

Resources (Books)Refactoring: Improving the

Design of Existing CodeMartin FowlerAddison-Wesley, 1999ISBN 0-201-48567-2

_____________________________

Refactoring To PatternsJoshua Kerievsky Addison-Wesley, 2004ISBN 0-321-21335-1

Delphi 2005 RefactoringDelphi 2005 Refactoring 19

Resources (Books)

Refactoring WorkbookWilliam WakeAddison-Wesley, 2004ISBN 0-321-10929-5

Delphi 2005 RefactoringDelphi 2005 Refactoring 20

Resources (Books)test-driven development: A Practical

GuideDave AstelsPrentice-Hall/Pearson Education, 2003ISBN 0-13-101649-0

Reviewed BUG developers’ magazine, Nov/Dec 2003http://www.craigmurphy.com/bug/tdd/review.htm______________________________________

Test-Driven Development: By Example Kent BeckAddison-Wesley, 2003ISBN 0-321-14653-0______________________________________

Test-Driven Development in Microsoft.NETJames W. Newkirk; Alexei A. Vorontsov Microsoft Press, 2004ISBN 0-7356-1948-4

Delphi 2005 RefactoringDelphi 2005 Refactoring 21

Contact and Update Information

Craig Murphy

Updated slides, notes and source code:http://www.CraigMurphy.com

Delphi 2005 RefactoringDelphi 2005 Refactoring 22

Questions?

Delphi 2005 RefactoringDelphi 2005 Refactoring 23

Recommended