From 39f2dddfd1efcb535a1e82df00935caf04aaf0c0 Mon Sep 17 00:00:00 2001 From: jassem Date: Mon, 14 Oct 2024 20:12:09 +0200 Subject: [PATCH] aktualizacja 2024 --- .../01_praca_zespolowa_lab.ipynb | 2 +- ...02_rozwój_systemów_informatycznych.ipynb | 464 ------------------ ...05_innowacyjny_projekt_informatyczny.ipynb | 211 -------- 3 files changed, 1 insertion(+), 676 deletions(-) delete mode 100644 materiały na wykład/02_rozwój_systemów_informatycznych.ipynb delete mode 100644 materiały na wykład/05_innowacyjny_projekt_informatyczny.ipynb diff --git a/materiały na laboratorium/01_praca_zespolowa_lab.ipynb b/materiały na laboratorium/01_praca_zespolowa_lab.ipynb index 1667ac4..f83b154 100644 --- a/materiały na laboratorium/01_praca_zespolowa_lab.ipynb +++ b/materiały na laboratorium/01_praca_zespolowa_lab.ipynb @@ -72,7 +72,7 @@ "\n", "Metoda: Regresja liniowa.\n", "\n", - "Rezultat: Zgłoszenie w systemie AmuEval, plik w języku programowania Python.\n", + "Rezultat: Zgłoszenie (Submission) w systemie AmuEval, plik w języku programowania Python.\n", "\n", "Ocena maksymalna: 10 punktów" ] diff --git a/materiały na wykład/02_rozwój_systemów_informatycznych.ipynb b/materiały na wykład/02_rozwój_systemów_informatycznych.ipynb deleted file mode 100644 index 5d1fb03..0000000 --- a/materiały na wykład/02_rozwój_systemów_informatycznych.ipynb +++ /dev/null @@ -1,464 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "

Systemy informatyczne analizy danych

\n", - "

2. Rozwój systemów informatycznych[wykład]

\n", - "

Filip Graliński, Krzysztof Jassem (2024)

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

Prototyp

\n", - "Prototyp to wynik częściowej implementacji, posiadający wybrane cechy produktu końcowego.\n", - "\n", - "
" - ] - }, - { - "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": [ - "
\n", - " \n", - "

Prototyp papierowy

\n", - " \n", - "Prototyp papierowy 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", - "Prototypowanie papierowe - etapy :\n", - "\n", - "\n", - " \n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - " \n", - "

Makieta statyczna

\n", - " \n", - " \n", - "Makieta statyczna to cyfrowy projekt aplikacji, który zawiera pewne elementy docelowej konstrukcji, ale nie jest funkcjonalny. \n", - "\n", - " \n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - " \n", - "

Makieta dynamiczna

\n", - " \n", - " \n", - "Makieta dynamiczna to cyfrowy projekt aplikacji, który zawiera pewne elementy docelowej konstrukcji i wskazuje interakcje z użytkownikiem. \n", - "\n", - " \n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - " \n", - "

Graficzny interfejs użytkownika (GUI)

\n", - "\n", - " Graficzny interfejs użytkownika to sposób komunikacji użytkownika z komputerem za pomocą elementów graficznych.\n", - " \n", - "Prototypem poziomym nazwiemy GUI, który: \n", - "\n", - " \n", - "
" - ] - }, - { - "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": [ - "
\n", - " \n", - "

Ciągła integracja

\n", - " \n", - "Ciągła integracja (CI) to praktyka rozwoju oprogramowania, w której:\n", - "\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - " \n", - "

Główne przesłanki CI

