W9 1 Programowanie ekstremalne

background image

Programowanie
ekstremalne
Extreme Programming
(XP)

background image

Wstęp

background image

Czym jest lekka metodologia

Metodologia programowania to zbiór
reguł i praktyk tworzenia programów

Ciężka metodologia (heavyweight) -
wiele skomplikowanych reguł

Lekka metodologia – zbiór kilku prostch
reguł

background image

Historia

Lata 60-te i wczesne 70-te: cowboy coding,
„real” programmers

1968 Edsger Dijkstra: „GOTO Statement
Considered Harmful

Lata 80-te: proste reguły i praktyki umożliwiły
znaczny postęp w rozwoju oprogramowania

Lata 90-te: coraz wiecej reguł, narzędzia
CASE, powrót kowbojów

Lekkie metodologie: mało reguł, ale dobrze
dobranych

background image

Dlaczego „ekstremalne”?

Jeżeli recenzje kodu są ważne, to będziemy je robić przez

cały czas (programowanie w parach)

Jeżeli testowanie jest ważne, to będziemy testowali cały

czas (testy jednostkowe)

Jeżeli projektowanie jest ważne, to będziemy je robić na co

dzień (refaktoryzacja)

Jeżeli prostota jest ważna, to będziemy zawsze

pozostawiać system w najprostszej wersji, która zapewnie

funkcjonalność (cos najprostszego, co działa)

Jeżeli architektura jest ważna, to każdy będzie ją

definiował i ulepszał cały czas (metafora systemu)

Jeżeli testy integracyjne są ważne, będziemy integrować i

testować kilkanaście razy dziennie (ciągła integracja)

Jeżeli iteracje powinny być krótkie, to będziemy je skracać

ile się da, do minut lub godzin, a nie miesięcy czy lat

(planning game)

background image

Kiedy używać XP

Kiedy wymagania często się zmieniają

Klient nie jest pewny, czego potrzebuje

Wiadomo, że funkcjonalność będzie sie zmieniać co

parę miesięcy

Projekty o dużym ryzyku

Krótki termin realizacji

Nowe wyzwanie dla zespołu

Nowe technologie

Małe zespoły: 2-12 osób

Zaangażowanie klienta i kierowników w zespole

Wszyscy muszą pracować razem

Możliwość testowania na każdym etapie

background image

Filozofia

background image

Filozofia XP

Kent Beck, Ward Cinninghan

1996 projekt dla Chryslera (Chrysler

Comprehensive Compensation – C3)

Nowa metodologia na podstawie analizy

problemów z tworzeniem oprogramowania

stanardowymi metodami

Zasady

Komunikacja

Prostota

Sprzężenie zwrotne

Odwaga

background image

Komunikacja

Problemy z oprogramowaniem
spwodowane komunikacją

Projektant – programista

Klient – analityk

Kierownik – programista

Rozwiązanie – narzucenie praktyk
wymagających komunikacji

Testy, praca parami, planowanie

background image

Prostota

Co jest najprostszą rzeczą, która będzie
działac?

Zakładamy, że lepiej zrobić cos
najprostszego, co zadziała dziś, i co
najwyżej zapłacić więcej jutro, gdy
będziemy potrzebowali czegoś więcej,
niż dziś zrobić coś skomplikowanego,
czego możemy nigdy w pełni nie użyć

background image

Sprzężenie zwrotne

Testy jednostkowe dają szybką
informację zwrotną o stanie systemu

Testy funkcjonalne dają informację
zwrotną od klienta

Wczesne wejście do fazy produkcyjnej –
żeby zdobyć jak najwięcej informacji
zwrotnej

background image

Odwaga

Konieczne zmiany w architekturze

powodują, że testy przestają działać

Odrzucanie rozwiązań i napisanego kodu,

ktory nie działa dobrze – przepisanie od

nowa

Eksperymentowanie z kodem:

implementacja kilku rozwiązań w celu

sprawdzenia, które będzie najlepsze

To wymaga odwagi, ale ona sama nie

wystarczy (może prowadzić do hackowania)

background image

Reguły

background image

Reguły

Planowanie

