Sunteți pe pagina 1din 90

Extreme Programming

IP - Curs 3

Mihai Maruseac
mihai@swarm.cs.pub.ro

UPB

20 mai 2010
About

• Extreme Programming (XP) - paradigmă incrementală (Agile)


de scriere a programelor
About

• Extreme Programming (XP) - paradigmă incrementală (Agile)


de scriere a programelor
• Kent Beck, 1996
About

• Extreme Programming (XP) - paradigmă incrementală (Agile)


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

• Extreme Programming (XP) - paradigmă incrementală (Agile)


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

• Extreme Programming (XP) - paradigmă incrementală (Agile)


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

• Extreme Programming (XP) - paradigmă incrementală (Agile)


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

• Extreme Programming (XP) - paradigmă incrementală (Agile)


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

• Extreme Programming (XP) - paradigmă incrementală (Agile)


de scriere a programelor
• Kent Beck, 1996
• unele concepte datează din 1984 sau 1960
• 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:
Whole Team

• orice contribuitor = membru al echipei


• echipa centrată pe Client:
• reprezentant al firmei contractuale
• lucrează cu echipa
Whole Team

• orice contribuitor = membru al echipei


• echipa centrată pe Client:
• reprezentant al firmei contractuale
• lucrează cu echipa
• echipa = Client, Programatori
Whole Team

• orice contribuitor = membru al echipei


• echipa centrată pe Client:
• reprezentant al firmei contractuale
• lucrează cu echipa
• echipa = Client, Programatori
• echipa += Testeri, Analis, ti, Arbitru
Whole Team

• orice contribuitor = membru al echipei


• echipa centrată pe Client:
• reprezentant al firmei contractuale
• lucrează cu echipa
• echipa = Client, Programatori
• echipa += Testeri, Analis, ti, Arbitru
• cele mai bune echipe = cele fără specializare
Planning

• ce va fi terminat ı̂n ciclul curent s, i când? – Release Planning


Planning

• ce va fi terminat ı̂n ciclul curent s, i când? – Release Planning


• programatorii estimează dificultatea taskurilor
• permite ajustarea proiectului
Planning

• ce va fi terminat ı̂n ciclul curent s, i când? – Release Planning


• programatorii estimează dificultatea taskurilor
• permite ajustarea proiectului
• ce să facem ı̂n ciclul curent? – Iteration Planning
Planning

• ce va fi terminat ı̂n ciclul curent s, i când? – Release Planning


• programatorii estimează dificultatea taskurilor
• permite ajustarea proiectului
• ce să facem ı̂n ciclul curent? – Iteration Planning
• 2 săptămâni
• Lansare soft util s, i funct, ional
• Client - cere features pentru următorul release
Planning

• ce va fi terminat ı̂n ciclul curent s, i când? – Release Planning


• programatorii estimează dificultatea taskurilor
• permite ajustarea proiectului
• ce să facem ı̂n ciclul curent? – Iteration Planning
• 2 săptămâni
• Lansare soft util s, i funct, ional
• Client - cere features pentru următorul release
• Se va lucra la cel mai necesar feature
Planning

• ce va fi terminat ı̂n ciclul curent s, i când? – Release Planning


• programatorii estimează dificultatea taskurilor
• permite ajustarea proiectului
• ce să facem ı̂n ciclul curent? – Iteration Planning
• 2 săptămâni
• Lansare soft util s, i funct, ional
• Client - cere features pentru următorul release
• Se va lucra la cel mai necesar feature
• un singur feature pe ciclu
Planning

• ce va fi terminat ı̂n ciclul curent s, i când? – Release Planning


• programatorii estimează dificultatea taskurilor
• permite ajustarea proiectului
• ce să facem ı̂n ciclul curent? – Iteration Planning
• 2 săptămâni
• Lansare soft util s, i funct, ional
• Client - cere features pentru următorul release
• Se va lucra la cel mai necesar feature
• un singur feature pe ciclu
• refactoring
Planning

• ce va fi terminat ı̂n ciclul curent s, i când? – Release Planning