\n", - " \n", - "Ciągła integracja (CI) to praktyka rozwoju oprogramowania, w której:\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." - ] - }, - { - "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 (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.12" - }, - "subtitle": "02. Rozwój systemu informatycznego[wykład]", - "title": "Przygotowanie do projektu badawczo-rozwojowego", - "year": "2024" - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/materiały na wykład/05_innowacyjny_projekt_informatyczny.ipynb b/materiały na wykład/05_innowacyjny_projekt_informatyczny.ipynb deleted file mode 100644 index 1e26b2b..0000000 --- a/materiały na wykład/05_innowacyjny_projekt_informatyczny.ipynb +++ /dev/null @@ -1,211 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "

Systemy Informatyczne

\n", - "

5. Innowacyjny projekt informatyczny[wykład]

\n", - "

Krzysztof Jassem (2023)

\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Innowacyjność \n", - "Innowacyjność to działalność związana z przygotowaniem i uruchomieniem wytwarzania nowych lub udoskonalonych materiałów, wyrobów, urządzeń, usług, procesów lub metod, przeznaczonych do wykorzystania w praktyce.\n", - "## Przykład projektu innowacyjnego: Medico\n", - "\n", - "System dla lekarzy służący do wyszukiwania informacji w zasobach WN PWN lub zweryfikowanych zasobach internetowych" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "UVP (Unique Value Proposition) is a statement that tells your potential customers:\n", - "how they will benefit from your offer,\n", - "how your products or services will address their needs and solve their problems, \n", - "and what makes your offer different from the competition." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\"UVP\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "Unique Value Proposition dla systemu Medico:\n", - " \n", - "Medico to system informatyczny, w którym lekarz znajdzie odpowiedź na każde pytanie z dziedziny medycyny. System korzysta z wiedzy aktualizowanej na bieżąco, zawsze informuje o źródle odpowiedzi i zapewnia stuprocentową wiarygodność informacji." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# \"Święta Trójca\"\n", - "\n", - "Następujące trzy atrybuty wyróżniają system innowacyjny:\n", - "## 1. Wartość dodana\n", - "Komponenty wartości dla użytkownika:\n", - "\n", - "\"value\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - " \n", - "## 2. Rozpoznanie i spełnienie potrzeb użytkownika\n", - "Potrzeby na skalach czasu i świadomości użytkownika:\n", - "\n", - "\"needs\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Rozwiązanie (ang. design)\n", - "Klienci oczekują rozwiązania:\n", - " - użytecznego (wykona swoje zadanie)\n", - " - łatwego w obsłudze\n", - " - pożądanego (wywołującego pozytywne emocje)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# \"Golden Rules\" na odniesienie sukcesu\n", - "Aby produkt high-tech miał szanse odnieść sukces na rynku, powinien spełniać przynajmniej kilka z wymienionych poniżej postulatów:\n", - "\n", - "## 1. \"Zapewnij nowatorską / wyjątkową (\"unique\") funkcję lub cechę\"\n", - "* Pomysł musi być nowatorski - a nie skopiowany.\n", - "* Taki produkt wymaga R&D...\n", - " * A to jest kosztowne i...\n", - " * Trudne w konstrukcji.\n", - "* Często pomysły chronione są przez patenty.\n", - "\n", - "\"Nowatorski\" może oznaczać \"nowy model sprzedaży\"\n", - "\n", - "## 2. \"Popraw wydajność użytkownika\"\n", - "Czego oczekujemy od systemu informatycznego:\n", - "* Wykonuj wszystko szybciej i taniej:\n", - " * Skróć czas nauki\n", - " * Automatycznie poprawiaj błędy\n", - " * Automatyzuj niektóre kroki\n", - "* Dbaj o wygodę użytkowania\n", - "* Unikaj:\n", - " * Reklam\n", - " * Przestojów na płacenie (np. bramek)\n", - " * Ogólnie: czynności, ktore pochłaniają czas użytkownika\n", - "\n", - "## 3. \"Chroń inwestycje użytkownika\"\n", - "Zasada ta mówi o tym, aby szanować pieniądze wydane przez użytkownika przed wprowadzeniem naszego rozwiązania. Dotyczy to:\n", - "* hardware'u\n", - "* software'u\n", - "* danych\n", - "\n", - "Czego oczekujemy od systemu informatycznego:\n", - "* Minimalizuj koszty zmian\n", - "* Wydłużaj czas życia produktów\n", - "* Twórz rozwiązania przenośne\n", - "\n", - "## 4. \"Minimalizuj koszty awarii lub utraty danych\"\n", - "Czego oczekujemy od systemu informatycznego:\n", - "* Unikaj przerw w działaniu\n", - "* Skracaj czas i zmniejszaj koszty przywrócenia:\n", - " * działania\n", - " * danych\n", - "\n", - "## 5. \"Poprawiaj wspólczynnik jakości do ceny\"\n", - "Czego oczekujemy od systemu informatycznego:\n", - "* Dostarczaj więcej za mniej\n", - " * Podwyższaj jakość\n", - " * Zmniejszaj cenę\n", - " * A najlepiej - obie czynności naraz\n", - " \n", - "* Jakość (wydajność) przedstawiaj w liczbach\n", - " * Gb, 100-punktowa miara jakości\n", - " * sekundy...\n", - "\n", - "## 6. \"Zapewnij elastyczność i skalowalność\"\n", - "Rozwiązanie jest **elastyczne**, jeśłi może być stosowane w różnych scenariuszach. \n", - "Rozwiązanie jest **skalowalne**, jeśli można je stsosować zarówno dla małych, jak i dużych wielkości danych.\n", - "\n", - "Czego oczekujemy od systemu informatycznego:\n", - "* Umożliwiaj dodawanie / usuwanie funkcji\n", - "* Zapewnij użycie w różnych środowiskach\n", - "* Zapewnij możliwość stosowania dla większych zbiorów danych\n", - "\n", - "## 7. \"Zadbaj o atrakcyjny wygląd\"\n", - "Rozwiązanie powinno być ładne i ...modne.\n", - "\n", - "Czego oczekujemy od systemu informatycznego:\n", - "* Weź pod uwagę:\n", - " * kolorystykę\n", - " * kształt\n", - " * wykończenie\n", - " * prostotę\n", - " \n", - "## 8. \"Dostarczaj rozrywkę\"\n", - "Czego oczekujemy od systemu informatycznego:\n", - "* \"Dzieci\" lubią się bawić - dostarczaj zabawę\n", - "* Ludzie lubią wyzwania - dostarczaj wyzwania\n", - "* Ludzie lubią rywalizację...\n", - "* Ludzie mają swoje hobby i upodobania...\n", - "* Wszyscy wolą wakacje od pracy... \n", - " \n", - "## 9. \"Stwórz nową modę\"\n", - "Stworzenie nowej mody jest niezwykle trudne i kosztowne. Ale kilku producentom się udało.\n", - "Wskazówki:\n", - "* Produkt musi być \"osobisty\".\n", - "* Musi mieć wygląd określany jako \"cool\".\n", - "* Trzeba sprzedawać go drogo...\n", - "* ... w niewielkich ilościach...\n", - "* ... ale za to robić wokół niego sporo szumu." - ] - } - ], - "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": "02. Projekt badawczo-rozwojowy[wykład]", - "title": "Przygotowanie do projektu badawczo-rozwojowego", - "year": "2021" - }, - "nbformat": 4, - "nbformat_minor": 4 -}