SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
IDZ DO
         PRZYK£ADOWY ROZDZIA£

                           SPIS TRE CI   eXtreme programming
           KATALOG KSI¥¯EK               Autorzy: David Astels, Granville Miller, Miroslav Novak
                                         T³umaczenie: Andrzej Gra¿yñski
                      KATALOG ONLINE     ISBN: 83-7197-909-6
                                         Tytu³ orygina³u: Practical Guide to Extreme Programming
       ZAMÓW DRUKOWANY KATALOG           Format: B5, stron: 286
                                         Przyk³ady na ftp: 66 kB

              TWÓJ KOSZYK
                    DODAJ DO KOSZYKA     „eXtreme programming” przedstawia now¹ metodologiê i praktykê programowania
                                         w przystêpny, a jednocze nie kompleksowy sposób. Autorzy omawiaj¹ podstawowe
                                         pojêcia programowania ekstremalnego: planowanie edycji, programowanie w parach,
         CENNIK I INFORMACJE             wczesne testowanie, „zrêczne modelowanie” i refaktoryzacjê. Zosta³y one
                                         zaprezentowane na przyk³adzie konkretnego projektu, którego realizacjê omówiono
                   ZAMÓW INFORMACJE      w ksi¹¿ce.
                     O NOWO CIACH        Kto powinien przeczytaæ tê ksi¹¿kê? Bêdzie ona niew¹tpliwie po¿yteczn¹ lektur¹ dla
                                         ka¿dego, kto choæ czê ciowo zwi¹za³ swe ¿ycie z tworzeniem oprogramowania —
                       ZAMÓW CENNIK      programisty, mened¿era czy koordynatora projektu. I nawet gdyby mia³o skoñczyæ siê
                                         tylko na czytaniu -- bez praktycznego zastosowania w najbli¿szym projekcie poznanych
                                         regu³, wiedza o programowaniu ekstremalnym oka¿e siê bez w¹tpienia po¿yteczna.
                 CZYTELNIA                 • Naucz siê zasad programowania ekstremalnego i zastosuj je w praktyce
                                           • Od konceptualizacji do oddania dzia³aj¹cego systemu — poznaj najlepsze sposoby
          FRAGMENTY KSI¥¯EK ONLINE           pracy na ka¿dym etapie tworzenia programowania
                                           • Poznaj znaczenie wszystkich uczestników procesu tworzenia oprogramowania:
                                             programistów, mened¿erów i klientów
                                           • Dowiedz siê, jak rozwi¹zaæ najczêstsze problemy powstaj¹ce przy wdra¿aniu
                                             metodologii programowania ekstemalnego




Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treści
                 Przedmowa........................................................................................ 9
                 Wprowadzenie ................................................................................. 11
                 Wstęp — w stronę samoaktualizacji................................................. 13

Część I          Reguły gry .....................................................................19
Rozdział 1. Zasady ............................................................................................ 21
                 Współpraca z klientami.....................................................................................................21
                 Metafory ułatwiają zrozumienie skomplikowanych zagadnień ........................................22
                 Plan....................................................................................................................................22
                 Skracaj zebrania ................................................................................................................23
                 Najpierw testy ...................................................................................................................24
                 Prostota..............................................................................................................................25
                 Programowanie parami .....................................................................................................25
                 Kodowanie zgodnie ze standardami..................................................................................26
                 Kolektywne kontrolowanie kodu ......................................................................................26
                 Nieustanna integracja ........................................................................................................27
                 Refaktoryzacja...................................................................................................................28
                 Udostępniaj rezultaty małymi fragmentami......................................................................28
                 Bez przemęczania się ........................................................................................................29
                 Bądź przygotowany na zmiany .........................................................................................29
Rozdział 2. Gracze............................................................................................. 31
                 Dwa zespoły ......................................................................................................................31
                 Zespół klientów .................................................................................................................32
                 Zespół programistów.........................................................................................................34
                 Znaczenie ról .....................................................................................................................36
                 Ustanawianie praw ............................................................................................................37
                 Konkluzja ..........................................................................................................................37

Część II         Konceptualizacja systemu ..............................................39
Rozdział 3. Kreowanie wizji systemu .................................................................. 41
                 Konceptualizacja systemu .................................................................................................41
                 Karta wizji .........................................................................................................................42
                 Metafory ............................................................................................................................43
                 Metafory w procesie projektowym ...................................................................................44
                 Konkluzja ..........................................................................................................................44
6                                                                                                                eXtreme programming


Rozdział 4. Historie użytkownika........................................................................ 45
                Koncepcja historii u ytkownika........................................................................................46
                Historie u ytkownika ........................................................................................................46
                Numeracja elementów na stosie........................................................................................47
                Konkluzja ..........................................................................................................................48
                Dodatek .............................................................................................................................51
Rozdział 5. Testy akceptujące ........................................................................... 53
                Czym są testy akceptujące?...............................................................................................53
                Tworzenie testów akceptujących ......................................................................................54
                Trudności związane z testami akceptującymi ...................................................................56
                Nieskończenie wiele testów ..............................................................................................57
                Automatyzacja testów akceptujących ...............................................................................57
                Konkluzja ..........................................................................................................................58
Rozdział 6. Jedno proste rozwiązanie.................................................................. 59
                Czego więc poszukujemy? ................................................................................................59
                Zrób to prosto ....................................................................................................................60
                Meandry konceptualizacji .................................................................................................60
                Konkluzja ..........................................................................................................................61
Rozdział 7. Nazewnictwo ................................................................................... 63
                Problem .............................................................................................................................63
                Czym są nazwy?................................................................................................................64
                Stałe doskonalenie wiedzy ................................................................................................64
                Konkluzja ..........................................................................................................................65

Część III Planowanie ....................................................................67
Rozdział 8. Oszacowania ................................................................................... 69
                Sporządzanie oszacowań...................................................................................................69
                Zało enia ...........................................................................................................................70
                Podział historii u ytkownika.............................................................................................71
                Trudności w planowaniu ...................................................................................................72
                Konkluzja ..........................................................................................................................73
Rozdział 9. Planowanie etapów.......................................................................... 75
                Szybkość............................................................................................................................76
                Koszt etapu........................................................................................................................77
                Ustanawianie priorytetów .................................................................................................77
                Programowanie parami .....................................................................................................78
                Tworzenie planu................................................................................................................79
                Konkluzja ..........................................................................................................................80
Rozdział 10. Planowanie iteracji .......................................................................... 81
                Definiowanie iteracji .........................................................................................................81
                Praktyczne aspekty planowania iteracji ..............................................................................82
                Pierwsza iteracja................................................................................................................83
                Kolejne iteracje .................................................................................................................83
                Określenie terminów .........................................................................................................84
                Konkluzja ..........................................................................................................................84
Rozdział 11. Planowanie taktyczne ...................................................................... 85
                Rozpoczynanie iteracji ......................................................................................................85
                Przydzielanie zadań...........................................................................................................86
                „Stojące” zebrania .............................................................................................................87
Śledzenie projektu .............................................................................................................87
                 Przedterminowe wykonanie iteracji ..................................................................................88
                 Konkluzja ..........................................................................................................................88

Część IV Tworzenie systemu.........................................................89
Rozdział 12. Programowanie parami..................................................................... 91
                 Organizacja programowania parami .................................................................................91
                 Programowanie jako konwersacja.....................................................................................92
                 Presja partnera ...................................................................................................................93
                 Podwójna korzyść .............................................................................................................93
                 Rezultaty............................................................................................................................94
                 Tak szybkie, jak najwolniejsze..........................................................................................95
                 Konkluzja ..........................................................................................................................96
Rozdział 13. Najpierw testowanie ........................................................................ 99
                 Projekt XP .........................................................................................................................99
                 Dlaczego testy? ...............................................................................................................100
                 Co testować? ...................................................................................................................101
                 Kiedy testować? ..............................................................................................................101
                 Jak testować? Środowisko testowe .................................................................................102
                 Programowanie sterowane testami..................................................................................104
                 Przykład...........................................................................................................................106
                 Korzyści ..........................................................................................................................108
                 Konkluzja ........................................................................................................................109
Rozdział 14. Projekt .......................................................................................... 111
                 Projekt a XP ....................................................................................................................112
                 Jak wzorce projektowe mają się do XP? ............................................................................114
                 Architektura a XP............................................................................................................115
                 „Zwinne modelowanie” (AM) ........................................................................................115
                 Czym jest AM?................................................................................................................115
                 Przegląd wartości, zasad i praktyk AM...........................................................................117
                 Konkluzja ........................................................................................................................123
Rozdział 15. Sugestywne kodowanie.................................................................. 125
                 Nazewnictwo...................................................................................................................126
                 Prostota jest krańcowo skomplikowana .............................................................................127
                 Gwarantowane zało enia.................................................................................................128
                 Niech kompilator zrobi to za Ciebie ...............................................................................128
                 Bez komentarzy...............................................................................................................129
                 Kolektywne kontrolowanie kodu ....................................................................................131
                 Lepiej spłonąć ni zwiędnąć — czy by? ........................................................................131
                 Zadowoleni programiści to produktywni programiści ....................................................132
                 Ciesz się yciem ..............................................................................................................132
                 Konkluzja ........................................................................................................................133
Rozdział 16. Refaktoryzacja............................................................................... 135
                 Przykłady refaktoryzacji .................................................................................................136
                 Odwaga............................................................................................................................137
                 Zapachy kodu ..................................................................................................................137
                 Kiedy refaktoryzować? ...................................................................................................138
                 Dwa kapelusze.................................................................................................................139
                 Przykłady refaktoryzacji .................................................................................................139
                 Konkluzja ........................................................................................................................143
8                                                                                                               eXtreme programming


Rozdział 17. Nieuchronne integrowanie ............................................................... 145
                Kilka praktycznych wskazówek......................................................................................146
                Integruj tylko po kompletnym przetestowaniu................................................................147
                Antywzorzec....................................................................................................................147
                Dwa podejścia do integracji ............................................................................................148
                A co z przeglądem kodu? ................................................................................................149
                Konsekwencje kolektywnej kontroli kodu......................................................................149
                Konkluzja ........................................................................................................................150

Część V         Udostępnianie ..............................................................151
Rozdział 18. Przekazanie systemu ..................................................................... 153
                Dzień dostarczenia ..........................................................................................................153
                Przekazanie produkcyjne.................................................................................................154
                Testowanie ......................................................................................................................154
                Świętowanie zwycięstwa.................................................................................................155

Część VI Zagadnienia dodatkowe ...............................................157
Rozdział 19. Adoptowanie i adaptacja XP.......................................................... 159
                Zrozumienie XP ..............................................................................................................159
                Adoptowanie XP .............................................................................................................160
                Metody adopcji................................................................................................................161
                Adaptacja XP...................................................................................................................162
                Praktyki XP .....................................................................................................................163
                Zwrot inwestycji..............................................................................................................163
                Konkluzja ........................................................................................................................163
Rozdział 20. Skalowanie XP .............................................................................. 165
                Programowanie w du ej skali .........................................................................................165
                Organizacja du ych projektów XP..................................................................................166
                Otwarta i uczciwa komunikacja ......................................................................................167
                Integracja.........................................................................................................................168
                Znaczenie mądrych ludzi ................................................................................................168
                Konkluzja ........................................................................................................................169
Rozdział 21. Przyszłość XP ................................................................................ 171
                Dokąd zmierza XP?.........................................................................................................171
                Na polu bitwy ..................................................................................................................172
                Holoniczne podejście do XP ...........................................................................................172
                Tworzenie oprogramowania jako rzemiosło ...................................................................174
                Ewolucja XP....................................................................................................................175

Dodatki .......................................................................................177
                Przykładowa aplikacja.................................................................... 179
                Bibliografia .................................................................................... 275
                Skorowidz...................................................................................... 279
Rozdział 14.
Projekt
               Pilnie strze konieczności i potrzeby chwili.
               I nie przejmuj się wielkimi zamierzeniami.
                                                          — W. Szekspir, Ryszard III (akt IV, sc. 4)


               Wszelkie zamiary pochodzące z serca
               Toną w bezmiarze obietnic.
                                                      — W. Szekspir, Troilus i Cresida (akt I, sc. 3)


          Projekt w XP? Niektórzy przeciwnicy XP przekonani są co do tego, i pojęcie projektu
          jest tej filozofii zdecydowanie obce. XP jawi im się jako praktyka z pogranicza haker-
          stwa i źródło destrukcji — programiści niczego nie projektują, tylko zakasują rękawy
          i piszą programy. adnej dyscypliny, tylko ywioł.

          To jednak obraz zdecydowanie nieprawdziwy. XP dalekie jest od niezdyscyplinowanego
           ywiołu, jest wysoce zdyscyplinowanym podejściem do tworzenia oprogramowania. XP
          nie jest „antyprojektowe”; jest oparte na ciągłym projektowaniu, sprzeciwia się jedynie
          du ym projektom zapiętym a priori na ostatni guzik. Jako alternatywę dla takich pro-
          jektów proponuje doraźne projektowanie małych zadań, dyktowanych potrzebą chwili.

          Pozostałością „globalnej wizji projektu” jest w XP uzyskanie ogólnej perspektywy syste-
          mu, określonej przez stosowne metafory. Ta „wysokopoziomowa mapa” systemu uszcze-
          góławiana jest w trakcie jego realizacji — kiedy programiści przystępują do realizacji zwią-
          zanych z tym zadań, dokonują planowania cząstkowego dotyczącego tych właśnie zadań.

          W niniejszym rozdziale przyjrzymy się niektórym zadaniom związanym z projekto-
          waniem w XP, w szczególności:
               modelowaniu i jego związkami z ideą XP,
               nowej koncepcji „zwinnego modelowania” (Agile Modeling1, w skrócie AM),
               narzędziom wspomagającym AM.

1
    Dawna nazwa — Extreme Modeling.
112                                                            Część IV ♦ Tworzenie systemu



