aitech-pbr-rjawor/materiały na PPB (wykład)/05_metodyki zwinne.ipynb

623 lines
18 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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