﻿<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>https://mfiles.pl/pl/index.php?action=history&amp;feed=atom&amp;title=Metodyka_Extreme_Programming</id>
	<title>Metodyka Extreme Programming - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="https://mfiles.pl/pl/index.php?action=history&amp;feed=atom&amp;title=Metodyka_Extreme_Programming"/>
	<link rel="alternate" type="text/html" href="https://mfiles.pl/pl/index.php?title=Metodyka_Extreme_Programming&amp;action=history"/>
	<updated>2026-06-25T21:23:34Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>https://mfiles.pl/pl/index.php?title=Metodyka_Extreme_Programming&amp;diff=196209&amp;oldid=prev</id>
		<title>Zybex: cleanup bibliografii i rotten links</title>
		<link rel="alternate" type="text/html" href="https://mfiles.pl/pl/index.php?title=Metodyka_Extreme_Programming&amp;diff=196209&amp;oldid=prev"/>
		<updated>2023-11-24T23:30:12Z</updated>

		<summary type="html">&lt;p&gt;cleanup bibliografii i rotten links&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Extreme Programming&amp;#039;&amp;#039;&amp;#039; (skrót &amp;#039;&amp;#039;&amp;#039;XP&amp;#039;&amp;#039;&amp;#039;, pol. &amp;#039;&amp;#039;&amp;#039;[[Programowanie]] ekstremalne&amp;#039;&amp;#039;&amp;#039;) jedna ze zwinnych [[metodyka|metodyk]] tworzenia oprogramowania, która podkreśla prostotę, odwagę, informację zwrotną i komunikację. Częściowo jest reakcją na panujące przekonanie, że [[zmiana]] jest zła i powinno się jej unikać. &amp;lt;ref name=&amp;quot;Chromatic 2003&amp;quot;&amp;gt;Chromatic, &amp;#039;&amp;#039;Extreme Programming Pocket Guide: Team-Based Software Development&amp;#039;&amp;#039;, O&amp;#039;Reilly Media 2003, s. XI&amp;lt;/ref&amp;gt; [[Metodyka]] ta uważana jest również za lekki, wydajny, mało ryzykowny, elastyczny, przewidywalny, naukowy i przyjemny sposób tworzenia oprogramowania&amp;lt;ref name=&amp;quot;Beck K. 2000&amp;quot;&amp;gt;Beck K., &amp;#039;&amp;#039;Extreme Programming Explained: Embrace Change&amp;#039;&amp;#039;, Addison-Wesley Longman Publishing, Boston, 2000, s. XVII&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==TL;DR==&lt;br /&gt;
