aktualizacja treści na lab 2

This commit is contained in:
jassem 2023-10-16 20:04:49 +02:00
parent e02924597b
commit 4e29013d8d
5 changed files with 1775 additions and 0 deletions

View File

@ -0,0 +1,139 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Organizacja prezentacji koncepcji projektów w dniu 8 listopada\n",
"Informacje dotyczą prezentacji koncepcji projektów. \n",
"Podane poniżej informacje mogą ulec korektom do dnia 7 listopada."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### Termin i forma prezentacji\n",
" * Wszystkie prezentacje powinny znaleźć się w odpowiednim folderze na Teamsach w nieprzekraczalnym terminie 6 listopada.\n",
" * Prezentacje będą prowadzone publicznie podczas zajęć przewidzianych na laboratorium w dniu 8 listopada o godz. 17.15. Prezentacje odbędą się w auli C, Szacowany czas na jedną prezentację to 10 minut.\n",
" * Podczas prezentacji wskazana jest obecność \"na scenie\" całej grupy. Nie jest jednak wymagane, aby wypowiadali się wszyscy studenci.\n",
" * Wszystkie prezentacje powinny zostaćprzekazane "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Ocena prezentacji\n",
" * Każda prezentacja, spełniająca podstawowe oczekiwania dot. prezentacji, otrzyma ocenę bazową: 20 punktów. \n",
" * Do oceny bazowej zostaną doliczone punkty bonusowe za prezentacje wyróżnione przez:\n",
" * studentów,\n",
" * prowadzących oraz zaproszonych gości.\n",
" * Punkty bonusowe przyznane przez obie grupy odbiorców są sumowane.\n",
"\n",
" * Wyróżnienia będą przyznawane na podstawie wyników ankiet. W ramach ankiety każdy student i każdy prowadzący (gość) będzie poproszony o wskazanie pięciu najlepszych prezentacji. Studenci nie mogą głosować na prezentacje swoich grup.\n",
"\n",
" * Ankieta dla studentów: https://forms.gle/W4hASsPH8MEvF4fe9\n",
"\n",
" * Ankieta dla gości oraz prowadzących poszczególne grupy: https://forms.gle/F5jqhtLpQoX95KcT8\n",
" \n",
"\n",
"### Prezentacje wyróżnione przez studentów\n",
"\n",
"<table>\n",
" <tr>\n",
" <td>Miejce</td> <td> Nazwa projektu </td> <td>Punkty bonusowe</td>\n",
" </tr>\n",
" <tr> \n",
" <td>1. </td><td> Grupa 7 (Brydż) </td> <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <td> 2. / 3. </td><td> Grupa 3 (BiedronApp) </td> <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2. / 3.</td><td> Grupa 2 (SmartHome WRSD) </td><td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4.</td><td> Grupa 1 (FinTech) </td><td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <td>5.</td><td> Grupa 5 (AUTOWycena)</td><td>2</td>\n",
" </tr>\n",
"</table> \n",
"\n",
"### Prezentacje wyróżnione przez prowadzących i gości\n",
"<table>\n",
" <tr>\n",
" <td>Miejce</td> <td> Nazwa projektu </td> <td>Punkty bonusowe</td>\n",
" </tr>\n",
" <tr> \n",
" <td>1. / 2. </td> <td> Grupa 3 (BiedronApp) </td> <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1. / 2.</td> <td> Grupa 7 (Brydż) </td> <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <td>3.</td> <td> Grupa 5 (AUTOWycena) </td><td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <td>4</td><td> Grupa 1 (FinTech) </td><td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <td>5</td><td> Grupa 2 (SmartHome WRSD) </td> <td>2</td>\n",
" </tr>\n",
"</table> \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plan zajęć\n",
" * Wprowadzenie (17.15 - 17.20)\n",
" \n",
" * Prezentacje\n",
"\n",
" * Team A (17.20)\n",
" \n",
" * Team B (17.30)\n",
" \n",
" * Team C (17.40)\n",
" \n",
" * Team D (17.50)\n",
" \n",
" * Team E (18.00)\n",
" \n",
" * Team F (18.10)\n",
" \n",
" * Team G (18.20)\n",
" \n",
" * Wypełnienie ankiet i zakończenie (18.30 - 18.45)\n",
"\n",
"\n",
"\n",
"\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"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"
}
},
"nbformat": 4,
"nbformat_minor": 4
}

View File