Historie użytkownika, planowanie release’u, planowanie

iteracji, naprawianie XP

Projektowanie

Prostota, metafora systemu, karty CRC, rozwiązania

impulsowe, brak zbędnej funkcjonalności, refaktoryzacja

Implementacja

Obecność klienta, standardy kodowania, najpier testy,

programowanie parami, jedna para integruje, częste

integracje, współdzielenie kodu, pozostawienie

optymalizacji na koniec, żadnych nadgodzin

Testowanie

Testy jednostkowe do całości kodu, testy po znalezieniu

bugów, , częste testy akceptacyjne

background image

Planowanie

background image

Opowiadania użytkowników
(User stories)

Podobne zastosowanie co przypadki użycia (use
case)

Spis rzeczy, które system ma robić, mniej dokładne
niż specyikacje wymagań

Trzyzdaniowe akapity, bez technicznej terminologii

Używane do oszacowania czasu trwania iteracji i do
tworzenia testów akceptacji

Szacowanie czasu potrzebnego na implementację
opowiadania – 1, 2 lub 3 tygodnie „idealnego
czasu”

80 ± 20 opowiadań to właściwa liczba dla release’u

background image

Planowanie wydania
(release)

Planning game – gra z użyciem kart z

opowiadaniami

Uczestnicy: developerzy, klient, kierownictwo

Wynik: wybór opowiadań do

zaimplementowania w następnym wydaniu

Wyznaczenie „szybkości projektu” pozwala

oszacować, ile kart można zaimplementować

Zmienne: zakres, zasoby, czas, jakość

(powina być doskonała)

background image

Szybkość projektu

Suma oszacowań czasu opowiadań /
iterację

Jest wyznaczana po każdej iteracji i określa
ile będzie można zrobić w następnej

Autoregulacja

Jak oszacować prędkość na początku?

Lepiej zrobić kilka iteracji implementacyjnych na
początku niż tracić czas na dokładną
specyfikację

background image

Częste małe wydania
(release)

Jak najczęściej dostarczane dla klienta

Ważne jednostki funkcjonalności jak
najwcześniej

Cel – informacja zwrotna od klienta

Im później dostarczone – tym mniej
czasu na poprawę

background image

Iteracje

Plan implementacji dzielimy na ok.
tuzina iteracji, każda 1 do 3 tygodni

Planujemy zadania tylko na najbliższą
iterację

Nie wolno implementować „za zapas”
nic, co nie jest zaplanowane w iteracji

Ważne jest dotrzymywanie terminów,
lepiej zmienić plan niż przekroczyć
termin

background image

Planowanie iteracji

Spotkanie planowania iteracji – wybór najważniejszych

opowiadań z planu release’u

Ilość opowiadań na podstawie szybkości realizacji

poprzedniej iteracji

Zadania programistyczne tworzone na podstawie

opowiadań oraz nieudanych testów

Karty z zadaniami (taskami) dla programistów

Czas zadania: 1 – 3 dni czasu programisty

Jeżeli zadań jest za dużo, to odrzucamy jedno

opowiadanie, jeżeli za mało, to dodajemy

Co parę iteracji może zajść potrzeba przeszacowania

planu release’u – najważniejsze, aby istotne opowiadania

były realizowane najwcześniej

background image

Przenoszenie ludzi między
zadaniami

Cel: uniknięcie utraty wiedzy lub
wąskiego gardła w programowaniu

Gdy jedna osoba odejdzie, inne mogą
łatwo przejąć jej zadania

Płynne równoważenie obciążenia w
pracy nad różnymi zadaniami

Ułatwione przez programowanie w
parach

Odpowiednik „szkoleń poprzecznych”

background image

Spotkania na stojąco

Na typowym spotkaniu większość tylko
słucha i traci cenny czas 

Poranne spotkanie na stojąco służy
szybkiej wymianie problemów,
rozwiązań i ukierunkowaniu prac
zespołu.

Pozostałe spotkania na bieżąco przy
komputerze

background image

Naprawianie XP gdy sie
psuje

Reguły trzeba będzie dostosować do
konkretnego projektu

