{
 "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",
    "<h3>Krzysztof Jassem (2021)</h3>\n",
    "</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 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."
   ]
  }
 ],
 "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
}