Extreme Programming

IP - Curs 3 Mihai Maruseac mihai@swarm.cs.pub.ro
UPB

20 mai 2010

About

• Extreme Programming (XP) - paradigm˘ incremental˘ (Agile) a a

de scriere a programelor

About

• Extreme Programming (XP) - paradigm˘ incremental˘ (Agile) a a

de scriere a programelor
• Kent Beck, 1996

About

• Extreme Programming (XP) - paradigm˘ incremental˘ (Agile) a a

de scriere a programelor
• Kent Beck, 1996 • unele concepte dateaz˘ din 1984 sau 1960 a

About

• Extreme Programming (XP) - paradigm˘ incremental˘ (Agile) a a

de scriere a programelor
• Kent Beck, 1996 • unele concepte dateaz˘ din 1984 sau 1960 a • Core concepts:

About

• Extreme Programming (XP) - paradigm˘ incremental˘ (Agile) a a

de scriere a programelor
• Kent Beck, 1996 • unele concepte dateaz˘ din 1984 sau 1960 a • Core concepts: • simiplicitate

About

• Extreme Programming (XP) - paradigm˘ incremental˘ (Agile) a a

de scriere a programelor
• Kent Beck, 1996 • unele concepte dateaz˘ din 1984 sau 1960 a • Core concepts: • simiplicitate • comunicare

About

• Extreme Programming (XP) - paradigm˘ incremental˘ (Agile) a a

de scriere a programelor
• Kent Beck, 1996 • unele concepte dateaz˘ din 1984 sau 1960 a • Core concepts: • simiplicitate • comunicare • feedback

About

• Extreme Programming (XP) - paradigm˘ incremental˘ (Agile) a a

de scriere a programelor
• Kent Beck, 1996 • unele concepte dateaz˘ din 1984 sau 1960 a • Core concepts: • simiplicitate • comunicare • feedback • curaj de a scrie cod ce poate fi ignorat ulterior

Overview

Whole Team

• orice contribuitor = membru al echipei

Whole Team

• orice contribuitor = membru al echipei • echipa centrat˘ pe Client: a

Whole Team

• orice contribuitor = membru al echipei • echipa centrat˘ pe Client: a • reprezentant al firmei contractuale • lucreaz˘ cu echipa a

Whole Team

• orice contribuitor = membru al echipei • echipa centrat˘ pe Client: a • reprezentant al firmei contractuale • lucreaz˘ cu echipa a • echipa = Client, Programatori

Whole Team

• orice contribuitor = membru al echipei • echipa centrat˘ pe Client: a • reprezentant al firmei contractuale • lucreaz˘ cu echipa a • echipa = Client, Programatori • echipa += Testeri, Analisti, Arbitru ,

Whole Team

• orice contribuitor = membru al echipei • echipa centrat˘ pe Client: a • reprezentant al firmei contractuale • lucreaz˘ cu echipa a • echipa = Client, Programatori • echipa += Testeri, Analisti, Arbitru , • cele mai bune echipe = cele f˘r˘ specializare aa

Planning
• ce va fi terminat ˆ ciclul curent si cˆnd? – Release Planning ın a ,

Planning
• ce va fi terminat ˆ ciclul curent si cˆnd? – Release Planning ın a , • programatorii estimeaz˘ dificultatea taskurilor a • permite ajustarea proiectului

Planning
• ce va fi terminat ˆ ciclul curent si cˆnd? – Release Planning ın a , • programatorii estimeaz˘ dificultatea taskurilor a • permite ajustarea proiectului • ce s˘ facem ˆ ciclul curent? – Iteration Planning a ın

Planning
• ce va fi terminat ˆ ciclul curent si cˆnd? – Release Planning ın a , • programatorii estimeaz˘ dificultatea taskurilor a • permite ajustarea proiectului • ce s˘ facem ˆ ciclul curent? – Iteration Planning a ın • 2 s˘pt˘mˆni a a a • Lansare soft util si functional , , • Client - cere features pentru urm˘torul release a

Planning
• ce va fi terminat ˆ ciclul curent si cˆnd? – Release Planning ın a , • programatorii estimeaz˘ dificultatea taskurilor a • permite ajustarea proiectului • ce s˘ facem ˆ ciclul curent? – Iteration Planning a ın • 2 s˘pt˘mˆni a a a • Lansare soft util si functional , , • Client - cere features pentru urm˘torul release a • Se va lucra la cel mai necesar feature

