{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Systemy informatyczne analizy danych

\n", "

6. Metodyki adaptacyjne w programowaniu[wykład]

\n", "

Krzysztof Jassem (2024)

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Metodyki adaptacyjne w programowaniu (Agile Software Development)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", " Agile (zwinny) to pojęcie odnoszące się do szybkości i sprawności w działaniu i myśleniu.\n", " \n", "
" ] }, { "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": [ "
\n", "\n", "Nic dobrego nie wynika
\n", "Bez udziału użytkownika.\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2. Agile Development Teams Must Be Empowered." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Nie warta praca mozołu,
\n", "Gdy władza nie w rękach zespołu.\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3. Time waits for no man." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Czas płynie wartko jak rzeka,
\n", "I na nikogo nie czeka.\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4. Agile Requirements Are Barely Sufficient." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Dosłownie w kilku dziś zdaniach
\n", "Streścimy swe wymagania.\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "5. How do you eat an elephant? One bite at a time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Sekretów uchylam wieczko:
\n", "Jedz słonia małą łyżeczką.\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "6. Fast but not so furious." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Byli szybcy, lecz nie wściekli,
\n", "I na czas produkt dowlekli.\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "7. Done Means DONE!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "Praca była \"wykonana\",
\n", "I działało... aż do rana.\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "8. Enough is enough." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "Projekt ciągle się rozrasta,
\n", "Trzeba krzyknąć: \"Stop i Basta!\"\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "9. Agile Testing Is Not For Dummies." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "Wiedz, by dobrze móc testować,
\n", "Twa głowa ma być pomysłowa.\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "10. No place for snipers." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "Choć mocno znów cierpi Twe ego,
\n", "Nie strzelaj - do siebie samego.\n", " \n", "
" ] }, { "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": [ "
\n", " \n", "Scrum jest metodyką, w której kluczowym elementem jest Sprint - 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", "
\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": [ "
\n", " \n", "
Rejestr Produktu (Product Backlog)
\n", "\n", " Rejestr Produktu to lista zadań do wykonania w projekcie ułożona według priorytetu wykonania.\n", "\n", "
    \n", "
  1. Rejestr produktu utrzymywany jest przez Właściciela Produktu.
  2. \n", "
  3. Zadania, których efekt widoczny jest dla użytkownika mają często postać User Story .
  4. \n", "
  5. Zadania o najniższym priorytecie mogą być usuwane z Rejestru Produktu.
  6. \n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "
User Story
\n", "\n", "> User story 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 chcę wykonać aby\n", "\n", "
Przykład User Story
\n", " \n", "> Jako klient sklepu chcę dodać produkt do koszyka aby go później kupić .\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "
Rejestr Sprintu (Sprint Backlog)
\n", "\n", " Rejestr Sprintu to lista Zadań do wykonania podczas Sprintu:\n", "\n", "
    \n", "
  1. utrzymywana przez Zespół Deweloperski,
  2. \n", "
  3. tworzona na początku każdego Sprintu przez Zespół Deweloperski na podstawie priorytetowego zadania z Rejestru Produktu.
  4. \n", "
\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "
Zadanie (Task)
\n", "\n", " Zadanie w Rejestrze Sprintu zawiera następujące informacje:\n", "\n", "
    \n", "
  1. opis zadania,
  2. \n", "
  3. szacowany czas wykonania zadania,
  4. \n", "
  5. członek zespołu odpowiedzialnego za wykonanie zadania,
  6. \n", "
  7. status danego zadania (np. jeden z trzech: oczekuje na realizację/w trakcie realizacji/wykonane).
  8. \n", "
\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Role w metodyce Scrum" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "
Udziałowcy (stakeholders)
\n", "Udziałowcy to ludzie, którzy finansują projekt:\n", "
    \n", "
  1. właściciele firmy realizującej projekt,
  2. \n", "
  3. klienci,
  4. \n", "
  5. przyszli użytkownicy.
  6. \n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "
Właściciel Produktu (Product Owner)
\n", "\n", " Właściciel Produktu to rola, która reprezentuje interesy biznesu.\n", "\n", "
Zadania Właściciela Produktu:
\n", "\n", "
    \n", "
  1. nadzoruje pisanie User Stories,
  2. \n", "
  3. analizuje na bieżąco potrzeby biznesu i na tej podstawie...
  4. \n", "
  5. ustala priorytet User Stories w Rejestrze Produktu,
  6. \n", "
  7. decyduje, co jest WYKONANE.
  8. \n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
Zespół Deweloperski (Development Team)
\n", " \n", "Zespół Deweloperski to zespół wykonawców oprogramowania, zazwyczaj składający się z kilku osób (3-9), o równych prawach.\n", " \n", "
Zadania Zespołu Deweloperskiego:
\n", "\n", "
    \n", "
  1. jest odpowiedzialny za implementację,
  2. \n", "
  3. na podstawie priorytetów Właściciela produktu określa zadania na kolejny sprint,
  4. \n", "
  5. wykonuje cały proces: analiza, programowanie, testowanie (dzienniku produktu),
  6. \n", "
  7. sam decyduje o sposobie realizacji zadań.
  8. \n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
Scrum Master
\n", "\n", "Scrum Master to członek zespołu deweloperskiego, mający dobre zrozumienie ideologii SCRUM.\n", "\n", "
Zadania Scrum Mastera:
\n", "
    \n", "
  1. prowadzi Daily (spotkanie zespołu),
  2. \n", "
  3. prowadzi Retrospektywę,
  4. \n", "
  5. buduje relacje w zespole,
  6. \n", "
  7. pomaga rozwiązywać konflikty,
  8. \n", "
  9. pośredniczy w rozmowach z Właścicielem produktu.
  10. \n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cykl pracy w metodyce Scrum" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
Sprint
\n", "\n", " Sprint 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", "
    \n", "
  1. Planowanie Sprintu,
  2. \n", "
  3. Implementacja,
  4. \n", "
  5. Codzienne spotkania,
  6. \n", "
  7. Przegląd Sprintu,
  8. \n", "
  9. Retrospektywa.
  10. \n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
Planowanie Sprintu (Sprint Planning)
\n", "\n", " Planowanie sprintu jest pierwszym spotkaniem podczas każdego sprintu. \n", "\n", "\n", "\n", "
Standardowy przebieg Planowania Sprintu:
\n", "
    \n", "
  1. Analizy Rejestru Produktu - wybór wymagań do realizacji,
  2. \n", "
  3. Określenie celu sprintu - na podstawie wybranych wymagań,
  4. \n", "
  5. Określenie pełnego zakresu prac: jak będzie działał system po Sprincie,
  6. \n", "
  7. Stworzenie Rejestru Sprintu: podział zakresu prac na zadania i przydzielenie członków zespołu do zadań,
  8. \n", "
  9. Estymacja pracochłonności zadań.
  10. \n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
Codzienne Spotkania (Daily Scrum)
\n", "\n", " Codzienne Spotkanie (stosowana nazwa w j. polskim - Daily ) to codzienne zdarzenie, które trwa do piętnastu minut w stałym miejscu i o stałej porze. \n", "\n", "\n", " \n", "
Standardowy plan Daily:
\n", "\n", "
    \n", "
  1. Przegląd prac w ciągu ostatniego dnia,
  2. \n", "
  3. Omówienie pojawiających się problemów,
  4. \n", "
  5. Omówienie planu na kolejny dzień.
  6. \n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
Przegląd Sprintu
\n", "\n", " Przegląd Sprintu jest spotkaniem organizowanym na zakończenie Sprintu w celu zweryfikowania wykonania zadań w Sprincie i dostosowania Rejestru Produktu. \n", "\n", "\n", " \n", "
Standardowy plan Przeglądu Sprintu:
\n", "\n", "
    \n", "
  1. Właściciel Produktu wyjaśnia Udziałowcom, które funkcjonalności zostały \"Wykonane”, a które nie.
  2. \n", "
  3. Zespół Deweloperski omawia zadania w Sprincie, jakie były problemy oraz jak je rozwiązano.
  4. \n", "
  5. Zespół Deweloperski prezentuje \"Wykonaną” pracę; dyskusja.
  6. \n", "
  7. Właściciel Produktu omawia obecny Rejestr Produktu.
  8. \n", "
  9. Uczestnicy omawiają kolejne kroki pracy pod kątem potrzeb biznesu.\n", "
  10. Właściciel produktu aktualizuje Rejestr Produktu.\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
Retrospektywa Sprintu
\n", "\n", " Retrospektywa Sprintu to spotkanie po Przeglądzie Sprintu w celu opracowania usprawnień na następny Sprint. \n", "\n", "\n", " \n", "
Standardowy plan Retrospektywy:
\n", "\n", "
    \n", "
  1. Sprawdzenie, co działo się w ostatnim Sprincie,
  2. \n", "
  3. Zidentyfikowanie elementów, które sprawdziły się w działaniu,
  4. \n", "
  5. Zidentyfikowanie elementów, które kwalifikują się do usprawnienia,
  6. \n", "
  7. Stworzenie planu wprowadzania w życie usprawnień.
  8. \n", "
\n", "
" ] }, { "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 (ipykernel)", "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.9.13" }, "subtitle": "05. Metodologia Prince2Agile[wykład]", "title": "Przygotowanie do projektu badawczo-rozwojowego", "year": "2021" }, "nbformat": 4, "nbformat_minor": 4 }