Można zmienić reguły, ale wtedy trzeba
przestrzegać tych nowych

Zawsze powinno być wiadomo, jakie
reguły obowiązują i należy ich
przetrzegać, żeby unikać
nieporozumień

background image

Projektowanie (design)

background image

Prostota

Prosty projekt (design) zawsze można
szybciej zrealizować niż skomplikowany

Skomplikowane należy zastąpić prostym

Im wcześniej tym lepiej (zanim straci
się dużo czasu z powodu koplikacji)

Nie dodawać funkcjonalności zanim nie
jest zaplanowana

To nie jest proste!

background image

Metafora systemu

Umożliwia uzgodnienie wspólnego

schematu nazewnictwa obiektów

Ułatwia rozmawianie o projekcie na

zasadzie skojarzeń

Metoafora „naiwna” - wzięta z dziedziny

projektu

Przykład nazw z metafory: „menadżer

okien”, „koszyk”, „linia produkcyjna”

Metafora zastępuj częściowo

architekturę

background image

Karty CRC (Class,
Responsibilities, and
Collaboration)

Narzucają podejście
obiektowe

Ułatwiają
projektowanie
zespołowe

Lepsze niż tablica –
umożliwiają łatwe
przesuwanie i
reorganizację oraz
symulacje zachowań
systemu

http://www.agilemodeling.com

background image

Rozwiązania impulsowe (spike
solutions)

Pomocne w rozwiązaniu trudnych
problemów technicznych lub
projektowych

Prosty program do sprawdzenia
potencjalnego rozwiązania, pomijając inne
aspekty

Zwykle do wyrzucenia po sprawdzeniu

Redukują ryzyko problemów technicznych
i pomagają oszacować czas opowiadania

background image

Nie dodawać funkcjonalności za
wcześnie

Nie dodawać rzeczy, które spodziewamy
się, ze przydadzą się później

10% dodatkowych elementów przyda się
naprawdę → 90% strata czasu

Pomimo że system mógłby być dzięki
temu lepszy, należy czynić go
najprostszym.

Należy implementować tylko to, co jest
zaplanowane i nic więcej

background image

Bezlitośnie refaktoryzować

Nie należy „przywiązywać się” do
starego kodu

Unikać niejasnego kodu i zastępować go
prostszym – łatwym do zrozumienia,
modyfikowania i rozszerzenia

Unikać duplikowania fragmentów kodu

Umożliwia reakcję na zmiany wymagań

background image

Implementacja

background image

Klient na miejscu

Klient jest częścią zespołu

Dostępny cały czas do bezpośredniej

rozmowy i podejmowania decyzji

Klient pisze opowiadania użytokwnika z

pomocą programistów

Podczas planowania release’u negocjuje

wybór opowiadań do

zaimplementowania

Dzięki częstym wersjom klient może

szybko ocenić rozwiązania

background image

Standardy kodowania

Ustalony jeden wspólny standard

Dzięki temu kod jest elegancki, łatwy do
czytania i modyfikacji przez cały zespół

Konwencje formatowania, wcięć,
nazewnictwa, komentarzy, etc.

Narzędzia (edytory) wymuszające
standard

background image

Najpierw test, później
program

Ułatwia pisanie kodu – jest cel

Daje od razu informację, czy kod jest
gotowy

Motywacja – przejście testu

Wpływa korzystnie na design

Ułatwia innym korzystanie z kodu (testy
są przykładami!)

background image

Programowanie w parach

Cały kod produkcyjny musi być pisany
w parach

Większa jakość kodu

Wbrew pozorom – większa efektywność
(badania)

Myślenie taktyczne i strategiczne

background image

Integracja

Tylko jedna para integuje kod

Eliminuje błędy równoległej integracji,
gdy nie da się wszystkiego
przetestować

Jasno definiue najnowszą wersję kodu (i
testów!)

Unika się problemów z zespołami
integracyjnymi i równoległym
rozwijaniem kilku wersji

background image

Częsta integracja

Co kilka godzin, albo częściej

Nie dłużej niż jeden dzień

Eliminacja rozbieżności pracochłonnych
do połączenia

Uniknięcie trudnego etapu końcowej
integracji