@ -0,0 +1,69 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-info\">\n",
"<h1> Systemy informatyczne</h1>\n",
"<h2> 2. <i>System kontroli wersji - Gitaboratorium]</h2> \n",
"<h3>Filip Graliński (2023)</h3>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Cel laboratorium nr 2\n",
"\n",
"Celem laboratorium będzie zaznajomienie studentów z systemem kontroli wersji Git."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Plan laboratorium (brudnopis)\n",
"\n",
"1. Utwórzcie repozytorium na wydziałowym Gicie dla projektu wyceny mieszkań. Repozytorium powinno wstępnie zawierać wyłącznie króki plik tekstowy readme (max 1 zdanie) oraz dwa pliki kodów źródłowych utworzone na lab 1 (interfejs użytkownika oraz funkcja wycena mieszkania).\n",
"2. Sklonujcie repozytorium dla każdego członka grupy.\n",
"3. Podzielcie się zadaniami:\n",
" - modyfikacja pliku readme, aby plik ten zawierał opis projektu\n",
" - modyfikacja kodu zródłowego z interfejsem użytkownika z lab 1 zgodnie z komentarzami podanymi w ocenie zadania\n",
" - modyfikacja kodu zródłowego z interfejsem użytkownika w taki sposób, aby uruchamiał on funkcję wyceny mieszkania\n",
" - modyfikacja funkcję wyceny mieszkania z lab 1 zgodnie z komentarzami podanymi w ocenie zadania\n",
" - poprawienie rysunku interfejsu użytkownika.\n",
"4. Wypchnijcie swoje zmiany w taki sposób, aby każdy członek grupy dokonał przynajmniej jednej zmiany w repozytorium zdalnym.\n",
"Pamiętajcie o tym, że rysunek nie powinien być przechowywany w repozytorium zdalnym - zastosujcie albo plik *gitgnore* albo polecenie *git-annex*."
]
}
],
"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": "01. Prezentacje publiczne[laboratorium]",
"title": "Projekt badawczo-rozwojowy",
"year": "2021"
},
"nbformat": 4,
"nbformat_minor": 4
}

View File

@ -0,0 +1,69 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-info\">\n",
"<h1> Systemy informatyczne</h1>\n",
"<h2> 2. <i>System kontroli wersji - Gitaboratorium]</h2> \n",
"<h3>Filip Graliński (2023)</h3>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Cel laboratorium nr 2\n",
"\n",
"Celem laboratorium będzie zaznajomienie studentów z systemem kontroli wersji Git."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Plan laboratorium (brudnopis)\n",
"\n",
"1. Utwórzcie repozytorium na wydziałowym Gicie dla projektu wyceny mieszkań. Repozytorium powinno wstępnie zawierać wyłącznie króki plik tekstowy readme (max 1 zdanie) oraz dwa pliki kodów źródłowych utworzone na lab 1 (interfejs użytkownika oraz funkcja wycena mieszkania).\n",
"2. Sklonujcie repozytorium dla każdego członka grupy.\n",
"3. Podzielcie się zadaniami:\n",
" - modyfikacja pliku readme, aby plik ten zawierał opis projektu\n",
" - modyfikacja kodu zródłowego z interfejsem użytkownika z lab 1 zgodnie z komentarzami podanymi w ocenie zadania\n",
" - modyfikacja kodu zródłowego z interfejsem użytkownika w taki sposób, aby uruchamiał on funkcję wyceny mieszkania\n",
" - modyfikacja funkcję wyceny mieszkania z lab 1 zgodnie z komentarzami podanymi w ocenie zadania\n",
" - poprawienie rysunku interfejsu użytkownika.\n",
"4. Wypchnijcie swoje zmiany w taki sposób, aby każdy członek grupy dokonał przynajmniej jednej zmiany w repozytorium zdalnym.\n",
"Pamiętajcie o tym, że rysunek nie powinien być przechowywany w repozytorium zdalnym - zastosujcie albo plik *gitgnore* albo polecenie *git-annex*."
]
}
],
"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": "01. Prezentacje publiczne[laboratorium]",
"title": "Projekt badawczo-rozwojowy",
"year": "2021"
},
"nbformat": 4,
"nbformat_minor": 4
}

View File