Projekt a XP
        XP promuje ewolucyjne podejście do projektowania. Niegdyś, gdy próbowano realizo-
        wać w taki sposób projekty informatyczne, często otrzymywano w efekcie gigantyczny
        bałagan. Jako antidotum na tę improwizację wymyślono więc planowanie a priori —
        podobne do tego, jakie architekci stosują przy budowie mostów: wszystkie najdrob-
        niejsze szczegóły przedsięwzięcia planowane są na początku, przed ich faktycznym
        rozpoczęciem. Niewątpliwie przy realizacji projektów architektonicznych podejście
        takie jest jak najzupełniej słuszne; samo planowanie z du ym wyprzedzeniem jest zaś
        mo liwe dlatego, e w zasadzie a priori znane są wszystkie uwarunkowania, niezmienne
        przez cały okres realizacji przedsięwzięcia.

        Tworzenie oprogramowania rządzi się jednak innymi regułami. Kiedy tworzysz np. dwu-
        dziesty system księgowy, mo esz z du ą dokładnością przewidzieć wiele jego szcze-
        gółów; kiedy jednak jest to Twój pierwszy system tego rodzaju, brak Ci nale ytego
        doświadczenia niezbędnego ku temu, aby określić chocia by wymagania, jakie powi-
        nien spełniać produkt finalny. Je eli w tych warunkach zabierzesz się do planowania
        (czytaj: przewidywania), ju niedługo przekonasz się, i Twoje plany rozmijają się z rze-
        czywistością — bo zmieniły się wymagania, bo zmieniło się zdanie klientów, którzy
        początkowo niezbyt dobrze rozumieli, czego im naprawdę potrzeba, bo zmieniło się
        prawo itd. Twój początkowy plan będzie nieustannie korygowany, a być mo e w końcu
        postanowisz opracować go raz jeszcze od początku. Rysunek 14.1 w prosty sposób
        przedstawia to, co z Twoim projektem mo e się dziać przez kilka najbli szych miesięcy.

Rysunek 14.1.
Klasyczne
projektowanie
w zmieniających
się warunkach


        Nie ma nic za darmo; wraz z ciągłymi „nawrotami” w projekcie (który podobny będzie
        raczej do wodospadu) rosnąć będą tak e koszty — na rysunku 14.2 przedstawiono
        tempo ich wzrostu wraz z upływem czasu, w odniesieniu do „klasycznego” projektu
        programistycznego.

Rysunek 14.2.
Krzywa zmiany
kosztów
w klasycznym
projekcie
informatycznym
Krzywa ta ulega jednak znacznemu „spłaszczeniu” w przypadku projektu XP (rysu-
           nek 14.3).

Rysunek 14.3.
Krzywa
zmiany kosztów
w projekcie XP




           Czynnikami, które w największym stopniu wpływają na spłaszczenie krzywej kosztów
           projektu XP są między innymi:
                prostota projektowania,
                zautomatyzowane testowanie,
                agresywna refaktoryzacja.

           W porównaniu z klasycznym projektem informatycznym (por. rysunek 14.1), projekt
           XP zawiera więcej „pętli”, ściślej ze sobą powiązanych. Na rysunku 14.4 przedstawione
           są cykle związane z procesem2 XP; nie uwzględniono tam tzw. gry planistycznej3 (Plan-
           ning Game), gdy koncentrujemy się jedynie na cyklu rozwojowym.

Rysunek 14.4.
Cykle procesu
rozwojowego w XP




           Jak to wszystko działa? Dostajesz określone zadanie, siadasz do komputera, dokonujesz
           refaktoryzacji (uproszczenia lub poprawienia) istniejącego kodu, tworzysz niezbędne
           testy (być mo e znowu refaktoryzując kod), wreszcie tworzysz zasadniczy kod i testu-
           jesz go. Zwróć szczególną uwagę na pętlę „tworzenie testów-kodowanie”: w tej właśnie
           pętli będzie się kręcić Twoja praca dopóty, dopóki Twoje zadanie nie zostanie zreali-
           zowane bezbłędnie (w sensie zaliczenia wszystkich stworzonych dla niego testów).
           Być mo e będziesz chciał dokonać „wyklarowania” istniejącego kodu, co w kategoriach
           rysunku 14.4 oznacza dodatkowo jeden lub kilka „obrotów” w ramach pętli „refakto-
           ryzacja-tworzenie testów”.

           Pojawienie się koncepcji programowania obiektowego (OOP) wywarło decydujący
           wpływ na techniki programowania, zwłaszcza w odniesieniu do systemów bazujących na
           interfejsach. Interfejs obiektu uzewnętrznia te elementy, które reprezentują mechanizmy

2
    W kontekście XP słowo „proces” u ywane jest raczej w potocznym znaczeniu.
3
    Tak określa się w XP analizę i zbieranie wymagań.
114                                                                  Część IV ♦ Tworzenie systemu


           rządzące jego zachowaniem; szczegóły implementacyjne tych mechanizmów ukryte
           są przed u ytkownikiem obiektu, co określane jest mianem enkapsulacji lub hermety-
           zacji. „Odseparowanie” klienta od wnętrza obiektu umo liwia jego autorom swobod-
           ne manipulowanie szczegółami implementacji, dla klienta bowiem istotne jest tylko
           zewnętrzne zachowanie się obiektu, określone przez jego interfejs.

           Takim „interfejsem” dla testowanego fragmentu kodu jest jego zewnętrzne zachowanie
           się i taki właśnie interfejs jest podstawą wyprzedzającego tworzenia testów. Jednocze-
           śnie interfejs ten jest podstawą projektowania w XP — projektowania opartego na skut-
           kach funkcjonowania kodu; szczegóły implementacyjne określane są dopiero w drugiej
           kolejności.

           Poniewa cykle „testy-projektowanie-kodowanie” są względnie małe i regularnie
           otrzymujesz działający system4, mo esz regularnie doświadczać sprzę enia zwrotne-
           go umo liwiającego utrzymywanie biegu projektu we właściwych ryzach; związane
           z tym konieczne zmiany w projekcie bywają stosunkowo niewielkie, właśnie ze względu
           na niewielki rozmiar wspomnianych cykli. Przystosowywanie projektu do zmienia-
           jących się wymagań odbywa się więc stosunkowo małym kosztem.

           Projektowanie w XP ma więc charakter „globalny” tylko początkowo — w czasie two-
           rzenia ogólnej perspektywy systemu i związanych z nią metafor. Potem następuje ju
           „drobnoziarniste” projektowanie, przeplatające się z refaktoryzacją. W efekcie otrzy-
           mujemy prosty, przejrzysty projekt ucieleśniony w prostym, przejrzystym kodzie.



Jak wzorce projektowe mają się do XP?
           W XP, tak jak w ka dym przedsięwzięciu projektowym, obecne są wzorce projekto-
           wania. XP dostarcza zasad i zaleca pewne praktyki w procesie tworzenia oprogramo-
           wania; wzorce projektowe obejmują związaną z tym wiedzę i doświadczenie. Zasada
           ta obowiązuje niezale nie od tego, jaki rodzaj oprogramowania jest tworzony i jak
           przebiega sam proces projektowy.

           Specyfiką XP jest natomiast to, e na jego gruncie wzorce projektowe nie są celem
           samym w sobie. W XP wa ne jest nie tylko zrozumienie, jak korzystać z danego wzorca,
           ale tak e — w jakich sytuacjach z niego korzystać, a w jakich absolutnie nie. Innymi
           słowy — nie powinno się u ywać określonego wzorca projektowego dotąd, a nie będzie
           to konieczne. Właściwe wykorzystywanie wzorców jest preferowanym sposobem ewo-
           luowania projektu — rozpocznij od rzeczy najprostszych, które prawdopodobnie będą
           działać i przekształcaj je stopniowo w rzeczy bardziej zło one, które z czasem mogą
           stać się wzorcami projektowymi.




4
    To skutek charakterystycznego dla XP wczesnego i częstego integrowania kodu.
Architektura a XP
   W XP trudno jednoznacznie wskazać elementy, które mo na by określić jako archi-
   tekturę. Architektura jest tu bowiem określona częściowo przez metafory, opisujące
   ogólny kontekst i kształt systemu. Zdeklarowani zwolennicy XP — Beck, Jeffries,
   Martin i inni — wyra ają opinię, i jakichkolwiek wstępnych projektów architektury
   nale y bezwzględnie unikać. Refaktoryzacja jest tym czynnikiem, który stopniowo
   nadaje projektowi określoną postać. Nie zgadza się z tą kategoryczną opinią Fowler,
   twierdząc, i konieczne są pewne ogólne zało enia architektoniczne. Osobiście przy-
   chylam się do zdania pierwszej grupy — dą ę bowiem do tworzenia najprostszych rze-
   czy, które prawdopodobnie będą działać i staram się utrzymywać kod w jak najprostszej
   postaci. Na jego komplikacje decyduję się tylko wtedy, kiedy oka e się to uzasadnione.



„Zwinne modelowanie” (AM)
   Scott Ambler przewodzi społeczności, która opracowała koncepcję „zwinnego mode-
   lowania” (Agile Modeling — AM). Niniejszy fragment stworzony został głównie na
   podstawie internetowych materiałów związanych z tą tematyką oraz ksią ki Scotta.

   AM znajduje się dopiero w stadium formowania, stąd wszelkie związane z nim defi-
   nicje (dotyczące wartości, zasad, praktyk itp.) mają charakter płynny i są przedmiotem
   wielu dyskusji. Więc to, o czym będę pisać w dalszym ciągu, odzwierciedla aktualny
   (w momencie wydania ksią ki) stan tego, co moim zdaniem jest istotą AM. Ogólny
   charakter AM mo na bowiem ju uwa ać za wysoce ustalony, a we wspomnianej spo-
   łeczności panuje powszechna zgoda co do podstawowych wartości AM. Toczą się jed-
   nak zawzięte dyskusje na temat zasad — tak więc głównym celem prezentowanego tu
   materiału jest przedstawienie czytelnikowi ogólnego klimatu AM.



Czym jest AM?
   AM jest opartą na praktyce metodologią efektywnego modelowania i dokumentowania
   systemów informatycznych. Mówiąc prosto, AM jest kolekcją wartości, zasad i prak-
   tyk modelowania oprogramowania, które mogą zostać zastosowane w procesie jego
   tworzenia szybko i bez komplikacji. AM jest bardziej efektywne od tradycyjnych tech-
   nik modelowania, poniewa nie pretenduje do tego, by tworzone modele były perfek-
   cyjne — wystarczy, e będą one dobre. Elementy AM mogą być stosowane w procesie
   zbierania wymagań, analizy, definiowania architektury i projektowania.

   AM nie jest procesem opisanym a priori; innymi słowy, nie definiuje ono szczegółowych
   procedur ani sposobów postępowania w celu stworzenia takiego czy innego modelu.
   Zamiast tego dostarcza ono wskazówek do tego, jak efektywnie przeprowadzać proces
   modelowania. AM nie jest jednak bardziej prymitywne od innych technik modelowania
   — wielu programistów uwa a, i za jego pomocą mogą wykonać więcej ni w przy-
   padku tradycyjnych narzędzi. Jednocześnie AM postrzegane jest jako narzędzie dla
   osób wra liwych („touchy feely”), wręcz raczej dla „artystów” ni „naukowców”.
116                                                          Część IV ♦ Tworzenie systemu


      Podstawowe wartości AM, mające zapewnić efektywność modelowania, określone
      zostały przez stowarzyszenie Agile Alliance. Ten system wartości daje pierwszeństwo:
          indywidualizacji i współdziałaniu — przed procesami i narzędziami;
          działającemu oprogramowaniu — przed obszerną dokumentacją;
          współpracy z klientami — przed negocjacją kontraktu;
          reagowaniu na zmiany — przed sztywnym trzymaniem się planu.


Ogólna charakterystyka AM
      Indywidualizacja i współdziałanie kontra procesy i narzędzia
      Wa ni są ludzie i komunikacja. DeMarco twierdzi, i „socjologia mo e więcej ni
      technika, a nawet pieniądze”.

      Działające oprogramowanie kontra dokumentacja
      Celem wysiłku programistów jest tworzenie oprogramowania, i to takiego, które wy-
      konuje oczekiwane funkcje prawidłowo i efektywnie — czyli po prostu takiego, które
      działa. Nie jest tworzenie dokumentacji, która jest dla oprogramowania elementem
      pomocniczym (choć niezbędnym).

      Uczestniczyłem kiedyś w projekcie, w którym poprzedni zespół projektowy wypro-
      dukował tyle dokumentacji, i do jej wydrukowania konieczny był zakup szybkiej
      drukarki (inaczej „zatkałaby się” kolejka wydruków). Jak na ironię, większość z tych
      dokumentów u ywana była bardzo rzadko (je eli w ogóle), były one bowiem tak ści-
      śle związane z konkretnymi rozwiązaniami, i ogólnie tak dyletanckie, e praktycznie
      nie dało się z nich korzystać.

      Modele powinny być rzeczami dynamicznymi, a nie statycznymi dokumentami. Wy-
      magają one bowiem zazwyczaj ró nych zmian, stosownie do nowych wymagań po-
      jawiających się w czasie realizacji projektu. Modele sporządzone na papierze mają więc
      z definicji krótki ywot i u ywane są przewa nie w charakterze „migawek” odzwier-
      ciedlających stan aktualny. Rzeczywiste modele zawarte są w kodzie produktów.

      Współpraca z klientami kontra negocjacja kontraktu
      Negocjowanie kontraktu jest z zało enia procesem spornym. Znacznie lepszych wy-
      ników mo na się spodziewać, je eli negocjacje ustąpią miejsca współpracy. Zespół
      programistów nie jest bowiem w stanie w pełni zarządzać dynamicznym, zmieniającym
      się modelem bez bie ącego udziału klientów.

      Negocjowanie oznacza dą enie do ustalenia a priori niezmiennych później wymagań,
      które tym samym stają się nawet wa niejsze i od klientów, i od programistów. Ścisła
      współpraca pomiędzy zespołami umo liwia natomiast zmianę tych wymagań „w locie”,
      celem np. przystosowania ich do zmienionych warunków, daje tak e programistom mo -
      liwość poszukiwania lepszych rozwiązań, dzięki lepszemu rozumieniu tych wymagań.