Planning
• ce va fi terminat ˆ ciclul curent si cˆnd? – Release Planning ın a , • programatorii estimeaz˘ dificultatea taskurilor a • permite ajustarea proiectului • ce s˘ facem ˆ ciclul curent? – Iteration Planning a ın • 2 s˘pt˘mˆni a a a • Lansare soft util si functional , , • Client - cere features pentru urm˘torul release a • Se va lucra la cel mai necesar feature • un singur feature pe ciclu

Planning
• ce va fi terminat ˆ ciclul curent si cˆnd? – Release Planning ın a , • programatorii estimeaz˘ dificultatea taskurilor a • permite ajustarea proiectului • ce s˘ facem ˆ ciclul curent? – Iteration Planning a ın • 2 s˘pt˘mˆni a a a • Lansare soft util si functional , , • Client - cere features pentru urm˘torul release a • Se va lucra la cel mai necesar feature • un singur feature pe ciclu • refactoring

Planning
• ce va fi terminat ˆ ciclul curent si cˆnd? – Release Planning ın a , • programatorii estimeaz˘ dificultatea taskurilor a • permite ajustarea proiectului • ce s˘ facem ˆ ciclul curent? – Iteration Planning a ın • 2 s˘pt˘mˆni a a a • Lansare soft util si functional , , • Client - cere features pentru urm˘torul release a • Se va lucra la cel mai necesar feature • un singur feature pe ciclu • refactoring • Taskuri bazate pe ciclul anterior

Planning
• ce va fi terminat ˆ ciclul curent si cˆnd? – Release Planning ın a , • programatorii estimeaz˘ dificultatea taskurilor a • permite ajustarea proiectului • ce s˘ facem ˆ ciclul curent? – Iteration Planning a ın • 2 s˘pt˘mˆni a a a • Lansare soft util si functional , , • Client - cere features pentru urm˘torul release a • Se va lucra la cel mai necesar feature • un singur feature pe ciclu • refactoring • Taskuri bazate pe ciclul anterior • progres vizibil, nu 90% done

Customer Tests

• Client - cere features

Customer Tests

• Client - cere features • teste automate - demonstreaz˘ functionalitate a ,

Customer Tests

• Client - cere features • teste automate - demonstreaz˘ functionalitate a , • corectitudine

Customer Tests

• Client - cere features • teste automate - demonstreaz˘ functionalitate a , • corectitudine • merge? mentine-l asa , ,

Customer Tests

• Client - cere features • teste automate - demonstreaz˘ functionalitate a , • corectitudine • merge? mentine-l asa , , • dezvoltare sistematic˘ a

Customer Tests

• Client - cere features • teste automate - demonstreaz˘ functionalitate a , • corectitudine • merge? mentine-l asa , , • dezvoltare sistematic˘ a • comentarii

Overview

Test Driven Development (TDD)

• ˆ ai testele pentru feature si apoi codul ıntˆ ,

Test Driven Development (TDD)

• ˆ ai testele pentru feature si apoi codul ıntˆ , • feedback obsession

Test Driven Development (TDD)

• ˆ ai testele pentru feature si apoi codul ıntˆ , • feedback obsession • 100% passed = all done

Test Driven Development (TDD)

• ˆ ai testele pentru feature si apoi codul ıntˆ , • feedback obsession • 100% passed = all done • nu se poate strica nimic la dezvoltare ulterioar˘ a

Test Driven Development (TDD)

• ˆ ai testele pentru feature si apoi codul ıntˆ , • feedback obsession • 100% passed = all done • nu se poate strica nimic la dezvoltare ulterioar˘ a • construite dup˘ specificatii a ,

Test Driven Development (TDD)

• ˆ ai testele pentru feature si apoi codul ıntˆ , • feedback obsession • 100% passed = all done • nu se poate strica nimic la dezvoltare ulterioar˘ a • construite dup˘ specificatii a , • nu se includ detalii nespecificate

Test Driven Development (TDD)

