Programowanie ekstremalne ( eXtreme Programming, XP ) Piotr
Transkrypt
Programowanie ekstremalne ( eXtreme Programming, XP ) Piotr
Programowanie ekstremalne ( eXtreme Programming, XP ) Piotr Rdzanek 30-03-2008 XP jest metodologią programowania. Główne założenia sformułował Beck Kent. Swoje założenia Beck Kent opisał w wydanej w 1999 roku książce "Extreme Programming Explained". Jego zdaniem na definicję programowania ekstremalnego składa się 12 praktyk: gra planistyczna, krótkie okresy wydania kolejnych wersji, metafora, prosty projekt systemu, testowanie przed kodowaniem, refaktoryzacja, programowanie w parach, współwłasność kodu, ciągła integracja, brak nadgodzin, udział klienta w zespole i standard kodowania. Praktyki te przydzielone są do 4 grup: planowanie i definicję wymagań, projektowanie, programowanie i testowanie. Do dnia dzisiejszego powstało wiele publikacji dotyczących programowania ekstremalnego, w których wydzielona jest inna liczba zasad. Zmienna liczba tych zasad wynika z uszczegóławiania lub uogólniania zasad sformułowanych oryginalnie przez Becka Kenta. Ponieważ Programowanie Ekstremalne jest rozległą dziedziną inżynierii oprogramowania, poniższa publikacja zawiera krótki opis założeń Becka Kenta. Zainteresowanych pogłębieniem wiedzy na temat XP odsyłam do książki napisanej przez twórcę metodologii1. Planowanie i definicja wymagań. Planowanie ma inny zakres niż w standardowych metodykach. W 'XP' planuje się tylko najbliższą przyszłość - jeden przyrost, lub wydanie oprogramowania. Gra Planistyczna. Praktyka ta zastępuje, występującą klasycznie, fazę planowania. Celem gry planistycznej jest zebranie funkcjonalności koniecznej do zaimplementowania w najbliższym wydaniu oprogramowania. Główne znaczenie ma tu klient. To na podstawie jego "opowieści", tworzona jest lista funkcji jakie zostaną stworzone. Raz narzucona funkcjonalność nie jest stała, a klient może ją zmieniać, w trakcie trwania projektu, na miarę swoich potrzeb. Metafora. Wykorzystanie diagramów przy planowaniu oprogramowania jest zbędne, a jeżeli występuje, ma charakter wyłącznie poboczny. Ponieważ odbiorcą oprogramowania jest klient, który nie musi rozumieć języka dziedzinowego, ważne jest wypracowanie komunikacji, która w nieformalny sposób opisze zachowania systemu. Udział klienta w zespole. W modelu kaskadowym klient brał udział wyłącznie w początkowym etapie tworzenia systemu. W 'XP' klient jest włączany do grupy deweloperów. Dzięki temu programiści w każdym momencie mają dostęp do szczegółowej dokumentacji, jaką niewątpliwie jest odbiorca oprogramowania. Z drugiej strony obecny klient może szybko reagować na odejście deweloperów od wymaganej funkcjonalności i powrót na prawidłową drogę działania. Kolejną zaletą jaką otrzymuje klient po zakończeniu projektu jest doskonała znajomość systemu, co znacznie upraszcza jego wdrożenie. Projektowanie. Projekt powstaje tuż przed rozpoczęciem programowania. Kod programu jest jednocześnie jego dokumentacją dlatego ważnym jest zachowanie pewnych praktyk. Ne oznacza to, że rozwiązania mają być banalne, tylko przejrzyste. Bardzo ważne jest aby nie zajmować się programowaniem elementów, które mogą zostać dodane w przyszłości. implementuje się wyłącznie funkcjonalność wymaganą w danym momencie. Prostota projektu. Ważne jest aby projekt przechodził wszystkie testy jednostkowe i funkcjonalności, kod powinien w czytelny sposób pokazywać zmysł projektu. Programowanie. W miarę rozwoju inżynierii oprogramowania, samo programowanie było coraz bardziej zaniedbywane. Coraz większy nacisk kładziono na modelowanie przyszłego systemu niż na jego implementację. 'XP' 1 Beck Kent “Extreme Programming Explained”, wydawnictwo: Addison-Wesley Professional; 2 edition (November 26, 2004) 1/3 wraca do korzeni i programowanie staje się najważniejszym etapem. Częste wydania. Ważne jest aby klient otrzymywał wersje próbne programu w częstych odstępach czasowych (co 1-3 tygodnie). Po przejściu testów funkcjonalnych klient ocenia, czy oprogramowanie spełnia jego wymagania. Dzięki temu deweloperzy redukują ryzyko wystąpienia błędnej implementacji założeń. Refaktoryzacja. W miarę dodawania kolejnych funkcjonalności, kod staje się coraz mniej zrozumiały. Dlatego ważne jest częste jego czyszczenie i upraszczanie. Ponieważ w czasie refaktoryzacji w znaczny sposób zmienia się struktura programu, ważne jest ciągłe przeprowadzanie testów oraz sprawdzanie czy funkcjonalność nie została zagubiona. Współwłasność kodu. Bardzo upraszcza to procedurę wprowadzania zmian. Dodatkowo programista nie musi czekać aż ktoś poprawi swoją część, może zrobić to sam. Dodatkowo ma to zalety psychologiczne: daje to poczucie wspólnego działania, dzięki czemu nie ma problemów z integracją zespołu. Ponieważ kod może często przechodzić "z rąk do rąk" ważne jest aby programiści tworzyli kod w sposób standaryzowany, pomijając swoje nawyki programistyczne. Dodatkowo bardzo ważnym jest stosowanie systemów zarządzanie wersjami kodu (CVS/SVN), dzięki czemu nie będzie kłopotów z ewentualnym cofnięciem wprowadzonych zmian. Ciągła integracja. Kolejne części systemu powinny być w sposób ciągły spajany z całością systemu. Integracje powinno się wykonywać przynajmniej raz dziennie. Dzięki temu unikamy przypadłości integracji okazjonalnej, jaką jest potrzeba dopasowywania interfejsów oddzielnych komponentów. Brak nadgodzin. Ma to znaczenie raczej psychologiczne, ale d doświadczeń wynika, że programiści mogą pracować wydajnie do 40 godzin w tygodniu. Częste nadgodziny powodują znaczny spadek morale i efektywności, co z kolei prowadzi do powstawania mało zrozumiałego kodu. Standard kodowania. Programiści powinni stosować się do narzuconego stylu programowania. Standard kodowania nie powinien być dokumentem, ale normą, wzorcem według którego powstaje źródło. Programowanie w parach. Programiści piszą oprogramowanie w parach. Podczas gdy jeden z nich programuje, drugi obserwuje powstający kod, zgłasza poprawki, zadaje pytania. Dzięki temu możliwej jest tworzenie zrozumiałego dla wszystkich kodu (co jest niezwykle ważne przy wspólnej pracy zespołu). Poprawia to również wiedzę pracowników, ponieważ oni sami się nią wymieniają w czasie pracy. Testowanie. Testowanie podzielone jest na 2 części. Jedną z nich jest testowanie jednostkowe, które ma na celu sprawdzenie poprawności działanie danego fragmentu kodu. Drugim rodzajem jest testowanie funkcjonalne, które ma na celu zbadanie funkcjonalności. Testowanie przed programowaniem. Ponieważ testowanie jest czasochłonnym zajęciem, wykonuje się je na samym końcu projektu (ew. etapu), a ponieważ zawsze wtedy brakuje czasy, więc testy są niedokładne. Dlatego w 'XP' programista ma obowiązek napisanie testu jeszcze przed napisaniem funkcji. Wraz z rozwojem oprogramowania powstaje siatka testów, przez którą oprogramowanie zawsze musi przejść (dzięki temu unikamy błędów powstających w czasie refaktoryzacji czy wprowadzania zmian). Ważne jest aby testy nie były zależne od siebie i żeby były wykonywane w sposób automatyczny. Zastosowanie. Ponieważ zasady programowania ekstremalnego są modyfikowalne, metodologię ta można zastosować w każdym projekcie. Jednak głównie tą metodologię stosuje się przy: -tworzeniu prototypowych systemów/technologi (nawet tych dużych), gdzie wymagania dotyczące systemy szybko się zmieniają, a dodatkowo istnieje wysokie ryzyko pojawienia się nieprzewidywalnych błędów; - projekty badawcze, celem których nie jest powstanie samego oprogramowania, lecz zdobycia wiedzy,doświadczeń na jego temat; - małe i średnie projekty, które można w łatwy sposób zarządzać nieformalnymi metodami. Kiedy nie stosować XP? Z powody dużej ilości nieformalnego przekazywania informacji, metodologie ta nie może być stosowana t projektach nad którymi pracuje więcej niż 20 programistów (oczywiście liczba ta nie jest 2/3 wartością graniczną, jednak doświadczenia wskazują, iż około tej liczby pojawiać się zaczynają problemy z niezakłóconą komunikacją). Nie jest zalecanym używania tej metodologii w przypadku projektów, w których technologia i model pracy jest dobrze znany i nie trzeba opracowywać projektu od zera. Również wiele zależy od środowiska pracy. Jeśli integracja i kompilacja projekty zajmuje kilka godzin niemożliwe jest częste wykonywanie testów. Programowania ekstremalnego nie zaleca się również do tworzenia projektów “krytycznych”, czyli takich od których wymaga się idealnej stabilności, i które muszą wykonać swoje zadanie za wszelką cenę (np. systemy ochrony zdrowia). Źródło: Beck Kent - “ Extreme Programming Explained”. 3/3