background image

Współdzielenie kodu

Każdy może zmienić dowolny fragment

Unikanie wąskich gardeł

Każdy ma wpływ na architekturę

„Zbiorowa odpowiedzialność”

Testy zapewniają, że zmiany w
„cudzym” kodzie nie spowodują błędów

Nie ma problemu, gdy ktoś odejdzie z
zespołu

background image

Optymalizacja na koniec

I zasada optymalizacji: „Nie
optymalizuj!”

Nie wolno optymalizować na podstawie
domysłów

Należy zmierzyć wydajność

Zrób, żeby działało, żeby działało
dobrze, i dopiero wtedy, żeby działało
szybko

background image

Brak nadgodzin

Nigdy nie dopuszczać do nadgodzin w
kolejnych tygodniach

Projekty wymagające nadgodzin i tak
się spóźnią

Ważniejsza jest jakość

Można zmieniać zakres projektu lub
czas

background image

Testowanie

background image

Testy jednostkowe

Użycie narzędzi do testowania

Najpierw test, później kod!

Testy znajdują się w repozytorium

razem z kodem

Inwestycja w przyszłość – zysk przyjdzie

później

Ułatwiają refaktoryzację i integrację

Kod musi przejść 100% testów zanim

będzie wydany

background image

Reakcja na bug

Gdy pojawi się bug, należy stworzyć
testy

Nowe testy akceptacyjne dla kodu
podukcyjnego

Testy jednostkowe

Później naprawiamy błąd

Kod przechodzi testy

background image

Testy akceptacyjne

Tworzone na podstawie opowiadań
użytkowników wybranych do iteracji

Może być kilka testów na jedno
opowiadanie

Testy „czarnej skrzynki” (black-box) –
weryfikowane przez klienta

background image

Podsumowanie

background image

Schemat projektu

http://extremeprogramming.org/

background image

Iteracja

http://extremeprogramming.org/

background image

Implementacja

http://extremeprogramming.org/

background image

Współdzielenie kodu

http://extremeprogramming.org/

background image

Skala czasowa

http://extremeprogramming.org/

background image

Kiedy używać XP – jeszcze
raz

Kiedy wymagania często się zmieniają

Klient nie jest pewny, czego potrzebuje

Wiadomo, że funkcjonalność będzie sie zmieniać co

parę miesięcy

Projekty o dużym ryzyku

Krótki termin realizacji

Nowe wyzwanie dla zespołu

Nowe technologie

Małe zespoły: 2-12 osób

Zaangażowanie klienta i kierowników w zespole

Wszyscy muszą pracować razem

Możliwość testowania na każdym etapie

background image

Dalsza lektura

Extreme Programming Explained

by Kent Beck

http://www.Extremeprogramming.org

http://XProgramming.com

http://www.agilemodeling.com

http://php.pl/tlumaczenia/zasady_i_praktyki_pr

ogramowania_ekstremalnego_xp

- po polsku

http://www.agilemodeling.com

Wydajne programowanie. Extreme

Programming Cynthia Andres, Kent Beck, 2006,

MIKOM

"Extreme Programming. Leksykon

kieszonkowy" Data wydania: 2003, Helion


Document Outline


Wyszukiwarka

Podobne podstrony:
W9 1a Programowanie ekstremalne
Io 12 Programowanie Ekstremalne
METROLOGIA WARSZTATOWA program wykładu, PWR [w9], W9, 4 semestr, aaaORGANIZACJA, OD SEBKA, Metrologi
PP W9, Podstawy programowania
w9, Akademia Morska -materiały mechaniczne, szkoła, Mega Szkoła, PODSTAWY KON, Program do obliczeń P
Prop aut W9 Ses cyfr Przetworniki fotoelektryczne
w9 aktywna polityka spoleczna
Nowy Prezentacja programu Microsoft PowerPoint 5
Charakterystyka programu
1 treści programoweid 8801 ppt
Programowanie rehabilitacji 2
W9 zaocz
Rola rynku i instytucji finansowych INowy Prezentacja programu Microsoft PowerPoint
W9 Przetw C A

więcej podobnych podstron