{"id":29443,"date":"2022-04-13T13:06:05","date_gmt":"2022-04-13T11:06:05","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/extreme-programming-xp\/"},"modified":"2024-11-07T14:57:21","modified_gmt":"2024-11-07T13:57:21","slug":"extreme-programming-xp","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/extreme-programming-xp\/","title":{"rendered":"Extreme Programming (XP) \u2013 nowy standard kodowania?\u00a0"},"content":{"rendered":"\n<div class=\"table-of-contents\">\n    <p class=\"title\"><\/p>\n    <ol>\n                    <li><a href=\"#Czym-jest-Extreme-Programming-(XP)\">1.  Czym jest Extreme Programming (XP)?<\/a><\/li>\n                    <li><a href=\"#Historia-XP\">2.  Historia XP<\/a><\/li>\n                    <li><a href=\"#Extreme-Programming-a-inne-podej\u015bcia\">3.  Extreme Programming a inne podej\u015bcia <\/a><\/li>\n                    <li><a href=\"#Programowanie-ekstremalne-vs-Scrum\">4.  Programowanie ekstremalne vs Scrum<\/a><\/li>\n                    <li><a href=\"#Jak-dzia\u0142a-programowanie-ekstremalne\">5.  Jak dzia\u0142a programowanie ekstremalne<\/a><\/li>\n                    <li><a href=\"#Podsumowanie\">6.  Podsumowanie<\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"Czym-jest-Extreme-Programming-(XP)\">Czym jest Extreme Programming (XP)?<\/h2>\n\n\n\n<p>Programowanie ekstremalne jest<a> <\/a>&nbsp;kolejn\u0105 metodyk\u0105 wytwarzania oprogramowania, kt\u00f3ra wlicza si\u0119 w zbi\u00f3r wielu innych zwinnych podej\u015b\u0107. XP opiera si\u0119 na warto\u015bciach, zasadach i praktykach. Jego g\u0142\u00f3wnym celem jest umo\u017cliwienie ma\u0142ym i \u015brednim zespo\u0142om developerskim dostarczania wysokiej jako\u015bci oprogramowania, z jednoczesnym dostosowaniem do zmieniaj\u0105cych si\u0119 wymaga\u0144 biznesowych.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/jpro_2022.14.13_graphic1.png\" alt=\"Extreme Programming XP - proces\" class=\"wp-image-65079\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Tym, co odr\u00f3\u017cnia programowanie ekstremalne od innych podej\u015b\u0107 zwinnych, jest to, \u017ce Extreme Programming k\u0142adzie kluczowy nacisk na aspekty techniczne zwi\u0105zane z rozwojem oprogramowania.<\/strong> XP dok\u0142adnie okre\u015bla spos\u00f3b pracy developer\u00f3w, czego efektem jest dostarczanie wysokiej jako\u015bci oprogramowania w odpowiednim okresie czasu.<\/p>\n\n\n\n<p><strong>Ujmuj\u0105c kr\u00f3tko, Extreme Programming k\u0142adzie\u2026 ekstremalnie silny nacisk na dobre praktyki programowania.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Historia-XP\">Historia XP<\/h2>\n\n\n\n<p>Korzenie programowania ekstremalnego si\u0119gaj\u0105 lat 90. ubieg\u0142ego wieku. Zapocz\u0105tkowa\u0142 je Kent Beck, znany r\u00f3wnie\u017c jako jedna z siedemnastu os\u00f3b, kt\u00f3re podpisa\u0142y Agile Manifesto. Wszystko zacz\u0119\u0142o si\u0119 podczas realizacji projektu, w kt\u00f3rym Kent Beck bra\u0142 udzia\u0142. Przez 3 lata rozwoju projektu nie uda\u0142o si\u0119 zrobi\u0107 wi\u0119kszego post\u0119pu. Beck jako osoba, kt\u00f3ra by\u0142a nowa w zarz\u0105dzaniu zespo\u0142em, zdecydowa\u0142, \u017ce najlepszym pomys\u0142em b\u0119dzie nauczenie zespo\u0142u technik i praktyk, kt\u00f3re zadzia\u0142a\u0142y dla niego samego. Z sukcesem uda\u0142o si\u0119 wdro\u017cy\u0107 praktyki takie jak <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/pair-programming\/\" data-type=\"link\" data-id=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/pair-programming\/\">programowanie w parach<\/a> i <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/test-driven-development-na-co-dzien\/\" data-type=\"link\" data-id=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/test-driven-development-na-co-dzien\/\">TDD (Test-Driven Development).<\/a> Bazuj\u0105c na tym do\u015bwiadczeniu, Kent Beck w 1999 roku spisa\u0142 praktyki, warto\u015bci i zasady programowania ekstremalnego w swojej ksi\u0105\u017cce \u201cExtreme Programming Explained: Embrace Change\u201d.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Extreme-Programming-a-inne-podej\u015bcia\">Extreme Programming a inne podej\u015bcia <\/h2>\n\n\n\n<p>Jak programowanie ekstremalnie r\u00f3\u017cni si\u0119 od tradycyjnych, niezwinnych metodologii? Programowanie ekstremalne jest cz\u0119\u015bci\u0105 podej\u015bcia Agile, w kt\u00f3rym wa\u017cne jest p\u0142ynne wprowadzanie zmian. Zamiast trzyma\u0107 si\u0119 konkretnego, odg\u00f3rnie ustalonego sztywnego planu, zespo\u0142y developerskie dzia\u0142aj\u0105 elastycznie.<\/p>\n\n\n\n<p>Extreme Programming mocno si\u0119 r\u00f3\u017cni od tradycyjnych metodyk, takich jak na przyk\u0142ad Waterfall.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/jpro_2022.14.13_graphic2.png\" alt=\"Extreme Programming a tradycyjne podej\u015bcia\" class=\"wp-image-65083\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Programowanie-ekstremalne-vs-Scrum\">Programowanie ekstremalne vs Scrum<\/h2>\n\n\n\n<p>Kto\u015b m\u00f3g\u0142by zapyta\u0107: no dobrze, ale czy wszystkich powy\u017cej opisanych mo\u017cliwo\u015bci nie daje ju\u017c <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/scrum-vs-kanban\" data-type=\"jpro\" data-id=\"61053\">Scrum?<\/a> Scrum to framework, kt\u00f3ry pomaga przecie\u017c zespo\u0142om rozwija\u0107 z\u0142o\u017cone projekty w spos\u00f3b iteracyjny i nie narzuca tego, jak programi\u015bci wykonuj\u0105 prac\u0119. G\u0142\u00f3wna r\u00f3\u017cnica polega na tym, \u017ce <strong>Extreme Programming, jak wspomniano, k\u0142adzie du\u017cy nacisk na dobre praktyki programistyczne.<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/jpro_2022.14.13_graphic3.png\" alt=\"Scrum vs Extrreme Programming\" class=\"wp-image-65087\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Poza tym programowanie ekstremalne jest bezpo\u015brednio zwi\u0105zane z programowaniem, a Scrum mo\u017cna zastosowa\u0107 do dowolnego projektu, w kt\u00f3rym sprawdzi si\u0119 podej\u015bcie iteracyjne.<\/p>\n\n\n\n<p>Programowanie ekstremalne akceptuje wprowadzanie zmian do swoich komponent\u00f3w (spotka\u0144, artefakt\u00f3w). Zespo\u0142y mog\u0105, a nawet powinny dostosowywa\u0107 artefakty zgodnie ze swoimi potrzebami. Z drugiej strony Scrum Guide stwierdza, \u017ce \u201eChocia\u017c implementacja tylko cz\u0119\u015bci Scruma jest mo\u017cliwa, rezultatem nie jest Scrum\u201d. Scrum jest frameworkiem, kt\u00f3ry trzeba uzupe\u0142ni\u0107 w\u0142asnymi procesami i metodologiami. Oznacza to, \u017ce nie tylko jest mo\u017cliwe u\u017cycie programowania ekstremalnego i Scruma jednocze\u015bnie, ale nawet jest to mocno rekomendowane.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Jak-dzia\u0142a-programowanie-ekstremalne\">Jak dzia\u0142a programowanie ekstremalne?<\/h2>\n\n\n\n<p>Programowanie ekstremalne opiera si\u0119 na <strong>warto\u015bciach, praktykach i zasadach.<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Warto\u015bci <\/strong>wyznaczaj\u0105 zespo\u0142om cel. Dzia\u0142aj\u0105 jak nawigacja, kt\u00f3ra kieruje decyzjami na wysokim, abstrakcyjnym poziomie. Ze wzgl\u0119du na abstrakcyjno\u015b\u0107 tych warto\u015bci i ich generyczno\u015b\u0107, trudno jest uzyska\u0107 konkretne wskaz\u00f3wki. Przyk\u0142adowo stwierdzenie, \u017ce \u201eceni si\u0119 komunikacj\u0119\u201d, mo\u017ce by\u0107 rozumiane bardzo szeroko (np. po\u015bwi\u0119canie spotka\u0144 Daily na rozmawianie tylko o tematach niezwi\u0105zanych z potrzebami zespo\u0142u i klienta).<\/li>\n\n\n\n<li><strong>Praktyki <\/strong>s\u0105 w pewnym sensie przeciwie\u0144stwem warto\u015bci. Warto\u015bci s\u0105 poj\u0119ciami og\u00f3lnymi, teoretycznymi, praktyki natomiast to ju\u017c konkretne procesy, kt\u00f3re definiuj\u0105 specyfik\u0119 tego, co nale\u017cy wykona\u0107. Praktyki pomagaj\u0105 zatem zespo\u0142om piel\u0119gnowa\u0107 warto\u015bci. Przyk\u0142ad: Warto\u015b\u0107: komunikacja. Praktyka: wymiana wiedzy w zespole.<\/li>\n\n\n\n<li><strong>Zasady <\/strong>to wytyczne specyficzne dla danej domeny, kt\u00f3re wype\u0142niaj\u0105 luk\u0119 pomi\u0119dzy praktykami a warto\u015bciami.<br><br><\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/jpro_2022.14.13_graphic7.png\" alt=\"XP feedback\" class=\"wp-image-65103\" style=\"width:750px;height:445px\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><span style=\"text-decoration: underline;\">Feedback przybiera wiele form i mo\u017ce mie\u0107 r\u00f3\u017cny zakres. <\/span><\/p>\n\n\n\n<p>Kiedy <strong>programuje si\u0119 w parach,<\/strong> komentarze drugiego developera s\u0105 bezpo\u015bredni\u0105 informacj\u0105 zwrotn\u0105. Podobnie opinie innych cz\u0142onk\u00f3w zespo\u0142u, w tym klienta, kt\u00f3ry r\u00f3wnie\u017c jest rozumiany jako cz\u0142onek zespo\u0142u. <strong>Testy <\/strong>s\u0105 kolejnym \u017ar\u00f3d\u0142em cennego feedbacku. Je\u017celi napisanie test\u00f3w jest trudne i sprawia wiele problem\u00f3w, oznacza to, \u017ce architektura lub zastosowane w projekcie rozwi\u0105zania s\u0105 zbyt skomplikowane i wymagaj\u0105 uproszczenia.<br>Mo\u017ce doj\u015b\u0107 do sytuacji, gdy zesp\u00f3\u0142 b\u0119dzie dostawa\u0142 wi\u0119cej feedbacku, ni\u017c jest w stanie obs\u0142u\u017cy\u0107. Wtedy istnieje ryzyko, \u017ce w nat\u0142oku spraw wa\u017cniejszy feedback zostanie pomini\u0119ty przez zesp\u00f3\u0142. Nale\u017cy w\u00f3wczas przeanalizowa\u0107, dlaczego przychodzi tak wiele informacji zwrotnych i co trzeba naprawi\u0107.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Odwaga<\/strong> \u2013 Kent Beck definiuje odwag\u0119 jako \u201eEfektywne dzia\u0142anie w obliczu strachu\u201d. Developer ma wiele powod\u00f3w do obaw, a zarazem wiele mo\u017cliwo\u015bci do wykazania si\u0119 zaanga\u017cowaniem. Potrzeba odwagi do m\u00f3wienia prawdy, zw\u0142aszcza nieprzyjemnej prawdy, przyk\u0142adowo o nierzeczywistych estymatach. Udzielanie i przyjmowanie feedbacku r\u00f3wnie\u017c wymaga odwagi.<strong><\/strong><\/li>\n\n\n\n<li><strong>Szacunek <\/strong>\u2013 podstawow\u0105 zasad\u0105 programowania ekstremalnego jest to, \u017ce ka\u017cdy dba o jako\u015b\u0107 kodu i anga\u017cuje si\u0119 w swoj\u0105 prac\u0119. \u017baden, nawet najnowocze\u015bniejszy stos technologiczny nie uratuje projektu, je\u017celi nie ma w nim szacunku i troski.<strong><\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Zasady<\/h3>\n\n\n\n<p>Zasady w programowaniu ekstremalnym zapewniaj\u0105 bardziej szczeg\u00f3\u0142owe wskaz\u00f3wki ni\u017c warto\u015bci. Zasady klaruj\u0105 warto\u015bci i czyni\u0105 je bardziej wyra\u017anymi, niweluj\u0105c ich poziom jednoznaczno\u015bci. Przyk\u0142adowo, opieraj\u0105c si\u0119 na warto\u015bci odwagi, mo\u017cna by stwierdzi\u0107, \u017ce wprowadzenie du\u017cej zmiany w kodzie jest zalecane. Jednak wedle zasady ma\u0142ych krok\u00f3w, du\u017ce zmiany s\u0105 ryzykowne, dlatego wprowadzanie zmiany powinny by\u0107 jak najmniejsze.<\/p>\n\n\n\n<p><strong>Ludzie<\/strong> \u2013 oprogramowanie jest tworzone dla ludzi przez ludzi. Jest to oczywisty, a cz\u0119sto pomijany fakt. Jednak uwzgl\u0119dnianie mocnych i s\u0142abych stron cz\u0142owieka i jego potrzeb jest wa\u017cne, pozwala bowiem tworzy\u0107 produkty, z kt\u00f3rych ludzie chc\u0105 korzysta\u0107. \u015arodowisko pracy, kt\u00f3re daje mo\u017cliwo\u015bci do osi\u0105gni\u0119\u0107 i rozwoju, poczucie przynale\u017cno\u015bci, jest miejscem, gdzie \u0142atwiej jest uwzgl\u0119dni\u0107 potrzeby innych.<\/p>\n\n\n\n<p><strong>Ekonomia<\/strong> \u2013 zespo\u0142y developerskie w XP kieruj\u0105 si\u0119 realiami ekonomicznymi podczas tworzenia oprogramowania, stale szacuj\u0105c ryzyko i potrzeby projektu. Na przyk\u0142ad najpierw zostanie wdro\u017cona historyjka (<em>User Story<\/em>) pod wzgl\u0119dem warto\u015bci biznesowej, a nie pod k\u0105tem kwestii technicznych.<\/p>\n\n\n\n<p><strong>Wzajemna korzy\u015b\u0107<\/strong> \u2013 stosuj\u0105c programowanie ekstremalne, unika si\u0119 rozwi\u0105za\u0144, kt\u00f3re przynosz\u0105 korzy\u015b\u0107 jednej stronie kosztem drugiej. Na przyk\u0142ad obszerna dokumentacja i specyfikacja mog\u0105 pom\u00f3c komu\u015b innemu zrozumie\u0107 dane zagadnienie, jednocze\u015bnie odci\u0105gaj\u0105c zesp\u00f3\u0142 od implementacji i op\u00f3\u017aniaj\u0105c j\u0105.<\/p>\n\n\n\n<p>Obustronnie korzystnym rozwi\u0105zaniem jest np. zastosowanie automatycznych test\u00f3w akceptacyjnych. Otrzymuje si\u0119 natychmiastow\u0105 informacj\u0119 zwrotn\u0105 na temat implementacji, developerzy dostaj\u0105 precyzyjn\u0105 specyfikacj\u0119 w kodzie, a u\u017cytkownicy szybciej uzyskuj\u0105 dost\u0119p do funkcjonalno\u015bci.<\/p>\n\n\n\n<p><strong>Podobie\u0144stwo<\/strong> \u2013 je\u015bli dane rozwi\u0105zanie dzia\u0142a na pewnym poziomie, mo\u017ce r\u00f3wnie\u017c dzia\u0142a\u0107 na wy\u017cszym lub ni\u017cszym poziomie. Na przyk\u0142ad zdobywanie wczesnego i sta\u0142ego feedbacku jest wa\u017cne na r\u00f3\u017cnych poziomach XP.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Na poziomie developer\u00f3w \u2013 programi\u015bci otrzymuj\u0105 informacj\u0119 zwrotn\u0105 ze swojego kodu, stosuj\u0105c podej\u015bcie Test First, polegaj\u0105ce na napisaniu unit test\u00f3w przed przyst\u0105pieniem do programowania.<\/li>\n\n\n\n<li>Na poziomie zespo\u0142u \u2013 narz\u0119dzie CI\/CD pipeline buduje i testuje kod kilka razy dziennie.<\/li>\n\n\n\n<li>Na poziomie organizacji \u2013 iteracje tygodniowe i kwartalne pozwalaj\u0105 zespo\u0142om uzyska\u0107 feedback i w razie potrzeby usprawni\u0107 prac\u0119.<\/li>\n<\/ul>\n\n\n\n<p><strong>Udoskonalenie <\/strong>\u2013zgodnie z zasad\u0105 doskonalenia zespo\u0142y nie d\u0105\u017c\u0105 do perfekcji we wst\u0119pnej fazie implementacji, ale do wdro\u017cenia wystarczaj\u0105co dobrego. Nast\u0119pnie stale si\u0119 ucz\u0105 i ulepszaj\u0105 produkt, dzi\u0119ki feedbackowi od u\u017cytkownik\u00f3w.<\/p>\n\n\n\n<p><strong>R\u00f3\u017cnorodno\u015b\u0107<\/strong> \u2013 developerzy czerpi\u0105 korzy\u015bci z r\u00f3\u017cnorodno\u015bci podej\u015b\u0107, umiej\u0119tno\u015bci i postaw. Jednak taka r\u00f3\u017cnorodno\u015b\u0107 cz\u0119sto prowadzi do konflikt\u00f3w.<\/p>\n\n\n\n<p><strong>Konflikty i nieporozumienia<\/strong> \u2013 s\u0105 okazj\u0105 do pojawiania si\u0119 lepszych pomys\u0142\u00f3w, gdy wszyscy kieruj\u0105 si\u0119 warto\u015bciami <strong>odwagi i szacunku<\/strong>. Odwaga jest niezb\u0119dna do wyra\u017cania innego zdania, z szacunek do wyra\u017cania go w spos\u00f3b empatyczny. Wszystko to jest \u0107wiczeniem skutecznej komunikacji.<\/p>\n\n\n\n<p><strong>Refleksja<\/strong> \u2013 zespo\u0142y zastanawiaj\u0105 si\u0119 nad swoj\u0105 prac\u0105 i analizuj\u0105, jak by\u0107 lepszym. Extreme Programming daje ku temu wiele mo\u017cliwo\u015bci. Nie tylko w cyklach tygodniowych i kwartalnych, ale w ka\u017cdej praktyce.<\/p>\n\n\n\n<p><strong>Przep\u0142yw<\/strong> \u2013 tradycyjne podej\u015bcia maj\u0105 odr\u0119bne fazy, kt\u00f3re trwaj\u0105 przez d\u0142ugi czas i pozostawiaj\u0105 niewiele przestrzeni dla feedbacku i mo\u017cliwo\u015bci korekty. Tworzenie oprogramowania w XP odbywa si\u0119 w ramach aktywno\u015bci, kt\u00f3re trwaj\u0105 ca\u0142y czas, w sp\u00f3jnym przep\u0142ywie warto\u015bci.<\/p>\n\n\n\n<p><strong>Szansa<\/strong> \u2013 problemy s\u0105 nieuniknione w procesie tworzenia oprogramowania, jednak ka\u017cdy problem jest okazj\u0105 do poprawy. Warto nauczy\u0107 si\u0119 patrze\u0107 na nie w ten spos\u00f3b, \u017ceby pozwala\u0142y na tworzenie kreatywnych rozwi\u0105za\u0144, kt\u00f3re r\u00f3wnie\u017c pozwol\u0105 zapobiega\u0107 ich powt\u00f3rzeniu w przysz\u0142o\u015bci<\/p>\n\n\n\n<p><strong>Redundancja<\/strong> \u2013 zasada redundancji m\u00f3wi, \u017ce je\u017celi dany problem jest krytyczny, nale\u017cy zastosowa\u0107 wiele taktyk, aby go rozwi\u0105za\u0107. Nie ma jednej taktyki, kt\u00f3ra mo\u017ce zlikwidowa\u0107 krytyczne problemy. Rozwi\u0105zaniem, kt\u00f3re proponuje programowanie ekstremalne, jest wyznaczenie kilku wska\u017anik\u00f3w jako\u015bci. Pomocne w osi\u0105ganiu zamierzonej jako\u015bci s\u0105: programowanie w parach, testy, ci\u0105g\u0142a integracja (CI).<\/p>\n\n\n\n<p><strong>Pora\u017cka<\/strong> \u2013 pora\u017cka nie jest strat\u0105, je\u017celi mo\u017cna z niej wyci\u0105gn\u0105\u0107 wnioski i wiedz\u0119. Podejmowanie decyzji i szybkie uczenie si\u0119, co nie dzia\u0142a, jest o wiele bardziej produktywne ni\u017c brak dzia\u0142ania spowodowany niezdecydowaniem.<\/p>\n\n\n\n<p><strong>Jako\u015b\u0107<\/strong> \u2013 cz\u0119sto wydaje nam si\u0119, \u017ce musimy wybiera\u0107 mi\u0119dzy jako\u015bci\u0105 a szybko\u015bci\u0105.<br>Jednak jest ca\u0142kowicie na odwr\u00f3t \u2013 d\u0105\u017cenie do poprawy jako\u015bci sprawia, \u017ce szybko\u015b\u0107 zespo\u0142u (team velocity) wzrasta.<\/p>\n\n\n\n<p>Przyk\u0142adem mo\u017ce by\u0107 <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/refaktoryzacja-kodu-php-z-rector\/\" data-type=\"link\" data-id=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/refaktoryzacja-kodu-php-z-rector\/\">refaktoryzacja<\/a>, kt\u00f3ra u\u0142atwia zrozumienie i zmian\u0119 kodu. W rezultacie zmniejsza si\u0119 prawdopodobie\u0144stwo wprowadzenia defekt\u00f3w do kodu, co pozwala szybciej dostarczy\u0107 wi\u0119ksz\u0105 warto\u015b\u0107 bez konieczno\u015bci naprawiania b\u0142\u0119d\u00f3w i rozumie\u0107 za co ten kod odpowiada.<\/p>\n\n\n\n<p><strong>Ma\u0142e kroki \u2013 baby steps<\/strong> \u2013 du\u017ce zmiany s\u0105 ryzykowne. Extreme Programming zmniejsza to ryzyko poprzez wprowadzanie zmian ma\u0142ymi krokami na wszystkich poziomach.<\/p>\n\n\n\n<p>Developerzy pisz\u0105 kod ma\u0142ymi partiami, korzystaj\u0105c z TDD (Test-Driven Development). \u0141\u0105cz\u0105 sw\u00f3j kod z kodem z g\u0142\u00f3wnej ga\u0142\u0119zi kilka razy dziennie, a nie tylko co kilka tygodni czy nawet miesi\u0119cy. Sam rozw\u00f3j projektu odbywa si\u0119 w kr\u00f3tkich iteracjach, a nie w d\u0142ugotrwa\u0142ych fazach.<\/p>\n\n\n\n<p><strong>Przyj\u0119ta odpowiedzialno\u015b\u0107<\/strong> \u2013 w programowaniu ekstremalnym odpowiedzialno\u015b\u0107 powinna by\u0107 zaakceptowana, nigdy \u2013 przypisywana. Powinno towarzyszy\u0107 jej upowa\u017cnienie do podejmowania decyzji dotycz\u0105cych tego, za co jest si\u0119 odpowiedzialnym. To dzia\u0142a r\u00f3wnie\u017c w drug\u0105 stron\u0119. Nie chcemy przecie\u017c, aby ludzie podejmowali decyzje, je\u015bli nie musz\u0105 si\u0119 liczy\u0107 z ich konsekwencjami.<\/p>\n\n\n\n<p>Przeczytaj r\u00f3wnie\u017c: <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/rola-testera-w-zespole-scrumowym\/\" data-type=\"link\" data-id=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/rola-testera-w-zespole-scrumowym\/\">Jaka jest rola testera w zespole scrumowym?<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Role-w-programowaniu-ekstremalnym\">Role w programowaniu ekstremalnym<\/h2>\n\n\n\n<p>Wed\u0142ug Kenta Becka do\u015bwiadczony, czy inaczej \u2013 dojrza\u0142y zesp\u00f3\u0142 XP nie powinien opiera\u0107 si\u0119 na sztywno zdefiniowanych rolach. Nale\u017cy pami\u0119ta\u0107, \u017ce role mog\u0105 by\u0107 pomocne dla poczatkuj\u0105cych zespo\u0142\u00f3w. Z czasem mog\u0105 jednak przeszkadza\u0107 we wsp\u00f3\u0142pracy.<\/p>\n\n\n\n<p>Role i ich odpowiedzialno\u015bci w kontek\u015bcie programowania ekstremalnego:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Klient<\/h3>\n\n\n\n<p>Najlepiej by\u0142oby, gdyby na miejscu by\u0142 prawdziwy klient \/ Product Owner, kt\u00f3ry odpowiada\u0142by na pytania, ustala\u0142 priorytety dla historyjek lub wsp\u00f3\u0142pracowa\u0142 przy testach akceptacyjnych.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Developerzy<\/h3>\n\n\n\n<p>W zespo\u0142ach XP programi\u015bci wykonuj\u0105 estymaty dostarczenia zada\u0144 (<em>tasks<\/em>) i historyjek (User Story), pisz\u0105 testy i zajmuj\u0105 si\u0119 implementacj\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Trener (Coach)<\/h3>\n\n\n\n<p>Posiadanie osoby pe\u0142ni\u0105cej t\u0119 rol\u0119 w podej\u015bciu XP nie jest wymagane. Tak\u0105 rol\u0119 w zespole mo\u017ce pe\u0142ni\u0107 osoba, kt\u00f3ra ma ju\u017c do\u015bwiadczenie w programowaniu ekstremalnym. Zadaniem trenera jest upewnienie si\u0119, \u017ce zesp\u00f3\u0142 stosuje dobre praktyki, przemieniaj\u0105c je potem w nawyki i nie wracaj\u0105c do starych sposob\u00f3w tworzenia oprogramowania.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tracker<\/h3>\n\n\n\n<p>Jest to osoba, kt\u00f3ra zajmuje si\u0119 \u015bledzeniem post\u0119pu zespo\u0142u oraz rozmawia z ka\u017cdym developerem. Konsultacje z ka\u017cdym cz\u0142onkiem zespo\u0142u pozwalaj\u0105 na identyfikacj\u0119 blocker\u00f3w, w\u0105skich garde\u0142 oraz znalezienie sposob\u00f3w na ich rozwi\u0105zanie. Do obowi\u0105zk\u00f3w Trackera nale\u017cy r\u00f3wnie\u017c prezentowanie metryk, pokazuj\u0105cych w jaki spos\u00f3b radzi sobie zesp\u00f3\u0142, jaka jest jego pr\u0119dko\u015b\u0107 (<em>velocity<\/em>), i wykres\u00f3w spalania (<em>burndown charts<\/em>). Cz\u0119sto w celu prowadzenia takich metryk korzysta si\u0119 z ju\u017c gotowych rozwi\u0105za\u0144, typu tablica scrumowa czy kanbanowa, kt\u00f3re automatycznie obliczaj\u0105 statystyki.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Procesy-w-programowaniu-ekstremalnym\">Procesy w programowaniu ekstremalnym<\/h2>\n\n\n\n<p>Programowanie ekstremalne obejmuje 5 proces\u00f3w, kt\u00f3re s\u0105 powtarzane iteracyjnie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Planowanie<\/strong> \u2013 pierwszy etap, kiedy klient spotyka si\u0119 z zespo\u0142em developerskim i przedstawia swoje wymagania w postaci historyjek <em>(User Stories<\/em>), aby opisa\u0107 po\u017c\u0105dany rezultat. Zesp\u00f3\u0142 nast\u0119pnie wycenia historyjki i tworzy release plan podzielony na iteracje potrzebne do dostarczenia wymaganej funkcjonalno\u015bci, cz\u0119\u015b\u0107 po cz\u0119\u015bci. Je\u017celi niekt\u00f3re historyjki nie mog\u0105 zosta\u0107 wycenione, to mo\u017cna wprowadzi\u0107 tzw. \u201cSpike\u201d, oznacza to, \u017ce potrzebny jest dalszy research i, cz\u0119sto, rozbicie zadania na mniejsze historyjki.<\/li>\n\n\n\n<li><strong>Projektowanie<\/strong> \u2013 jest to relatywnie cz\u0119\u015b\u0107 procesu planowania. Jednak mo\u017ce by\u0107 przeniesiona do osobnego procesu, aby podkre\u015bli\u0107 wa\u017cno\u015b\u0107 tego kroku. Jest to zwi\u0105zane z jedn\u0105 z g\u0142\u00f3wnych warto\u015bci XP, mianowicie z prostot\u0105. Dobry projekt wprowadza logik\u0119 i struktur\u0119 do systemu, pozwalaj\u0105c unikn\u0105\u0107 niepotrzebnej z\u0142o\u017cono\u015bci i nadmiarowo\u015bci.<\/li>\n\n\n\n<li><strong>Implementacja<\/strong> \u2013 podczas tego procesu faktycznie pisze si\u0119 kod, stosuj\u0105c konkretne praktyki XP, takie jak: ustalone standardy pisania kodu, Pair Programming czy Continuous Integration.<\/li>\n\n\n\n<li><strong>Testowanie<\/strong> \u2013 to podstawa programowania ekstremalnego. Jest to aktywno\u015b\u0107, kt\u00f3ra obejmuje zar\u00f3wno testy jednostkowe, testy automatyczne, jak i testy akceptacyjne przeprowadzone przez klienta. Testy klienta s\u0105 wykonywane w celu sprawdzenia, czy system spe\u0142nia pocz\u0105tkowe wymagania.<\/li>\n\n\n\n<li><strong>S\u0142uchanie<\/strong> \u2013 polega na ci\u0105g\u0142ej komunikacji i feedbacku. Klienci i project managerowie s\u0105 zaanga\u017cowani w opisanie logiki biznesowej i jej oczekiwanej warto\u015bci dla biznesu.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Plusy-i-minusy-Extreme-Programming\">Plusy i minusy Extreme Programming<\/h2>\n\n\n\n<p>Programowanie ekstremalne mo\u017cna zastosowa\u0107 w ka\u017cdym projekcie rozwoju oprogramowania, jednak nale\u017cy rozwa\u017cy\u0107 dobre i z\u0142e strony tego podej\u015bcia i r\u00f3\u017cnice pomi\u0119dzy innymi frameworkami zwinnymi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Zalety programowania ekstremalnego<\/h3>\n\n\n\n<p>U\u017cycie XP mo\u017ce by\u0107 korzystne i pomaga skr\u00f3ci\u0107 czas i zmniejszy\u0107 koszt rozwoju oprogramowania:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Stabilno\u015b\u0107 <\/strong>\u2013 otrzymujemy stabilny, dobrze dzia\u0142aj\u0105cy system dzi\u0119ki refaktoryzacjii sta\u0142emu testowaniu.<\/li>\n\n\n\n<li><strong>Czysty, zwi\u0119z\u0142y kod<\/strong> \u2013 jest \u0142atwy do czytania i do zmiany w przysz\u0142o\u015bci, je\u017celi zajdzie taka potrzeba. Pomaga w tym zw\u0142aszcza wspomniana wcze\u015bniej prostota.<\/li>\n\n\n\n<li><strong>Zredukowana dokumentacja<\/strong> \u2013 obszerne pliki z wymaganiami s\u0105 zast\u0119powane historyjkami.<\/li>\n\n\n\n<li><strong>Rezultat spe\u0142niaj\u0105cy oczekiwania <\/strong>\u2013zaanga\u017cowanie klienta w proces rozwoju i testowania mo\u017ce bezpo\u015brednio wp\u0142yn\u0105\u0107 na rezultat. Gwarantuje spe\u0142nienie za\u0142o\u017ce\u0144 i wymaga\u0144 biznesowych, przez co klient otrzyma dok\u0142adnie to, czego potrzebowa\u0142.<\/li>\n\n\n\n<li><strong>Brak nadgodzin<\/strong> \u2013 maksymalna redukcja lub kompletny brak nadgodzin jest mo\u017cliwa dzi\u0119ki kr\u00f3tkim iteracjom pozwalaj\u0105cym skupi\u0107 si\u0119 na konkretnych wymaganiach i dostarczaniu tego, czego klient faktycznie oczekuje. Im d\u0142u\u017csza iteracja, tym wi\u0119ksze ryzyko, \u017ce wymagania nie zostan\u0105 w\u0142a\u015bciwie zrozumiane i b\u0119dzie trzeba po\u015bwi\u0119ci\u0107 dodatkowy czas na poprawienie rozwi\u0105zania, kt\u00f3re np. tworzy\u0142o si\u0119 na ich podstawie przez kilka tygodni. <strong><\/strong><\/li>\n\n\n\n<li><strong>Mniej b\u0142\u0119d\u00f3w<\/strong> \u2013 Pair Programming pozwala na dostarczenie produktu lepszej jako\u015bci, kt\u00f3ry posiada mniej b\u0142\u0119d\u00f3w. Jednocze\u015bnie wsp\u00f3\u0142praca pomi\u0119dzy developerami mo\u017ce wp\u0142yn\u0105\u0107 pozytywnie na rozumienie za\u0142o\u017ce\u0144 i ich pewno\u015b\u0107 co do wymaga\u0144.<\/li>\n\n\n\n<li><strong>Transparentno\u015b\u0107 <\/strong>\u2013 ci\u0105g\u0142a komunikacja zapewnia wysoki poziom przejrzysto\u015bci i odpowiedzialno\u015bci oraz pozwala ca\u0142emu zespo\u0142owi by\u0107 na bie\u017c\u0105co z post\u0119pami i zmianami w projekcie.<\/li>\n\n\n\n<li><strong>Szybko\u015b\u0107 dostarczania produktu <\/strong>\u2013 minimalistyczne, iteratywne podej\u015bcie do rozwoju oprogramowania przek\u0142ada si\u0119 na to, \u017ce bardzo szybko mog\u0105 zosta\u0107 dostarczone gotowe, zdatne do u\u017cytku elementy. Dodatkowo \u2013 zaimplementowane zostan\u0105 tylko niezb\u0119dne funkcjonalno\u015bci.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Wady programowania ekstremalnego<\/h3>\n\n\n\n<p>Z drugiej strony, programowanie ekstremalne posiada wiele wad, kt\u00f3re trzeba wzi\u0105\u0107 pod uwag\u0119 przy wyborze tego podej\u015bcia do projektu:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Rozmyty efekt ko\u0144cowy<\/strong> \u2013 bardzo cz\u0119sto w trakcie trwania projektu klient nie ma jeszcze czystego obrazu (<em>clear picture<\/em>) ko\u0144cowego rezultatu. Brak takiej wizji sprawia, \u017ce jest prawie niemo\u017cliwe wykonanie dok\u0142adnych estymat zakresu wymaganej pracy, kosztu oraz czasu.<\/li>\n\n\n\n<li><strong>Niejasne wymagania<\/strong> \u2013 dokumentacja mo\u017ce by\u0107 niedostateczna oraz nie zawiera\u0107 jasnych i przejrzystych wymaga\u0144 i specyfikacji. Prowadzi to cz\u0119sto do rozszerzenia zakresu projektu.<\/li>\n\n\n\n<li><strong>Wi\u0119kszy wp\u0142yw czynnika ludzkiego<\/strong> \u2013 Pair Programming wymaga wi\u0119cej czasu i nie zawsze przynosi oczekiwane rezultaty. Mo\u017ce si\u0119 tak dzia\u0107 ze wzgl\u0119du na niezgodno\u015bci charakter\u00f3w.<\/li>\n\n\n\n<li><strong>Pr\u00f3g wej\u015bcia<\/strong> \u2013 szybkie odej\u015bcie od tradycyjnych metodyk rozwoju oprogramowania do programowania ekstremalnego wymaga znacz\u0105cych zmian strukturalnych.<\/li>\n\n\n\n<li><strong>Ograniczenia zwi\u0105zane z prac\u0105 zdaln\u0105 <\/strong>\u2013 programowanie ekstremalne dzia\u0142a najlepiej w przypadku zespo\u0142\u00f3w i klient\u00f3w pracuj\u0105cych na miejscu (on-site), gdy\u017c wymaga<br>prowadzenia spotka\u0144 face to face. Ogranicza to u\u017cycie XP w zdalnych zespo\u0142ach rozproszonych.<\/li>\n\n\n\n<li><strong>Wi\u0119cej spotka\u0144<\/strong> \u2013 cz\u0119ste spotkania z klientami zwykle zajmuj\u0105 sporo czasu, kt\u00f3ry m\u00f3g\u0142by zosta\u0107 przeznaczony na w\u0142a\u015bciw\u0105 implementacj\u0119.<\/li>\n\n\n\n<li><strong>Stres <\/strong>\u2013 czasami klienci nie maj\u0105 czasu, ch\u0119ci czy do\u015bwiadczenia, \u017ceby bra\u0107 udzia\u0142 w rozwoju produktu. Bior\u0105c pod uwag\u0119 nagl\u0105ce terminy, mo\u017ce to generowa\u0107 stres \u2013 zw\u0142aszcza gdy zesp\u00f3\u0142 nie otrzymuje warto\u015bciowego feedbacku albo gdy nieposiadaj\u0105ca \u017cadnej lub minimalnej wiedzy na temat proces\u00f3w osoba pr\u00f3buje zarz\u0105dza\u0107 developerami.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Kiedy-u\u017cy\u0107-programowania-ekstremalnego?\">Kiedy u\u017cy\u0107 programowania ekstremalnego?<\/h2>\n\n\n\n<p>Programowanie ekstremalne sprawdzi si\u0119 w zespo\u0142ach, w kt\u00f3rych:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Funkcjonalno\u015b\u0107 systemu, nad kt\u00f3rym pracuj\u0105, b\u0119dzie si\u0119 zmienia\u0107 co kilka miesi\u0119cy.<\/li>\n\n\n\n<li>Stale zmieniaj\u0105 si\u0119 wymagania lub wsp\u00f3\u0142pracuje si\u0119 z klientem, kt\u00f3ry nie do ko\u0144ca wie, czego oczekuje od systemu.<\/li>\n\n\n\n<li>Chce si\u0119 ograniczy\u0107 ryzyko zwi\u0105zane z projektem i unikn\u0105\u0107 napi\u0119tych termin\u00f3w.<\/li>\n\n\n\n<li>Zesp\u00f3\u0142 developerski jest ma\u0142y (najlepiej od 2 do 12 os\u00f3b).<\/li>\n\n\n\n<li>Mo\u017cliwa jest bliska wsp\u00f3\u0142praca z klientem.<\/li>\n\n\n\n<li>Mo\u017cliwe jest zastosowanie test\u00f3w jednostkowych, automatycznych i funkcjonalnych.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Podsumowanie\">Podsumowuj\u0105c\u2026<\/h2>\n\n\n\n<p>Programowanie ekstremalne sprawdzi si\u0119 w projektach, w kt\u00f3rych cz\u0119sto zmieniaj\u0105 si\u0119 wymagania. Mo\u017ce si\u0119 to wi\u0105za\u0107 z wi\u0119ksz\u0105 liczb\u0105 spotka\u0144, konieczno\u015bci\u0105 zaanga\u017cowania klienta celem uzyskania informacji zwrotnej oraz potrzeb\u0105 wprowadzenia zmian w strukturze zespo\u0142u.<strong> Je\u015bli jednak wsp\u00f3\u0142praca i ci\u0105g\u0142y rozw\u00f3j s\u0105 priorytetem dla twojego zespo\u0142u, to warto spr\u00f3bowa\u0107 programowania ekstremalnego. <\/strong>To wysoce elastyczne podej\u015bcie <strong>opiera si\u0119 na ci\u0105g\u0142ym feedbacku od klient\u00f3w, <\/strong>przewiduje b\u0142\u0119dy, jakie mog\u0105 pojawi\u0107 si\u0119 po drodze i wymaga wsp\u00f3\u0142pracy developer\u00f3w ze wzgl\u0119du na techniki programowania w parach. Programowanie ekstremalnie nie tylko zapewnia dostarczenie produktu przynosz\u0105cego warto\u015b\u0107 dla biznesu, ale tak\u017ce zwi\u0119ksza produktywno\u015b\u0107 zespo\u0142\u00f3w developerskich.<a id=\"_msocom_1\"><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W projektach rozwoju oprogramowania nieraz mamy do czynienia ze zmieniaj\u0105cymi si\u0119 wymaganiami klienta. Zespo\u0142y pracuj\u0105ce zwinnie mog\u0105 podj\u0105\u0107 efektywne dzia\u0142ania, tak by zmienia\u0107 dowolny fragment systemu w odpowiedzi na otrzymany feedback. Takie mo\u017cliwo\u015bci daje programowanie ekstremalne (XP). Czym r\u00f3\u017cni si\u0119 od framework\u00f3w takich jak Scrum? W jakich projektach si\u0119 sprawdzi? Jakie s\u0105 wady, a jakie zalety podej\u015bcia Extreme Programming? Sprawd\u017amy!<\/p>\n","protected":false},"author":103,"featured_media":29457,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":392,"footnotes":""},"categories":[1,583],"tags":[601],"offering":[522],"class_list":["post-29443","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-zarzadzanie-projektami","tag-agile-2","offering-tech-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/29443","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/users\/103"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=29443"}],"version-history":[{"count":4,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/29443\/revisions"}],"predecessor-version":[{"id":33916,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/29443\/revisions\/33916"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/29457"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=29443"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=29443"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=29443"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=29443"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}