134
1 eXtreme Programming חחחחחחחחחח חחחחחח חחחחחחח חחחחח ח"ח חחחחח חחח חחחחחח חחחחחח חחחחחחחחחח חחחחחחח חחחחחחח

eXtreme programming

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: eXtreme programming

1

eXtreme Programmingמתודולוגיה לפיתוח פרויקטי תוכנה

ד"ר אורית חזן

המחלקה להוראת הטכנולוגיה והמדעים

הטכניון

Page 2: eXtreme programming

2

eXtreme Programming מתודולוגיה לפיתוח פרוייקטי תוכנה

Round 1:

What is eXtreme Programming

Why eXtreme Programming?

How eXtreme Programming? Actual implementation

Round 2:

What is eXtreme Programming? Further details

Why eXtreme Programming? Further analysis

How eXtreme Programming? Further elaboration

Page 3: eXtreme programming

3

eXtreme Programming מתודולוגיה לפיתוח פרוייקטי תוכנה

על-סמך ניסיונכם עד היום בפיתוח

תוכנה:

מהן הבעיות המרכזיות המאפיינות

פרויקטי תוכנה?

Page 4: eXtreme programming

4

Google: "problems with software development”

Requirements are complex

Clients usually do not know all the requirements in advance

Requirements may be changing

Frequent changes are difficult to manage

Process bureaucracy (documents over development)

It takes longer

The result is not right the first time

It costs more

Applying the wrong process for the product

Problems in software development

Page 5: eXtreme programming

5

בעיות מאפיינות של פרוייקטי תוכנה