• ˆ ai testele pentru feature si apoi codul ıntˆ , • feedback obsession • 100% passed = all done • nu se poate strica nimic la dezvoltare ulterioar˘ a • construite dup˘ specificatii a , • nu se includ detalii nespecificate • ˆ caz de esec arbitrul are rolul de a spune ce e gresit: cod sau ın , ,

test (doar la prima rulare)

Refactoring

• rescrierea codului pentru a integra specificatii noi ,

Refactoring

• rescrierea codului pentru a integra specificatii noi , • un programator bun poate termina totul ˆ 4 ore ın

Refactoring

• rescrierea codului pentru a integra specificatii noi , • un programator bun poate termina totul ˆ 4 ore ın • rescriere supravegheat˘ de design simplu si suit˘ de teste a a ,

Simple Design

• proiectul porneste de la o descriere simpl˘ a ,

Simple Design

• proiectul porneste de la o descriere simpl˘ a , • un singur feature

Simple Design

• proiectul porneste de la o descriere simpl˘ a , • un singur feature • dezvoltare design, teste programatori -¿ mentinere design ,

simplu

Simple Design

• proiectul porneste de la o descriere simpl˘ a , • un singur feature • dezvoltare design, teste programatori -¿ mentinere design ,

simplu
• design = ce este necesar pentru ciclul curent

Simple Design

• proiectul porneste de la o descriere simpl˘ a , • un singur feature • dezvoltare design, teste programatori -¿ mentinere design ,

simplu
• design = ce este necesar pentru ciclul curent • preg˘tire pentru ciclurile urm˘toare a a

Simple Design

• proiectul porneste de la o descriere simpl˘ a , • un singur feature • dezvoltare design, teste programatori -¿ mentinere design ,

simplu
• design = ce este necesar pentru ciclul curent • preg˘tire pentru ciclurile urm˘toare a a • refactoring

Pair Programming (PP)

• 2 programatori la aceeasi masin˘ a , ,

Pair Programming (PP)

• 2 programatori la aceeasi masin˘ a , , • cel putin un review ,

Pair Programming (PP)

• 2 programatori la aceeasi masin˘ a , , • cel putin un review , • ‘two heads are better than one’

Pair Programming (PP)

• 2 programatori la aceeasi masin˘ a , , • cel putin un review , • ‘two heads are better than one’ • knowledge sharing

Overview

Continuous Integration

• mai multe construiri executabil final pe zi

Continuous Integration

• mai multe construiri executabil final pe zi • buguri de integrare aproape inexistente

Continuous Integration

• mai multe construiri executabil final pe zi • buguri de integrare aproape inexistente • f˘r˘ ‘integration hell’ aa

Collective Code

• orice pereche de programatori poate lucra la orice feature

Collective Code

• orice pereche de programatori poate lucra la orice feature • calitate ++

Collective Code

• orice pereche de programatori poate lucra la orice feature • calitate ++ • defecte −−

Collective Code

• orice pereche de programatori poate lucra la orice feature • calitate ++ • defecte −− • evitare duplicare cod

Collective Code

• orice pereche de programatori poate lucra la orice feature • calitate ++ • defecte −− • evitare duplicare cod • cum?

Collective Code

• orice pereche de programatori poate lucra la orice feature • calitate ++ • defecte −− • evitare duplicare cod • cum? • unit tests

Collective Code

• orice pereche de programatori poate lucra la orice feature • calitate ++ • defecte −− • evitare duplicare cod • cum? • unit tests • un membru al perechii a mai lucrat la modul

Coding Standard

• cod scris de o singur˘ persoan˘ foarte competent˘ a a a

Coding Standard

• cod scris de o singur˘ persoan˘ foarte competent˘ a a a • cod familiar, indiferent de modul

Coding Standard

• cod scris de o singur˘ persoan˘ foarte competent˘ a a a • cod familiar, indiferent de modul • nu se pune accent pe un anumit standard ci pe unul comun

programatorilor

Coding Standard

• cod scris de o singur˘ persoan˘ foarte competent˘ a a a • cod familiar, indiferent de modul • nu se pune accent pe un anumit standard ci pe unul comun

programatorilor
• implicit prin PP

Sustainable Pace

• ˆ ıncearc˘ p˘strarea pasului de dezvoltare pe durata ˆ a a ıntregului

proiect

Sustainable Pace

• ˆ ıncearc˘ p˘strarea pasului de dezvoltare pe durata ˆ a a ıntregului

