Refactoring AOMs For AgilePT2010
Upcoming SlideShare
Loading in...5
×
 

Refactoring AOMs For AgilePT2010

on

  • 1,316 views

 

Statistics

Views

Total Views
1,316
Views on SlideShare
1,312
Embed Views
4

Actions

Likes
0
Downloads
44
Comments
0

2 Embeds 4

http://www.agilept.org 3
http://2010.agilept.org 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Refactoring AOMs For AgilePT2010 Refactoring AOMs For AgilePT2010 Presentation Transcript

    • Agile Refactoring for Making Systems More Adaptable Joseph W. Yoder The Refactory, Inc. June 25, 2010 joe@refactory.com http://www.refactory.com
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • 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.
    • That’s All Slide - 60 Agile Refactoring for Making Systems More Adaptable Copyright 2010, Joseph W. Yoder & The Refactory, Inc.