Extreme Programming (XP) to metodyka tworzenia oprogramowania, która stawia na prostotę, odwagę, informację zwrotną i komunikację. XP uznaje zmianę za nieuniknioną i stara się obniżyć koszty jej wprowadzania poprzez krótkie cykle iteracyjne. Metoda opiera się na wartościach takich jak komunikacja, prostota, informacja zwrotna i odwaga. W XP wyróżnia się 12 praktyk, które pomagają w osiągnięciu wysokiej jakości i produktywności. Metoda ma wiele zalet, takich jak dobra komunikacja, prostota projektowania, częste wydania i testowanie przed programowaniem. Jednakże, wadami metodyki są brak dokładnej specyfikacji, stała dostępność przedstawiciela klienta, brak struktur dokumentacyjnych i wymaga zmiany kulturowej.&lt;br /&gt;
&lt;br /&gt;
==Historia==&lt;br /&gt;
W połowie lat dziewięćdziesiątych inżynierowie zaczęli obserwować rosnący [[trend]] programowania w parach wśród zespołów projektowych, co przekładało się na szybsze i lepsze jakościowo pisanie kodu. W niedługim czasie, popularny stał się termin programowania ekstremalnego, który zyskał popularność dzięki dwóm amerykańskim inżynierom: Ron Jeffries i Kent Beck. Opracowali oni [[projekt]] płacowy dla firmy Chrysler Comprehensive [[System]]. Projekt okazał się dużym sukcesem, dlatego też Kent Beck postanowił spopularyzować wykorzystaną metodykę publikując w 1999 roku książkę zatytułowaną &amp;quot;eXtreme Programming eXplained&amp;quot;. [[Pozycja]] do dnia dzisiejszego doczekała się kilku wydań i może być traktowana jako swoisty [[manifest]] tego ruchu. Od lat dziewięćdziesiątych programowanie ekstremalne zaczęło ewoluować, a [[proces]] ten trwa po dziś dzień. &amp;lt;ref name=&amp;quot;Rosenberg D. 2003&amp;quot;&amp;gt;Rosenberg D., &amp;#039;&amp;#039;Extreme Programming Refactored: The Case Against XP&amp;#039;&amp;#039;, Apress, 2003, s. 39&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Nazewnictwo==&lt;br /&gt;
Nazwa metodyki programowania ekstremalnego wzięła się od pytania, które postawił sobie Kent Beck: &amp;#039;&amp;#039;Co by się stało, gdyby wziąć każdą technikę i realizować ją do granic rozsądku?&amp;#039;&amp;#039; W rezultacie zostały wysunięte następujące wnioski:&lt;br /&gt;
* [[Przegląd]] kodu (ang. code review) jest skuteczny, ponieważ kod jest weryfikowany w sposób ciągły.&lt;br /&gt;
* Testowanie kodu jest skuteczne, ponieważ testy regresyjne i integracyjne są przeprowadzane kilka razy dziennie.&lt;br /&gt;
* Design kodu jest skuteczny, ponieważ każdy musi codziennie refaktoryzować (ang. [[refactoring]]) swój kod.&lt;br /&gt;
* Krótkie iteracje są skuteczne, ponieważ [[planowanie]] odbywa się na początku każdej iteracji.&lt;br /&gt;
Wyżej wyszczególnione [[dobre praktyki]] wspierają [[projektowanie]] prostych, efektywnych, maksymalizujących [[wartość]] biznesową aplikacji. Jednakże, odpowiednie i kompleksowe [[wdrożenie]] metodyki programowania ekstremalnego wymaga wysokiego poziomu [[umiejętności]], dyscypliny oraz pracy zespołowej&amp;lt;ref name=&amp;quot;Coffin D. 2003&amp;quot;&amp;gt;Coffin D., &amp;#039;&amp;#039;A Practical Guide to Seven Agile Methodologies. Part 1.&amp;#039;&amp;#039;, Devx.com, 2006, s. 2&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;google&amp;gt;n&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Istota Programowania Ekstremalnego==&lt;br /&gt;
Wiele metod tworzenia oprogramowania uznaje, że zmiana jest kosztowna. [[Błąd]] znaleziony w fazie utrzymania projektu zwykle kosztuje więcej, niż błąd znaleziony w fazie planowania, czy tworzenia oprogramowania. Programowanie ekstremalne wychodzi naprzeciw oczekiwaniom i próbuje obniżyć [[koszty]] zmiany wymagań poprzez zastosowanie krótkich cykli iteracyjnych. Metodyka ta uznaje zmianę jako rzecz nieuniknioną, wręcz naturalną w procesie tworzenia oprogramowania, dlatego powinna być dobrze zaplanowana. Określenie stabilnego zestawu wymagań w przypadku tej metodyki jest niemożliwe&amp;lt;ref name=&amp;quot;Chromatic 2003&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wartości metodyki==&lt;br /&gt;
[[Metoda]] programowania ekstremalnego oparta jest na kilku podstawowych wartościach:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;komunikacja&amp;#039;&amp;#039;&amp;#039; - odgrywa ważną rolę w sukcesie projektu. W metodach tradycyjnych używa się na szeroką skalę dokumentacji, czego zazwyczaj brakuje w XP, ze względu m.in. na szybkie zmiany wymagań. Celem komunikacji w programowaniu ekstremalnym jest przedstawienie wszystkim programistom wspólnego, jednolitego i prostego poglądu na projekt. Dlatego też, w programowaniu ekstremalnym wykorzystuje się proste [[modele]], współpracę użytkowników z inżynierami, częstą komunikację werbalną, czy odpowiedź zwrotną.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;prostota&amp;#039;&amp;#039;&amp;#039; - budowanie tylko takich systemów, które muszą być rzeczywiście zbudowane. [[Złożoność]] systemów dużo kosztuje a przewidywanie przyszłości jest trudne. Często spotykaną zasadą wykorzystywaną w tej metodzie jest KISS, czyli ‘Keep It Simple, Stupid!’ (ang. nie komplikuj, głupcze).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[informacja]] zwrotna&amp;#039;&amp;#039;&amp;#039; - dzięki krótkim iterakcjom [[produkt]] jest dostarczany wcześnie do klienta, który wydaje opinię na temat postępów pracy oraz jest w stanie dostarczyć informację zwrotną np. aby wprowadzić potrzebną zmianę. Im szybciej [[informacja zwrotna]] będzie dostarczona, tym sprawniej będzie można zareagować na daną zmianę. Dlatego ważne jest, aby zadawać pytania i uczyć się z udzielonych na nie odpowiedzi.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;odwaga&amp;#039;&amp;#039;&amp;#039; - podejmowanie ciężkich decyzji, gdy jest to konieczne. Jeśli dana funkcjonalność nie działa, należy ją naprawić. Jeśli zbliża się termin dostarczenia, a [[praca]] nie idzie zgodnie z harmonogramem, należy powiedzieć o tym klientowi. Nikt nie lubi łamać obietnic, jednakże w takim przypadku należy przyznać się do winy i naprawić to jak najszybciej.&lt;br /&gt;
&lt;br /&gt;
==Najlepsze praktyki metodyki==&lt;br /&gt;
W metodzie programowania ekstremalnego wyróżniono 12 praktyk, które można podzielić na 4 obszary. Praktyki te pomagają podejmować decyzję oraz osiągać wysoką [[jakość]] i [[produktywność]]. &amp;lt;ref name=&amp;quot;Beck K. 2000&amp;quot;/&amp;gt;&amp;lt;ref name=&amp;quot;Chromatic 2003&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Planowanie=====&lt;br /&gt;
W odróżnieniu od tradycyjnych metod, gdzie [[proces planowania]] jest długotrwały i skomplikowany, w metodzie programowania ekstremalnego planowany jest krótki odcinek czasu w najbliższej przyszłości.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;gra planistyczna&amp;#039;&amp;#039;&amp;#039; - ma miejsca na początku każdej iteracji. Celem gry jest określenie zakresu pracy na najbliższy okres poprzez umiejętne połączenie decyzji biznesowych i technicznej estymacji.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;metafora&amp;#039;&amp;#039;&amp;#039; - przedstawienie projektu w prosty sposób, aby zarówno [[zespół]] programistyczny był świadom, jak ich funkcjonalność oddziałuje na całość systemu, ale również, aby [[klient]], który często nie jest osobą techniczną, mógł w pełni zrozumieć zachowania systemu&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[[udział]] klienta w zespole&amp;#039;&amp;#039;&amp;#039; - klient jest integralnym członkiem zespołu, z którym pozostaje w ciągłym kontakcie. Ma dostęp do najbardziej aktualnej wersji produktu, dzięki czemu jest w stanie dostarczyć szybką informację zwrotną i podjąć decyzję projektową.&lt;br /&gt;
&lt;br /&gt;
=====Projektowanie=====&lt;br /&gt;
[[Proces projektowania]] jest ściśle powiązany z programowaniem, dlatego też projekt powstaje tuż przed etapem kodowania. Projektowane rozwiązania powinny być przejrzyste, aby programista w prosty sposób mógł zaimplementować daną funkcjonalność. Przejrzystość jest tym bardziej ważna, gdyż kod programu w przypadku programowania ekstremalnego jest równocześnie jego dokumentacją.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;prostota projektu&amp;#039;&amp;#039;&amp;#039; - system powinien być zaprojektowany najprościej, jak to tylko możliwe w danym momencie. Dodatkowa złożoność jest usuwana w momencie jej identyfikacji.&lt;br /&gt;
&lt;br /&gt;
=====Programowanie=====&lt;br /&gt;
W programowaniu ekstremalnym kodowanie jest uważane za najważniejszy etap. Programowanie zabiera najwięcej czasu i kod stworzony w tym procesie nadaje kształt finalnemu produktowi projektu.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;częste wydania&amp;#039;&amp;#039;&amp;#039; - klient musi otrzymywać najnowszą wersję programu w krótkich odstępach czasowych (średnio 2 tyg.). Dzięki temu jest w stanie stwierdzić, czy funkcjonalności zostały poprawnie zaimplementowane.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;refaktoryzacja&amp;#039;&amp;#039;&amp;#039; - [[restrukturyzacja]] kodu przez programistów poprzez usuwanie duplikacji, poprawianie komunikacji, czy dodawanie elastyczności.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;współ[[własność]] kodu&amp;#039;&amp;#039;&amp;#039; - każdy programista może zmieniać kod w dowolnym miejscu i w dowolnym momencie. Może to nieść za sobą negatywne skutki, ponieważ rozmywa się [[odpowiedzialność]], ale w zamian za to, znacząco upraszcza procedurę wprowadzania zmian.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ciągła integracja&amp;#039;&amp;#039;&amp;#039; - każda nowa funkcjonalność musi szybko być zintegrowana zresztą systemu, a nowa wersja produktu powinna być zbudowana przynajmniej raz dziennie.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;brak nadgodzin&amp;#039;&amp;#039;&amp;#039; - praktyka mówi, aby programista nie pracował więcej, niż 40 godzin tygodniowo. [[Nadgodziny]] negatywnie wpływają na koncentrację programisty, a co za tym idzie, jakość pisanego kodu.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;standard kodowania&amp;#039;&amp;#039;&amp;#039; - zapobiega tworzeniu niespójnego kodu, ponieważ każdy programista ma swoje przyzwyczajenia i praktyki.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;programowanie w parach&amp;#039;&amp;#039;&amp;#039; - programiści piszą kod w parach na jednym komputerze. W momencie gdy jeden z nich programuje, drugi sprawdza powstający kod, sugeruje rozwiązania lub zadaje pytania.&lt;br /&gt;
&lt;br /&gt;
=====Testowanie=====&lt;br /&gt;
Nieodzowna część projektu. W programowaniu ekstremalnym występują testy jednostkowe pisane przez programistów, mające na celu sprawdzenie poprawnego działania fragmentu kodu napisanego przez nich samych. Drugim rodzajem są testy funkcjonalne, które pomagają stwierdzić, czy funkcjonalność wymagana przez klienta działa poprawnie.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;testowanie przed programowaniem&amp;#039;&amp;#039;&amp;#039; - pisanie testu przed napisaniem funkcjonalności. Oprogramowanie zawsze musi przejść testy, by mogło być dostarczone do klienta. Testy pomagają wyłapywać błędy powstające przy wprowadzaniu nowych funkcjonalności, czy refaktoryzacji kodu.&lt;br /&gt;
&lt;br /&gt;
==Zalety i funkcje metodyki==&lt;br /&gt;
Wyżej opisane wartości opisują [[cel]], który przyświeca Ekstremalnemu programowaniu: tworzenie oprogramowania o wysokiej jakości za pomocą prostych środków, przy uczciwej komunikacji wewnątrz zespołu i w relacji z klientem, ciągłej orientacji na [[potrzeby]] klienta oraz odważnym podejmowaniu trudnych decyzji. Praktyki XP stanowią swoistą implementację tych wartości. Mimo pozornej dowolności w doborze, są one ściśle związane ze sobą i wspólnie realizują założone [[cele]] metodyki. Pierwszą zaletą w XP jest [[komunikacja]] ustna (brak tworzenia dokumentacji). Zbudowanie [[Informatyczny system zarządzania|systemu informatycznego]] wymaga przekazania wymagań od klienta do programistów. W tradycyjnych metodykach (np. [[Metodyka PRINCE II|PRINCE]]) wykorzystuje się w tym celu dokumenty. Programowanie ekstremalne odróżnia się tym od innych metodologii (zwinnych czy tradycyjnych) że kładzie nacisk na testowanie czyli przed napisaniem właściwego kodu należy zaimplementować dla niego wszystkie testy, przetestować każdy jego fragment. XP posługuje się komunikacją werbalną co zapewnia lepsze i bardzo szybkie rozprzestrzenianie się wiedzy o systemie w zespole. Poprzez dobrą komunikacje wszyscy członkowie zespołu mają takie samo wyobrażenie przyszłego [[System operacyjny|systemu]] i wiedzą w jakim kierunku projekt dąży. Kolejną zaletą jest prostota. Programowanie ekstremalne zachęca do rozpoczęcia najprostszym możliwym rozwiązaniem problemu (minimalnym, spełniającym pewne początkowe wymagania). Kiedy uda się upewnić że się idzie w dobrym kierunku rozwiązania, na tej podstawie dobudowuje się resztę. Metodyka wprowadza brak inspekcji bowiem zastępuje je [[programowanie parami]] (jedna osoba pisze kod, a druga na bieżąco kontroluje pracę partnera). Programiści piszą w dwójkach: jedna osoba pracuje przy klawiaturze i jest głównym koderem, druga obserwuje pierwszą, zgłasza poprawki, zadaje pytania wyjaśniające. Programiści programujący w dwójkach zamieniają się miejscami co pewien czas np. co kilkadziesiąt minut. Taka [[technika]] umożliwia wyłapanie wielu błędów oraz wzajemną naukę &amp;lt;ref name=&amp;quot;ReferenceA&amp;quot;&amp;gt;Koszlajda A., &amp;#039;&amp;#039;[[Zarządzanie]] Projektami IT. Przewodnik Po Metodykach.&amp;#039;&amp;#039;, Helion, Gliwice 2010, s. 179-187.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Wróblewski P., &amp;#039;&amp;#039;[[Zarządzanie projektami]] informatycznymi dla praktyków. Podstawowe techniki zarządzania projektami przedstawione bez zbędnej teorii&amp;#039;&amp;#039;, Helion, Gliwice 2005, s. 181-182.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Wady==&lt;br /&gt;
Wady jakie można zważyć w tej metodyce to brak dokładnej specyfikacji, stała [[dostępność]] przedstawiciela klienta - co jest dość trudne do wykonania, wspólna &amp;quot;własność&amp;quot; kodu - każdy może zmieniać dowolny fragment systemu, brak struktur i procedur dokumentacyjnych, wymaga zmiany kulturowej w organizacji w celu wdrożenia. Komunikacja ustna pomimo że jest traktowana jako zaleta też ma wadę. Programiści stosujący metodyka XP po pewnym czasie mogą nie pamiętać, którą opcję rozwiązania wybrali i dlaczego właśnie tą (ponownie - przydałoby się posiadać udokumentowane wymagania) &amp;lt;ref name=&amp;quot;ReferenceA&amp;quot;/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{infobox5|list1={{i5link|a=[[Lean Software Development]]}} &amp;amp;mdash; {{i5link|a=[[Backlog produktu]]}} &amp;amp;mdash; {{i5link|a=[[Metodyka MSF]]}} &amp;amp;mdash; {{i5link|a=[[Feature-Driven Development]]}} &amp;amp;mdash; {{i5link|a=[[Large-scale scrum]]}} &amp;amp;mdash; {{i5link|a=[[Retrospektywa]]}} &amp;amp;mdash; {{i5link|a=[[Test driven development]]}} &amp;amp;mdash; {{i5link|a=[[DevOps]]}} &amp;amp;mdash; {{i5link|a=[[Manifest Agile]]}} }}&lt;br /&gt;
&lt;br /&gt;
==Przypisy==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bibliografia==&lt;br /&gt;
&amp;lt;noautolinks&amp;gt;&lt;br /&gt;
* Gratkowski T. (2010), &amp;#039;&amp;#039;[https://repo.pw.edu.pl/docstore/download/WUTe4aa898226bd4933a226494a94f5e2e7/MIS-2010-3.pdf#page=105 Wspomaganie procesu definiowania zadań wykonywanych w ramach projektu informatycznego]&amp;#039;&amp;#039;, Metody Informatyki Stosowanej, nr 3&lt;br /&gt;
* Schümmer T., Lukosch S. (2009), &amp;#039;&amp;#039;Understanding Tools and Practices for Distributed Pair Programming&amp;#039;&amp;#039;, Journal of Universal Computer Science, nr 15(16), 3101-3125&lt;br /&gt;
* Vijayasarathy L., Turk D. (2008), &amp;#039;&amp;#039;Agile software development: A survey of early adopters&amp;#039;&amp;#039;, Journal of Information Technology Management, nr 19(2)&lt;br /&gt;
&amp;lt;/noautolinks&amp;gt;&lt;br /&gt;
[[Kategoria:Metodyki zarządzania projektami]]&lt;br /&gt;
{{a|Marcin Maślanka, Robert Madejowicz}}&lt;br /&gt;
&lt;br /&gt;
{{#metamaster:description|Extreme Programming - lekka, elastyczna metodyka tworzenia oprogramowania, opierająca się na prostocie, odwadze i komunikacji. Przewidywalna i naukowa, promuje innowacyjne podejście.}}&lt;/div&gt;</summary>
		<author><name>Zybex</name></author>
	</entry>
</feed>