הסיבוכיות האמיתית בפיתוח תוכנה

)ולא הטכנולוגי(מקורה בהיבט האנושי

,לקוחות, לו"ז לחוץ ואי-עמידה בו, באגים

הבנה של תוכניות, תקשורת בין חברי צוות,

אי-שיתוף מידע, אינטגרציה, ...

Page 6: eXtreme programming

6

פרויקטי תוכנה: נתונים

75%נחשבים הגדולים הנשלחים ללקוחות ממוצרי התוכנה

: או שאינם בשימוש כלל או שאינם מתאימים ככישלון

.לדרישות הלקוחות Based on: Mullet, D. (July, 1999). The Software Crisis, Benchmarks Online - a monthly

publication of Academic Computing Services 2(7).

בתוכנה בארה"ב נאמדת בכל שנה תיקונם של באגים עלות

ביליון 59.5$ב- The National Institute of Standards and Technology (NIST), New Release of June 28, 2002.

:ב- לשם השוואהQ2 ביליון 200$בתוכנה הושקעו בארה"ב 2003 של

Page 7: eXtreme programming

7

What is eXtreme Programming

מה אתם יודעים עלXP?

Page 8: eXtreme programming

8

What is eXtreme Programming

eXtreme Programming .צמחה בתעשייה

Differences from traditional methodologies Emphasis on people vs. development activities & schedule

XP specifies how to behave; still leaves freedom

12 practices

4 values: feedback, simplicity, communication, courage

The meaning of ‘eXtreme’

Optimum: teams up to 12 developers; can be adjusted

to bigger teams.

Page 9: eXtreme programming

9

Why XP ? Survey:

31 XP/Agile-methods early adopter projects

14 firms

Findings:

Cost reduction: 5-7% on average

Time to market compression: 25-50% reduction

This datum will be explained later

Page 10: eXtreme programming

10

Why XP ?

big companies using XP in at least some capacity

Ford Motor, Chrysler, IBM, HP

smaller software houses:

Mayford Technologies

RoleModel Software

tutorials: Industrial Logic, Object Mentor

Page 11: eXtreme programming

11

How eXtreme Programming?

Two days in

eXtreme Programming

Development Environment

Page 12: eXtreme programming

12

How eXtreme Programming?

Business Day

יישום מיומנויותXP הקשורות להגדרת דרישות

התוכנה ותכנון תהליך הפיתוח

בחירת נושא

התנסות במיומנויות

Page 13: eXtreme programming

13

Business Day

On-site customer

Planning game

Small releases

Simple design

Metaphor

Source: http://www.rolemodelsoftware.com/

Page 14: eXtreme programming

14

Business Day – Reflection

5 practices (out of 12)

Planning gameOn-site customerSmall releasesSimple designMetaphor

Planning game

All developers participate

All have the same load

All developers get an overview of the entire development process

Simple means

Very detailed

Levels of abstraction

Page 15: eXtreme programming

15

Business Day – Reflection

5 practices (out of 12)

Planning gameOn-site customerSmall releasesSimple designMetaphor

On-site customer

Customer’s on-going

feedback

Small releases

On-going opportunity to

update/change

requirements

Page 16: eXtreme programming

16

Business Day – Reflection

5 practices (out of 12)

Planning gameOn-site customerSmall releasesSimple designMetaphor

Simple design

Develop only what is

needed for your

development task

Metaphor Bridges customers-

developers-business gaps

Page 17: eXtreme programming

17

הפסקה

Page 18: eXtreme programming

18

Development Day

Stand-up meeting The development environment

Pair programming Test driven development (acceptance, unit-test) Code standards Refactoring Simple design Continuous integration (one integration machine) Collective ownership Sustainable pace (40-hour week)

Source: http://www.rolemodelsoftware.com/

Page 19: eXtreme programming

19

Development Day - Reflection

The development environment All see all; fosters communication

Stand-up meeting All know what all do

Pair programming Each task is thought on two levels of abstraction

Unit test (automatic test first) First: improves understanding; Automatic: testing is easy

Developers program and test

Testing becomes manageable

Success vs. failure

Page 20: eXtreme programming

20

Development Day - Reflection

Continuous integration

Reduces integration risks in later stages

Collective ownership Important in companies with high turnover

Coding standards

Refactoring and simple design Code improvement is part of the methodology (though it doesn't

produce code), gradual process

Sustainable pace (40-hour week) Intense and productive work, developers are not tired

Page 21: eXtreme programming

21

Development and Business Days – Reflection

Code/Technical Perspective

Human/Social Perspective

Refactoring

Simple design

Coding standards

Testing

Continuous integration

Small releases

Collective ownership

Pair programming

Sustainable pace

On-site customer

Planning game

Metaphor

Page 22: eXtreme programming

22

The 12 XP practices

Note:nothing is new; gathering the practices together is XP uniqueness

Source: Beck, K. (2000). eXtreme Programming explained, Addison Wesley.

Page 23: eXtreme programming

23

eXtreme Programming מתודולוגיה לפיתוח פרוייקטי תוכנה

Round 1:

What is eXtreme Programming

Why eXtreme Programming?

How eXtreme Programming?

Round 2:

What is eXtreme Programming? Further details

Why eXtreme Programming? Further analysis

How eXtreme Programming? Further elaboration

Page 24: eXtreme programming

24

What is eXtreme Programming

Differences from traditional methodologies

All developers are involved with requirements-design-code-testing

Emphasis on people vs. development activities & schedule

XP specifies how to behave; still leaves freedom and place for creativity

The meaning of ‘eXtreme’

12 practices

4 values: feedback, simplicity, communication, courage

Page 25: eXtreme programming

25

What is eXtreme Programming

Agile Software Development Methodology

Other agile methods: SCRUM, Feature Driven

Development, DSDM

All acknowledge that the main issue of software

development is people: customers, communication

Manifesto for Agile Software Development: http://

agilemanifesto.org/

eXtreme Programming: Kent Beck, 1996, Chrysler

Page 26: eXtreme programming

26

Why XP ?

You do not do XP to save money;

However, XP shortens time to market

XP is a mature software development

method

Page 27: eXtreme programming

27

Why XP ?

Survey:

31 XP/Agile-methods early adopter projects, 14 firms

Findings:

Cost reduction: 5-7% on average

Time to market compression: 25-50% reduction in

time

Page 28: eXtreme programming

28

Why XP? – Analysis Shorter development period:

Code is easy-to-work with:

less bugs: unit tests

code is more readable & workable (invest now to gain benefits

later):pair programming, refactoring, coding standards

Development is manageable and controlled:

accurate estimation: small releases

meets customer needs: customer on-site, planning game, acceptance

tests

Page 29: eXtreme programming

29

Why XP? – Analysis Shorter development period )cont(:

Knowledge sharing, if one leaves everything continues

as usual: pair programming, collective ownership

Production is increased: pair programming (work all the time),

sustainable pace

Cost for requirements change/update/elaboration is

CONSTANT: simple design, planning game (redundant features

are not added by customer and developers)

Page 30: eXtreme programming

30

Why XP ?Barry W. Boehm (1981). Software Engineering Economics,

Englewood Cliffs, N.J.: Prentice Hall.

63 software development projects in corporations such as IBM.

Phase of requirement change Cost Ratio

Requirements  1

  Design 3-6

Coding 10

  Development testing 15-40

  Acceptance testing 30-70

  Operation 40-1000

Page 31: eXtreme programming

31

Why XP ? Under the assumption that “the later a requirements is

introduced the more expensive it is”, customers (and

developers) try to make a “complete” list of requirements.

Under the assumption that “cost for introducing an update in

the requirements is constant”, customers (and developers) do

not assume what the customer will need and develop exactly

and only what is needed.

Page 32: eXtreme programming

32

Why XP ?

You do not use XP to save money;

However, XP shortens time to market

XP is a mature software development

method (at least CMM level 3)

Page 33: eXtreme programming

33

XP in Practice: Conceptual Changes

XP encourages:

Cooperation (vs. knowledge-is-power)

Simplicity (vs. habit-of-high-complexity)

Change in work habits

Page 34: eXtreme programming

34

Why XP? – Cognitive and Social Analysis

הסבר הצלחתXP מנקודת מבט קוגניטיבית

וחברתית.

Prisoner’s Dilemma Analysis of XP within the framework of the Prisoner’s

dilemma

Constructivism Analysis of XP within the framework of constructivism

GAPS (abstraction, satisfaction)

Page 35: eXtreme programming

35

Social analysis

Page 36: eXtreme programming

36

Game Theory

ניתוח התנהגות וקבלת החלטותכאשר תוצאות הנובעות מהחלטות

של כל אחד מהמשתתפים ב"משחק" תלויות בהחלטות של המשתתפים

האחרים.

Page 37: eXtreme programming

37

The Prisoner’s Dilemma: A’s perspective

B cooperatesB competes

A cooperates+5-10

A competes+100

Page 38: eXtreme programming

38

The Prisoner’s Dilemma: The case of software engineering – A’s perspective, Bonus

B cooperatesB competes

A cooperates50%20%

A competes80%0%

Page 39: eXtreme programming

39

The Prisoner’s Dilemma: The case of software engineering – A’s perspective

B cooperatesB competes

A cooperates+5-10

A competes+10-20

Page 40: eXtreme programming

40

The Prisoner’s Dilemma: The case of software engineering

בד"כ מפתחי תוכנה מתבקשים לשתף פעולה עם

עמיתיהם.

למפתחי התוכנה אין אפשרות לוודא ששיתוף הפעולה

שלהם יהיה הדדי.

:כל חברי הצוות יעדיפו לבגוד (לא לפי דילמת האסיר

לשתף פעולה).

התנהגות כזו בפיתוח תוכנה מביאה לתוצאות הגרועות

ביותר לכל חברי הצוות.

Page 41: eXtreme programming

41

The Prisoner’s Dilemma: The case of eXtreme Programming

לעבוד על-פי התחייבות חברי הצוותXP מבטיחה שכל

. XPחברי הצוות יעבדו על-פי המיומנויות של

כל חבר(ת) צוות יודע(ת) שגם שאר חברי הצוות

מחויבים לעבוד לפי אותן מיומנויות.

(המהווה את המקור לדילמת האסיר) גורם האי-וודאות

לא קיים.

.כולם ישתפו פעולה ויפיקו את הרווחים מכך

Page 42: eXtreme programming

42

The Prisoner’s Dilemma: The case of Extreme Programming – A’s perspective

B cooperates

A cooperates+5

Page 43: eXtreme programming

43

In what follows-מיומנויות של 4 ערכים ו- 2ביחס ל XP:

.מהי המשמעות של שיתוף פעולה הנובעת מהם

מהעובדה שכל הצוות מחויב לעבוד על-פי XP נובע שכל

אחד ואחת מחברי הצוות אינם ניצבים בפני הדילמה האם

.(באותו מובן הנובע מהערך או המיומנות) לשתף פעולה

כל חברי הצוות משתפים פעולה ומרוויחים מהיתרון שנובע

. מאותו ערך או מיומנות

.כל פרויקט התוכנה נתרם משיתוף פעולה זה

Page 44: eXtreme programming

44

The Prisoner’s Dilemma: The value of courage

:שיתוף פעולה

.כל חברי הצוות מתריעים כאשר יש בעיה

.כל חברי הצוות אינם מתביישים להודות כאשר חסר להם ידע

.כל חברי הצוות אינם חוששים לשנות קוד של עמיתיהם

מכיוון שסביבת הפיתוח היאXP כל אחד(ת) יודע(ת) שהם לא ,

ולכן הם לא עומדים בפני הדילמה האם courageהיחידים שיפגינו

לשתף פעולה.

.הפרויקט וחברי הצוות מרוויחים מערך זה

Page 45: eXtreme programming

45

The Prisoner’s Dilemma: The value of simplicity

:שיתוף פעולה יישום כל הפעולות הקשורות בפיתוח התוכנה בצורה

הפשוטה ביותר.

.למשל, לא מסבכים קוד

כולם מחויבים לעבוד על-פיXP ולכן מחויבים גם לערך הזה.

.לא ניצבים בפני הדילמה האם לשתף פעולה

.כולם משתפים פעולה וכולם מרוויחים

Page 46: eXtreme programming

46

The Prisoner’s Dilemma: Collective Ownership

In practice “[a]nyone can change any code

anywhere in the system at any time.” (Beck, 2000).

:הסתרת קוד. בגידה:שיתוף בקוד. שיתוף פעולה

כולם עובדים על-פי XP.ולכן גם על-פי מיומנות זו

.לא עומדים בפני הדילמה האם לשתף פעולה

כולם משתפים פעולה, הדבר תורם לתהליכי פיתוח

התוכנה וכולם יוצאים נשכרים.

Page 47: eXtreme programming

47

The Prisoner’s Dilemma: Coding Standards

:פיתוח לפי הסטנדרטים שנקבעו. שיתוף פעולה

:פיתוח לא על-פי הסטנדרטים שנקבעו.בגידה

כל חברי הצוות מחויבים לעבוד על-פיXP בכלל

ועל-פי מיומנות זו בפרט.

.חברי הצוות אינם מתלבטים האם לשתף פעולה

כל חברי הצוות משתפים פעולה ומרוויחים

מהיתרונות שבפיתוח קוד על פי סטנדרטים.

Page 48: eXtreme programming

48

The Prisoner’s Dilemma: Simple Design

נובע מהערךSimplicity

:פיתוח בגידה: פיתוח פשוט ככל האפשר; שיתוף פעולה

מסובך היכול להקשות על הבנה.

כולם מחויבים לעבוד על-פיXP.ולכן גם על-פי מיומנות זו

.חברי הצוות אינם מתלבטים האם לשתף פעולה

כולם משתפים פעולה ומרוויחים מהיתרונות שבפיתוח

קוד פשוט ככל שניתן.

Page 49: eXtreme programming

49

The Prisoner’s Dilemma: Sustainable Pace

שעות, למעט מקרים חריגים.40שבוע עבדה בן

:מפתחים עייפים אינם מייצרים קוד איכותי. רציונאל

מיומנויות אחרות)e.g., Pair Programming( .מבטיחות ניצול יעיל של זמן זה

:עבודה במשך שעות בגידה: ביום; 8-9עובדים שיתוף פעולה

. (למשל, על מנת להרשים)רבות יותר

כל חברי הצוות מחויבים לעבוד לפיXP.ולכן גם לפי מיומנות זו

.חברי הצוות אינם מתלבטים האם לשתף פעולה

כולם משתפים פעולה ומרוויחים מהיתרונות שבפיתוח קוד

בקצב שניתן לעמוד בו.

Page 50: eXtreme programming

50

Cognitive analysis

Page 51: eXtreme programming

51

Why XP?

:הבנת סביבת פיתוח תוכנה היא תהליך טענה

תומכת בתהליך הבנה זה. XPמורכב;

:קונסטרקטיביזם.תיאוריה המסבירה תהליכי למידה

ידע חדש נבנה בהדרגה על בסיס מושגים קיימים, ע"י ארגון

ועידון מבנים מנטאליים קיימים.

למשוב שמתקבל מסביבת הלמידה תפקיד חשוב בתהליך

הלמידה.

Page 52: eXtreme programming

52

XPניתוח קוגניטיבי של

המיומנויות של 12 מתוך 4בחינת XP משקפיים דרך

. קונסטרוקטיביסטיות

בהבנה הדרגתית של סביבת מיומנויות אלו תומכים

.הפיתוח

הערכים Communication -ו Feedback .אף הם תורמים

Page 53: eXtreme programming

53

XP practices - Cognitive analysis

• Small releasesGradual process of knowledge construction re requirements

• RefactoringGradual process of knowledge construction re code's structure and

readability

• Test driven development

• Metaphor

Page 54: eXtreme programming

54

Cognitive and Social Analysis of XP practices

Cognitive analysisSocial analysis

Refactoring

Metaphor

Test-first

Small releases

Collective ownership

Sustainable pace

Simple design

Coding standards

Page 55: eXtreme programming

55

Bridging Cognitive and Social Gaps

in Software Development using

Extreme Programming

Based on:

Hazzan, O. and Dubinsky, Y. (2003). Bridging cognitive and social chasms in software

development using Extreme Programming, Proceedings of the Fourth International

Conference on eXtreme Programming and Agile Processes in Software Engineering,

Genova, Italy, pp. 47-53.

Page 56: eXtreme programming

56

מה משותף לאמירות הבאות?

אני חייבת לקבל תמונה כללית של המערכת כדי"

לדעת האם המתודה הזאת רלוונטית בכלל. "

אני באמת חושב שאם הייתי יכול לחשוב על שתי"

המחלקות האלה באופן יותר מופשט, הייתי מגיע

למסקנה שניתן לייצגן ע"י מחלקה אחת. אבל אני

חייב לעבור למשימת הפיתוח הבאה שלי".

Page 57: eXtreme programming

57

מה משותף לאמירות הבאות?

אני צריכה קצת זמן לחשוב על הקוד מבלי

להיות מוצפת בכל הפרטים. אני כמעט בטוחה

שאם הייתי יכולה לעזוב עכשיו וללכת לשחות,

הייתי יכולה למצוא פתרון. אבל. מה לעשות, אני

חייבת להישאר מאוחר כמו כל הצוות שלי". הלוואי והייתי יכול להצטרף למתכנת כאשר"

הוא יכתוב את הקוד. למה? אני לא בטוח אם

".C הזה ב- designניתן לממש את ה-

Page 58: eXtreme programming

58

מה משותף לאמירות הבאות?

אני חייבת לקבל תמונה כללית של המערכת כדי"

לדעת האם המתודה הזאת רלוונטית בכלל. "

אני באמת חושב שאם הייתי יכול לחשוב על שתי"

המחלקות האלה באופן יותר מופשט, היית מגיע

למסקנה שניתן לייצגן ע"י מחלקה אחת. אבל אני

חייב לעבור למשימת הפיתוח הבאה שלי".

Page 59: eXtreme programming

59

מה משותף לאמירות הבאות?

אני צריכה קצת זמן לחשוב על הקוד מבלי

להיות מוצפת בכל הפרטים. אני כמעט בטוחה

שאם הייתי יכולה לעזוב עכשיו וללכת לשחות,

הייתי מוצאת איזה פתרון. אבל מה לעשות, אני

חייבת להישאר מאוחר כמו כל הצוות שלי". הלוואי והייתי יכול להצטרף למתכנת שיכתוב"

את הקוד. למה? אני לא בטוח אם ניתן לממש

.C הזה ב- designאת ה-

Page 60: eXtreme programming

60

מה משותף לאמירות הבאות?

של ... תמונה כלליתאני חייבת לקבל •

לחשוב על שתי אני באמת חושב שאם הייתי יכול•

... המחלקות האלה באופן יותר מופשט

מבלי להיות אני צריכה קצת זמן לחשוב על הקוד •

. ... מוצפת בכל הפרטים

הזה ב- designניתן לממש את ה- אני לא בטוח אם•

C.Abstraction

Level

Page 61: eXtreme programming

61

Abstraction levelsingle multiple

A Cognitive Gap: Abstraction

XP מנחה חשיבה ברמות הפשטה שונות ואת המעבר ביניהן.

Page 62: eXtreme programming

62

abstraction gap: single vs. multiple abstraction level

Planning Game

the release planning game is carried out on a high level of

abstraction; in the release planning a global view is gained

the iteration planning game is carried out on a lower level of

abstraction; details are added only with respect to the

forthcoming iteration

the entire team participates in the planning game; developers

see the entire picture of the system (and its parts)

Page 63: eXtreme programming

63

abstraction gap )cont(: single vs. multiple abstraction level

Small Releases

guide not to stay for too long a time in too high level of

abstraction or too low level of abstraction

Pair Programming

the two individuals in the pair think at different levels of

abstraction; the same development task is thought about at

two different levels of abstraction

Page 64: eXtreme programming

64

abstraction gap )cont(: single vs. multiple abstraction level

Sustainable Pace

enables detachment from the details involved in software

development and thinking on higher levels of abstraction

Refactoring and Simple Design

in order to improve a piece of code one has to examine it from

a higher level of abstraction

examining low level of abstraction (the code) from higher level

of abstraction (the design that guides the simplicity)

Page 65: eXtreme programming

65

Satisfaction

needs, points of view

individual collective

A Social Gap: Satisfaction

XP מנחה לא להסתפק בסיפוק הצרכים של הפרטים

בצוות אלא לשקול גם את צרכי שאר חברי הצוות.

Page 66: eXtreme programming

66

satisfaction gap: individual vs. collective satisfaction

On-site Customer

enables developers to refrain from making decisions with

respect to customer’s needs without first checking with the

customer as to what is really needed

Page 67: eXtreme programming

67

satisfaction gap )cont(: individual vs. collective satisfaction

Pair Programming

crossing the gap between individual’s tendency to skip tests,

check email, browse the web, etc. and the the benefits that

the collective gains from pair programming

Coding Standards

reduces programmers’ tendency to write code in a way that is

understood only to them

Page 68: eXtreme programming

68

satisfaction gap )cont(: individual vs. collective satisfaction

Collective Ownership

one knows that everyone looks at what one programs and

improves it if it is not good enough

one postpones immediate satisfaction to move on and

improves one’s code prior to its integration

Sustainable Pace

one can dedicate more time to one’s personal life without

having to satisfy the expectations of co-workers to put in long

hours of overtime

Page 69: eXtreme programming

69

satisfaction gap )cont(: individual vs. collective satisfaction

Refactoring

it is not sufficient that the code passes all tests, it should also

be refactored, restructured and improved

one should postpone his or her immediate needs and invest

more effort in refactoring before moving on

Simple design

it is not sufficient that the code passes all the tests, its design

should also be simplified as much as possible before one

moves on to the next development task

Page 70: eXtreme programming

70

Gaps: Summary

A cognitive gap: abstraction

A social gaps: satisfaction

Suggestions for additional gaps?

Page 71: eXtreme programming

71

How eXtreme Programming?

Refactoring

Page 72: eXtreme programming

72

Refactoring in Extreme Programming

Page 73: eXtreme programming

73

Agenda Introductory questions

Example

Refactoring: Focus on its nature, not on techniques What is refactoring?

Why refactoring?

How refactoring?

Why refactoring hard?

XP and refactoring

Summary

Page 74: eXtreme programming

74

Introductory Questions

מתי אתם לא מרוצים מקוד שכתבתם? מה אתם

עושים במצבים כאלה?

ראש הצוות שלכם מבקשת מכם לכתוב את הקוד

כל שהוא יהיה קריא יותר. כיצד תגיבו?

חבר לצוות מספר שמה שחשוב לו בפיתוח תוכנה

הוא שהקוד רץ. לכן, ברגע שהקוד שכתב עובר את

כל הבדיקות, הוא עוזב את הקוד ולא משפר את

המבנה והעיצוב שלו. כיצד תגיבו?

Page 75: eXtreme programming

75

Example

A given design

Source: Martin Fowler, Kent Beck (Contributor), John Brant (Contributor), William Opdyke, don Roberts. (2002). Refactoring: Improving the Design of Existing Code, Addison-Wesley.

Page 76: eXtreme programming

76

Example

A given design:

Is it well designed?

In what cases may it

cause problems?

Would you change it?

If yes: suggest alternative designs.

Page 77: eXtreme programming

77

Example – Reflection

How it emerged? Deal was originally being used to display a single deal. Someone wanted a table of deals. The subclass Tabular Active Deal displays a table. Now you want tables of passive deals. Another subclass is added. Small changes in many places. The code has become complicated, time is pressing, ... Adding a new kind of deal is hard, because the deal logic is

tangled with the presentation logic.

Page 78: eXtreme programming

78

Example – Reflection

How it emerges? – In general

“One day you are adding one little subclass to do a little

job. The next day you are adding other subclasses to do

the same job in other parts of the hierarchy. A week (or

month or year) later you are swimming in spaghetti.

Without a paddle.” (Fowler)

Page 79: eXtreme programming

79

Example – Reflection

Problems in tangled inheritance:

It leads to code duplication.

It makes changes more difficult:

Strategies for solving a certain problem are spread around.

The resulting code is hard to understand.

Page 80: eXtreme programming

80

Example – Reflection

How tangled inheritance can be observed? Spot for a single inheritance hierarchy that is doing 2 jobs.

“If every class at a certain level in the hierarchy has subclasses

that begin with the same adjective, you probably are doing two

jobs with one hierarchy.”

Why it can not be coded “correctly” at the first

stage?

Step-by-step refactoring (Fowler’s style)

Page 81: eXtreme programming

81

Example – Step by Step Refactoring

First step: identify the jobs being done by the

hierarchy.

Job #1: capturing variation according to type of deal.

Job #2: capturing variation according to presentation

style.

Page 82: eXtreme programming

82

Second step: decide which job is more

important.

The dealness of the object is far more

important than the presentation style.

Leave Deal alone and extract the

presentation style to its own hierarchy.

Example – Step by Step Refactoring

Page 83: eXtreme programming

83

Example – Step by Step Refactoring

Third step: use Extract Class to create a

presentation style.

Extract Class You have one class doing work that should be done by

two.

Create a new class and move the relevant fields and

methods from the old class into the new class.

Page 84: eXtreme programming

84

Example – Step by Step Refactoring

Fourth step: Create subclasses of the extracted

class and initialize the instance variable to the

appropriate subclass.

Adding subclasses of presentation style

Page 85: eXtreme programming

85

Example – Step by Step Refactoring

Fifth step: Use Move Method and Move Field to

move the presentation-related methods and

variables of the deal subclasses to the

presentation style subclasses.

No code left in the classes Tabular Active Deal and Tabular Passive Deal. Remove them.

Page 86: eXtreme programming

86

Example – Step by Step Refactoring

Sixth step: Separate the hierarchies: Distinguish

between single and tabular.

Page 87: eXtreme programming

87

Example Original Refactored

Page 88: eXtreme programming

88

Example - Reflection

What did we do?

Is there a difference between the two designs? If yes – what is it?

How is this change supposed to improve our life?

In what way may the change be useful for someone who did not write the code?

How did the need for refactoring emerge?

Couldn’t we write the code refactored from the beginning?

Page 89: eXtreme programming

89

Example - Summary

Tease Apart Inheritance

You have an inheritance hierarchy that is doing

two jobs at once.

Create two hierarchies and use delegation to

invoke one from the other.

This format guides Fowler’s book.

Page 90: eXtreme programming

90

Example - Summary

Delegation:

The ability of an object to issue a message to another

object in response to a message. Delegation can be used

as an alternative to inheritance. Contrast: inheritance.

Source: OMG Unified Modeling Language Specification.

More about inheritance vs. delegation:

http://www-inst.eecs.berkeley.edu/~cs61a-tb/week8/oop.html

Page 91: eXtreme programming

91

Refactoring

In what follows:

What is refactoring?

Why refactoring?

When refactoring? When not?

How refactoring?

Why refactoring hard?

XP and refactoring

Page 92: eXtreme programming

92

Refactoring

Fowler: Refactoring is the process of changing a software

system in such a way that it does not alter the external

(observable) behavior of the code yet improves its

internal structure, to make it easier to understand and

cheaper to modify.

Kent (in Fowler, p. 51): Refactoring is the process of

taking a running program and adding to its value, not by

changing its behavior but by giving it more of these

qualities that enable us to continue developing at speed.

Page 93: eXtreme programming

93

Refactoring

What do programmers do when refactoring:

remove duplication

improve communication and program

comprehension

add simplicity

add flexibility

Page 94: eXtreme programming

94

Refactoring – Metaphors

Three metaphors for refactoring :

relationships with your program

parenthesis

health

Page 95: eXtreme programming

95

Refactoring – Metaphors I

[Refactoring] is like a new kind of relationship with your

program. When you really understand refactoring, the

design of the system is as fluid and plastic and moldable

to you as the individual characters in a source code file.

You can feel the whole design at once. You can see how

it might flex and change – a little this way and this is

possible, a little that way and that is possible. (Kent, in

Fowler, p. 333)

Page 96: eXtreme programming

96

Refactoring – Metaphors II

Parenthesis )by Alistair Cockburn(:

“I started seeing 5*a + b*a as 3 operations on 6 things.

(5+b)*a is 2 operations on 3 things.

You can see the jump to OO programming.

Let's take the case of

A.method1() = ... b.doThis(); b.doThat(); ...

I change the code to

B.doThisThat() = doThis(); doThat().

A.method1() = ... b.doThisThat(); ...

Page 97: eXtreme programming

97

Refactoring – Metaphors II

Alistair Cockburn (cont.): […] That change corresponds

(in my mind, anyway) exactly to the (5+b)*a refactoring.

Nowadays, I see a method and a class as a set of

parentheses, and when I move code out of one method

or class to another, I visualize it just as moving symbols

from one set of parentheses to another. Of course, the

net effect of the computation has to be the same, […] it

has to be a behavior preserving transformation.”

Page 98: eXtreme programming

98

Refactoring – Metaphors III

Refactoring as health: exercises and eating a proper diet.

The culture we live in.

We can always make excuses, but we are only fooling

ourselves if we continue to ignore good behavior.

Near-term and long-term benefits.

Page 99: eXtreme programming

99

Refactoring

Main questions:

What is refactoring? OK

Why refactoring?

When refactoring? When not?

How refactoring?

Why refactoring hard? Why people do not do that?

XP and refactoring

Page 100: eXtreme programming

100

Why Refactoring

Refactoring improves the design of the software

fosters the examination of the software design

removes duplicated code:

reduces the amount of code

the code says everything once and only once

Page 101: eXtreme programming

101

Why Refactoring

Refactoring makes software easier to understand

helps make your code more readable

increases program comprehension: leads to higher

levels of understanding that otherwise may be missed

Page 102: eXtreme programming

102

Why Refactoring

Refactoring helps you program faster

sounds counterintuitive

less bugs, no patches

helps correct bugs: errors need to be modified

only in one place

Page 103: eXtreme programming

103

Refactoring

Main questions:

What is refactoring OK

Why refactoring? OK

When refactoring? When not?

How refactoring?

Why refactoring hard? Why people do not do that?

XP and refactoring

Page 104: eXtreme programming

104

When refactoring

You have written some code. Now, if you work

by XP, you should refactor it.

How would you find what to refactor?

What clues in the code may guide you?

Fowler, chapter 3 – Bad smells in code

Page 105: eXtreme programming

105

When refactoring Fowler, Chapter 3 – Bad smells in Code

Duplicated Code:

“If you see the same code structure in more than one

place, you can be sure that your program will be better

if you find a way to unify them”.

Extract Method: When you have the same expression

in two methods of the same class.

Page 106: eXtreme programming

106

When refactoring Fowler, Chapter 3 – Bad smells in Code

Long Method:

“the longer the procedure is, the more difficult it is to

understand”.

Extract method: find parts of the methods that seem

to go nicely together and make a new method.

Page 107: eXtreme programming

107

When refactoring Fowler, Chapter 3 – Bad smells in Code

Comments: “if you need a comment to explain what a block of code

does, try Extract Method. If the method is already extracted

but you still need a comment to explain what it does, use

Rename Method.”

“when you feel the need to write a comment, first try to

refactor the code so that any comment becomes

superfluous”.

“a comment is a good place to say why you did something.

This kind of information helps future modifiers”.

Page 108: eXtreme programming

108

When shouldn't you refactor?

When the code is a mess and it would

be better to start from the beginning.

Factors that will be discussed later:

Culture

Internal resistance

Page 109: eXtreme programming

109

Refactoring

Main questions:

What is refactoring OK

Why refactoring? OK

When refactoring? When not? OK

How refactoring?

Why refactoring hard? Why people do not do that?

XP and refactoring

Page 110: eXtreme programming

110

How Refactoring

Rasmusson (2002): “The team must refactor all the

time, to the fullest extent. When we didn't follow this

rule, the code became more cumbersome to work

with”.

Most of the time it is done in small and local places

Sometimes: a sequence of refactoring

Refactoring requires high level of awareness

All the time

Two hats: adding functions and refactoring

Page 111: eXtreme programming

111

How refactoring Resources for specific refactoring:

Refactoring Home Page: http://www.refactoring.com

Martin Fowler, Kent Beck (Contributor), John Brant

(Contributor), William Opdyke, don Roberts (1999).

Refactoring: Improving the Design of Existing Code,

Addison-Wesley. Many of the citations in this refactoring presentation are from the

book.

Some IDEs (Integrated development environments)

offer Refactoring menu Example: Eclipse, IntelliJ

Page 112: eXtreme programming

112

Refactoring

Main questions:

What is refactoring OK

Why refactoring? OK

When refactoring? When not? OK

How refactoring? OK

Why refactoring hard? Why people do not refactor?

XP and refactoring

Page 113: eXtreme programming

113

Why refactoring hard ?

Sub-questions:

Why people do not refactor naturally?

Why does refactoring raise resistance?

Page 114: eXtreme programming

114

Why refactoring hard ?

Culture:

“refactoring is an overhead activity. I’m paid to write

new, revenue-generating features”.

“What do I tell my manager?”

When it is part of XP – You do not have a problem

When it is not part of XP: Don’t tell!!

Treat it as part of the profession: This is how you develop

code, it is not viewed by you as an additional work.

Page 115: eXtreme programming

115

Why refactoring hard ?

Internal resistance: Why are developers reluctant to

refactor? (Opdyke, in Fowler’s book, p. 313)

it should be executed when the code runs and all the

tests pass. It seems that time is wasted now.

if the benefits are long-term, why exert the effort now?

In the long term, developers might not be with the

project to reap the benefits.

developers might not understand how to refactor.

refactoring might break the existing program.

Page 116: eXtreme programming

116

Refactoring

Main questions:

What is refactoring OK

Why refactoring? OK

When refactoring? When not? OK

How refactoring? OK

Why refactoring hard? OK

XP and refactoring

Page 117: eXtreme programming

117

XP and Refactoring

Refactoring is part of eXtreme Programming:

Refactoring can be carried out without XP, but it has

additional value with XP

It has similar targets to those that XP inspires

When refactoring is part of XP:

refactoring becomes part of the routine

it stops feeling like an overhead activity

Page 118: eXtreme programming

118

XP and Refactoring

Mutual relationships of refactoring and other XP practices

Source: Beck, K. (2000). eXtreme Programming explained, Addison Wesley.

Page 119: eXtreme programming

119

XP and Refactoring

Connection to XP practices - example

Testing: “Whenever I do refactoring, the first step is

always the same. I need to build a solid set of tests for

that section of code. The tests are essential because

even though I follow refactoring structures to avoid

most of the opportunities for introducing bugs, I'm still

human and still make mistakes.Thus I need solid

tests.” (Fowler, p. 17)

Page 120: eXtreme programming

120

Refactoring

Main questions:

What is refactoring OK

Why refactoring? OK

When refactoring? When not? OK

How refactoring? OK

Why people do not refactoring? OK

XP and refactoring OK

Page 121: eXtreme programming

121

Refactoring – Summary

Refactoring requires awareness!

Main Message:

We should not skip refactoring.

Software development is a process that cannot be

envisioned in advance.

Refactoring can be performed without XP but it gets its

power from its integration with the other XP practices.

Refactoring may improve programming skills.

Page 122: eXtreme programming

122

Summary

eXtreme programming:

What?

Why?

How?

Page 123: eXtreme programming

123

Conferences

XP 2004: Fifth International Conference on Extrem

e Programming and Agile Processes in Software E

ngineering

, June 6-10, 2004, Garmisch-Partenkirchen,

Germany

Agile Development Conference, June 23-26, 2004,

Salt Lake City, Utah.

XP Agile Universe 2004, August 2004, Calgary,

Alberta, CA.

Page 124: eXtreme programming

124

ReferencesBeck, K. (2000). Extreme Programming Explained: Embrace

Change, Addison Wesley.

Ron Jeffries, What is Extreme Programming?: http://www.xprogramming.com/xpmag/whatisxp.htm

eXtreme Programming at the Technion

RoleModel:http://www.rolemodelsoftware.com/process/whatIsXp.php

Page 125: eXtreme programming

125

Questions (Musical cards)

Page 126: eXtreme programming

126

Appendices

XP and the CMM

XP conception of failure and success

Page 127: eXtreme programming

127

Why XP? – XP is a Mature Method

The Capability Maturity Model for Software (CMM or

SW-CMM): a model for judging the maturity of the

software processes of an organization and for

identifying the key practices that are required to

increase the maturity of these processes.

The Software CMM has become a de facto standard

for assessing and improving software processes.

Page 128: eXtreme programming

128

Why XP? – XP is a Mature Method

The SW-CMM has been developed by the software community

with stewardship by the SEI.

past experiences in process improvement such as TQM

academic business theories

practical experiences of successful projects gained from companies

such as IBM

The CMM has five levels of process capability maturity. 

Page 129: eXtreme programming

129

Why XP? – XP is a Mature Method

The first – undisciplined:

processes may be loosely defined and rarely understood.

estimates of cost and schedule are poor and consequently projects have

serious problems meeting deadlines and functionality requirements within

budgets. 

management generally is unaware that processes exist and often makes

decisions that hurt more than help.

Page 130: eXtreme programming

130

Why XP? – XP is a Mature Method

Level 2 - Repeatable:

puts project management practices such as requirements definition,

configuration management, and quality assurance in place that are

documented and can be repeated. 

Level 3 - Defined:

graduates the best practices of individual projects to an organizational

process. 

adds concepts of organizational training, process management, and

program management.

Page 131: eXtreme programming

131

Why XP? – XP is a Mature Method

Levels 4 and 5:

use information and measurements defined in levels 2 and 3

to understand why the process behaves the way it does so

it can be improved. 

Level 5:

the process is mature enough to prevent defects instead of

reacting to them and to insert new technology and process

improvements knowing exactly how the organizational process

will be affected.

Page 132: eXtreme programming

132

Why XP? – XP is a Mature Method

The CMM has become popular around the world because of

its ability to be applied practically to any software

environment. 

It describes what process components should be in place

(such as recording requirements, planning and tracking

activities, estimating, etc.), but not how to implement them. 

eXtreme Programming fits as a framework for “how to

implement the processes”.

Page 133: eXtreme programming

133

XP in practice: Success and failure

3 Sep, 2002: XP - An interview with Kent Beck

Q: What are the issues you see your clients struggling with?

KB: One of the issues is redefining failure or redefining

success. For example, you think that you have a great

idea for a project, and it's going to take you nine months to

really have it ready for the market. You [may] discover

after four weeks that you are going one-tenth the speed

that you thought you would, and you cancel the project. Is

that a failure or success? In many organizations, this is

perceived as a failure.

Page 134: eXtreme programming

134

XP in practice: Success and failure

3 Sep, 2002: XP: An interview with Kent Beck

KB )cont’(: In the XP world, providing information that allows you

to constantly make that decision after four or eight weeks (out

of a nine-month development cycle) is what you're there for. In

the XP world, you call that a dramatic success. Now you have

this cultural mismatch between how outsiders are going to

view your outcome and how you view it inside the team. A lot

of people [clients] struggle with that. They think that canceling

a project is a bad thing, but I think that canceling a project is a

good thing -- as long as you cancel the right one.