• programatorii estimează dificultatea taskurilor
• permite ajustarea proiectului
• ce să facem ı̂n ciclul curent? – Iteration Planning
• 2 săptămâni
• Lansare soft util s, i funct, ional
• Client - cere features pentru următorul release
• Se va lucra la cel mai necesar feature
• un singur feature pe ciclu
• refactoring
• Taskuri bazate pe ciclul anterior
Planning

• ce va fi terminat ı̂n ciclul curent s, i când? – Release Planning


• programatorii estimează dificultatea taskurilor
• permite ajustarea proiectului
• ce să facem ı̂n ciclul curent? – Iteration Planning
• 2 săptămâni
• Lansare soft util s, i funct, ional
• Client - cere features pentru următorul release
• 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ă funct, ionalitate
Customer Tests

• Client - cere features


• teste automate - demonstrează funct, ionalitate
• corectitudine
Customer Tests

• Client - cere features


• teste automate - demonstrează funct, ionalitate
• corectitudine
• merge? ment, ine-l as, a
Customer Tests

• Client - cere features


• teste automate - demonstrează funct, ionalitate
• corectitudine
• merge? ment, ine-l as, a
• dezvoltare sistematică
Customer Tests

• Client - cere features


• teste automate - demonstrează funct, ionalitate
• corectitudine
• merge? ment, ine-l as, a
• dezvoltare sistematică
• comentarii
Overview
Test Driven Development (TDD)

• ı̂ntâi testele pentru feature s, i apoi codul


Test Driven Development (TDD)

• ı̂ntâi testele pentru feature s, i apoi codul


• feedback obsession
Test Driven Development (TDD)

• ı̂ntâi testele pentru feature s, i apoi codul


• feedback obsession
• 100% passed = all done
Test Driven Development (TDD)

• ı̂ntâi testele pentru feature s, i apoi codul


• feedback obsession
• 100% passed = all done
• nu se poate strica nimic la dezvoltare ulterioară
Test Driven Development (TDD)

• ı̂ntâi testele pentru feature s, i apoi codul


• feedback obsession
• 100% passed = all done
• nu se poate strica nimic la dezvoltare ulterioară
• construite după specificat, ii
Test Driven Development (TDD)

• ı̂ntâi testele pentru feature s, i apoi codul


• feedback obsession
• 100% passed = all done
• nu se poate strica nimic la dezvoltare ulterioară
• construite după specificat, ii
• nu se includ detalii nespecificate
Test Driven Development (TDD)

• ı̂ntâi testele pentru feature s, i apoi codul


• feedback obsession
• 100% passed = all done
• nu se poate strica nimic la dezvoltare ulterioară
• construite după specificat, ii
• nu se includ detalii nespecificate
• ı̂n caz de es, ec arbitrul are rolul de a spune ce e gres, it: cod sau
test (doar la prima rulare)
Refactoring

• rescrierea codului pentru a integra specificat, ii noi


Refactoring

• rescrierea codului pentru a integra specificat, ii noi


• un programator bun poate termina totul ı̂n 4 ore
Refactoring

• rescrierea codului pentru a integra specificat, ii noi


• un programator bun poate termina totul ı̂n 4 ore
• rescriere supravegheată de design simplu s, i suită de teste
Simple Design

• proiectul pornes, te de la o descriere simplă


Simple Design

• proiectul pornes, te de la o descriere simplă


• un singur feature
Simple Design

• proiectul pornes, te de la o descriere simplă


• un singur feature
• dezvoltare design, teste programatori -¿ ment, inere design
simplu
Simple Design

• proiectul pornes, te de la o descriere simplă


• un singur feature
• dezvoltare design, teste programatori -¿ ment, inere design
simplu
• design = ce este necesar pentru ciclul curent
Simple Design

• proiectul pornes, te de la o descriere simplă


• un singur feature
• dezvoltare design, teste programatori -¿ ment, inere design
simplu
• design = ce este necesar pentru ciclul curent
• pregătire pentru ciclurile următoare
Simple Design

• proiectul pornes, te de la o descriere simplă


• un singur feature
• dezvoltare design, teste programatori -¿ ment, inere design
simplu
• design = ce este necesar pentru ciclul curent
• pregătire pentru ciclurile următoare
• refactoring
Pair Programming (PP)