Współpraca z klientami staje się znacznie ułatwiona, je eli zespół programistów ma
   mo liwość kontaktu „na miejscu” z ich przedstawicielem (przedstawicielami), co jest
   praktyką ściśle zalecaną przez XP.

   Reagowanie na zmiany kontra sztywne trzymanie się planu
   Je eli oprogramowanie ma odpowiadać wymaganiom klientów, musi być ono tworzone
   w środowisku umo liwiającym szybkie reagowanie na zmieniające się warunki, wpły-
   wające na zmiany tych e wymagań.

   Zmienność wymagań klientów jest faktem. Trudno przewidywać wszelkie wymagania,
   je eli jednak byłoby to w jakiś sposób mo liwe, to i tak nie będzie gwarancji, i wyma-
   gania te zostaną od razu właściwie zrozumiane. Zazwyczaj tak e klienci nie od razu
   zdają sobie sprawę z wszystkich swych potrzeb — nie są oni zazwyczaj informatykami
   i ich zdanie w tej materii mo e ulegać zmianie w miarę jak będą obserwować udostęp-
   niane im sukcesywnie fragmenty tworzonego systemu.

   By sprostać zmieniającym się wymaganiom, potrzebna jest więc elastyczność; polega
   ona na ciągłym, „przyrostowym” modyfikowaniu projektu. Nale y unikać projektowania
   „na zapas”, a ograniczyć się do zmian wymuszonych aktualnymi okolicznościami —
   je eli zmiana, którą zamierzasz wprowadzić do projektu, nie jest teraz potrzebna, zre-
   zygnuj z niej (to tzw. zasada YAGNI — You Ain’t Gonna Need It).

   Tak właśnie wygląda (w du ym uproszczeniu) koncepcja „zwinnego modelowania”
   (AM), takie są jej wartości, zasady i praktyki, o których wcześniej wspominałem. Nie
   sposób oczywiście nie dostrzec ich du ego podobieństwa do XP.



Przegląd wartości, zasad i praktyk AM
   Wartościami AM, przejętymi z XP i przystosowanymi do konkretnych zagadnień, są:
   komunikacja, prostota, sprzę enie zwrotne, odwaga i skromność. Do tego, aby mo-
   delowanie zakończyło się sukcesem, niezbędna jest komunikacja pomiędzy wszystkimi
   uczestnikami projektu, konieczne jest dą enie do poszukiwania jak najprostszego roz-
   wiązania spełniającego wszystkie potrzeby, wymagane jest tak e sprzę enie zwrotne
   w celu nale ytego spo ytkowania wysiłku programistycznego; nie da się tego wszyst-
   kiego zrealizować bez nale ytej odwagi, jak równie pewnej dozy skromności pozwa-
   lającej zdać sobie sprawę z własnej omylności i wyciągnąć wnioski ze swych błędów.

   AM opiera się na kolekcji zasad, do których zaliczyć mo na dą enie do prostoty przy
   modelowaniu oraz podatność na zmiany, wynikającą ze zmiennego charakteru wyma-
   gań klientów. AM wymaga zrozumienia roli przyrostowej modyfikacji systemu, co
   jest praktycznym wyrazem wspomnianej podatności na zmiany, oraz szybkiego sprzę e-
   nia zwrotnego, pozwalającego ocenić, czy modelowanie faktycznie posuwa się w dobrym
   kierunku. Modelowanie powinno być ponadto ukierunkowane na konkretny cel — nie
   nale y pracować nad modelowaniem czegokolwiek, co nie jest temu celowi podporząd-
   kowane; efektywność modelowania wymaga ponadto dysponowania wieloma mode-
   lami odzwierciedlającymi ró ne punkty widzenia. Modele niekoniecznie muszą być
118                                                          Część IV ♦ Tworzenie systemu


      odrębnymi dokumentami, lecz mogą być organicznie wbudowane w kod programu —
      obowiązuje tu naczelna zasada wy szości zawartości nad reprezentacją, zgodnie z którą
      ta sama koncepcja mo e być modelowana na kilka ró nych sposobów. Względy efek-
      tywności modelowania wymagają dokładnego poznania dostępnych narzędzi i modeli
      wzorcowych; efektywność pracy w zespole uzale niona jest od wielu czynników psy-
      chologicznych — programiści powinni więc zrozumieć, i ka dy z nich mo e się zawsze
      czegoś nauczyć od kogoś innego, a otwarta, przyjazna i uczciwa komunikacja sprzyja
      efektywnej współpracy. Wreszcie, najwa niejszym aspektem wykonywanej pracy po-
      winna być jej jakość, a zastosowanie AM w konkretnych warunkach mo e wymagać
      pewnej adaptacji jego zasad.

      AM postuluje tak e konkretne działania (praktyki). Fundamentalnym zaleceniem jest
      równoległe tworzenie kilku modeli, tak by zawsze mo na było łatwo dostosować któryś
      z nich do konkretnej, nowej sytuacji i kontynuować pracę w nowych warunkach. Mo-
      delowanie powinno być prowadzone małymi krokami — nale y unikać monumentalnych,
      uniwersalnych modeli przypominających „wie ę z kości słoniowej”. Jako e modele
      są tylko abstrakcyjną reprezentacją oprogramowania, nale y dą yć do sprawdzenia ich
      w rzeczywistym kodzie i udowodnienia tym samym, e funkcjonują w praktyce, nie tylko
      w teorii. Aby wszystkie potrzeby (klientów i programistów) zostały nale ycie zrozu-
      miane i zaspokojone, wszyscy oni muszą aktywnie uczestniczyć w realizacji projektu.
      Je eli chodzi o cele modelowania, to mogą być one dwojakie: koncepcyjne i komuni-
      kacyjne. Modelowanie koncepcyjne ułatwia zrozumienie zło onych idei zawartych
      w projekcie systemu, zadaniem modelowania komunikacyjnego jest natomiast przedsta-
      wienie informacji o pracach wykonywanych (lub przeznaczonych do wykonania) przez
      zespół. Praktyczną realizacją zasady dą enia do prostoty jest tworzenie modeli o pro-
      stej zawartości (obejmującej jedynie niezbędne zagadnienia i nie zawierającej zbytnich
      szczegółów), prostym opisie (przez zastosowanie odpowiednio prostej notacji) z zasto-
      sowaniem prostych narzędzi. Nale y unikać nadmiernej liczebności modeli — pozbywać
      się modeli tymczasowych i uaktualniać pozostałe tylko wtedy, gdy staną się nieade-
      kwatne. Sprawna komunikacja mo e być zapewniona poprzez publiczną prezentację
      modeli — np. za pomocą projektorów lub w sieci WWW — dzięki wykorzystaniu
      standardów modelowania, dzięki kolektywnej kontroli kodu itp. Opłacalność wysiłku
      programistycznego znacznie wzrasta, je eli w modelu zawarte są elementy testujące,
      je eli model ten oparty jest na znanych szablonach oraz je eli wykorzystuje on elementy
      innych istniejących modeli. Nie jest tak e wykluczone, i wdro enie nowego systemu,
      wykorzystującego nowoczesne mechanizmy bazodanowe — np. oparte na sieciach
      WWW — będzie wymagało jego integracji z systemami wykorzystującymi starsze
      bazy danych; nale y więc przewidzieć niezbędne modele uwzględniające ró ne wa-
      rianty wykonania tej operacji.


Wartości AM
      AM oferuje następujące wartości:
          Komunikacja — niezbędna jest efektywna komunikacja pomiędzy
          wszystkimi uczestnikami projektu: programistami, mened erami i klientami.
          Jest ona jednym z celów modelowania.
Uczciwość — najbardziej nawet efektywna komunikacja jest bezu yteczna,
       je eli nie towarzyszy jej uczciwość: uczciwość programistów pod względem
       oszacowań, problemów, opóźnień itd., i uczciwość klientów odnośnie
       do priorytetów, wymagań, kierunków zmian itd. Tylko w takich warunkach
       ludzie mogą mieć zaufanie do efektów czyjejś pracy.
       Prostota — tworzenie jak najprostszych rzeczy, które prawdopodobnie
       będą działać, jest naczelną zasadą XP stosującą się zarówno do kodowania,
       jak i modelowania.
       Sprzę enie zwrotne — stałe sprzę enie zwrotne jest niezbędne do uzyskania
       pewności, e poszczególne działania posuwają się we właściwym kierunku,
       bądź do jak najwcześniejszego skorygowania tych działań, je eli wymaga
       tego ich niezgodność z obecnymi warunkami.
       Odwaga — nale y mieć odwagę do wykonywania działań zalecanych
       przez XP (i AM w szczególności): podejmowania wa nych decyzji
       i ponoszenia odpowiedzialności z tego tytułu, dokonywania wa nych
       refaktoryzacji modelu itp.
       Skromność — nale y być świadomym własnej omylności i popełnianych
       błędów. Nale y być otwartym na pomysły innych kolegów, bo być mo e
       są one lepsze od własnych pomysłów. Nale y być przygotowanym
       na realizację dobrych idei niezale nie od tego, czyjego są one autorstwa.


Zasady AM
   Oto najwa niejsze zasady AM:
       Jeden model wart jest 1024 linii kodu — jasny, szkicowy model mo e
       ujawnić wiele istotnych szczegółów, które mogłyby pozostać niezauwa one
       podczas studiowania kodu.
       Modeluj zgodnie z celem — modelowanie dla samego modelowania
       jest bezu yteczne; powinno być ono podporządkowane określonemu celowi.
       Stosuj właściwy model, wykorzystuj wiele modeli — niekiedy pojedynczy
       model okazuje się wystarczający do wyjaśnienia wszystkich zawiłości;
       ze względu jednak na zró nicowany punkt widzenia poszczególnych uczestników
       projektu, mo e okazać się po yteczne opracowanie kilku modeli, stanowiących
       kilka ró nych spojrzeń na to samo zagadnienie, mechanizm, koncepcję itp.
       Poznaj swoje modele — to oczywiste: je eli sam nie rozumiesz swych modeli,
       w jaki sposób mo esz wyjaśniać je innym?
       Poznaj swoje narzędzia — w ka dej pracy wiele zale y od stosowanych
       narzędzi. Je eli poznasz narzędzia będące do Twojej dyspozycji, będziesz
       u ywał ich z pełnym zaufaniem i bez obaw.
       Ucz się nieustannie — traktuj ka dą sytuację lub wyzwania równie jako
       okazję do nauczenia się czegoś nowego. Dla mnie osobiście jedną z takich
       sytuacji jest praca w parze z kimś bardziej lub mniej doświadczonym
120                                                        Część IV ♦ Tworzenie systemu


          — bardziej doświadczony kolega mo e podzielić się ze mną swą wiedzą,
          mniej doświadczony mo e natomiast prezentować bardziej świe e spojrzenie
          na dany temat, mo e tak e domagać się wyjaśnienia ró nych kwestii,
          które dla mnie wydają się oczywiste. Zawsze mo na się przy tym czegoś
          nauczyć — na przykład nieoczekiwanie odkryć nowy sposób rozwiązania
          problemu, lepszy od dotychczas stosowanego.


Praktyki AM
      Wreszcie, istnieje kilka konkretnych praktyk postulowanych przez AM:
          Modeluj w celu zrozumienia — tworzenie modeli jest okazją do zgłębienia
          problemu i poznania jego przestrzeni rozwiązań. Uwzględnij mo liwość
          zrezygnowania z niektórych modeli — mogą one bowiem być (według)
          tylko „krokami na drodze do oświecenia”.
          Modeluj komunikatywnie — bądź zwięzły, ale wyrazisty. Staraj się uczynić
          model tak treściwym, jak tylko potrafisz.
          Twórz proste modele — nie próbuj budować modelu zasługującego
          na miano „matki wszystkich modeli”. Buduj małe modele odzwierciedlające
          małe części systemu. Modele ogólne mają swe prawa, ale nie wtedy,
          kiedy próbujesz zrozumieć szczegóły.
          U ywaj prostych narzędzi — nie ignoruj mo liwości korzystania z kartki
          i ołówka. Parafrazując znaną zasadę XP — u ywaj jak najprostszych narzędzi,
          za pomocą których prawdopodobnie wykonasz swoją pracę. Niektóre
          skomplikowane narzędzia są narzędziami tylko z nazwy, tworzą one bowiem
          modele... dla samej sztuki modelowania.
          Modeluj z partnerem — to naturalne rozszerzenie programowania parami.
          Wszelkie korzyści wynikające z dwuosobowego tworzenia kodu przekładają
          się w prosty sposób na modelowanie.
          Modeluj w grupie — niekiedy okazuje się celowe tworzenie modelu
          z udziałem całego zespołu (lub du ej jego części). Bywa tak w sytuacjach
          zło onych, obejmujących wielorakie zale ności, kiedy podejmowane decyzje
          równie miewają wielorakie konsekwencje. Spojrzenie na model przez wiele
          par oczu zawsze jest korzystne — bowiem w przeciwieństwie do kodowania,
          to nie para jest „optymalną liczebnością”. Nale y jednak mieć na uwadze fakt,
           e w zbyt licznym zespole znacznie trudniej o koncentrację.
          Uzewnętrzniaj swe modele — wykorzystuj ka de miejsce, gdzie mógłbyś
          trwale umieścić szkic swego modelu: tablice, ściany, jak równie swą sieć
          intranetową.
UML a XP
Ujednolicony język modelowania — Unified Modeling Language (UML) jest obecnie przemy-
słowym standardem notacyjnym stosowanym do graficznego przedstawiania zależności funk-
cjonalnych na potrzeby programowania obiektowego. Byłem świadkiem wielu dyskusji o tym,
w jakim stopniu (o ile w ogóle) UML zgodny jest z zasadami XP; czytałem wiele artykułów na
ten temat, większość z nich jednak dotyczyła raczej ludzi stosujących XP zamiast UML.
Idea UML bywa często źle rozumiana. Jak przed chwilą stwierdziłem, standard UML jest przede
wszystkim wizualną notacją i jako taki był i jest z powodzeniem wykorzystywany. Nie jest więc
pod żadnym względem sprzeczny z XP i może być w naturalny sposób użyty na potrzeby AM.
UML wykorzystuje wiele różnych typów diagramów. Większość z nich nie jest powszechnie
używana na gruncie XP, chociaż niektórzy klienci mogą ich sobie zażyczyć w dokumentacji
towarzyszącej systemowi (co mogłoby znaleźć odzwierciedlenie w historii użytkownika pt. „Oto
jest diagram funkcjonalny systemu”).
Szczególnie użyteczne dla XP okazują się diagramy trzech następujących typów:
   diagramy klas:




   diagramy sekwencji:




   diagramy stanów:
