Programowanie ekstremalne



Podobne dokumenty
Jarosław Kuchta Dokumentacja i Jakość Oprogramowania. Wymagania jakości w Agile Programming

Główne założenia XP. Prostota (Simplicity) Komunikacja (Communication) Sprzężenie zwrotne (Feedback) Odwaga (Agressiveness)

Wszystkie problemy leżą w testach. ForProgress spółka z ograniczoną odpowiedzialnością sp.k.

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Metody wytwarzania oprogramowania. Metody wytwarzania oprogramowania 1/31

Wykład VII. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie zespołowe

Testowanie oprogramowania

Rozdział 5: Zarządzanie testowaniem. Pytanie 1

Programowanie Zespołowe

Inżynieria oprogramowania II

Wprowadzenie do Behaviordriven

Organizacja czasu 1

Programowanie extremalne. Adrian Gadzina

POKAŻ REZULTATY SWOICH DZIAŁAŃ. POKAŻ, CO POTRAFISZ. ALE NAJPIERW TO ZBADAJ! V KONGRES BIBLIOTEK PUBLICZNYCH WARSZAWA PAŹDZIERNIKA 2014 ROKU

MODELE CYKLU ŻYCIA OPROGRAMOWANIA (1) Model kaskadowy (często stosowany w praktyce do projektów o niewielkiej złożonoś

Przedmiotowe Zasady Oceniania z Informatyki w Szkole Podstawowej nr 4 z Oddziałami Dwujęzycznymi im. Wojciecha Korfantego w Mysłowicach

I Twój zespół może być zwinny (choć to może trochę potrwać) Paweł Lipiński

Projektowanie systemu krok po kroku

SYSTEMY INFORMATYCZNE ćwiczenia praktyczne

Etapy życia oprogramowania

PRZEDMIOTOWE ZASADY OCENIANIA Z JĘZYKA ANGIELSKIEGO I ETAP EDUKACYJNY KLASY I-III

Etapy życia oprogramowania. Modele cyklu życia projektu. Etapy życia oprogramowania. Etapy życia oprogramowania

użytkownika 1 Jak wybrać temat pracy 2 Spis treści 3 Część pierwsza problematyka 4 Część druga stosowane metody 5 Część trzecia propozycja rozwiązania

1. W klasach 1-3 przyjmuje się następujące formy oceny bieżącej:

OPROGRAMOWANIE WSPOMAGAJĄCE ZARZĄDZANIE PROJEKTAMI. PLANOWANIE ZADAŃ I HARMONOGRAMÓW. WYKRESY GANTTA

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

AKADEMIA DLA MŁODYCH PRZEWODNIK TRENERA. PRACA ŻYCIE UMIEJĘTNOŚCI

Jacek Bajorek Instytut Zarządzana Bezpieczeństwem Informacji

Agile Project Management

PRZEDMIOTOWY SYSTEM OCENIANIA Z JĘZYKA ANGIELSKIEGO KLASY I-III

3 największe błędy inwestorów, które uniemożliwiają osiągnięcie sukcesu na giełdzie

Podstawy Programowania Obiektowego

PRZEDMIOTOWE ZASADY OCENIANIA Z ZAJĘĆ KOMPUTEROWYCH DLA KLAS IV-VI

Agile vs PRINCE /2015 I rok st. magisterskie Informatyka

Zarządzanie projektami. Wydanie II.

WYMAGANIA EDUKACYJNE Z JĘZYKA ANGIELSKIEGO DLA KLAS 4-6 SZKOŁY PODSTAWOWEJ

Wsparcie narzędziowe zarządzania ryzykiem w projektach

Maciej Oleksy Zenon Matuszyk

Ogólne zasady projektowania algorytmów i programowania

Raport Specjalny: 3 Największe Mity. Skutecznej Komunikacji w Języku Obcym

Praktyka testowania dla początkujących testerów

Podejście tradycyjne. plan wykonanie sekwencyjna natura wykonywanych zadań

PRZEDMIOTOWY SYSTEM OCENIANIA Z JĘZYKA ANGIELSKIEGO W KLASACH I-III

Strona tytułowa, zgodnie z wymaganiami zamieszczonymi na stronie www uczelni. Wzór strony dostępny jest w dzienniku wirtualnym - 1 -

Temat 12. Rozkaz Wykonać! Języki programowania

Opinie nauczycieli klas 1-3 o edukacji językowej i edukacji matematycznej

Faza Określania Wymagań

Projektowanie zorientowane na uŝytkownika

Przedmiotowy System Oceniania z Języka Angielskiego w Zespole Szkół w Wysokiem Szkoła Podstawowa dla klas IV-VI

Bezpieczeństwo systemów komputerowych

Parametry techniczne. Testy

SPOSOBY SPRAWDZANIA OSIĄGNIĘĆ EDUKACYJNYCH Z JĘZYKA ANGIELSKIEGO DLA KLAS I-III

PRZEDMIOTOWY SYSTEM OCENIANIA DRUGI JĘZYK OBCY: Szkoła Podstawowa klasy VII

Komentarz Sesja letnia zawód: zawód: technik elektronik 311 [07] 1. Treść zadania egzaminacyjnego wraz z załącznikami.

Przedmiotowy System Oceniania z języka angielskiego w klasach I-III

Mówienie. Rozumienie ze słuchu

CIEPŁO DOMOWEGO OGNISKA Z FIRMĄ MARPOL

Lekcja : Tablice + pętle

EGZAMIN GIMNAZJALNY. Ocenianie arkusza egzaminacyjnego oraz typy zadań z matematyki. Opracowała: Ewa Ślubowska, doradca metodyczny matematyki CEN

Od programowania wizualnego do tekstowego

Czym są właściwości. Poprawne projektowanie klas

e R gulamin Kuźni Talentów

Projekt. Prince2 PRoject. IN Controlled Environments PROCESY KOMPONENTY TECHNIKI

SYSTEM OCENIANIA Z JĘZYKÓW OBCYCH.

C++ Przeładowanie operatorów i wzorce w klasach

Hoare Advanced Homework Assistant

PRZEDMIOTOWY SYSTEM OCENIANIA JĘZYK POLSKI SPRAWDZANIE I OCENIANIE OSIAGNIĘĆ UCZNIÓW

PRZEDMIOTOWE OCENIANIE Z TECHNIKI w Publicznej Szkole Podstawowej nr 3 im. Jana Długosza w Radomiu

In ż ynieria oprogramowania wykład II Modele i fazy cyklu życia oprogramowania

Przedmiotowe Zasady Oceniania z języka angielskiego w klasach IV - VI w Szkole Podstawowej Nr 4 w Łukowie

PRZEDMIOTOWY SYSTEM OCENIANIA Z JĘZYKA HISZPAŃSKIEGO

Cel: Przypisujemy przyciskom określone funkcje panel górny (Panel1)

PRZEDMIOTOWY SYSTEM OCENIANIA Z MATEMATYKI W KLASACH IV VI SZKOŁY PODSTAWOWEJ

Zarządzanie projektami. Wykład 2 Zarządzanie projektem

Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest

Scenariusz zajęć edukacyjnych dla uczniów szkoły ponadgimnazjalnej Budżet partycypacyjny czego potrzebuje nasza okolica?

PŁATNOŚCI W STANDARDZIE BLIK WSTĘPNA ANALIZA CUSTOMER EXPERIENCE

Priorytetyzacja przypadków testowych za pomocą macierzy

KRYTERIA I ZASADY OCENIANIA Z MATEMATYKI. zgodne z Wewnątrzszkolnymi Zasadami Oceniania w Zespole Szkół przy ul. Grunwaldzkiej 9 w Łowiczu.

Zarządzanie i realizacja projektów systemu Microsoft SharePoint 2010

Przedmiotowy system oceniania fizyka

REGULAMIN OCENIANIA UCZNIÓW KLAS I-III SP nr 36 W POZNANIU Z JĘZYKA ANGIELSKIEGO.

Tworzenie gier na urządzenia mobilne

Szkoła Podstawowa w Mycielinie. Język rosyjski. Klasy: 5 6

O co chodzi z tym MATLAB'em?!

Wymagania edukacyjne na poszczególne oceny dla uczniów klas 1 3.

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

Kryteria oceniania w klasach 1-3

Przedmiotowy system oceniania. z przedmiotu fizyka w Szkole Podstawowej nr 36 w Krakowie. rok szkolny 2017/2018

Jak powstaje model biznesowy? Co to jest? Modelowanie biznesowe. Model biznesowy. Jak powstaje model biznesowy? Jak firma generuje przychody?

PRZEDMIOTOWY SYSTEM OCENIANIA

Komentarz technik mechatronik 311[50]-01 Czerwiec 2009

Budowa aplikacji webowej w oparciu o Maven2 oraz przykłady testów jednostkowych. Wykonał Marcin Gadamer

Gry społecznościowe. wykład 0. Joanna Kołodziejczyk. 24 lutego Joanna Kołodziejczyk Gry społecznościowe 24 lutego / 11

Pierwszy projekt. Na początku warto wspomnieć, że program WebSite X5 dostępy jest w 3 wariantach: Start, Evolution oraz Professional

SPINACZ.edu.pl platforma współpracy nauki z biznesem w zakresie innowacyjnych rozwiązań informatycznych

CZYNNIKI SUKCESU PPG

Jeśli uważasz, że franczyza jest dla Ciebie szansą na udany biznes i chcesz zostać franczyzobiorcą, przeczytaj informacje w artykule.

NAJLEPSZE STRATEGIE SKUTECZNYCH PROGRAMISTÓW. TECHNIKI PRACY Z KODEM KOD: NSKOD

Transkrypt:

Programowanie ekstremalne Bartłomiej Zieliński Spis treści 1 Wstęp 2 2 Programowanie ekstremalne w praktyce 3 2.1 Ogólne zasady........................... 3 3 Zalety i wady programowania ekstremalnego 6 3.1 Zalety............................... 6 3.2 Wady............................... 6 4 Podsumowanie 8 1

1 Wstęp Programowanie ekstremalne (z ang. extreme Programming, XP) - zgodnie z teorią zamieszczoną na Wikipedii[1], paradygmat i metodyka programowania mające na celu wydajne tworzenie małych i średnich projektów wysokiego ryzyka, czyli takich, w których nie wiadomo do końca, co się tak naprawdę robi i jak to prawidłowo zrobić. O ile w przypadku tworzenia oprogramowania bardziej skomplikowanego i rozbudowanego taktyka tego rodzaju nie jest w stanie się sprawdzić (chyba, że uważnie pilnujemy większości jej aspektów lub, mówiąc krócej, nie przeholujemy z właściwą dla niej ze swobodą), co najwyżej może przynieść rozczarowanie wynikające z tego, że kod programu wciąż się rozrasta, a mimo to nie maleje ilość zadań, które program ma wykonywać - ciągle pojawiają się nowe, co wynika z braku bardziej teoretycznego przygotowania. Jeśli jednak chodzi o małe i średnie projekty, owa metodyka nierzadko może okazać się rozsądnym wyjściem. Wyobraźmy sobie następującą sytuację: mamy do wykonania oprogramowanie wykonujące pewne konkretne obliczenia dla ośrodka badawczego, który jest naszym klientem. Priorytetem niewątpliwie będzie efektywność działania. Na rozwiązanie jednego problemu często mamy do wyboru wiele algorytmów, przy czym każdy z nich ma swoje wady i zalety. By dobrać odpowiedni, możemy zacząć żmudne przygotowania do pracy, opierające się głównie na zbieraniu potrzebnych informacji od pracowników oraz rozrysowywania przeróżnych schematów obrazujących strukturę kodu. Takie rozwiązanie jest o wiele bardziej stabilne. Rozpoczynamy pracę dopiero wtedy, gdy wiemy, co dokładnie ma zostać zrobione. Dużym minusem jest jednak czas potrzebny na uzyskanie konkretniejszych wyników, wartych zaprezentowania klientowi. Człowiek z natury jest niecierpliwy i chce jak najszybciej ujrzeć rezultaty, choćby miały być mizerne. Warto się więc zastanowić, czy nie dałoby rady zastosować opisywanej metodyki programowania ekstremalnego. Zamiast toczyć konwersacje z przyszłymi użytkownikami programu, bierzemy się od razu do pracy. Mając pewne zalążki dotyczące tego, co chcemy otrzymać jako wynik, piszemy kod, bez projektowania, co najwyżej umawiając się z naszymi współpracownikami w kwestii stosowanego nazewnictwa. Program jest rozwijany cyklicznie, a klient często może, a nawet musi spotykać się z nami i badać jego aktualne działanie, sugerując ewentualne poprawki (nierzadko duże). Zalety i wady paradygmatu zostaną opisane w dalszej części referatu, wobec czego nie będziemy się tym teraz zajmowali. 2

2 Programowanie ekstremalne w praktyce 2.1 Ogólne zasady 1. Utrzymywanie kontaktu z klientem. Jako, że już z samego założenia nie zbieramy wszystkich potrzebnych do napisania oprogramowania informacji, musimy znaleźć inny sposób, by mieć możliwość weryfikowania poprawności kodu. Dobrym wyjściem jest prezentowanie naszemu klientowi wyników pracy w pewnych niewielkich odstępach czasowych. Po każdej takiej sesji powinniśmy zyskać świeże spojrzenie na sprawę, a w tym świadomość, co ma zostać poprawione oraz jak ją poprowadzić dalej. Oczywiście ze względu na fakt, iż duża ilość klientów w kwestiach pisania oprogramowania to właściciele pewnych firm, musimy liczyć się z możliwością pracy z przedstawicielem klienta, a nie samym klientem - ktoś obeznany z tematem z wnętrza firmy powinien być zawsze (a przynajmniej bardzo często) dostępny w razie wszelkich wątpliwości. 2. Pierwsze wydanie daje obraz planowanej całości. Na pierwszym spotkaniu po zawarciu umowy z klientem powinniśmy pokazać mu pewien całościowy szkic oprogramowania. Działanie jest mało rozwinięte - do usprawniania kolejnych części dążyć będziemy w trakcie przyszłej pracy, powinny jednak istnieć już pewne najistotniejsze dla klienta funkcje. 3. Rozwój kodu poprzez dodawanie pojedynczych funkcjonalności. Zajmujemy się tylko jednym zagadnieniem naraz. Program jest rozwijany poprzez dodawanie kolejnych, w pełni działających funkcji, nie zaś stopniowo i całościowo. 4. Specyficzny cykl programowania. Najpierw piszemy program testowy dla konkretnej funkcjonalności, dopiero potem implementujemy ją, ale tylko na tyle, by udało się skompilować nasz test i go uruchomić. Ostatecznie dążymy do tego, by test nie tylko zadziałał, tj. by był poprawny składniowo, lecz by jego przejście dało poprawne wyniki. Na koniec martwimy się posprzątaniem kodu - 3

jego refaktoryzacją 1, podziałem na odpowiednie struktury danych etc. Testy powinny być przeprowadzane także w celu sprawdzenia poprawności wprowadzanych zmian. 5. Praca w parach. Opracowywanie pojedynczej funkcjonalności zajmować powinny się dwie osoby - jedna pisze kod, druga kontroluje pierwszą - zadaje pytania, sugeruje zmiany. Po określonym czasie następuje zamiana. 6. Kontakt między członkami zespołu. Ze względu na dość nietypową technikę tworzenia kodu należy w miarę często zwoływać narady pracującego nad nim zespołu, by ustalić pewne kwestie mogące wzbudzać wątpliwości. 7. Częste wydawanie nowych wersji i integracja. Odstęp pomiędzy kolejnymi wydaniami programu nie powinien przekraczać kilku miesięcy. Integracja nowo powstających funkcji z resztą kodu powinna być przeprowadzana codziennie, nawet po kilka razy. 8. Proste rozwiązania. Funkcje powinny spełniać swoje zadania w możliwie jak najprostszy sposób - bardzo prawdopodobne, że będzie trzeba je zmienić w najbliższym czasie, więc nie ma sensu pisać perfekcyjnego kodu. To samo tyczy się klas - staramy się tworzyć ich jak najmniej. 9. Stosowanie metaforyki w opisywaniu kodu. Zamiast suchych informacji możemy korzystać ze słownictwa lepiej oddającego tworzoną funkcję i zrozumiałego dla każdego człowieka, który je czyta, np. pisząc program będący elektronicznym dziennikiem dla szkoły możemy się odnosić do jego części tak, jakby był papierowym dziennikiem, nie musimy nazywać tabelki reprezentującej oceny jako obiekt typu DataGridView, a po prostu tabelka z ocenami. 10. Gra w planowanie. Klient decyduje o tym, co program ma robić, które z tych rzeczy są najważniejsze oraz kiedy powinny pojawiać się nowe wersje. Zadaniem 1 Refaktoryzacja - podział kodu na mniejsze fragmenty w celu zmniejszenia objętości, dopasowania go do ogólnie przyjętych obecnie standardów oraz ograniczenia powtarzalności. 4

twórcy jest natomiast oszacowanie, co będzie potrzebne do napisania aplikacji od strony technicznej ze świadomością, dlaczego wybór padł na to a nie coś innego oraz opracowanie harmonogramu jego tworzenia dla kolejnego wydania. 11. 40-godzinny tydzień pracy i brak nadgodzin. Programiści nie mogą narzekać na to, że nie mają czasu, by coś zrobić. Kod tworzony zbyt szybko najczęściej bywa absolutnie nieoptymalny i nierzadko zawiera więcej błędów. Nie stosuje się też nadgodzin, dzięki czemu pracownicy rzadziej ulegają przemęczeniu. 12. Pożywienie. Jako, iż programiści pracują w zasadzie bez przerwy, jedzenie oraz picie powinny znajdować się w pomieszczeniu, w którym pracują. Dzięki temu mogą dłużej siedzieć przy stanowisku i stworzyć więcej kodu (na szczęście nikt nie wpadł na pomysł, by podstawiać im także wiaderka, by nie musieli tracić czasu na korzystanie z toalety). 5

3 Zalety i wady programowania ekstremalnego 3.1 Zalety możliwość szybkiego reagowania na nowe technologie, a co za tym idzie, wprowadzania ich na bieżąco, duża swoboda dla programistów, dzięki czemu mają oni okazję wykazać się własną twórczością i doświadczeniem, zamiast zapisywać w formie kodu już opracowane plany i wcześniej ustalone schematy, błędy są na ogół wypatrywane wcześniej, o wiele łatwiej dzięki temu je naprawić bez wpływu na resztę kodu, możliwość sprawdzania efektywności różnych pomysłów od razu na poziomie praktycznym, nie trzeba tworzyć specyfikacji systemu, liczą się tylko kod i testy, nie ma potrzeby pisania dokumentacji - zamiast tego umieszczamy komentarze w kodzie oraz opisujemy testy. 3.2 Wady ciągła ewolucja kodu oraz sama technika prowadzona ze zbyt dużą swobodą może prowadzić do mało optymalnego kodu, tak pod względem działania, jak i estetyki, mogą wystąpić mniej lub bardziej poważne komplikacje wywołane nieporozumieniami w kwestii oczekiwań klienta, a tym, co właściwie powstaje - zagrożenie to jest większe, jeśli programiści nie posiadają zbyt dużej wiedzy w tematyce tworzonej aplikacji, programiści są różnymi ludźmi, niektórzy mogą sobie nie radzić z pisaniem bez uprzedniego przygotowania, lub po prostu woleć poczynić najpierw jakieś plany, problemem może być też brak zaangażowania nawet jednej osoby, kod jest wspólny - oznacza to, że każdy może wprowadzić zmiany w dowolnym jego fragmencie. 6

4 Podsumowanie Programowanie ekstremalne niewątpliwie znajduje zastosowanie w wielu przypadkach - nie wymaga większego planowania, klient ma okazję widzieć na własne oczy postępy w tworzeniu aplikacji, a programiści mogą pisać po swojemu. Z reguły jest o wiele bardziej ryzykowne od schematów tradycyjnych, gdzie planowanie stoi na pierwszym miejscu. Niebezpieczeństwo problemów w trakcie tworzenia maleje tym bardziej, im biorący w projekcie udział programiści wiedzą więcej o swoim fachu. Paradygmat programowania ekstremalnego jest częściowo stosowany przez większość początkujących programistów, choć nie zdają sobie z tego z reguły sprawy - to już moje osobiste spostrzeżenie, także z własnych pierwszych kroków. Głównym mankamentem w takich przypadkach jest błędne przekonanie, że funkcje w programie tworzone są od podstaw do końca i dopiero potem kompilowane. Nie odzwierciedla to wprawdzie założeń opisywanej techniki, w której testowanie jest rzeczą ogromnej wagi, ale tym samym pokazuje, że niewłaściwe jego stosowanie nie prowadzi w zasadzie dokądkolwiek. Tworzenie kodu bez planowania wymaga większego wysiłku i koncentracji oraz doświadczenia w jego pisaniu. 7

Literatura [1] http://pl.wikipedia.org/wiki/programowanie_ekstremalne [2] http://zasoby.open.agh.edu.pl/~10sdczerner/page/ programowanie_ekstremalne_xp [3] http://www.jera.com/techinfo/xpfaq.html [4] http://www.governica.com/programowanie_ekstremalne 8