Delphi 2005 Refactoring
Download
Report
Transcript Delphi 2005 Refactoring
Refactoring
Delphi 2005 Win32
© 2001-2005 Craig Murphy
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 Refactoring
2
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 Refactoring
3
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 Refactoring
4
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 Refactoring
5
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 Refactoring
6
Refactoring Safely
How do we ensure that our refactorings have not
altered or broken the original functionality?
Tests
Repeatable Tests
Automated, Repeatable Tests
Ideally, we should write tests before we refactor our
code…
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)
Delphi 2005 Refactoring
7
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 Refactoring
8
Available Refactorings
Delphi 2005
Rename Parameter/Variable
Extract Method
Declare Variable
Declare Field
Extract Resource String
Sync Edit
Find Unit
Delphi 2005 Refactoring
Visual Studio 2005
(Whidbey)
Rename
Extract Method
Encapsulate Field
Extract Interface
Promote Local
Variable to Parameter
Remove Parameters
Reorder Parameters
9
demo
Refactoring Using Delphi 2005
Delphi 2005 Refactoring
10
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 Refactoring
11
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 Refactoring
12
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 handin-hand
Bob Swart - Unit Testing with DUnit/NUnit
Delphi 2005 Refactoring
14
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 Refactoring
15
Summary
“Things should be made as simple as
possible, but no simpler.”
Albert Einstein
Delphi 2005 Refactoring
16
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 Refactoring
17
Resources (Books)
Refactoring: Improving the Design of
Existing Code
Martin Fowler
Addison-Wesley, 1999
ISBN 0-201-48567-2
_____________________________
Refactoring To Patterns
Joshua Kerievsky
Addison-Wesley, 2004
ISBN 0-321-21335-1
Delphi 2005 Refactoring
18
Resources (Books)
Refactoring Workbook
William Wake
Addison-Wesley, 2004
ISBN 0-321-10929-5
Delphi 2005 Refactoring
19
Resources (Books)
test-driven development: A Practical Guide
Dave Astels
Prentice-Hall/Pearson Education, 2003
ISBN 0-13-101649-0
Reviewed BUG developers’ magazine, Nov/Dec 2003
http://www.craigmurphy.com/bug/tdd/review.htm
______________________________________
Test-Driven Development: By Example
Kent Beck
Addison-Wesley, 2003
ISBN 0-321-14653-0
______________________________________
Test-Driven Development in Microsoft.NET
James W. Newkirk; Alexei A. Vorontsov
Microsoft Press, 2004
ISBN 0-7356-1948-4
Delphi 2005 Refactoring
20
Contact and Update Information
Craig Murphy
Updated slides, notes and source code:
http://www.CraigMurphy.com
Delphi 2005 Refactoring
21
Questions?
Delphi 2005 Refactoring
22
Delphi 2005 Refactoring
23