The document discusses agile development principles and practices, and how refactoring code supports adapting systems to changes. It covers how agile values individuals, collaboration, and responding to change over rigid processes. Refactoring is encouraged in agile to allow requirements and code to evolve safely. Testing is important for validating changes from refactoring. Examples of refactorings like extract method are provided. The document also discusses using refactoring and design patterns to make systems more adaptable to changing requirements.
Seven systems engineering myths and the corresponding realities
Refactoring AOMs For AgilePT2010
1. Agile Refactoring for Making
Systems More Adaptable
Joseph W. Yoder
The Refactory, Inc.
June 25, 2010
joe@refactory.com
http://www.refactory.com
2. The Refactory Principals
John Brant Don Roberts
Brian Foote Joe Yoder
Ralph Johnson
Refactory Affiliates
Joseph Bergin
Fred Grossman
Bill Opdyke
Slide - 2
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
3. Agile to the Rescue???
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
That is, while there is value in the items on
the right, we value the items on the left more.
…From the Agile Manifesto
Slide - 3
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
4. Agile Principles
Scrum, TDD, Refactoring, Regular Feedback,
Testing, More Eyes, …
Good People! Face-To-Face conversation.
Continuous attention to technical excellence!
Motivated individuals with the environment
and support they need. Retrospectives!
Allow Requirements to Change! Encourage
Software Evolution as needed!
Slide - 4
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
5. Agile Encourages Changes
Very Little Upfront Design!
Piecemeal Growth! Small Iterations!
Late changes to the requirements
of the system!
Continuously Evolving the Architecture!
Adapting to Changes requires the code to
change and Refactoring supports changes
to the code in a “safe” way.
Slide - 5
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
6. Agile & Refactoring
A key part of Agile is to allow things to
change and adapt as dictated by
business needs!
To support these changes, Refactoring is
encouraged by most Agile practitioners.
Agile has helped Refactoring be accepted
into the mainstream development
process (even sometimes encouraged).
Slide - 6
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
7. Ground Breaking Work
Before there was Agile…
Started at the University Of Illinois
Bill Opdyke & Don Roberts PHD Thesis
with Professor Ralph Johnson
Refactoring Browser by John Brant and
Don Roberts (first commercial tool)
Slide - 7
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
8. Refactoring Definition
Refactoring is the process of changing a
software system in such a way that it
does not alter the external behavior of
the code, yet improves its internal
structure…Martin Fowler, Refactoring
Improving the Design of Existing Code;
Addison Wesley , 1999
Slide - 8
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
9. What is Refactoring
Refactoring is a controlled technique for improving the
design of an existing code base
Small behavior-preserving transformations,
• Each of might be "too small to be worth doing“
• Cumulative effect of transformations is significant
• Small steps help reduce the risk of introducing errors
• Avoid having the system broken while you are
carrying out the restructuring
• Gradually refactor a system over a period of time
Slide - 9
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
10. A Simple Refactoring
Create Empty Class
Object
Object
NewAbstract
Concrete1 Concrete2
Concrete1 Concrete2
Slide - 10
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
11. A Complex Refactoring
Array
MatrixRep
Matrix
rep
Matrix
SparseRep ArrayRep IdentityRep
Adapted from Don Roberts, The Refactory, Inc. Slide - 11
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
12. Refactoring Code Smells
A code smell is a hint that something has gone wrong
somewhere in your code. Use the smell to track
down the problem. KentBeck (with inspiration from
the nose of Massimo Arnoldi) seems to have coined
the phrase in the "OnceAndOnlyOnce" page, where
he also said that code "wants to be simple". Bad
Smells in Code was an essay by KentBeck and
MartinFowler, published as Chapter 3 of Refactoring
Improving The Design Of ExistingCode.
----Wards Wiki
Slide - 12
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
13. Code Smells Review
Duplicate Code, Long Method, Large Class,
Long Parameter List, Divergent Change,
Shotgun Surgery, Feature Envy, Data Clumps
Primitive Obsession, Switch Statements
Parallel Inheritance, Lazy Class
Speculative Generality, Temporary Field
Message Chains, Middle Man
Inappropriate Intimacy, Incomplete Lib Classes
Data Class, Refused Bequest, Comments
Slide - 13
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
14. Comments
We are not against comments but…
If you see large methods that have
places where the code is commented,
use Extract Method to pull that out to a
comment
Slide - 14
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
15. Comments Example
(Extract Method)
void printOwing (double amount) {
printBanner();
//print details
System.out.println (name: “ + _name);
System.out.println (amount: “ + amount);
…}
void printOwing (double amount) {
printBanner();
printDetails();
…}
void printDetails (double amount) {
System.out.println (name: “ + _name);
System.out.println (amount: “ + amount);} Slide - 15
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
16. Extract Method Mechanics
Create a new method and name it after the intention of
the code to extract.
Copy the extracted code from the source to the new
method.
Scan the extracted code for references to any variables
that are local to the source method.
See whether any temps are used only within extracted
code.
Pass into target method as parameters local-scope
variables that are read from the extracted code.
Replace the extracted code in the source method.
Slide - 16
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
17. Remove Method with
Method Object
Class Order …
double price() {
double primaryBasePrice;
double secondaryBasePrice;
double tertiaryBasePrice;
// long computation;
…}
Order PriceCalculator
price() primaryBasePrice
1 secondaryBasePrice
tertiaryBasePrice
return new PriceCalculator(this).compute() compute()
Slide - 17
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
18. Remove Method to
Method Object Mechanics
Create a new class named after method.
Give the new class a final field for the object
that hosted the original method.
Give the new class a constructor for the original
object and each parameter.
Give the new class a compute method.
Copy the body of original method to compute.
Compile.
Replace the old method with the one that
creates the new object and calls compute.
Slide - 18
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
19. Agile & Testing
Many Agile practices highly encourage
Testing as one of their core practices.
Processes like XP support developers
writing many unit tests (XUnit ).
Test Driven Development (TDD) is
becoming highly accepted in Agile.
Testing was a key principle of Refactoring
before there was Agile!
Slide - 19
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
20. Prerequisites of Refactoring
Since you are changing the code base,
it is IMPORTANT to validate with tests.
There are also a time to refactor and a
time to wait.
Need both Unit Testing and Integrated
Tests for making sure nothing breaks
Slide - 20
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
21. Deciding Whether A
Refactoring is Safe
"A refactoring shouldn't break a program.”
What does this mean?
A safe refactoring is behavior preserving.
It is important not to violate:
naming/ scoping rules.
type rules.
"The program should perform the same
after a refactoring as before.”
Satisfying timing constraints.
Slide - 21
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
22. Using Standard Tools
To be safe, must have tests
Should pass the tests before
and after refactoring
Commercial Testing Tools
Kent Beck’s Testing Framework
(SUnit, JUnit, Nunit, …)
Take small steps, testing between each
Java and C# tools are getting better
Slide - 22
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
23. Catalogue of Refactorings
Composing Method
Moving Features
Organize Data
Simplifying Conditionals
Simpler Method Calls
Generalization
From Fowlers Book
Slide - 23
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
24. Refactoring and
Design Patterns (1)
What varies Design Pattern
Algorithms Strategy, Visitor
Actions Command
Implementations Bridge
Response to change Observer
Slide - 24
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
25. Refactoring and
Design Patterns (2)
What varies Design Pattern
Interactions between objects Mediator
Factory Method, Abstract
Object being created Factory, Prototype
Structure being created Builder
Traversal Algorithm Iterator
Object interfaces Adapter
Object behavior Decorator, State
Slide - 25
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
26. Refactoring Summary
We have seen the mechanics for
some of the Refactorings.
When you find smelly code, you often
apply Refactorings to clean your code.
Refactorings do often apply
Design Patterns.
Slide - 26
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
27. Building a System to Change
Sometimes it pays off to build a system that
can respond quickly to change!
Slide - 27
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
28. Allowing Systems to Adapt
Requirements change within
application’s domain.
Domain Experts know their domain best.
Business Rules are changing rapidly.
Applications have to quickly adapt to
new business requirements.
Agile Development Welcomes Changes to the
Requirements, even late in the development!
One way to Adapt is to just Refactor to new
business requirements…though sometimes…
Slide - 28
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
29. Forces – Shearing Layers
Who (Business Person, Analyst, Developer)
What (Business Rule, Persistence Layer,…)
When (How often, How fast)
There is a different rate of change
on the system.
Foote & Yoder - Ball of Mud PLoPD4
Slide - 29
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
30. Newborn Screening
Refactoring Example
Doctor, HealthProf.
Hospital, Lab
Blood Specimen
Mother, Infant
Slide - 30
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
31. Medical Observation –
Basic OO Design Model
Person * Observation
Measurement Trait
Quantity
traitValue
unit convertTo:
amount
expressOnUnit:
expressOnUnits:
PhysicalMeasure Blood
EyeColor HairColor Gender …
Height Weight FeedingType Hearing Vision
…
What happens when a new observation is required?
Slide - 31
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
32. Observation Design
(1st Design)
Person Observation
ObservationType
1 * -recordedDate : Date * 1
+address() -observedDate : Date -phenomenon : Symbol
+phone() -duration : TimePeriod
+name() +phenomenon()
Quantity
Measurement Trait
1 1
-unit : Unit
-amount : Number
+expressOnUnit(aUnit : Unit) +observationValue() +observationValue()
+expressOnUnits(unitCollection : Collection)
Slide - 32
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
33. Observation Design
Example
Height: 3 feet
Eyes Color: Blue
Name: John Smith
Mother: Sue Smith
Father:
Address:
Phone:
Slide - 33
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
34. Observation Design
(instance diagram)
aPerson
name <John Smith>
obsCollection
anObservationType
aMeasurement
#height
type
value
aQuantity
value <3>
unit <ft>
aTrait
type anObservationType
value <blue> #eyeColor
Slide - 34
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
35. Composing Observations
Observations can be more complex
Cholesterol
Components: HDL, LDL
Blood Pressure
Components: Systolic, Diastolic
Vision
Components: Left Eye, Right Eye
Slide - 35
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
36. Composite Observation Design
(1st Refactoring)
Person
+address()
+phone()
+name()
Observation
ObservationType
-recordedDate : Date
-phenomenon : Symbol -observedDate : Date 1..n
-duration : TimePeriod
+phenomenon()
Quantity
Measurement Trait CompositeObservation
-unit : Unit
-amount : Number -observations : Collection
+expressOnUnit(aUnit : Unit) +observationValue() +observationValue()
+expressOnUnits(unitCollection : Collection)
Composite Pattern (GOF)
Make sure all tests still pass! Slide - 36
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
37. Observation Design
Example
Height: 3 feet
Eyes Color: Blue
Name: John Smith
Mother: Sue Smith Blood Pressure:
Father: Systolic: 120 mmHg
Address: Diastolic: 80 mmHg
Phone:
Slide - 37
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
38. Composite Observation Design
(instance diagram)
anObservType
<#BloodPressure>
aCompObs
aMeasurement anObserType
<120 mmHg> <#SYSTOLIC>
anotherMeasurement anObser-Type
<80 mmHg> <#DIASTOLIC>
Slide - 38
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
39. Composite and Primitive
Observation Design
What we know about John?
aPerson
name <John Smith>
obsCollection
EyesColor: Blue Height: 3 feet BloodPressure: 120/80
Systolic: 120 mmHg
Diastolic: 80 mmHg
Slide - 39
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
40. Validating Observations
Each Observation has its own set
of legal values.
Baby’s Weight: [0 30] pounds
HepatitisB: {positive, negative}
Left/Right Vision: {normal, abnormal}
GUI can enforce legal values
but we want business rules in domain
objects
Slide - 40
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
41. Validating Observations Design
(2nd Refactoring)
ObservationType
Validator
-phenomenon : Symbol
-validator : Validator
DiscreteValidator NullValidator RangedValidator
-descriptorSet : Collection -intervalSet : Collection
-validUnit : Unit
Slide - 41
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
42. Overall Observation Design
Validator
DiscreteValidator RangedValidator NullValidator
Party descriptorSet intervalSet
validUnit
Observation
ObservationType recordedDate
type comments
Measurement Trait CompositeObservation
value value values
value value
value: value:
convertTo:
Quantity
First make sure original test cases pass and
then add new test cases for the validators!
Is everything an Observation?
How does the model specify the structure of the Composite?
What is the relationship between Trait and DiscreteValidator?
Slide - 42
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
43. Observation Design
Validator
validatorName
ObservationType isValid: obsValue
phenomenonType
isValid: obsValue
DiscreteValidator RangedValidator NullValidator
descriptorSet intervalSet
validUnit
PrimitiveObservation CompositeObservation
Type Type Party
Observation
recordedDate
comments
isValid
Quantity
unit
CompositeObservation Primitive Observation quantity
observationValue convertTo:
DiscreteValues
Extend the Design by adding Composite to Type
-- Refactor the Metadata
Slide - 43
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
44. Observation Design
Validator
validatorName
ObservationType isValid: obsValue
phenomenonType
isValid: obsValue
DiscreteValidator RangedValidator NullValidator
descriptorSet intervalSet
validUnit
PrimitiveObservation CompositeObservation
Type Type Party
Observation
recordedDate
comments
isValid
Quantity
unit
CompositeObservation Primitive Observation quantity
observationValue convertTo:
Operational level DiscreteValues
Extend the Design by adding Composite to Type
-- Refactor the Metadata
Slide - 44
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
45. Observation Design
Validator
validatorName
ObservationType Knowledge level isValid: obsValue
phenomenonType
isValid: obsValue
DiscreteValidator RangedValidator NullValidator
descriptorSet intervalSet
validUnit
PrimitiveObservation CompositeObservation
Type Type Party
Observation
recordedDate
comments
isValid
Quantity
unit
CompositeObservation Primitive Observation quantity
observationValue convertTo:
DiscreteValues
Extend the Design by adding Composite to Type
-- Refactor the Metadata
Slide - 45
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
46. Observation Design
(instance diagram)
anObserv-Type
<#COMP-GAL>
aCompObs
aMeasurement anObser-Type aRangedValidator
<aQuantity> <#GAL>
anotherMeasurement anObser-Type anotherRangedValidator
<anotherQuantity> <#UDT>
Slide - 46
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
47. Observation Design
(instance diagram)
anInfant
name aDiscreteValidator
obsCollection
anObservationType aRangedValidator
#GestationalAge
aMeasurement
type
value
aQuantity
value <36>
unit <weeks>
anObserv-Type
<#COMP-GAL>
aCompObs
aRangedValidator
aMeasurement anObser-Type
<aQuantity> <#GAL>
anotherRangedValidator
anotherMeasurement anObser-Type
<anotherQuantity> <#UDT>
Slide - 47
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
48. Observations: TypeObject
ObservationType TypeObject
phenomenonType 1 descriptor 1..* Observation
isValid: obsValue instance recordedDate
1..* elements comments
elements 1..* isValid
Quantity
PrimitiveObservation CompositeObservation unit
Type Type value 1..* quantity
CompositeObservation Primitive Observation
observationValue convertTo:
Knowledge level DiscreteValues
dvalue 1..*
Operational level
Slide - 48
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
49. Observations: Properties
Party
properties
1..*
1..* Observation
instance recordedDate
comments
elements 1..* isValid
Quantity
unit
value 1..* quantity
CompositeObservation Primitive Observation
observationValue convertTo:
Knowledge level
dvalue 1..* DiscreteValues
Operational level
Slide - 49
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
50. Observations: TypeSquare
contDescr 1
ObservationType 1..* varType PartyType
phenomenonType 1 descriptor
isValid: obsValue 1 descriptor 1..*
1..* elements
Party
PrimitiveObservation CompositeObservation
Type Type properties
1..*
1..* Observation
instance recordedDate
comments
elements 1..* isValid
Quantity
unit
value 1..* quantity
CompositeObservation Primitive Observation
observationValue convertTo:
Knowledge level
Operational level dvalue 1..* DiscreteValues
Slide - 50
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
51. Observations: Strategy
1..* type
ObservationType Validator
phenomenonType guard 1
validatorName
isValid: obsValue isValid: obsValue
1..* elements
PrimitiveObservation CompositeObservation DiscreteValidator RangedValidator NullValidator
Type Type descriptorSet intervalSet
validUnit
Knowledge level
Operational level
Slide - 51
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
52. Medical Observations Design
1..* type contDescr 1
Entities guard 1
Validator
validatorName
ObservationType 1..* varType PartyType isValid: obsValue
phenomenonType 1 descriptor
isValid: obsValue 1 descriptor 1..*
1..* elements
Party DiscreteValidator RangedValidator NullValidator
descriptorSet intervalSet
PrimitiveObservation CompositeObservation validUnit
Type Type properties
1..*
1..* Observation
Behavior
instance recordedDate
comments
elements 1..* isValid
Quantity
unit
value 1..* quantity
CompositeObservation Primitive Observation
observationValue convertTo:
Knowledge level
Operational level dvalue 1..* DiscreteValues
Attributes
Slide - 52
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
53. Strategies/Interpreters/RuleObjects
(Behavior/Methods)
SomeStrategy Entity
1
*
-sharedAttributes : someType -specificAttribues : type
+sharedInterface() * +someOperations()
RuleObject
Strategy1 Strategy2
... StragegyN
*
1
1
Strategy2.1 Strategy2.2 PrimitiveRule CompositeRule
ANDCondition ORCondition NOTCondition
Design Patterns - GOF95
Composite Strategies Interpreter Slide - 53
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
54. Composite Strategies
Problem: Strategy leads to a big
class hierarchy, one class for
each kind of policy.
Solution: Make Composite
Strategies using Primitive
Operations.
=> Interpreter pattern
Slide - 54
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
55. Adaptive Object Model
“Common Architecture”
-children * * -children
Accountability -type
1
AccountabilityType
Classes with
1
Attributes and
1 1 Relationships
1 -accountabilities 1 -accountabilitieTypes
Behavior
-children ** -children * *
-rules *
Entity -type EntityType Rule
1 1 1
1 1 +valueUsing:()
1 1 -attributeTypes
-attributes * *
* 1
*
Attribute AttributeType Constant CompositeRule
+name +value
-type +type 1 * 1
+valueUsing:()
*
Operational Knowledge (meta) TableLookup BinaryOperation
*
Slide - 55
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
56. Process for Developing
Adaptable Systems
Developed Iteratively and Incrementally.
Be Agile, Scrum, XP, Retrospective
Get Customer Feedback early and often.
User Scenarios – User Stories…
Add flexibility only when and where needed.
Provide Test Cases and Suites for both the
Object-Model and the Meta-Model.
Develop Support Tools and Editors for
manipulating the metadata.
Very similar to Evolving Frameworks
by Roberts and Johnson PLoPD3
Slide - 56
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
57. Refactoring Addresses Some
Key Leverage Points
Refactoring is a technique that works with Brooks’
“promising attacks” (from “No Silver Bullet”):
buy rather than build: restructuring interfaces to support
commercial SW
grow don’t build software: software growth involves
restructuring (isn’t this core to Agile???)
requirements refinements and rapid prototyping:
refactoring supports such design exploration, and
adapting to changing customer needs
support great designers: a tool in a designer’s tool chest.
Slide - 57
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
58. Papers and Web Sites
Bill Opdyke’s Thesis
Don Robert’s Thesis
http://st-www.cs.illinois.edu/users/droberts/thesis.pdf
Refactoring Browser
http://st-www.cs.illinois.edu/users/brant/Refactory
Evolving Frameworks
http://st-www.cs.uiuc.edu/users/droberts/evolve.html
Extreme Programming
http://www.c2.com/cgi-bin/wiki?ExtremeProgramming
Slide - 58
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
59. More Web Sites
Wiki wiki web
http://c2.com/cgi/wiki?WikiPagesAboutRefactoring
The Refactory, Inc.
http://www.refactory.com
Martin Fowler’s Refactoring Pages
http://www.refactoring.com/
Adaptive Object Models
http://www.adaptiveobjectmodel.com/
Slide - 59
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.
60. That’s All
Slide - 60
Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.