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