aitech-pbr2022/05_metodyki_zwinne.ipynb

641 lines
18 KiB
Plaintext
Raw Normal View History

2022-11-13 20:45:00 +01:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"<div class=\"alert alert-block alert-info\">\n",
"<h1> Przygotowanie do projektu badawczo-rozwojowego</h1>\n",
"<h2> 5. <i>Metodyki adaptacyjne w programowaniu</i>[wykład]</h2> \n",
2022-11-13 20:46:51 +01:00
"<h3>Krzysztof Jassem (2022)</h3>\n",
2022-11-13 20:45:00 +01:00
"</div>\n",
"\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Metodyki adaptacyjne (zwinne) w programowaniu (Agile Software Development)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-success\">\n",
"\n",
"<b> Agile </b> (zwinny) to pojęcie odnoszące się do szybkości i sprawności w działaniu i myśleniu.\n",
" \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Manifest Agile\n",
" * opublikowany w roku 2001\n",
" * autorzy: 17 teoretyków i praktyków programowania\n",
" * 4 wartości\n",
" * 12 zasad (pryncypiów)\n",
" \n",
" ### 4 wartości manifestu Agile\n",
" 1. Ludzie i interakcje ponad procesy i narzędzia.\n",
" 2. Działające oprogramowanie ponad szczegółową dokumentację.\n",
" 3. Współpraca z klientem ponad negocjację umów.\n",
" 4. Reagowanie na zmiany ponad podążaniem za planem.\n",
" \n",
" ### 12 pryncypiów manifestu Agile \n",
" [12 pryncypiów](https://www.agilealliance.org/agile101/12-principles-behind-the-agile-manifesto/)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 10 pryncypiów wg Kelly Watersa (All About Agile: Agile Management Made Easy!, 2012)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"1. Active User Involvement Is Imperative."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
"\n",
"Nic dobrego nie wynika <BR>\n",
"Bez udziału użytkownika.\n",
" \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"2. Agile Development Teams Must Be Empowered."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
"\n",
"Nie warta praca mozołu, <BR>\n",
"Gdy władza nie w rękach zespołu.\n",
" \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"3. Time waits for no man."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
"\n",
"Czas płynie wartko jak rzeka, <BR>\n",
"I na nikogo nie czeka.\n",
" \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"4. Agile Requirements Are Barely Sufficient."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
"\n",
"Dosłownie w kilku dziś zdaniach <BR>\n",
"Streścimy swe wymagania.\n",
" \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"5. How do you eat an elephant? One bite at a time."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
"\n",
"Sekretów uchylam wieczko: <BR>\n",
"Jedz słonia małą łyżeczką.\n",
" \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"6. Fast but not so furious."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
"\n",
"Byli szybcy, lecz nie wściekli, <BR>\n",
"I na czas produkt dowlekli.\n",
" \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"7. Done Means DONE!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
"\n",
"Praca była \"wykonana\", <BR>\n",
"I działało... aż do rana.\n",
" \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"8. Enough is enough."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"Projekt ciągle się rozrasta, <BR>\n",
"Trzeba krzyknąć: \"Stop i Basta!\"\n",
" \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"9. Agile Testing Is Not For Dummies."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"Wiedz, by dobrze móc testować, <BR>\n",
"Twa głowa ma być pomysłowa.\n",
" \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"10. No place for snipers."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"Choć mocno znów cierpi Twe ego, <BR>\n",
"Nie strzelaj - do siebie samego.\n",
" \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Przykład manifestu zespołu ludzi (PWN AI)\n",
"> 1. Biznes stawia **cele**, IT daje **rozwiązania**.\n",
"> 2. Wszystko da się zrobić.\n",
"> 3. Biznes wyjaśnia **potrzeby**, IT wyjaśnia **możliwości**.\n",
"> 4. **Komunikacja i zaangażowanie** albo wyrzucanie pieniędzy w błoto.\n",
"> 5. Wszyscy jesteśmy **elastyczni**."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Metodyka SCRUM"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<b>Scrum</b> jest metodyką, w której kluczowym elementem jest <b>Sprint</b> - faza, która kończy się działającym prototypem. Po każdym Sprincie następuje planowanie działań w kolejnym Sprincie - biorące pod uwagę dotychczasowe doświadczenia.\n",
" \n",
"</div>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Struktura metodyki Scrum opiera się na trzech filarach:\n",
"* Artefakty\n",
"* Role\n",
"* Cykl Pracy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Artefakty w metodyce Scrum"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h5>Rejestr Produktu (Product Backlog)</h5>\n",
"\n",
"<b> Rejestr Produktu </b> to lista zadań do wykonania w projekcie ułożona według priorytetu wykonania.\n",
"\n",
"<ol>\n",
" <li> Rejestr produktu utrzymywany jest przez Właściciela Produktu.</li>\n",
" <li> Zadania, których efekt widoczny jest dla użytkownika mają często postać <b> User Story </b>.</li>\n",
" <li> Zadania o najniższym priorytecie mogą być usuwane z Rejestru Produktu.</li>\n",
" </ol>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h5>User Story </h5>\n",
"\n",
"> <b> User story </b> to krótki opis wybranej funkcjonalności, napisany z punktu widzenia docelowego użytkownika danego produktu (Encyklopedia Zarządzania).\n",
"\n",
"User Story ma zwykle postać: \n",
"> Jako <Kto?> chcę wykonać<Co?> aby<Dlaczego?>\n",
"\n",
"<h6> Przykład User Story </h6>\n",
" \n",
"> Jako <b> klient sklepu </b> chcę <b> dodać produkt do koszyka </b> aby go później <b> kupić </b>.\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h5>Rejestr Sprintu (Sprint Backlog)</h5>\n",
"\n",
"<b> Rejestr Sprintu </b> to lista <b>Zadań</b> do wykonania podczas Sprintu:\n",
"\n",
"<ol>\n",
" <li> utrzymywana przez Zespół Deweloperski,</li>\n",
" <li> tworzona na początku każdego Sprintu przez Zespół Deweloperski na podstawie priorytetowego zadania z Rejestru Produktu. </li>\n",
" </ol>\n",
"</div>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h5>Zadanie (Task)</h5>\n",
"\n",
"<b> Zadanie </b> w Rejestrze Sprintu zawiera następujące informacje:\n",
"\n",
"<ol>\n",
" <li> opis zadania,</li>\n",
" <li> szacowany czas wykonania zadania, </li>\n",
" <li> członek zespołu odpowiedzialnego za wykonanie zadania, </li>\n",
" <li> status danego zadania (np. jeden z trzech: oczekuje na realizację/w trakcie realizacji/wykonane). </li>\n",
" </ol>\n",
"</div>\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Role w metodyce Scrum"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-success\">\n",
" \n",
"<h5>Udziałowcy (stakeholders)</h5>\n",
"Udziałowcy to ludzie, którzy finansują projekt:\n",
"<ol>\n",
" <li> właściciele firmy realizującej projekt,</li>\n",
" <li> klienci, </li>\n",
" <li> przyszli użytkownicy.</li>\n",
" </ol>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-success\">\n",
" \n",
"<h5>Właściciel Produktu (Product Owner)</h5>\n",
"\n",
"<b> Właściciel Produktu </b> to rola, która reprezentuje interesy biznesu.\n",
"\n",
"<h6> Zadania Właściciela Produktu: </h6>\n",
"\n",
"<ol>\n",
" <li> nadzoruje pisanie <b> User Stories</b>,</li>\n",
" <li> analizuje na bieżąco potrzeby biznesu i na tej podstawie...</li>\n",
" <li> ustala priorytet User Stories w <b>Rejestrze Produktu</b>,</li>\n",
" <li> decyduje, co jest WYKONANE. </li>\n",
" </ol>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-success\">\n",
"<h5>Zespół Deweloperski (Development Team)</h5>\n",
" \n",
"<b>Zespół Deweloperski </b> to zespół wykonawców oprogramowania, zazwyczaj składający się z kilku osób (3-9), o równych prawach.\n",
" \n",
"<h6> Zadania Zespołu Deweloperskiego: </h6>\n",
"\n",
"<ol>\n",
" <li> jest odpowiedzialny za implementację, </li>\n",
" <li> na podstawie priorytetów Właściciela produktu określa zadania na kolejny sprint, </li>\n",
" <li> wykonuje cały proces: analiza, programowanie, testowanie (dzienniku produktu),</li>\n",
" <li> sam decyduje o sposobie realizacji zadań. </li>\n",
" </ol>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-success\">\n",
"<h5> Scrum Master </h5>\n",
"\n",
"Scrum Master to członek zespołu deweloperskiego, mający dobre zrozumienie ideologii SCRUM.\n",
"\n",
"<h6> Zadania Scrum Mastera: </h6>\n",
"<ol>\n",
" <li> prowadzi <b>Daily </b> (spotkanie zespołu), </li>\n",
" <li> prowadzi <b> Retrospektywę</b>, </li>\n",
" <li> buduje relacje w zespole, </li>\n",
" <li> pomaga rozwiązywać konflikty, </li>\n",
" <li> pośredniczy w rozmowach z Właścicielem produktu. </li>\n",
" </ol>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Cykl pracy w metodyce Scrum"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
"<h5> Sprint </h5> \n",
"\n",
"<b> Sprint </b> to okres, podczas którego tworzy się przyrost projektu, skutkujący prototypem gotowym do użycia. Sprint zazwyczaj trwa nie krócej niż tydzień i nie dłuzej niż miesiąc.\n",
"W skład Sprintu wchodzą:\n",
"<ol>\n",
" <li> Planowanie Sprintu, </li>\n",
" <li> Implementacja, </li>\n",
" <li> Codzienne spotkania, </li>\n",
" <li> Przegląd Sprintu, </li>\n",
" <li> Retrospektywa. </li>\n",
" </ol>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
"<h5> Planowanie Sprintu (Sprint Planning) </h5> \n",
"\n",
"<b> Planowanie sprintu </b> jest pierwszym spotkaniem podczas każdego sprintu. \n",
"\n",
"<ul>\n",
"<li> Planowanie Sprintu bierze udział Zespół Deweloperski oraz opcjonalnie Właściciel Produktu. </li> \n",
"<li> Planowanie Sprintu prowadzone jest przez Scrum Mastera. </li>\n",
"</ul>\n",
"\n",
"<h6> Standardowy przebieg Planowania Sprintu: </h6> \n",
"<ol>\n",
" <li> Analizy Rejestru Produktu - wybór wymagań do realizacji, </li>\n",
" <li> Określenie celu sprintu - na podstawie wybranych wymagań, </li>\n",
" <li> Określenie pełnego zakresu prac: jak będzie działał system po Sprincie, </li>\n",
" <li> Stworzenie Rejestru Sprintu: podział zakresu prac na zadania i przydzielenie członków zespołu do zadań, </li>\n",
" <li> Estymacja pracochłonności zadań. </li>\n",
" </ol>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
"<h5> Codzienne Spotkania (Daily Scrum) </h5> \n",
"\n",
"<b> Codzienne Spotkanie </b> (stosowana nazwa w j. polskim - <b> Daily </b>) to codzienne zdarzenie, które trwa do piętnastu minut w stałym miejscu i o stałej porze. \n",
"\n",
"<ul>\n",
"<li> W Daily bierze udział Zespół Deweloperski. </li> \n",
"<li> Daily prowadzone jest przez Scrum Mastera. </li>\n",
"</ul>\n",
" \n",
"<h6> Standardowy plan Daily: </h6>\n",
"\n",
"<ol>\n",
" <li> Przegląd prac w ciągu ostatniego dnia, </li>\n",
" <li> Omówienie pojawiających się problemów, </li>\n",
" <li> Omówienie planu na kolejny dzień. </li>\n",
"</ol>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
"<h5> Przegląd Sprintu </h5> \n",
"\n",
"<b> Przegląd Sprintu </b> jest spotkaniem organizowanym na zakończenie Sprintu w celu zweryfikowania wykonania zadań w Sprincie i dostosowania Rejestru Produktu. \n",
"\n",
"<ul>\n",
"<li> W Przeglądzie Sprintu bierze udział Zespół Deweloperski, Właściciel Produktu oraz Udziałowcy zaproszenieni przez Właściciela Produktu. </li> \n",
"<li> Przegląd Sprintu prowadzony jest przez Właściciela Produktu. </li>\n",
"</ul>\n",
" \n",
"<h6> Standardowy plan Przeglądu Sprintu: </h6>\n",
"\n",
"<ol>\n",
" <li> Właściciel Produktu wyjaśnia Udziałowcom, które funkcjonalności zostały \"Wykonane”, a które nie. </li>\n",
" <li> Zespół Deweloperski omawia zadania w Sprincie, jakie były problemy oraz jak je rozwiązano. </li>\n",
" <li> Zespół Deweloperski prezentuje \"Wykonaną” pracę; dyskusja. </li>\n",
" <li> Właściciel Produktu omawia obecny Rejestr Produktu. </li>\n",
" <li> Uczestnicy omawiają kolejne kroki pracy pod kątem potrzeb biznesu.\n",
" <li> Właściciel produktu aktualizuje Rejestr Produktu.\n",
"</ol>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
"<h5> Retrospektywa Sprintu</h5> \n",
"\n",
"<b> Retrospektywa Sprintu </b> to spotkanie po Przeglądzie Sprintu w celu opracowania usprawnień na następny Sprint. \n",
"\n",
"<ul>\n",
"<li> W Retrospektywie udział bierze Zespół Deweloperski. </li> \n",
"<li> Retrospektywę prowadzi Scrum Master. </li>\n",
"</ul>\n",
" \n",
"<h6> Standardowy plan Retrospektywy: </h6>\n",
"\n",
"<ol>\n",
" <li> Sprawdzenie, co działo się w ostatnim Sprincie, </li>\n",
" <li> Zidentyfikowanie elementów, które sprawdziły się w działaniu, </li>\n",
" <li> Zidentyfikowanie elementów, które kwalifikują się do usprawnienia,</li>\n",
" <li> Stworzenie planu wprowadzania w życie usprawnień. </li>\n",
"</ol>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Wniosek\n",
"Nie zrobi informatyk \n",
"Złotego interesu, \n",
"Gdy nie będzie co tydzień \n",
"Słuchał potrzeb biznesu."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Zadania proponowane na laboratoria\n",
"### Zadanie 1.\n",
"Podzielcie się rolami w projekcie według metodyki Scrum i opiszcie, jak widzicie swoje zadania w projekcie.\n",
"\n",
"### Zadanie 2.\n",
"Opracujcie 5-punktowy manifest pracy w Waszym zespole.\n",
"\n",
"### Zadanie 3.\n",
"Utwórzcie projekt w systemie JIRA.\n",
"Opracujcie profile członków grupy (zdjęcia mile widziane).\n",
"Wpiszcie do backloga \"user stories\" związane z projektem - założcie w tym momencie, że wykonacie cały produkt high-tech.\n",
"Sprobujcie oszacować czas realizacji każdego \"user story\" za pomocą punktów, zakładając że 10 punktów odpowiada sumie pracy całego zespołu podczas jednego tygodniowego sprintu."
]
}
],
"metadata": {
"author": "Krzysztof Jassem",
"email": "jassem@amu.edu.pl",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"lang": "pl",
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
},
"subtitle": "05. Metodologia Prince2Agile[wykład]",
"title": "Przygotowanie do projektu badawczo-rozwojowego",
"year": "2021"
},
"nbformat": 4,
"nbformat_minor": 4
}