{ "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 }