122                                                             Część IV ♦ Tworzenie systemu


 Głównym celem rysowania diagramów jest pomoc w myśleniu o problemie i jego możliwych
 rozwiązaniach. Diagramy te nie są jednak dziełami sztuki i nie ma sensu marnotrawić czasu
 na ich artystyczny wygląd. Typowy diagram rysowany jest odręcznie na tablicy, na kartce, na
 serwetce i in.; diagramy rysowane „same dla siebie” są więcej niż bezużyteczne. Peter Coad
 stwierdził kiedyś — cytując swego ojca — „podejmując się zrobić cokolwiek, rezygnujesz jedno-
 cześnie ze zrobienia czegoś innego”; każdą minutę straconą na cyzelowanie diagramów mógłbyś
 z pożytkiem przeznaczyć np. na tworzenie kodu.
 Niekiedy bez diagramów nie można się po prostu obejść. Pomagają w myśleniu, pomagają
 w komunikowaniu się. Diagramy sporządzone na papierze mają ograniczony żywot — należy
 pozbywać się ich natychmiast, jak tylko spełnią swoje zadanie i okażą się niepotrzebne. Ich
 ewentualna „aktualizacja” to czysta strata czasu, a przy okazji ryzykujemy to, iż prędzej czy
 później posłużymy się diagramem nieaktualnym.
 Osobiście odradzam korzystanie z różnych narzędzi do tworzenia diagramów — za pomocą
 ołówka rysuje się diagramy znacznie szybciej, poza tym papierowe szkice wyrzuca się ze znacz-
 nie mniejszymi oporami niż te towarzyszące kasowaniu „elektronicznej” dokumentacji. W na-
 stępnej ramce opisany został jednak ważny wyjątek od tej zasady.


 Narzędzia do „zwinnego modelowania”
 Niniejsza książka jest z założenia praktycznym wprowadzeniem do XP, byłaby więc niekom-
 pletna bez wskazania, jak w praktyce prowadzić „zwinne modelowanie”.
 Zacznijmy od rzeczy najprostszych. Najlepszymi narzędziami do rysowania diagramów są: kartka
 i ołówek (pisak) albo tablica i kreda. Łatwo narysować, jeszcze łatwiej zetrzeć (wyrzucić).
 „A co z programami do modelowania?” — spytasz zapewne. Tu będę zdecydowanie stronniczy;
 pracuję dla TogetherSoft i bardzo podoba mi się ich zwinne podejście do modelowania, i do
 tworzenia oprogramowania w ogólności. Ich naczelną zasadą jest nieustanna synchronizacja
 modelu z kodem — co wydaje się oczywiste, jeżeli w ogóle model ma być graficznym odzwier-
 ciedleniem kodu. „Projekt ukrywa się w kodzie” głosi jedna z zasad XP i tę zasadę koledzy nie-
 zmiennie realizują. Za pomocą odpowiednich narzędzi mogą oni w bezpośredni sposób doko-
 nywać różnorodnych „operacji” na modelu — dodawać i usuwać klasy oraz zmieniać ich nazwy;
 dodawać i usuwać atrybuty i metody; w wizualny sposób tworzyć powiązania itd.; to wszystko
 znajduje natychmiastowe odzwierciedlenie w kodzie — rysowanie diagramów jest więc jedno-
 cześnie programowaniem. Narysowanie na przykład diagramu sekwencji skutkuje automa-
 tycznym wypełnieniem ciała odpowiednich metod.
 I vice versa — wszelkie zmiany w kodzie odzwierciedlane są automatycznie w diagramach klas,
 i (na żądanie) w diagramach sekwencji.
 Oczywiście, oprócz tych wyrafinowanych narzędzi koledzy posiadają także te bardziej podsta-
 wowe (edytor, debugger i in.).
 Istnieją również innego rodzaju narzędzia do tworzenia diagramów — takie, które nie są ściśle
 zintegrowane z generatorami kodu. Niektóre z nich realizują wręcz sprzężenie w drugą stronę
 — umożliwiają narysowanie ślicznych diagramów na podstawie istniejącego kodu. Nie zapew-
 niają one oczywiście żadnej synchronizacji z odnośnym kodem — po zmianie tego ostatniego
 narysowane diagramy mogą więc nadawać się tylko do wyrzucenia.
Konkluzja
   Niniejszy rozdział poświęcony był zagadnieniu projektowania na gruncie XP. W zgod-
   nej, lecz błędnej opinii niektórych, XP w ogóle obywa się bez projektowania; nawet
   na konferencji XP2001 słyszałem stwierdzenia w rodzaju „oni tak lubią XP, bo dzięki
   niemu wcale nie muszą projektować”. Tymczasem projektowanie jest integralną czę-
   ścią XP, z tą jednak ró nicą, i w przeciwieństwie do du ych projektów „a priori” jest
   to „zwinne” projektowanie przyrostowe, polegające na ciągłym korygowaniu (refak-
   toryzacji) projektu stosownie do bie ących potrzeb. Unika się dzięki temu opasłej do-
   kumentacji i nieaktualnych diagramów. W projekcie uwzględniane są tylko te rzeczy,
   które okazują się rzeczywiście niezbędne.

Contenu connexe

Tendances

Język C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowaniaJęzyk C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowaniaWydawnictwo Helion
 
Java. Współbieżność dla praktyków
Java. Współbieżność dla praktykówJava. Współbieżność dla praktyków
Java. Współbieżność dla praktykówWydawnictwo Helion
 
Język C. Wskaźniki. Vademecum profesjonalisty
Język C. Wskaźniki. Vademecum profesjonalistyJęzyk C. Wskaźniki. Vademecum profesjonalisty
Język C. Wskaźniki. Vademecum profesjonalistyWydawnictwo Helion
 
Photoshop 7. Leksykon kieszonkowy
Photoshop 7. Leksykon kieszonkowyPhotoshop 7. Leksykon kieszonkowy
Photoshop 7. Leksykon kieszonkowyWydawnictwo Helion
 
Perełki programowania gier. Vademecum profesjonalisty. Tom 2
Perełki programowania gier. Vademecum profesjonalisty. Tom 2Perełki programowania gier. Vademecum profesjonalisty. Tom 2
Perełki programowania gier. Vademecum profesjonalisty. Tom 2Wydawnictwo Helion
 
C++ dla programistów gier. Wydanie II
C++ dla programistów gier. Wydanie IIC++ dla programistów gier. Wydanie II
C++ dla programistów gier. Wydanie IIWydawnictwo Helion
 
Efektywne programowanie w języku Java
Efektywne programowanie w języku JavaEfektywne programowanie w języku Java
Efektywne programowanie w języku JavaWydawnictwo Helion
 
Agile Development. Filozofia programowania zwinnego
Agile Development. Filozofia programowania zwinnegoAgile Development. Filozofia programowania zwinnego
Agile Development. Filozofia programowania zwinnegoWydawnictwo Helion
 
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktykJęzyk C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktykWydawnictwo Helion
 
Adobe Premiere Pro. Szybki start
Adobe Premiere Pro. Szybki startAdobe Premiere Pro. Szybki start
Adobe Premiere Pro. Szybki startWydawnictwo Helion
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówWydawnictwo Helion
 
Master Thesis - Comparative analysis of programming Environments based on Rub...
Master Thesis - Comparative analysis of programming Environments based on Rub...Master Thesis - Comparative analysis of programming Environments based on Rub...
Master Thesis - Comparative analysis of programming Environments based on Rub...Adam Skołuda
 
Java. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i Eclipse
Java. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i EclipseJava. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i Eclipse
Java. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i EclipseWydawnictwo Helion
 
CorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczneCorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczneWydawnictwo Helion
 
System inteligentnej nawigacji sterowanej głosem po serwisie internetowym
System inteligentnej nawigacji sterowanej głosem po serwisie internetowymSystem inteligentnej nawigacji sterowanej głosem po serwisie internetowym
System inteligentnej nawigacji sterowanej głosem po serwisie internetowymJan Klimczak
 
Adobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikAdobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikWydawnictwo Helion
 

Tendances (20)

Język C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowaniaJęzyk C++. Koncepcje i techniki programowania
Język C++. Koncepcje i techniki programowania
 
Java. Współbieżność dla praktyków
Java. Współbieżność dla praktykówJava. Współbieżność dla praktyków
Java. Współbieżność dla praktyków
 
Język C. Wskaźniki. Vademecum profesjonalisty
Język C. Wskaźniki. Vademecum profesjonalistyJęzyk C. Wskaźniki. Vademecum profesjonalisty
Język C. Wskaźniki. Vademecum profesjonalisty
 
Programowanie. Od podstaw
Programowanie. Od podstawProgramowanie. Od podstaw
Programowanie. Od podstaw
 
Photoshop 7. Leksykon kieszonkowy
Photoshop 7. Leksykon kieszonkowyPhotoshop 7. Leksykon kieszonkowy
Photoshop 7. Leksykon kieszonkowy
 
Perełki programowania gier. Vademecum profesjonalisty. Tom 2
Perełki programowania gier. Vademecum profesjonalisty. Tom 2Perełki programowania gier. Vademecum profesjonalisty. Tom 2
Perełki programowania gier. Vademecum profesjonalisty. Tom 2
 
C++ dla programistów gier. Wydanie II
C++ dla programistów gier. Wydanie IIC++ dla programistów gier. Wydanie II
C++ dla programistów gier. Wydanie II
 
Efektywne programowanie w języku Java
Efektywne programowanie w języku JavaEfektywne programowanie w języku Java
Efektywne programowanie w języku Java
 
Agile Development. Filozofia programowania zwinnego
Agile Development. Filozofia programowania zwinnegoAgile Development. Filozofia programowania zwinnego
Agile Development. Filozofia programowania zwinnego
 
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktykJęzyk C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
Język C++. Standardy kodowania. 101 zasad, wytycznych i zalecanych praktyk
 
Adobe Premiere Pro. Szybki start
Adobe Premiere Pro. Szybki startAdobe Premiere Pro. Szybki start
Adobe Premiere Pro. Szybki start
 
Java 2. Podstawy
Java 2. PodstawyJava 2. Podstawy
Java 2. Podstawy
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistów
 
Po prostu PowerPoint 2007 PL
Po prostu PowerPoint 2007 PLPo prostu PowerPoint 2007 PL
Po prostu PowerPoint 2007 PL
 
Master Thesis - Comparative analysis of programming Environments based on Rub...
Master Thesis - Comparative analysis of programming Environments based on Rub...Master Thesis - Comparative analysis of programming Environments based on Rub...
Master Thesis - Comparative analysis of programming Environments based on Rub...
 
Java. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i Eclipse
Java. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i EclipseJava. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i Eclipse
Java. Tworzenie aplikacji sieciowych za pomocą Springa, Hibernate i Eclipse
 
Delphi. Szybki start
Delphi. Szybki startDelphi. Szybki start
Delphi. Szybki start
 
CorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczneCorelDRAW 11. Ćwiczenia praktyczne
CorelDRAW 11. Ćwiczenia praktyczne
 
System inteligentnej nawigacji sterowanej głosem po serwisie internetowym
System inteligentnej nawigacji sterowanej głosem po serwisie internetowymSystem inteligentnej nawigacji sterowanej głosem po serwisie internetowym
System inteligentnej nawigacji sterowanej głosem po serwisie internetowym
 
Adobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznikAdobe Premiere Pro CS3. Oficjalny podręcznik
Adobe Premiere Pro CS3. Oficjalny podręcznik
 

En vedette

3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczneWydawnictwo Helion
 
Projektowanie funkcjonalnych serwisów internetowych
Projektowanie funkcjonalnych serwisów internetowychProjektowanie funkcjonalnych serwisów internetowych
Projektowanie funkcjonalnych serwisów internetowychWydawnictwo Helion
 
Java w komercyjnych usługach sieciowych. Księga eksperta
Java w komercyjnych usługach sieciowych. Księga ekspertaJava w komercyjnych usługach sieciowych. Księga eksperta
Java w komercyjnych usługach sieciowych. Księga ekspertaWydawnictwo Helion
 
Red Hat Linux 7.3. Księga eksperta
Red Hat Linux 7.3. Księga ekspertaRed Hat Linux 7.3. Księga eksperta
Red Hat Linux 7.3. Księga ekspertaWydawnictwo Helion
 
ActionScript. Przewodnik encyklopedyczny
ActionScript. Przewodnik encyklopedycznyActionScript. Przewodnik encyklopedyczny
ActionScript. Przewodnik encyklopedycznyWydawnictwo Helion
 
Projektowanie oprogramowania. Wstęp do programowania i techniki komputerowej
Projektowanie oprogramowania. Wstęp do programowania i techniki komputerowejProjektowanie oprogramowania. Wstęp do programowania i techniki komputerowej
Projektowanie oprogramowania. Wstęp do programowania i techniki komputerowejWydawnictwo Helion
 
mod_perl. Podręcznik programisty
mod_perl. Podręcznik programistymod_perl. Podręcznik programisty
mod_perl. Podręcznik programistyWydawnictwo Helion
 
Photoshop Elements 2. Szybki start
Photoshop Elements 2. Szybki startPhotoshop Elements 2. Szybki start
Photoshop Elements 2. Szybki startWydawnictwo Helion
 
Visual Basic .NET. Księga eksperta
Visual Basic .NET. Księga ekspertaVisual Basic .NET. Księga eksperta
Visual Basic .NET. Księga ekspertaWydawnictwo Helion
 
ABC ochrony komputera przed atakami hakera
ABC ochrony komputera przed atakami hakeraABC ochrony komputera przed atakami hakera
ABC ochrony komputera przed atakami hakeraWydawnictwo Helion
 