• 2 programatori la aceeas, i mas, ină


Pair Programming (PP)

• 2 programatori la aceeas, i mas, ină


• cel put, in un review
Pair Programming (PP)

• 2 programatori la aceeas, i mas, ină


• cel put, in un review
• ‘two heads are better than one’
Pair Programming (PP)

• 2 programatori la aceeas, i mas, ină


• cel put, in 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’
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ă


Coding Standard

• cod scris de o singură persoană foarte competentă


• cod familiar, indiferent de modul
Coding Standard

• cod scris de o singură persoană foarte competentă


• 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ă


• 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 ı̂ntregului


proiect
Sustainable Pace

• ı̂ncearcă păstrarea pasului de dezvoltare pe durata ı̂ntregului


proiect
• peste program dacă merită
Sustainable Pace

• ı̂ncearcă păstrarea pasului de dezvoltare pe durata ı̂ntregului


proiect
• peste program dacă merită
• fără dezvoltare ı̂n ultimul moment
Metaphor

• Viziune comună asupra proiectului


Metaphor

• Viziune comună asupra proiectului


• Descrierea funct, ionalităt, ii
Metaphor

• Viziune comună asupra proiectului


• Descrierea funct, ionalităt, ii
• us, or de ı̂nt, eles
• nume comune
Metaphor

• Viziune comună asupra proiectului


• Descrierea funct, ionalităt, ii
• us, or de ı̂nt, eles
• nume comune
• oricine s, tie cum funct, ionează codul
Overview
Critici

• metodă nu este efectivă dacă oamenii nu sunt obis, nuit, i cu ea


Critici

• metodă nu este efectivă dacă oamenii nu sunt obis, nuit, i cu ea


• necesită adaptare
Critici

• metodă nu este efectivă dacă oamenii nu sunt obis, nuit, i cu ea


• necesită adaptare
• refactoring
Critici

• metodă nu este efectivă dacă oamenii nu sunt obis, nuit, i cu ea


• necesită adaptare
• refactoring
• lipsă structură s, i documentat, ie
Critici

• metodă nu este efectivă dacă oamenii nu sunt obis, nuit, i cu ea


• necesită adaptare
• refactoring
• lipsă structură s, i documentat, ie
• ı̂ntâlniri frecvente cu Clientul - money sink
Concluzii

1. Codul funct, ionabil = cel mai important produs al proiectului


Concluzii

1. Codul funct, ionabil = cel mai important produs al proiectului


2. Codul este proprietate colectivă
Concluzii

1. Codul funct, ionabil = cel mai important produs al proiectului


2. Codul este proprietate colectivă
3. Design simplu
Concluzii

1. Codul funct, ionabil = cel mai important produs al proiectului


2. Codul este proprietate colectivă
3. Design simplu
4. Pair Programming
Concluzii

1. Codul funct, ionabil = cel mai important produs al proiectului


2. Codul este proprietate colectivă
3. Design simplu
4. Pair Programming
• consistent, ă, omogenitate
Concluzii

1. Codul funct, ionabil = cel mai important produs al proiectului


2. Codul este proprietate colectivă
3. Design simplu
4. Pair Programming
• consistent, ă, omogenitate
• training gratuit
Concluzii

1. Codul funct, ionabil = cel mai important produs al proiectului


2. Codul este proprietate colectivă
3. Design simplu
4. Pair Programming
• consistent, ă, omogenitate
• training gratuit
5. Test Driven Development
Concluzii

1. Codul funct, ionabil = cel mai important produs al proiectului


2. Codul este proprietate colectivă
3. Design simplu
4. Pair Programming
• consistent, ă, omogenitate
• training gratuit
5. Test Driven Development
• clar, concis, fără interpretări
Concluzii

1. Codul funct, ionabil = cel mai important produs al proiectului


2. Codul este proprietate colectivă
3. Design simplu
4. Pair Programming
• consistent, ă, omogenitate
• training gratuit
5. Test Driven Development
• clar, concis, fără interpretări
• transmitere idei dacă alte metode es, uează
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

S-ar putea să vă placă și