@ -0,0 +1,479 @@
{
"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> Systemy informatyczne</h1>\n",
"<h2> 6. <i>Prototypowanie i ciągła integracja</i>[wykład]</h2> \n",
"<h3>Krzysztof Jassem (2022)</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": [
"<div class=\"alert alert-block alert-success\">\n",
" \n",
"<h2>Prototyp </h2> \n",
"Prototyp to wynik częściowej implementacji, posiadający wybrane cechy produktu końcowego.\n",
"\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Cele prototypowania\n",
" * Zademonstrowanie umiejętności wykonania produktu końcowego\n",
" * Określenie realistycznych wymagań końcowych\n",
" * Przekonanie się o wpływie innych systemów, środowisk na produkt. \n",
" * Sprawdzenie implementacji kluczowych funkcji\n",
"\n",
"## Potencjalne efekty prototypowania\n",
"* Wykrycie nieporozumień między klientem i wykonawcą \n",
"* Określenie brakujących funkcji \n",
"* Wykrycie błędów w specyfikacji\n",
"* Przewidywanie przyszłych trudności "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Prototyp poziomy a pionowy\n",
"### Prototyp poziomy (Horizontal Prototype)\n",
"\n",
"**Prototyp poziomy** obrazuje całość systemu, podkreślając interakcję z użytkownikiem, a nie wnikając w funkcjonalności.\n",
"\n",
"Przykłady prototypów poziomych w informatyce:\n",
" * Prototyp papierowy\n",
" * Makieta statyczna\n",
" * Makieta dynamiczna\n",
" * Graficzny interfejs użytkownika"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-success\">\n",
" \n",
"<h2>Prototyp papierowy </h2> \n",
" \n",
"<b>Prototyp papierowy</b> to sposób reprezentacji produktu cyfrowego za pomocą wycinanek z papieru. \n",
" \n",
"* Służy do zrozumienia koncepcji produktu cyfrowego przez użytkownika. \n",
"* Dla autora koncepcji prototyp taki służy do prześledzenia reakcji użytkowników na przyszłe działanie systemu przed jego realizacją.\n",
"\n",
"<b>Prototypowanie papierowe - etapy </b>:\n",
"\n",
"<ul>\n",
"<li> Naszkicowanie wstępnej koncepcji ekranów z wyróżnieniem głównych funkcjonalności. </li>\n",
"<li> Symulowanie interakcji poprzez podmienianie papierowych ekranów i wyciętych elementów. </li>\n",
"</ul>\n",
" \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-success\">\n",
" \n",
"<h2>Makieta statyczna </h2> \n",
" \n",
" \n",
"<b>Makieta statyczna</b> to cyfrowy projekt aplikacji, który zawiera pewne elementy docelowej konstrukcji, ale nie jest funkcjonalny. \n",
"\n",
"<ul>\n",
" <li> Obrazuje wybrane widoki bez połączeń między nimi. </li>\n",
"</ul> \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-success\">\n",
" \n",
"<h2>Makieta dynamiczna </h2> \n",
" \n",
" \n",
"<b>Makieta dynamiczna</b> to cyfrowy projekt aplikacji, który zawiera pewne elementy docelowej konstrukcji i wskazuje interakcje z użytkownikiem. \n",
"\n",
"<ul>\n",
"<li> Widoki są \"klikalne\" - po kliknięciu użytkowniki kierowany jest do nowego widoku. </li>\n",
"</ul> \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-success\">\n",
" \n",
"<h2>Graficzny interfejs użytkownika (GUI) </h2> \n",
"\n",
"<b> Graficzny interfejs użytkownika </b> to sposób komunikacji użytkownika z komputerem za pomocą elementów graficznych.\n",
" \n",
"Prototypem poziomym nazwiemy GUI, który: \n",
"<ul>\n",
"<li> Pokazuje menu. </li>\n",
"<li> Pozwala na nawigację. </li>\n",
"<li> Akceptuje input. </li>\n",
"<li> Wyświetla losowy output. </li>\n",
"<li> NIE wspiera logiki aplikacji. </li>\n",
"</ul>\n",
" \n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Prototyp pionowy (Vertical Prototype)\n",
"**Prototyp pionowy** to pełna realizacja kluczowej (kluczowych) funkcji systemu.\n",
"\n",
"Cele prototypowania pionowego:\n",
"* sprawdzenie wyboru technologii\n",
"* pomiary wydajności\n",
"* sprawdzenie poprawności algorytmów i struktur danych\n",
"\n",
"Realizacja prototypów pionowych jest polecana w sytuacji, gdy wykonanie kluczowych funkcji systemu obarczone jest wysokim ryzykiem."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Prototypowanie z porzuceniem a prototypowanie ewolucyjne"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Prototypowanie z porzuceniem (Thow-away Prototyping)\n",
"\n",
"W **prototypowaniu z porzuceniem** budowane są kolejne wersje prototypów, a niektóre z nich są porzucane.\n",
"\n",
"Cele prototypowania z porzuceniem:\n",
"* minimalizacja ryzyka,\n",
"* głębokie zrozumienie problemów technicznych\n",
"\n",
"Koszty:\n",
" * Koszty prototypowania z porzuceniem są wysokie."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Prototypowanie ewolucyjne (Ewolutionary Prototyping)\n",
"\n",
"**Prototypowanie ewolucyjne** polega na stopniowym rozszerzaniu prototypu, aż spełnia on wszystkie wymagania... \n",
"\n",
"...Wtedy prototyp staje się produktem.\n",
"\n",
"Prototyp ewolucyjny powinien być budowany:\n",
" * w środowisku zbliżonym do produkcyjnego, \n",
" * z dużą dbałością o jakość."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Prototypowanie - podsumowanie\n",
"\n",
"* Prototypy tworzy się w celu zminimalizowania ryzyka niepowodzenia produktu. \n",
"* W prototypach poziomych chodzi o zobrazowanie wszystkich funkcji. \n",
"* W prototypach pionowych chodzi o szczegóły techniczne.\n",
"* Prototypowanie z porzuceniem oywa się z reguły wszerz (prototypy poziome); \n",
" * jest bardziej kosztowne, ale minimalizuje ryzyko.\n",
"* Prototypowanie ewolucyjne odbywa się z reguły w głąb (prototypy pionowe); \n",
" * jest mniej kosztowne, ale bardziej ryzykowne."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-success\">\n",
" \n",
"<h2>Ciągła integracja </h2> \n",
" \n",
"Ciągła integracja (CI) to praktyka rozwoju oprogramowania, w której:\n",
"<ul>\n",
" <li> zmiany w kodzie są regularnie przesyłane do centralnego repozytorium, </li>\n",
" <li> po każdym dołączeniu nowego kodu wykonywane są (automatycznie): kompilacja kodu i testy. </li>\n",
"</ul>\n",
"</div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h2>Główne przesłanki CI </h2> \n",
" \n",
"Ciągła integracja (CI) to praktyka rozwoju oprogramowania, w której:\n",
"<ul>\n",
" <li> szybsze lokalizowanie błędów w kodzie, </li>\n",
" <li> ciągły wzrost jakości oporgramowania, </li>\n",
" <li> szybkie wydawanie nowych wersji. </li>\n",
"</ul>\n",
"</div>\n",
"\n",
" \n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"![Schemat CI/CD](obrazy/cicd.drawio.png \"Schemat CI/CD\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Przebieg pracy w Ciągłej Integracji\n",
"1. **Take Integrated Code**\n",
" * Pobieram kod z repozytorium.\n",
" * Instaluję kopię na swojej stacji roboczej. \n",
" \n",
"2. **Do Your Part**\n",
" * Opracowuję nowy kod.\n",
" * Opracowuję nowe testy jednostkowe.\n",
" \n",
"3. **Build on your machine**\n",
"\n",
" * **Repeat** \n",
" * Kompiluję swój kod i buduję wersję wykonywalną,\n",
" * Przeprowadzam testy jednostkowe,\n",
" * **Until**\n",
" * Kod się skompilował poprawnie oraz\n",
" * Testy zakończyły się powodzeniem.\n",
" \n",
"4. **Integrate with Repository**\n",
"\n",
" * Przesyłam kod do repozytorium centralnego, skąd przesyłany jest do kompilacji i testów.\n",
" * Przypadek 1. W międzyczasie ktoś dodał swój kod do repozytorium. Kompilacja lub testy się nie powodzą.\n",
" * **Go back to: Take Integrated Code**\n",
" * Przypadek 2. Tetsy się powodzą\n",
" * **Continue**\n",
" \n",
"5. **End Session**\n",
" * Gdy powiodły się wszystkie testy, mogę zakończyć sesję."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Dobre praktyki Ciągłej Integracji\n",
"(wg https://www.martinfowler.com/articles/continuousIntegration.html)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Maintain a Single Source Repository\n",
" * Załóż mainline (linię główną): \n",
" * Deweloperzy powinni większość pracy składać na mainline.\n",
" * Nie nadużywaj odgalęzień (branchów). Jeśli już, to tylko w celu:\n",
" * naprawy błędów,\n",
" * tymczasowych eksperymentów,\n",
" * oznaczania wersji publikowalnych.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Automate the Build\n",
" * Wersja wykonywalna powinna być tworzona jednym poleceniem.\n",
" * Dotyczy to zarówno repozytorium centralnego, jak i maszyn lokalnych."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Test Yourself\n",
" * Pisz testy jednostkowe.\n",
" * Uruchamiaj testy po każdej kompilacji."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Everyone Commits Everyday\n",
" * Każdy powinien \"codziennie\" wypychać swój kod do linii głównej.\n",
" * Umożliwia to wczesne wykrywanie konfliktów, gdyż...\n",
" * Im wcześniej wykryje się konflikt, tym łatwiej go naprawić.\n",
" * Postulat wymaga rozbicia projektu na małe kawałki."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Every Commit Should Build the Mainline\n",
" * Nie odchodzisz od pracy z repozytorium, aż Twój kod nie przeszedł pełnych testów.\n",
" * Korzystaj z systemów ciągłej integracji (Cruise Control, Jenkins)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Fix the Broken Builds Immediately\n",
"Co zrobić, jeśli jednak kod na \"mainline\" się nie buduje? \n",
"Znalezienie i poprawienie blędu jest priorytetem, ale:\n",
" * Nie debugguj kodu na centralnym repozytorium. \n",
" * Przywróć wersję wykonywalną na \"mainline\".\n",
" * Debugguj kod na maszynie lokalnej."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Make it Easy to Run the Latest Executable\n",
"* Każdy członek zespołu (nie tylko deweloper) powinien mieć możliwość łatwego uruchomienia ostatniej wersji stabilnej.\n",
"* Jest to niezbędne do:\n",
" * testowania integracyjnego (tester),\n",
" * rozmów z klientem (zarząd lub sprzedawca),\n",
" * prowadzenia projektu (kierownik zespołu).\n",
"* W specjalnej lokalizacji przetrzymuj wersje stabilne - \"do pokazania\"."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Keep the Build Fast\n",
"\n",
" * Maximum 10 minut na build + testy.\n",
" * A jeśli testy trwają dłużej?\n",
" * Testy dwuetapowe:\n",
" * kompilacja + testy jednostkowe przy każdym commicie,\n",
" * testy integracyjne co pewien czas (np. po commicie wszystkich deweloperów)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Clone the Environment\n",
" * Przygotuj klon środowiska produkcyjnego:\n",
" * ta sama wersja systemu operacyjnego\n",
" * ta sama baza danych\n",
" * te same biblioteki (nawet jak ich nie potrzebujesz) \n",
" * Wszystkie testy przeprowadzaj na przygotowanym środowisku."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Everyone Can See What's Happening\n",
"System powinien informować użytkowników o swoim statusie."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Automate Deployment\n",
" * Zautomatyzowanie wdrożenia polega na napisaniu skryptów, które instalują system w docelowym środowisku.\n",
" * Pozwala to na szybką reakcję, gdy \"coś się dzieje\". "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Narzędzia Ciągłej Integracji\n",
"\n",
"https://www.katalon.com/resources-center/blog/ci-cd-tools/\n",
"\n",
"1. Jenkins\n",
"2. Circle CI\n",
"3. Team City\n",
"4. Bamboo\n",
"5. GitLab"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Korzyści z Ciągłej Integracji\n",
" * Minimalizacja ryzyka\n",
" * Łatwiejsze szacowanie terminu zakończenia prac\n",
" * Szybsza lokalizacja i naprawa błędów\n",
" * Świadomość stanu prac u całego zespołu\n",
" * Możliwość kontynuowania prac w przypadku odejścia dewelopera\n",
" * Możliwość pracy w środowisku rozproszonym\n",
" * Możliwość usunięcia bariery między wykonawcą i klientem"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Przykład - Jenkins\n",
"\n",
"https://git.wmi.amu.edu.pl/filipg/paper-cutter/src/branch/master/Jenkinsfile\n",
"\n"
]
}
],
"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.7.6"
},
"subtitle": "06. Prototypowanie i ciągła integracja[wykład]",
"title": "Przygotowanie do projektu badawczo-rozwojowego",
"year": "2021"
},
"nbformat": 4,
"nbformat_minor": 4
}

File diff suppressed because it is too large Load Diff