Projektowanie struktur Active Directory
Projektowanie struktur Active DirectoryProjektowanie struktur Active Directory
Projektowanie struktur Active DirectoryWydawnictwo Helion
 

En vedette (19)

3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne3ds max 5. Ćwiczenia praktyczne
3ds max 5. Ćwiczenia praktyczne
 
Język C. Programowanie
Język C. ProgramowanieJęzyk C. Programowanie
Język C. Programowanie
 
Projektowanie funkcjonalnych serwisów internetowych
Projektowanie funkcjonalnych serwisów internetowychProjektowanie funkcjonalnych serwisów internetowych
Projektowanie funkcjonalnych serwisów internetowych
 
Java w komercyjnych usługach sieciowych. Księga eksperta
Java w komercyjnych usługach sieciowych. Księga ekspertaJava w komercyjnych usługach sieciowych. Księga eksperta
Java w komercyjnych usługach sieciowych. Księga eksperta
 
Wprowadzenie do baz danych
Wprowadzenie do baz danychWprowadzenie do baz danych
Wprowadzenie do baz danych
 
Red Hat Linux 7.3. Księga eksperta
Red Hat Linux 7.3. Księga ekspertaRed Hat Linux 7.3. Księga eksperta
Red Hat Linux 7.3. Księga eksperta
 
Fotografia cyfrowa
Fotografia cyfrowaFotografia cyfrowa
Fotografia cyfrowa
 
Aplikacje Direct3D
Aplikacje Direct3DAplikacje Direct3D
Aplikacje Direct3D
 
ActionScript. Przewodnik encyklopedyczny
ActionScript. Przewodnik encyklopedycznyActionScript. Przewodnik encyklopedyczny
ActionScript. Przewodnik encyklopedyczny
 
XSLT dla każdego
XSLT dla każdegoXSLT dla każdego
XSLT dla każdego
 
Projektowanie oprogramowania. Wstęp do programowania i techniki komputerowej
Projektowanie oprogramowania. Wstęp do programowania i techniki komputerowejProjektowanie oprogramowania. Wstęp do programowania i techniki komputerowej
Projektowanie oprogramowania. Wstęp do programowania i techniki komputerowej
 
mod_perl. Podręcznik programisty
mod_perl. Podręcznik programistymod_perl. Podręcznik programisty
mod_perl. Podręcznik programisty
 
ABC sieci komputerowych
ABC sieci komputerowychABC sieci komputerowych
ABC sieci komputerowych
 
TCP/IP dla każdego
TCP/IP dla każdegoTCP/IP dla każdego
TCP/IP dla każdego
 
Photoshop Elements 2. Szybki start
Photoshop Elements 2. Szybki startPhotoshop Elements 2. Szybki start
Photoshop Elements 2. Szybki start
 
BeStCAD dla AutoCAD-a 2002 LT
BeStCAD dla AutoCAD-a 2002 LTBeStCAD dla AutoCAD-a 2002 LT
BeStCAD dla AutoCAD-a 2002 LT
 
Visual Basic .NET. Księga eksperta
Visual Basic .NET. Księga ekspertaVisual Basic .NET. Księga eksperta
Visual Basic .NET. Księga eksperta
 
ABC ochrony komputera przed atakami hakera
ABC ochrony komputera przed atakami hakeraABC ochrony komputera przed atakami hakera
ABC ochrony komputera przed atakami hakera
 
Projektowanie struktur Active Directory
Projektowanie struktur Active DirectoryProjektowanie struktur Active Directory
Projektowanie struktur Active Directory
 

Similaire à eXtreme programming

Agile. Programowanie zwinne: zasady, wzorce i praktyki zwinnego wytwarzania o...
Agile. Programowanie zwinne: zasady, wzorce i praktyki zwinnego wytwarzania o...Agile. Programowanie zwinne: zasady, wzorce i praktyki zwinnego wytwarzania o...
Agile. Programowanie zwinne: zasady, wzorce i praktyki zwinnego wytwarzania o...Wydawnictwo Helion
 
Więcej niż architektura oprogramowania
Więcej niż architektura oprogramowaniaWięcej niż architektura oprogramowania
Więcej niż architektura oprogramowaniaWydawnictwo Helion
 
Linux. Niezbędnik programisty
Linux. Niezbędnik programistyLinux. Niezbędnik programisty
Linux. Niezbędnik programistyWydawnictwo Helion
 
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceCzytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceWydawnictwo Helion
 
C++. Inżynieria programowania
C++. Inżynieria programowaniaC++. Inżynieria programowania
C++. Inżynieria programowaniaWydawnictwo Helion
 
Programowanie w języku C. Szybki start
Programowanie w języku C. Szybki startProgramowanie w języku C. Szybki start
Programowanie w języku C. Szybki startWydawnictwo Helion
 
Praktyczny kurs Java. Wydanie II
Praktyczny kurs Java. Wydanie IIPraktyczny kurs Java. Wydanie II
Praktyczny kurs Java. Wydanie IIWydawnictwo Helion
 
Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie koduJava. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie koduWydawnictwo Helion
 
Pajączek 5 NxG. Oficjalny podręcznik
Pajączek 5 NxG. Oficjalny podręcznikPajączek 5 NxG. Oficjalny podręcznik
Pajączek 5 NxG. Oficjalny podręcznikWydawnictwo Helion
 
Microsoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaMicrosoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaWydawnictwo Helion
 
Visual Basic 2008. Warsztat programisty
Visual Basic 2008. Warsztat programistyVisual Basic 2008. Warsztat programisty
Visual Basic 2008. Warsztat programistyWydawnictwo Helion
 
Sprzedaj swój program. Droga do udanych projektów programistycznych
Sprzedaj swój program. Droga do udanych projektów programistycznychSprzedaj swój program. Droga do udanych projektów programistycznych
Sprzedaj swój program. Droga do udanych projektów programistycznychWydawnictwo Helion
 
Algorytmy, struktury danych i techniki programowania. Wydanie III
Algorytmy, struktury danych i techniki programowania. Wydanie IIIAlgorytmy, struktury danych i techniki programowania. Wydanie III
Algorytmy, struktury danych i techniki programowania. Wydanie IIIWydawnictwo Helion
 

Similaire à eXtreme programming (20)

Agile. Programowanie zwinne: zasady, wzorce i praktyki zwinnego wytwarzania o...
Agile. Programowanie zwinne: zasady, wzorce i praktyki zwinnego wytwarzania o...Agile. Programowanie zwinne: zasady, wzorce i praktyki zwinnego wytwarzania o...
Agile. Programowanie zwinne: zasady, wzorce i praktyki zwinnego wytwarzania o...
 
Więcej niż architektura oprogramowania
Więcej niż architektura oprogramowaniaWięcej niż architektura oprogramowania
Więcej niż architektura oprogramowania
 
Linux. Niezbędnik programisty
Linux. Niezbędnik programistyLinux. Niezbędnik programisty
Linux. Niezbędnik programisty
 
Praktyczny kurs Java
Praktyczny kurs JavaPraktyczny kurs Java
Praktyczny kurs Java
 
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open sourceCzytanie kodu. Punkt widzenia twórców oprogramowania open source
Czytanie kodu. Punkt widzenia twórców oprogramowania open source
 
C++. Inżynieria programowania
C++. Inżynieria programowaniaC++. Inżynieria programowania
C++. Inżynieria programowania
 
Programowanie w języku C. Szybki start
Programowanie w języku C. Szybki startProgramowanie w języku C. Szybki start
Programowanie w języku C. Szybki start
 
Linux. Kurs. Wydanie II
Linux. Kurs. Wydanie IILinux. Kurs. Wydanie II
Linux. Kurs. Wydanie II
 
Visual Basic .NET. Ćwiczenia
Visual Basic .NET. ĆwiczeniaVisual Basic .NET. Ćwiczenia
Visual Basic .NET. Ćwiczenia
 
Po prostu Pajączek 5 NxG
Po prostu Pajączek 5 NxGPo prostu Pajączek 5 NxG
Po prostu Pajączek 5 NxG
 
Praktyczny kurs Java. Wydanie II
Praktyczny kurs Java. Wydanie IIPraktyczny kurs Java. Wydanie II
Praktyczny kurs Java. Wydanie II
 
C++BuilderX. Ćwiczenia
C++BuilderX. ĆwiczeniaC++BuilderX. Ćwiczenia
C++BuilderX. Ćwiczenia
 
Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie koduJava. Obsługa wyjątków, usuwanie błędów i testowanie kodu
Java. Obsługa wyjątków, usuwanie błędów i testowanie kodu
 
Pajączek 5 NxG. Oficjalny podręcznik
Pajączek 5 NxG. Oficjalny podręcznikPajączek 5 NxG. Oficjalny podręcznik
Pajączek 5 NxG. Oficjalny podręcznik
 
Microsoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaMicrosoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga eksperta
 
Visual Basic 2008. Warsztat programisty
Visual Basic 2008. Warsztat programistyVisual Basic 2008. Warsztat programisty
Visual Basic 2008. Warsztat programisty
 
Sprzedaj swój program. Droga do udanych projektów programistycznych
Sprzedaj swój program. Droga do udanych projektów programistycznychSprzedaj swój program. Droga do udanych projektów programistycznych
Sprzedaj swój program. Droga do udanych projektów programistycznych
 
Solid Edge 17. Podstawy
Solid Edge 17. PodstawySolid Edge 17. Podstawy
Solid Edge 17. Podstawy
 
C#. Ćwiczenia
C#. ĆwiczeniaC#. Ćwiczenia
C#. Ćwiczenia
 
Algorytmy, struktury danych i techniki programowania. Wydanie III
Algorytmy, struktury danych i techniki programowania. Wydanie IIIAlgorytmy, struktury danych i techniki programowania. Wydanie III
Algorytmy, struktury danych i techniki programowania. Wydanie III
 

Plus de Wydawnictwo Helion

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyWydawnictwo Helion
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikWydawnictwo Helion
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczneWydawnictwo Helion
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieWydawnictwo Helion
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsWydawnictwo Helion
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IIWydawnictwo Helion
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuWydawnictwo Helion
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 

Plus de Wydawnictwo Helion (20)

Tworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. ProjektyTworzenie filmów w Windows XP. Projekty
Tworzenie filmów w Windows XP. Projekty
 
Blog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnikBlog, więcej niż internetowy pamiętnik
Blog, więcej niż internetowy pamiętnik
 
Access w biurze i nie tylko
Access w biurze i nie tylkoAccess w biurze i nie tylko
Access w biurze i nie tylko
 
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktycznePozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
Pozycjonowanie i optymalizacja stron WWW. Ćwiczenia praktyczne
 
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesieE-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
E-wizerunek. Internet jako narzędzie kreowania image'u w biznesie
 
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla WindowsMicrosoft Visual C++ 2008. Tworzenie aplikacji dla Windows
Microsoft Visual C++ 2008. Tworzenie aplikacji dla Windows
 
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie IICo potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
Co potrafi Twój iPhone? Podręcznik użytkownika. Wydanie II
 
Makrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółuMakrofotografia. Magia szczegółu
Makrofotografia. Magia szczegółu
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 