proiect
• peste program dac˘ merit˘ a a

Sustainable Pace

• ˆ ıncearc˘ p˘strarea pasului de dezvoltare pe durata ˆ a a ıntregului

proiect
• peste program dac˘ merit˘ a a • f˘r˘ dezvoltare ˆ ultimul moment aa ın

Metaphor

• Viziune comun˘ asupra proiectului a

Metaphor

• Viziune comun˘ asupra proiectului a • Descrierea functionalit˘tii a, ,

Metaphor

• Viziune comun˘ asupra proiectului a • Descrierea functionalit˘tii a, , • usor de ˆ , eles ınt , • nume comune

Metaphor

• Viziune comun˘ asupra proiectului a • Descrierea functionalit˘tii a, , • usor de ˆ , eles ınt , • nume comune • oricine stie cum functioneaz˘ codul a , ,

Overview

Critici

• metod˘ nu este efectiv˘ dac˘ oamenii nu sunt obisnuiti cu ea a a a , ,

Critici

• metod˘ nu este efectiv˘ dac˘ oamenii nu sunt obisnuiti cu ea a a a , , • necesit˘ adaptare a

Critici

• metod˘ nu este efectiv˘ dac˘ oamenii nu sunt obisnuiti cu ea a a a , , • necesit˘ adaptare a • refactoring

Critici

• metod˘ nu este efectiv˘ dac˘ oamenii nu sunt obisnuiti cu ea a a a , , • necesit˘ adaptare a • refactoring • lips˘ structur˘ si documentatie a a , ,

Critici

• metod˘ nu este efectiv˘ dac˘ oamenii nu sunt obisnuiti cu ea a a a , , • necesit˘ adaptare a • refactoring • lips˘ structur˘ si documentatie a a , , • ˆ alniri frecvente cu Clientul - money sink ıntˆ

Concluzii

1. Codul functionabil = cel mai important produs al proiectului ,

Concluzii

1. Codul functionabil = cel mai important produs al proiectului , 2. Codul este proprietate colectiv˘ a

Concluzii

1. Codul functionabil = cel mai important produs al proiectului , 2. Codul este proprietate colectiv˘ a 3. Design simplu

Concluzii

1. Codul functionabil = cel mai important produs al proiectului , 2. Codul este proprietate colectiv˘ a 3. Design simplu 4. Pair Programming

Concluzii

1. Codul functionabil = cel mai important produs al proiectului , 2. Codul este proprietate colectiv˘ a 3. Design simplu 4. Pair Programming
• consistent˘, omogenitate ,a

Concluzii

1. Codul functionabil = cel mai important produs al proiectului , 2. Codul este proprietate colectiv˘ a 3. Design simplu 4. Pair Programming
• consistent˘, omogenitate ,a • training gratuit

Concluzii

1. Codul functionabil = cel mai important produs al proiectului , 2. Codul este proprietate colectiv˘ a 3. Design simplu 4. Pair Programming
• consistent˘, omogenitate ,a • training gratuit

5. Test Driven Development

Concluzii

1. Codul functionabil = cel mai important produs al proiectului , 2. Codul este proprietate colectiv˘ a 3. Design simplu 4. Pair Programming
• consistent˘, omogenitate ,a • training gratuit

5. Test Driven Development
• clar, concis, f˘r˘ interpret˘ri aa a

Concluzii

1. Codul functionabil = cel mai important produs al proiectului , 2. Codul este proprietate colectiv˘ a 3. Design simplu 4. Pair Programming
• consistent˘, omogenitate ,a • training gratuit

5. Test Driven Development
• clar, concis, f˘r˘ interpret˘ri aa a • transmitere idei dac˘ alte metode esueaz˘ a a ,

Bibliografie

1. http://www.extremeprogramming.org/ 2. http://en.wikipedia.org/wiki/Extreme_Programming 3. http://xprogramming.com/xpmag/whatisxp/ 4. http://www.youtube.com/watch?v=XP4o0ArkP4s - must see

Sign up to vote on this title
UsefulNot useful

Master Your Semester with Scribd & The New York Times

Special offer: Get 4 months of Scribd and The New York Times for just $1.87 per week!

Master Your Semester with a Special Offer from Scribd & The New York Times