eXtreme programming

  • 1. IDZ DO PRZYK£ADOWY ROZDZIA£ SPIS TRE CI eXtreme programming KATALOG KSI¥¯EK Autorzy: David Astels, Granville Miller, Miroslav Novak T³umaczenie: Andrzej Gra¿yñski KATALOG ONLINE ISBN: 83-7197-909-6 Tytu³ orygina³u: Practical Guide to Extreme Programming ZAMÓW DRUKOWANY KATALOG Format: B5, stron: 286 Przyk³ady na ftp: 66 kB TWÓJ KOSZYK DODAJ DO KOSZYKA „eXtreme programming” przedstawia now¹ metodologiê i praktykê programowania w przystêpny, a jednocze nie kompleksowy sposób. Autorzy omawiaj¹ podstawowe pojêcia programowania ekstremalnego: planowanie edycji, programowanie w parach, CENNIK I INFORMACJE wczesne testowanie, „zrêczne modelowanie” i refaktoryzacjê. Zosta³y one zaprezentowane na przyk³adzie konkretnego projektu, którego realizacjê omówiono ZAMÓW INFORMACJE w ksi¹¿ce. O NOWO CIACH Kto powinien przeczytaæ tê ksi¹¿kê? Bêdzie ona niew¹tpliwie po¿yteczn¹ lektur¹ dla ka¿dego, kto choæ czê ciowo zwi¹za³ swe ¿ycie z tworzeniem oprogramowania — ZAMÓW CENNIK programisty, mened¿era czy koordynatora projektu. I nawet gdyby mia³o skoñczyæ siê tylko na czytaniu -- bez praktycznego zastosowania w najbli¿szym projekcie poznanych regu³, wiedza o programowaniu ekstremalnym oka¿e siê bez w¹tpienia po¿yteczna. CZYTELNIA • Naucz siê zasad programowania ekstremalnego i zastosuj je w praktyce • Od konceptualizacji do oddania dzia³aj¹cego systemu — poznaj najlepsze sposoby FRAGMENTY KSI¥¯EK ONLINE pracy na ka¿dym etapie tworzenia programowania • Poznaj znaczenie wszystkich uczestników procesu tworzenia oprogramowania: programistów, mened¿erów i klientów • Dowiedz siê, jak rozwi¹zaæ najczêstsze problemy powstaj¹ce przy wdra¿aniu metodologii programowania ekstemalnego Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl
  • 2. Spis treści Przedmowa........................................................................................ 9 Wprowadzenie ................................................................................. 11 Wstęp — w stronę samoaktualizacji................................................. 13 Część I Reguły gry .....................................................................19 Rozdział 1. Zasady ............................................................................................ 21 Współpraca z klientami.....................................................................................................21 Metafory ułatwiają zrozumienie skomplikowanych zagadnień ........................................22 Plan....................................................................................................................................22 Skracaj zebrania ................................................................................................................23 Najpierw testy ...................................................................................................................24 Prostota..............................................................................................................................25 Programowanie parami .....................................................................................................25 Kodowanie zgodnie ze standardami..................................................................................26 Kolektywne kontrolowanie kodu ......................................................................................26 Nieustanna integracja ........................................................................................................27 Refaktoryzacja...................................................................................................................28 Udostępniaj rezultaty małymi fragmentami......................................................................28 Bez przemęczania się ........................................................................................................29 Bądź przygotowany na zmiany .........................................................................................29 Rozdział 2. Gracze............................................................................................. 31 Dwa zespoły ......................................................................................................................31 Zespół klientów .................................................................................................................32 Zespół programistów.........................................................................................................34 Znaczenie ról .....................................................................................................................36 Ustanawianie praw ............................................................................................................37 Konkluzja ..........................................................................................................................37 Część II Konceptualizacja systemu ..............................................39 Rozdział 3. Kreowanie wizji systemu .................................................................. 41 Konceptualizacja systemu .................................................................................................41 Karta wizji .........................................................................................................................42 Metafory ............................................................................................................................43 Metafory w procesie projektowym ...................................................................................44 Konkluzja ..........................................................................................................................44
  • 3. 6 eXtreme programming Rozdział 4. Historie użytkownika........................................................................ 45 Koncepcja historii u ytkownika........................................................................................46 Historie u ytkownika ........................................................................................................46 Numeracja elementów na stosie........................................................................................47 Konkluzja ..........................................................................................................................48 Dodatek .............................................................................................................................51 Rozdział 5. Testy akceptujące ........................................................................... 53 Czym są testy akceptujące?...............................................................................................53 Tworzenie testów akceptujących ......................................................................................54 Trudności związane z testami akceptującymi ...................................................................56 Nieskończenie wiele testów ..............................................................................................57 Automatyzacja testów akceptujących ...............................................................................57 Konkluzja ..........................................................................................................................58 Rozdział 6. Jedno proste rozwiązanie.................................................................. 59 Czego więc poszukujemy? ................................................................................................59 Zrób to prosto ....................................................................................................................60 Meandry konceptualizacji .................................................................................................60 Konkluzja ..........................................................................................................................61 Rozdział 7. Nazewnictwo ................................................................................... 63 Problem .............................................................................................................................63 Czym są nazwy?................................................................................................................64 Stałe doskonalenie wiedzy ................................................................................................64 Konkluzja ..........................................................................................................................65 Część III Planowanie ....................................................................67 Rozdział 8. Oszacowania ................................................................................... 69 Sporządzanie oszacowań...................................................................................................69 Zało enia ...........................................................................................................................70 Podział historii u ytkownika.............................................................................................71 Trudności w planowaniu ...................................................................................................72 Konkluzja ..........................................................................................................................73 Rozdział 9. Planowanie etapów.......................................................................... 75 Szybkość............................................................................................................................76 Koszt etapu........................................................................................................................77 Ustanawianie priorytetów .................................................................................................77 Programowanie parami .....................................................................................................78 Tworzenie planu................................................................................................................79 Konkluzja ..........................................................................................................................80 Rozdział 10. Planowanie iteracji .......................................................................... 81 Definiowanie iteracji .........................................................................................................81 Praktyczne aspekty planowania iteracji ..............................................................................82 Pierwsza iteracja................................................................................................................83 Kolejne iteracje .................................................................................................................83 Określenie terminów .........................................................................................................84 Konkluzja ..........................................................................................................................84 Rozdział 11. Planowanie taktyczne ...................................................................... 85 Rozpoczynanie iteracji ......................................................................................................85 Przydzielanie zadań...........................................................................................................86 „Stojące” zebrania .............................................................................................................87
  • 4. Śledzenie projektu .............................................................................................................87 Przedterminowe wykonanie iteracji ..................................................................................88 Konkluzja ..........................................................................................................................88 Część IV Tworzenie systemu.........................................................89 Rozdział 12. Programowanie parami..................................................................... 91 Organizacja programowania parami .................................................................................91 Programowanie jako konwersacja.....................................................................................92 Presja partnera ...................................................................................................................93 Podwójna korzyść .............................................................................................................93 Rezultaty............................................................................................................................94 Tak szybkie, jak najwolniejsze..........................................................................................95 Konkluzja ..........................................................................................................................96 Rozdział 13. Najpierw testowanie ........................................................................ 99 Projekt XP .........................................................................................................................99 Dlaczego testy? ...............................................................................................................100 Co testować? ...................................................................................................................101 Kiedy testować? ..............................................................................................................101 Jak testować? Środowisko testowe .................................................................................102 Programowanie sterowane testami..................................................................................104 Przykład...........................................................................................................................106 Korzyści ..........................................................................................................................108 Konkluzja ........................................................................................................................109 Rozdział 14. Projekt .......................................................................................... 111 Projekt a XP ....................................................................................................................112 Jak wzorce projektowe mają się do XP? ............................................................................114 Architektura a XP............................................................................................................115 „Zwinne modelowanie” (AM) ........................................................................................115 Czym jest AM?................................................................................................................115 Przegląd wartości, zasad i praktyk AM...........................................................................117 Konkluzja ........................................................................................................................123 Rozdział 15. Sugestywne kodowanie.................................................................. 125 Nazewnictwo...................................................................................................................126 Prostota jest krańcowo skomplikowana .............................................................................127 Gwarantowane zało enia.................................................................................................128 Niech kompilator zrobi to za Ciebie ...............................................................................128 Bez komentarzy...............................................................................................................129 Kolektywne kontrolowanie kodu ....................................................................................131 Lepiej spłonąć ni zwiędnąć — czy by? ........................................................................131 Zadowoleni programiści to produktywni programiści ....................................................132 Ciesz się yciem ..............................................................................................................132 Konkluzja ........................................................................................................................133 Rozdział 16. Refaktoryzacja............................................................................... 135 Przykłady refaktoryzacji .................................................................................................136 Odwaga............................................................................................................................137 Zapachy kodu ..................................................................................................................137 Kiedy refaktoryzować? ...................................................................................................138 Dwa kapelusze.................................................................................................................139 Przykłady refaktoryzacji .................................................................................................139 Konkluzja ........................................................................................................................143
  • 5. 8 eXtreme programming Rozdział 17. Nieuchronne integrowanie ............................................................... 145 Kilka praktycznych wskazówek......................................................................................146 Integruj tylko po kompletnym przetestowaniu................................................................147 Antywzorzec....................................................................................................................147 Dwa podejścia do integracji ............................................................................................148 A co z przeglądem kodu? ................................................................................................149 Konsekwencje kolektywnej kontroli kodu......................................................................149 Konkluzja ........................................................................................................................150 Część V Udostępnianie ..............................................................151 Rozdział 18. Przekazanie systemu ..................................................................... 153 Dzień dostarczenia ..........................................................................................................153 Przekazanie produkcyjne.................................................................................................154 Testowanie ......................................................................................................................154 Świętowanie zwycięstwa.................................................................................................155 Część VI Zagadnienia dodatkowe ...............................................157 Rozdział 19. Adoptowanie i adaptacja XP.......................................................... 159 Zrozumienie XP ..............................................................................................................159 Adoptowanie XP .............................................................................................................160 Metody adopcji................................................................................................................161 Adaptacja XP...................................................................................................................162 Praktyki XP .....................................................................................................................163 Zwrot inwestycji..............................................................................................................163 Konkluzja ........................................................................................................................163 Rozdział 20. Skalowanie XP .............................................................................. 165 Programowanie w du ej skali .........................................................................................165 Organizacja du ych projektów XP..................................................................................166 Otwarta i uczciwa komunikacja ......................................................................................167 Integracja.........................................................................................................................168 Znaczenie mądrych ludzi ................................................................................................168 Konkluzja ........................................................................................................................169 Rozdział 21. Przyszłość XP ................................................................................ 171 Dokąd zmierza XP?.........................................................................................................171 Na polu bitwy ..................................................................................................................172 Holoniczne podejście do XP ...........................................................................................172 Tworzenie oprogramowania jako rzemiosło ...................................................................174 Ewolucja XP....................................................................................................................175 Dodatki .......................................................................................177 Przykładowa aplikacja.................................................................... 179 Bibliografia .................................................................................... 275 Skorowidz...................................................................................... 279
  • 6. Rozdział 14. Projekt Pilnie strze konieczności i potrzeby chwili. I nie przejmuj się wielkimi zamierzeniami. — W. Szekspir, Ryszard III (akt IV, sc. 4) Wszelkie zamiary pochodzące z serca Toną w bezmiarze obietnic. — W. Szekspir, Troilus i Cresida (akt I, sc. 3) Projekt w XP? Niektórzy przeciwnicy XP przekonani są co do tego, i pojęcie projektu jest tej filozofii zdecydowanie obce. XP jawi im się jako praktyka z pogranicza haker- stwa i źródło destrukcji — programiści niczego nie projektują, tylko zakasują rękawy i piszą programy. adnej dyscypliny, tylko ywioł. To jednak obraz zdecydowanie nieprawdziwy. XP dalekie jest od niezdyscyplinowanego ywiołu, jest wysoce zdyscyplinowanym podejściem do tworzenia oprogramowania. XP nie jest „antyprojektowe”; jest oparte na ciągłym projektowaniu, sprzeciwia się jedynie du ym projektom zapiętym a priori na ostatni guzik. Jako alternatywę dla takich pro- jektów proponuje doraźne projektowanie małych zadań, dyktowanych potrzebą chwili. Pozostałością „globalnej wizji projektu” jest w XP uzyskanie ogólnej perspektywy syste- mu, określonej przez stosowne metafory. Ta „wysokopoziomowa mapa” systemu uszcze- góławiana jest w trakcie jego realizacji — kiedy programiści przystępują do realizacji zwią- zanych z tym zadań, dokonują planowania cząstkowego dotyczącego tych właśnie zadań. W niniejszym rozdziale przyjrzymy się niektórym zadaniom związanym z projekto- waniem w XP, w szczególności: modelowaniu i jego związkami z ideą XP, nowej koncepcji „zwinnego modelowania” (Agile Modeling1, w skrócie AM), narzędziom wspomagającym AM. 1 Dawna nazwa — Extreme Modeling.
  • 7. 112 Część IV ♦ Tworzenie systemu Projekt a XP XP promuje ewolucyjne podejście do projektowania. Niegdyś, gdy próbowano realizo- wać w taki sposób projekty informatyczne, często otrzymywano w efekcie gigantyczny bałagan. Jako antidotum na tę improwizację wymyślono więc planowanie a priori — podobne do tego, jakie architekci stosują przy budowie mostów: wszystkie najdrob- niejsze szczegóły przedsięwzięcia planowane są na początku, przed ich faktycznym rozpoczęciem. Niewątpliwie przy realizacji projektów architektonicznych podejście takie jest jak najzupełniej słuszne; samo planowanie z du ym wyprzedzeniem jest zaś mo liwe dlatego, e w zasadzie a priori znane są wszystkie uwarunkowania, niezmienne przez cały okres realizacji przedsięwzięcia. Tworzenie oprogramowania rządzi się jednak innymi regułami. Kiedy tworzysz np. dwu- dziesty system księgowy, mo esz z du ą dokładnością przewidzieć wiele jego szcze- gółów; kiedy jednak jest to Twój pierwszy system tego rodzaju, brak Ci nale ytego doświadczenia niezbędnego ku temu, aby określić chocia by wymagania, jakie powi- nien spełniać produkt finalny. Je eli w tych warunkach zabierzesz się do planowania (czytaj: przewidywania), ju niedługo przekonasz się, i Twoje plany rozmijają się z rze- czywistością — bo zmieniły się wymagania, bo zmieniło się zdanie klientów, którzy początkowo niezbyt dobrze rozumieli, czego im naprawdę potrzeba, bo zmieniło się prawo itd. Twój początkowy plan będzie nieustannie korygowany, a być mo e w końcu postanowisz opracować go raz jeszcze od początku. Rysunek 14.1 w prosty sposób przedstawia to, co z Twoim projektem mo e się dziać przez kilka najbli szych miesięcy. Rysunek 14.1. Klasyczne projektowanie w zmieniających się warunkach Nie ma nic za darmo; wraz z ciągłymi „nawrotami” w projekcie (który podobny będzie raczej do wodospadu) rosnąć będą tak e koszty — na rysunku 14.2 przedstawiono tempo ich wzrostu wraz z upływem czasu, w odniesieniu do „klasycznego” projektu programistycznego. Rysunek 14.2. Krzywa zmiany kosztów w klasycznym projekcie informatycznym
  • 8. Krzywa ta ulega jednak znacznemu „spłaszczeniu” w przypadku projektu XP (rysu- nek 14.3). Rysunek 14.3. Krzywa zmiany kosztów w projekcie XP Czynnikami, które w największym stopniu wpływają na spłaszczenie krzywej kosztów projektu XP są między innymi: prostota projektowania, zautomatyzowane testowanie, agresywna refaktoryzacja. W porównaniu z klasycznym projektem informatycznym (por. rysunek 14.1), projekt XP zawiera więcej „pętli”, ściślej ze sobą powiązanych. Na rysunku 14.4 przedstawione są cykle związane z procesem2 XP; nie uwzględniono tam tzw. gry planistycznej3 (Plan- ning Game), gdy koncentrujemy się jedynie na cyklu rozwojowym. Rysunek 14.4. Cykle procesu rozwojowego w XP Jak to wszystko działa? Dostajesz określone zadanie, siadasz do komputera, dokonujesz refaktoryzacji (uproszczenia lub poprawienia) istniejącego kodu, tworzysz niezbędne testy (być mo e znowu refaktoryzując kod), wreszcie tworzysz zasadniczy kod i testu- jesz go. Zwróć szczególną uwagę na pętlę „tworzenie testów-kodowanie”: w tej właśnie pętli będzie się kręcić Twoja praca dopóty, dopóki Twoje zadanie nie zostanie zreali- zowane bezbłędnie (w sensie zaliczenia wszystkich stworzonych dla niego testów). Być mo e będziesz chciał dokonać „wyklarowania” istniejącego kodu, co w kategoriach rysunku 14.4 oznacza dodatkowo jeden lub kilka „obrotów” w ramach pętli „refakto- ryzacja-tworzenie testów”. Pojawienie się koncepcji programowania obiektowego (OOP) wywarło decydujący wpływ na techniki programowania, zwłaszcza w odniesieniu do systemów bazujących na interfejsach. Interfejs obiektu uzewnętrznia te elementy, które reprezentują mechanizmy 2 W kontekście XP słowo „proces” u ywane jest raczej w potocznym znaczeniu. 3 Tak określa się w XP analizę i zbieranie wymagań.
  • 9. 114 Część IV ♦ Tworzenie systemu rządzące jego zachowaniem; szczegóły implementacyjne tych mechanizmów ukryte są przed u ytkownikiem obiektu, co określane jest mianem enkapsulacji lub hermety- zacji. „Odseparowanie” klienta od wnętrza obiektu umo liwia jego autorom swobod- ne manipulowanie szczegółami implementacji, dla klienta bowiem istotne jest tylko zewnętrzne zachowanie się obiektu, określone przez jego interfejs. Takim „interfejsem” dla testowanego fragmentu kodu jest jego zewnętrzne zachowanie się i taki właśnie interfejs jest podstawą wyprzedzającego tworzenia testów. Jednocze- śnie interfejs ten jest podstawą projektowania w XP — projektowania opartego na skut- kach funkcjonowania kodu; szczegóły implementacyjne określane są dopiero w drugiej kolejności. Poniewa cykle „testy-projektowanie-kodowanie” są względnie małe i regularnie otrzymujesz działający system4, mo esz regularnie doświadczać sprzę enia zwrotne- go umo liwiającego utrzymywanie biegu projektu we właściwych ryzach; związane z tym konieczne zmiany w projekcie bywają stosunkowo niewielkie, właśnie ze względu na niewielki rozmiar wspomnianych cykli. Przystosowywanie projektu do zmienia- jących się wymagań odbywa się więc stosunkowo małym kosztem. Projektowanie w XP ma więc charakter „globalny” tylko początkowo — w czasie two- rzenia ogólnej perspektywy systemu i związanych z nią metafor. Potem następuje ju „drobnoziarniste” projektowanie, przeplatające się z refaktoryzacją. W efekcie otrzy- mujemy prosty, przejrzysty projekt ucieleśniony w prostym, przejrzystym kodzie. Jak wzorce projektowe mają się do XP? W XP, tak jak w ka dym przedsięwzięciu projektowym, obecne są wzorce projekto- wania. XP dostarcza zasad i zaleca pewne praktyki w procesie tworzenia oprogramo- wania; wzorce projektowe obejmują związaną z tym wiedzę i doświadczenie. Zasada ta obowiązuje niezale nie od tego, jaki rodzaj oprogramowania jest tworzony i jak przebiega sam proces projektowy. Specyfiką XP jest natomiast to, e na jego gruncie wzorce projektowe nie są celem samym w sobie. W XP wa ne jest nie tylko zrozumienie, jak korzystać z danego wzorca, ale tak e — w jakich sytuacjach z niego korzystać, a w jakich absolutnie nie. Innymi słowy — nie powinno się u ywać określonego wzorca projektowego dotąd, a nie będzie to konieczne. Właściwe wykorzystywanie wzorców jest preferowanym sposobem ewo- luowania projektu — rozpocznij od rzeczy najprostszych, które prawdopodobnie będą działać i przekształcaj je stopniowo w rzeczy bardziej zło one, które z czasem mogą stać się wzorcami projektowymi. 4 To skutek charakterystycznego dla XP wczesnego i częstego integrowania kodu.
  • 10. Architektura a XP W XP trudno jednoznacznie wskazać elementy, które mo na by określić jako archi- tekturę. Architektura jest tu bowiem określona częściowo przez metafory, opisujące ogólny kontekst i kształt systemu. Zdeklarowani zwolennicy XP — Beck, Jeffries, Martin i inni — wyra ają opinię, i jakichkolwiek wstępnych projektów architektury nale y bezwzględnie unikać. Refaktoryzacja jest tym czynnikiem, który stopniowo nadaje projektowi określoną postać. Nie zgadza się z tą kategoryczną opinią Fowler, twierdząc, i konieczne są pewne ogólne zało enia architektoniczne. Osobiście przy- chylam się do zdania pierwszej grupy — dą ę bowiem do tworzenia najprostszych rze- czy, które prawdopodobnie będą działać i staram się utrzymywać kod w jak najprostszej postaci. Na jego komplikacje decyduję się tylko wtedy, kiedy oka e się to uzasadnione. „Zwinne modelowanie” (AM) Scott Ambler przewodzi społeczności, która opracowała koncepcję „zwinnego mode- lowania” (Agile Modeling — AM). Niniejszy fragment stworzony został głównie na podstawie internetowych materiałów związanych z tą tematyką oraz ksią ki Scotta. AM znajduje się dopiero w stadium formowania, stąd wszelkie związane z nim defi- nicje (dotyczące wartości, zasad, praktyk itp.) mają charakter płynny i są przedmiotem wielu dyskusji. Więc to, o czym będę pisać w dalszym ciągu, odzwierciedla aktualny (w momencie wydania ksią ki) stan tego, co moim zdaniem jest istotą AM. Ogólny charakter AM mo na bowiem ju uwa ać za wysoce ustalony, a we wspomnianej spo- łeczności panuje powszechna zgoda co do podstawowych wartości AM. Toczą się jed- nak zawzięte dyskusje na temat zasad — tak więc głównym celem prezentowanego tu materiału jest przedstawienie czytelnikowi ogólnego klimatu AM. Czym jest AM? AM jest opartą na praktyce metodologią efektywnego modelowania i dokumentowania systemów informatycznych. Mówiąc prosto, AM jest kolekcją wartości, zasad i prak- tyk modelowania oprogramowania, które mogą zostać zastosowane w procesie jego tworzenia szybko i bez komplikacji. AM jest bardziej efektywne od tradycyjnych tech- nik modelowania, poniewa nie pretenduje do tego, by tworzone modele były perfek- cyjne — wystarczy, e będą one dobre. Elementy AM mogą być stosowane w procesie zbierania wymagań, analizy, definiowania architektury i projektowania. AM nie jest procesem opisanym a priori; innymi słowy, nie definiuje ono szczegółowych procedur ani sposobów postępowania w celu stworzenia takiego czy innego modelu. Zamiast tego dostarcza ono wskazówek do tego, jak efektywnie przeprowadzać proces modelowania. AM nie jest jednak bardziej prymitywne od innych technik modelowania — wielu programistów uwa a, i za jego pomocą mogą wykonać więcej ni w przy- padku tradycyjnych narzędzi. Jednocześnie AM postrzegane jest jako narzędzie dla osób wra liwych („touchy feely”), wręcz raczej dla „artystów” ni „naukowców”.
  • 11. 116 Część IV ♦ Tworzenie systemu Podstawowe wartości AM, mające zapewnić efektywność modelowania, określone zostały przez stowarzyszenie Agile Alliance. Ten system wartości daje pierwszeństwo: indywidualizacji i współdziałaniu — przed procesami i narzędziami; działającemu oprogramowaniu — przed obszerną dokumentacją; współpracy z klientami — przed negocjacją kontraktu; reagowaniu na zmiany — przed sztywnym trzymaniem się planu. Ogólna charakterystyka AM Indywidualizacja i współdziałanie kontra procesy i narzędzia Wa ni są ludzie i komunikacja. DeMarco twierdzi, i „socjologia mo e więcej ni technika, a nawet pieniądze”. Działające oprogramowanie kontra dokumentacja Celem wysiłku programistów jest tworzenie oprogramowania, i to takiego, które wy- konuje oczekiwane funkcje prawidłowo i efektywnie — czyli po prostu takiego, które działa. Nie jest tworzenie dokumentacji, która jest dla oprogramowania elementem pomocniczym (choć niezbędnym). Uczestniczyłem kiedyś w projekcie, w którym poprzedni zespół projektowy wypro- dukował tyle dokumentacji, i do jej wydrukowania konieczny był zakup szybkiej drukarki (inaczej „zatkałaby się” kolejka wydruków). Jak na ironię, większość z tych dokumentów u ywana była bardzo rzadko (je eli w ogóle), były one bowiem tak ści- śle związane z konkretnymi rozwiązaniami, i ogólnie tak dyletanckie, e praktycznie nie dało się z nich korzystać. Modele powinny być rzeczami dynamicznymi, a nie statycznymi dokumentami. Wy- magają one bowiem zazwyczaj ró nych zmian, stosownie do nowych wymagań po- jawiających się w czasie realizacji projektu. Modele sporządzone na papierze mają więc z definicji krótki ywot i u ywane są przewa nie w charakterze „migawek” odzwier- ciedlających stan aktualny. Rzeczywiste modele zawarte są w kodzie produktów. Współpraca z klientami kontra negocjacja kontraktu Negocjowanie kontraktu jest z zało enia procesem spornym. Znacznie lepszych wy- ników mo na się spodziewać, je eli negocjacje ustąpią miejsca współpracy. Zespół programistów nie jest bowiem w stanie w pełni zarządzać dynamicznym, zmieniającym się modelem bez bie ącego udziału klientów. Negocjowanie oznacza dą enie do ustalenia a priori niezmiennych później wymagań, które tym samym stają się nawet wa niejsze i od klientów, i od programistów. Ścisła współpraca pomiędzy zespołami umo liwia natomiast zmianę tych wymagań „w locie”, celem np. przystosowania ich do zmienionych warunków, daje tak e programistom mo - liwość poszukiwania lepszych rozwiązań, dzięki lepszemu rozumieniu tych wymagań.
  • 12. Współpraca z klientami staje się znacznie ułatwiona, je eli zespół programistów ma mo liwość kontaktu „na miejscu” z ich przedstawicielem (przedstawicielami), co jest praktyką ściśle zalecaną przez XP. Reagowanie na zmiany kontra sztywne trzymanie się planu Je eli oprogramowanie ma odpowiadać wymaganiom klientów, musi być ono tworzone w środowisku umo liwiającym szybkie reagowanie na zmieniające się warunki, wpły- wające na zmiany tych e wymagań. Zmienność wymagań klientów jest faktem. Trudno przewidywać wszelkie wymagania, je eli jednak byłoby to w jakiś sposób mo liwe, to i tak nie będzie gwarancji, i wyma- gania te zostaną od razu właściwie zrozumiane. Zazwyczaj tak e klienci nie od razu zdają sobie sprawę z wszystkich swych potrzeb — nie są oni zazwyczaj informatykami i ich zdanie w tej materii mo e ulegać zmianie w miarę jak będą obserwować udostęp- niane im sukcesywnie fragmenty tworzonego systemu. By sprostać zmieniającym się wymaganiom, potrzebna jest więc elastyczność; polega ona na ciągłym, „przyrostowym” modyfikowaniu projektu. Nale y unikać projektowania „na zapas”, a ograniczyć się do zmian wymuszonych aktualnymi okolicznościami — je eli zmiana, którą zamierzasz wprowadzić do projektu, nie jest teraz potrzebna, zre- zygnuj z niej (to tzw. zasada YAGNI — You Ain’t Gonna Need It). Tak właśnie wygląda (w du ym uproszczeniu) koncepcja „zwinnego modelowania” (AM), takie są jej wartości, zasady i praktyki, o których wcześniej wspominałem. Nie sposób oczywiście nie dostrzec ich du ego podobieństwa do XP. Przegląd wartości, zasad i praktyk AM Wartościami AM, przejętymi z XP i przystosowanymi do konkretnych zagadnień, są: komunikacja, prostota, sprzę enie zwrotne, odwaga i skromność. Do tego, aby mo- delowanie zakończyło się sukcesem, niezbędna jest komunikacja pomiędzy wszystkimi uczestnikami projektu, konieczne jest dą enie do poszukiwania jak najprostszego roz- wiązania spełniającego wszystkie potrzeby, wymagane jest tak e sprzę enie zwrotne w celu nale ytego spo ytkowania wysiłku programistycznego; nie da się tego wszyst- kiego zrealizować bez nale ytej odwagi, jak równie pewnej dozy skromności pozwa- lającej zdać sobie sprawę z własnej omylności i wyciągnąć wnioski ze swych błędów. AM opiera się na kolekcji zasad, do których zaliczyć mo na dą enie do prostoty przy modelowaniu oraz podatność na zmiany, wynikającą ze zmiennego charakteru wyma- gań klientów. AM wymaga zrozumienia roli przyrostowej modyfikacji systemu, co jest praktycznym wyrazem wspomnianej podatności na zmiany, oraz szybkiego sprzę e- nia zwrotnego, pozwalającego ocenić, czy modelowanie faktycznie posuwa się w dobrym kierunku. Modelowanie powinno być ponadto ukierunkowane na konkretny cel — nie nale y pracować nad modelowaniem czegokolwiek, co nie jest temu celowi podporząd- kowane; efektywność modelowania wymaga ponadto dysponowania wieloma mode- lami odzwierciedlającymi ró ne punkty widzenia. Modele niekoniecznie muszą być
  • 13. 118 Część IV ♦ Tworzenie systemu odrębnymi dokumentami, lecz mogą być organicznie wbudowane w kod programu — obowiązuje tu naczelna zasada wy szości zawartości nad reprezentacją, zgodnie z którą ta sama koncepcja mo e być modelowana na kilka ró nych sposobów. Względy efek- tywności modelowania wymagają dokładnego poznania dostępnych narzędzi i modeli wzorcowych; efektywność pracy w zespole uzale niona jest od wielu czynników psy- chologicznych — programiści powinni więc zrozumieć, i ka dy z nich mo e się zawsze czegoś nauczyć od kogoś innego, a otwarta, przyjazna i uczciwa komunikacja sprzyja efektywnej współpracy. Wreszcie, najwa niejszym aspektem wykonywanej pracy po- winna być jej jakość, a zastosowanie AM w konkretnych warunkach mo e wymagać pewnej adaptacji jego zasad. AM postuluje tak e konkretne działania (praktyki). Fundamentalnym zaleceniem jest równoległe tworzenie kilku modeli, tak by zawsze mo na było łatwo dostosować któryś z nich do konkretnej, nowej sytuacji i kontynuować pracę w nowych warunkach. Mo- delowanie powinno być prowadzone małymi krokami — nale y unikać monumentalnych, uniwersalnych modeli przypominających „wie ę z kości słoniowej”. Jako e modele są tylko abstrakcyjną reprezentacją oprogramowania, nale y dą yć do sprawdzenia ich w rzeczywistym kodzie i udowodnienia tym samym, e funkcjonują w praktyce, nie tylko w teorii. Aby wszystkie potrzeby (klientów i programistów) zostały nale ycie zrozu- miane i zaspokojone, wszyscy oni muszą aktywnie uczestniczyć w realizacji projektu. Je eli chodzi o cele modelowania, to mogą być one dwojakie: koncepcyjne i komuni- kacyjne. Modelowanie koncepcyjne ułatwia zrozumienie zło onych idei zawartych w projekcie systemu, zadaniem modelowania komunikacyjnego jest natomiast przedsta- wienie informacji o pracach wykonywanych (lub przeznaczonych do wykonania) przez zespół. Praktyczną realizacją zasady dą enia do prostoty jest tworzenie modeli o pro- stej zawartości (obejmującej jedynie niezbędne zagadnienia i nie zawierającej zbytnich szczegółów), prostym opisie (przez zastosowanie odpowiednio prostej notacji) z zasto- sowaniem prostych narzędzi. Nale y unikać nadmiernej liczebności modeli — pozbywać się modeli tymczasowych i uaktualniać pozostałe tylko wtedy, gdy staną się nieade- kwatne. Sprawna komunikacja mo e być zapewniona poprzez publiczną prezentację modeli — np. za pomocą projektorów lub w sieci WWW — dzięki wykorzystaniu standardów modelowania, dzięki kolektywnej kontroli kodu itp. Opłacalność wysiłku programistycznego znacznie wzrasta, je eli w modelu zawarte są elementy testujące, je eli model ten oparty jest na znanych szablonach oraz je eli wykorzystuje on elementy innych istniejących modeli. Nie jest tak e wykluczone, i wdro enie nowego systemu, wykorzystującego nowoczesne mechanizmy bazodanowe — np. oparte na sieciach WWW — będzie wymagało jego integracji z systemami wykorzystującymi starsze bazy danych; nale y więc przewidzieć niezbędne modele uwzględniające ró ne wa- rianty wykonania tej operacji. Wartości AM AM oferuje następujące wartości: Komunikacja — niezbędna jest efektywna komunikacja pomiędzy wszystkimi uczestnikami projektu: programistami, mened erami i klientami. Jest ona jednym z celów modelowania.
  • 14. Uczciwość — najbardziej nawet efektywna komunikacja jest bezu yteczna, je eli nie towarzyszy jej uczciwość: uczciwość programistów pod względem oszacowań, problemów, opóźnień itd., i uczciwość klientów odnośnie do priorytetów, wymagań, kierunków zmian itd. Tylko w takich warunkach ludzie mogą mieć zaufanie do efektów czyjejś pracy. Prostota — tworzenie jak najprostszych rzeczy, które prawdopodobnie będą działać, jest naczelną zasadą XP stosującą się zarówno do kodowania, jak i modelowania. Sprzę enie zwrotne — stałe sprzę enie zwrotne jest niezbędne do uzyskania pewności, e poszczególne działania posuwają się we właściwym kierunku, bądź do jak najwcześniejszego skorygowania tych działań, je eli wymaga tego ich niezgodność z obecnymi warunkami. Odwaga — nale y mieć odwagę do wykonywania działań zalecanych przez XP (i AM w szczególności): podejmowania wa nych decyzji i ponoszenia odpowiedzialności z tego tytułu, dokonywania wa nych refaktoryzacji modelu itp. Skromność — nale y być świadomym własnej omylności i popełnianych błędów. Nale y być otwartym na pomysły innych kolegów, bo być mo e są one lepsze od własnych pomysłów. Nale y być przygotowanym na realizację dobrych idei niezale nie od tego, czyjego są one autorstwa. Zasady AM Oto najwa niejsze zasady AM: Jeden model wart jest 1024 linii kodu — jasny, szkicowy model mo e ujawnić wiele istotnych szczegółów, które mogłyby pozostać niezauwa one podczas studiowania kodu. Modeluj zgodnie z celem — modelowanie dla samego modelowania jest bezu yteczne; powinno być ono podporządkowane określonemu celowi. Stosuj właściwy model, wykorzystuj wiele modeli — niekiedy pojedynczy model okazuje się wystarczający do wyjaśnienia wszystkich zawiłości; ze względu jednak na zró nicowany punkt widzenia poszczególnych uczestników projektu, mo e okazać się po yteczne opracowanie kilku modeli, stanowiących kilka ró nych spojrzeń na to samo zagadnienie, mechanizm, koncepcję itp. Poznaj swoje modele — to oczywiste: je eli sam nie rozumiesz swych modeli, w jaki sposób mo esz wyjaśniać je innym? Poznaj swoje narzędzia — w ka dej pracy wiele zale y od stosowanych narzędzi. Je eli poznasz narzędzia będące do Twojej dyspozycji, będziesz u ywał ich z pełnym zaufaniem i bez obaw. Ucz się nieustannie — traktuj ka dą sytuację lub wyzwania równie jako okazję do nauczenia się czegoś nowego. Dla mnie osobiście jedną z takich sytuacji jest praca w parze z kimś bardziej lub mniej doświadczonym
  • 15. 120 Część IV ♦ Tworzenie systemu — bardziej doświadczony kolega mo e podzielić się ze mną swą wiedzą, mniej doświadczony mo e natomiast prezentować bardziej świe e spojrzenie na dany temat, mo e tak e domagać się wyjaśnienia ró nych kwestii, które dla mnie wydają się oczywiste. Zawsze mo na się przy tym czegoś nauczyć — na przykład nieoczekiwanie odkryć nowy sposób rozwiązania problemu, lepszy od dotychczas stosowanego. Praktyki AM Wreszcie, istnieje kilka konkretnych praktyk postulowanych przez AM: Modeluj w celu zrozumienia — tworzenie modeli jest okazją do zgłębienia problemu i poznania jego przestrzeni rozwiązań. Uwzględnij mo liwość zrezygnowania z niektórych modeli — mogą one bowiem być (według) tylko „krokami na drodze do oświecenia”. Modeluj komunikatywnie — bądź zwięzły, ale wyrazisty. Staraj się uczynić model tak treściwym, jak tylko potrafisz. Twórz proste modele — nie próbuj budować modelu zasługującego na miano „matki wszystkich modeli”. Buduj małe modele odzwierciedlające małe części systemu. Modele ogólne mają swe prawa, ale nie wtedy, kiedy próbujesz zrozumieć szczegóły. U ywaj prostych narzędzi — nie ignoruj mo liwości korzystania z kartki i ołówka. Parafrazując znaną zasadę XP — u ywaj jak najprostszych narzędzi, za pomocą których prawdopodobnie wykonasz swoją pracę. Niektóre skomplikowane narzędzia są narzędziami tylko z nazwy, tworzą one bowiem modele... dla samej sztuki modelowania. Modeluj z partnerem — to naturalne rozszerzenie programowania parami. Wszelkie korzyści wynikające z dwuosobowego tworzenia kodu przekładają się w prosty sposób na modelowanie. Modeluj w grupie — niekiedy okazuje się celowe tworzenie modelu z udziałem całego zespołu (lub du ej jego części). Bywa tak w sytuacjach zło onych, obejmujących wielorakie zale ności, kiedy podejmowane decyzje równie miewają wielorakie konsekwencje. Spojrzenie na model przez wiele par oczu zawsze jest korzystne — bowiem w przeciwieństwie do kodowania, to nie para jest „optymalną liczebnością”. Nale y jednak mieć na uwadze fakt, e w zbyt licznym zespole znacznie trudniej o koncentrację. Uzewnętrzniaj swe modele — wykorzystuj ka de miejsce, gdzie mógłbyś trwale umieścić szkic swego modelu: tablice, ściany, jak równie swą sieć intranetową.
  • 16. UML a XP Ujednolicony język modelowania — Unified Modeling Language (UML) jest obecnie przemy- słowym standardem notacyjnym stosowanym do graficznego przedstawiania zależności funk- cjonalnych na potrzeby programowania obiektowego. Byłem świadkiem wielu dyskusji o tym, w jakim stopniu (o ile w ogóle) UML zgodny jest z zasadami XP; czytałem wiele artykułów na ten temat, większość z nich jednak dotyczyła raczej ludzi stosujących XP zamiast UML. Idea UML bywa często źle rozumiana. Jak przed chwilą stwierdziłem, standard UML jest przede wszystkim wizualną notacją i jako taki był i jest z powodzeniem wykorzystywany. Nie jest więc pod żadnym względem sprzeczny z XP i może być w naturalny sposób użyty na potrzeby AM. UML wykorzystuje wiele różnych typów diagramów. Większość z nich nie jest powszechnie używana na gruncie XP, chociaż niektórzy klienci mogą ich sobie zażyczyć w dokumentacji towarzyszącej systemowi (co mogłoby znaleźć odzwierciedlenie w historii użytkownika pt. „Oto jest diagram funkcjonalny systemu”). Szczególnie użyteczne dla XP okazują się diagramy trzech następujących typów: diagramy klas: diagramy sekwencji: diagramy stanów:
  • 17. 122 Część IV ♦ Tworzenie systemu Głównym celem rysowania diagramów jest pomoc w myśleniu o problemie i jego możliwych rozwiązaniach. Diagramy te nie są jednak dziełami sztuki i nie ma sensu marnotrawić czasu na ich artystyczny wygląd. Typowy diagram rysowany jest odręcznie na tablicy, na kartce, na serwetce i in.; diagramy rysowane „same dla siebie” są więcej niż bezużyteczne. Peter Coad stwierdził kiedyś — cytując swego ojca — „podejmując się zrobić cokolwiek, rezygnujesz jedno- cześnie ze zrobienia czegoś innego”; każdą minutę straconą na cyzelowanie diagramów mógłbyś z pożytkiem przeznaczyć np. na tworzenie kodu. Niekiedy bez diagramów nie można się po prostu obejść. Pomagają w myśleniu, pomagają w komunikowaniu się. Diagramy sporządzone na papierze mają ograniczony żywot — należy pozbywać się ich natychmiast, jak tylko spełnią swoje zadanie i okażą się niepotrzebne. Ich ewentualna „aktualizacja” to czysta strata czasu, a przy okazji ryzykujemy to, iż prędzej czy później posłużymy się diagramem nieaktualnym. Osobiście odradzam korzystanie z różnych narzędzi do tworzenia diagramów — za pomocą ołówka rysuje się diagramy znacznie szybciej, poza tym papierowe szkice wyrzuca się ze znacz- nie mniejszymi oporami niż te towarzyszące kasowaniu „elektronicznej” dokumentacji. W na- stępnej ramce opisany został jednak ważny wyjątek od tej zasady. Narzędzia do „zwinnego modelowania” Niniejsza książka jest z założenia praktycznym wprowadzeniem do XP, byłaby więc niekom- pletna bez wskazania, jak w praktyce prowadzić „zwinne modelowanie”. Zacznijmy od rzeczy najprostszych. Najlepszymi narzędziami do rysowania diagramów są: kartka i ołówek (pisak) albo tablica i kreda. Łatwo narysować, jeszcze łatwiej zetrzeć (wyrzucić). „A co z programami do modelowania?” — spytasz zapewne. Tu będę zdecydowanie stronniczy; pracuję dla TogetherSoft i bardzo podoba mi się ich zwinne podejście do modelowania, i do tworzenia oprogramowania w ogólności. Ich naczelną zasadą jest nieustanna synchronizacja modelu z kodem — co wydaje się oczywiste, jeżeli w ogóle model ma być graficznym odzwier- ciedleniem kodu. „Projekt ukrywa się w kodzie” głosi jedna z zasad XP i tę zasadę koledzy nie- zmiennie realizują. Za pomocą odpowiednich narzędzi mogą oni w bezpośredni sposób doko- nywać różnorodnych „operacji” na modelu — dodawać i usuwać klasy oraz zmieniać ich nazwy; dodawać i usuwać atrybuty i metody; w wizualny sposób tworzyć powiązania itd.; to wszystko znajduje natychmiastowe odzwierciedlenie w kodzie — rysowanie diagramów jest więc jedno- cześnie programowaniem. Narysowanie na przykład diagramu sekwencji skutkuje automa- tycznym wypełnieniem ciała odpowiednich metod. I vice versa — wszelkie zmiany w kodzie odzwierciedlane są automatycznie w diagramach klas, i (na żądanie) w diagramach sekwencji. Oczywiście, oprócz tych wyrafinowanych narzędzi koledzy posiadają także te bardziej podsta- wowe (edytor, debugger i in.). Istnieją również innego rodzaju narzędzia do tworzenia diagramów — takie, które nie są ściśle zintegrowane z generatorami kodu. Niektóre z nich realizują wręcz sprzężenie w drugą stronę — umożliwiają narysowanie ślicznych diagramów na podstawie istniejącego kodu. Nie zapew- niają one oczywiście żadnej synchronizacji z odnośnym kodem — po zmianie tego ostatniego narysowane diagramy mogą więc nadawać się tylko do wyrzucenia.
  • 18. Konkluzja Niniejszy rozdział poświęcony był zagadnieniu projektowania na gruncie XP. W zgod- nej, lecz błędnej opinii niektórych, XP w ogóle obywa się bez projektowania; nawet na konferencji XP2001 słyszałem stwierdzenia w rodzaju „oni tak lubią XP, bo dzięki niemu wcale nie muszą projektować”. Tymczasem projektowanie jest integralną czę- ścią XP, z tą jednak ró nicą, i w przeciwieństwie do du ych projektów „a priori” jest to „zwinne” projektowanie przyrostowe, polegające na ciągłym korygowaniu (refak- toryzacji) projektu stosownie do bie ących potrzeb. Unika się dzięki temu opasłej do- kumentacji i nieaktualnych diagramów. W projekcie uwzględniane są tylko te rzeczy, które okazują się rzeczywiście niezbędne.