diff --git a/materiały na PPB (wykład)/.ipynb_checkpoints/11_aspekty_użyteczności-checkpoint.ipynb b/materiały na PPB (wykład)/.ipynb_checkpoints/11_aspekty_użyteczności-checkpoint.ipynb index 496c5c5..762ec70 100644 --- a/materiały na PPB (wykład)/.ipynb_checkpoints/11_aspekty_użyteczności-checkpoint.ipynb +++ b/materiały na PPB (wykład)/.ipynb_checkpoints/11_aspekty_użyteczności-checkpoint.ipynb @@ -18,13 +18,99 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Aspekty użyteczności\n", - "Użyteczność aplikacji powinna być analizowana pod kątem sześciu aspektów:\n", + "# Aspekty użyteczności w pytaniach... często bez odpowiedzi\n", + "Na podstawie książki \"Postaw na użyteczność\" Matta Laceya (Wydawnictwo Naukowe PWN, 2019).\n", + "\n", + "Podczas konstruowania systemu informatycznego warto zadać sobie pytania, na które odpowiedź wcale nie musi być oczywista - zależeć może ona od typu aplikacji i środowiska, w którym aplikacja będzie używana." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Definicja użyteczności (...jeszcze jedna)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Użyteczność

\n", + "\n", + "Użyteczność to zestaw cech aplikacji, które sprawiają, że korzysta się z niej łatwo.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Przepis na sukces\n", + "\n", + "SUKCES = WARTOŚĆ + ODCZUCIA UŻYTKOWNIKA + SZCZĘŚCIE" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Wartość

\n", + "\n", + "Wartość aplikacji to suma korzyści dla użytkownika: \n", + "
    \n", + "
  • zadanie jest wykonalne\n", + "
  • zadanie jest łatwiejsze\n", + "
  • zadanie można wykonać szybciej\n", + "
  • aplikacja dostarcza dochód lub oszczędza środki\n", + "
  • dostarczenie rozrywki\n", + "
  • dostarczenie informacji\n", + "
  • edukacja \n", + "
\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Odczucia użytkownika (User Experience)

\n", + "\n", + "Odczucia użytkownika to uczucia i emocje użytkownika doznawane podczas korzystania z aplikacji.\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Szczęście

\n", + "\n", + "\"Szczęście przychodzi do tego, kto jest przygotowany i napotyka okazje.\" (Seneka)\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Sześć magicznych składników użyteczności...\n", + "...czyli sześć aspektów, pod którymi powinniśmy rozpatrywać użyteczność:\n", "* kontekst, \n", "* wprowadzanie danych, \n", "* wyprowadzanie danych, \n", "* responsywność, \n", - "* łączność z siecią, \n", + "* dostęp do sieci, \n", "* zasoby." ] }, @@ -32,42 +118,546 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Kontekst" + "# 1. Kontekst" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Wprowadzanie danych" + "
\n", + " \n", + "

Kontekst

\n", + "\n", + "Kontekst to środowisko i okoliczności używania aplikacji. Odpowiada na pytania:\n", + "
    \n", + "
  • Kto?\n", + "
  • Gdzie?\n", + "
  • Kiedy?\n", + "
  • Jak? \n", + "
\n", + " \n", + "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Wyprowadzanie danych" + "## 1.1. Kto?\n", + "\n", + "ZASADY:\n", + "\n", + "1. Musisz precyzyjnie poznać użytkownika.\n", + "2. To nie Ty jesteś użytkownikiem.\n", + "3. Każdy jest inny.\n", + "4. Użytkownik ma prawo robić coś innego\n", + " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Responsywność" + "### 1.1.1. Musisz precyzyjnie poznać użytkownika\n", + "\n", + "* Dla kogo aplikacja będzie stanowić wartość?\n", + " * Wskazówka: (patrz definicja wartości)\n", + "* Kto dokładnie będzie użytkownikiem aplikacji?\n", + " * Wskazówka: wykonaj diagram Venna\n", + "\n", + "\"Diagram\n", + "(Przykładowy diagram Venna, Źródło: Matt Lacey, \"Postaw na użyteczność\")\n", + "\n", + "* Jakie są grupy użytkowników?\n", + " * Wskazówka: metoda persony" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Łączność z siecią" + "### 1.1.2. To nie Ty jesteś użytkownikiem\n", + " * Czym użytkownik różni się od siebie?\n", + " * Czym mogą się rożnić oczekiwania innych uzytkowników od Twoich?\n", + " * W stosunku do jakich niedociągnięć użytkownicy mogą być od Ciebie mniej pobłażliwi?\n", + " * Dlaczego TY nie jesteś przeciętnym użytkownikiem Twojej aplikacji?\n", + " * Jakie umiejętności Cię wyróżniają?\n", + " * Dlaczego Tobie będzie łatwiej używać aplikacji?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Zasoby" + "### 1.1.3. Każdy jest inny\n", + " * Czy użytkownicy aplikacji mogą się różnić w aspekcie dostępności?\n", + " Na dostępność składają się:\n", + " * umiejętności\n", + " * wiedza\n", + " * kultura\n", + " * lokalizacja\n", + " * płeć\n", + " * wiek\n", + " * niepełnosprawność\n", + " * choroby (daltonizm)\n", + " * Czy użytkownicy aplikacji mogą mieć od niej różne oczekiwania?\n", + " * Czy użytkownicy aplikacji mogą chcieć uzyskać dzięki niej różne cele?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1.4. Użytkownik ma prawo robić coś innego\n", + " * Jakie inne działania będą podejmować użytkownicy podczas pracy z naszą aplikacją?\n", + " * Jak się o tym dowiedzieć?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. 2. Gdzie?\n", + "ZASADA: \n", + "Czy aplikacja będzie stosowana w różnych krajach?\n", + " * Jesli nie, to pomiń dalsze pytania.\n", + " * Jeśli tak, to odpowiedz na dalsze pytania.\n", + "\n", + "PYTANIA:\n", + " * Czy zaplanowałeś wielojęzyczność aplikacji?\n", + " * Jakimi językami posługują się użytkownicy w innych krajach?\n", + " * Zaplanuj tłumaczenie aplikacji\n", + " * Czy użytkownicy innych krajów stosują te same formaty liczb / dat?\n", + " * Jeśli nie, to opracuj algorytmy konwersji" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.3. Kiedy?\n", + "### 1.3.1. Pora (dnia, tygodnia, miesiąca, roku)\n", + "Czy aplikacja może działać w różny sposób w zależności od:\n", + " * pory dnia\n", + " * dnia tygodnia\n", + " * dnia miesiąca\n", + " * pory roku" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.3.2. Czas użytkowania\n", + " * Jak długo trwa jedna sesja użytkowania?\n", + " * daj możliwość korzystania nawet w bardzo krótkim czasie\n", + " * Po jakim czasie użytkownik porzuci aplikację?\n", + " * zachęcaj do pozostania z aplikacją" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.4. Jak?\n", + "### 1.4.1. Okoliczności\n", + " * Czy użytkownik jest w ruchu?\n", + " * Czy użytkownik może wykonywać inne czynności?\n", + " * Jakie?\n", + " * Czy jest skupiony na naszej aplikacji?\n", + " * Czy nasza aplikacja współpracuje z innymi?\n", + " * W jakiej pozycji użytkownik korzysta z aplikacji?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.4.2. Urządzenia\n", + " * Zasada WORE (Write Once Run Everywhere)\n", + " * Plusy\n", + " * szybciej powstaje\n", + " * łatwiejsza w utrzymaniu\n", + " * możliwość dostosowania dla wielu urządzeń\n", + " * przydatna szczególnie w grach (niestandardowy UI)\n", + " * Minusy\n", + " * wymagana znajomość różnych platform\n", + " * wymagana dyscyplina kodu\n", + " * konieczność dostosowania elementów wizualnych do różnych platform\n", + " * konieczność testowania na wielu platformach\n", + " * Różne systemy operacyjne\n", + " * W jakich systamach operacyjnych ma działać aplikacja?\n", + " * Czy wziąłeś pod uwagę ograniczenia narzucane przez różne sklepy?\n", + " * Czy wygląd aplikacji jest zgodny z przyzwyczajeniami użytkowników danego systemu?\n", + "\n", + " * Wielkość urządzenia\n", + " * Czy wziąłeś pod uwagę, że wielkość ekranu ma wpływ na to, co jest wyświetlane?\n", + " * Czy pomyślałeś, jak trzymane jest urządzenie?\n", + " \n", + " * Przyciski sprzętowe\n", + " * Czy przewidziałeś ich wykorzystanie?\n", + " * Czujniki\n", + " * Czy przewidziałeś ich wykorzystanie?\n", + " * Wskazówka: Współczesne urządzenia mogę mieć kilkanaście czujników:\n", + " * ruchu\n", + " * pozycji\n", + " * położenia\n", + " * środowiskowe " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Wprowadzanie danych (Input)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Input

\n", + "\n", + "Information fed into a data processing system or computer (słownik: Miriam - Webster)\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.1. Interakcja użytkownik - system\n", + "### 2.1.1. Wejście dotykowe\n", + " * Czy wziąłeś pod uwagę zalecane minimalne wielkości obszarów dotykowych?\n", + " * iOS: 11 mm\n", + " * Android: 7-10 mm\n", + " * Windows: 7-9 mm\n", + "\n", + " * Czy gesty obsługiwane są standardowo?\n", + " * pojedyncze dotknięcie\n", + " * podwójne dotknięcie\n", + " * przesunięcie palcem po ekranie\n", + " * dotknięcie i przytrzymanie\n", + " * uszczypnięcie / rozciąganie\n", + " * obracanie\n", + " * inne (powstające)\n", + " \n", + " * Czy pomyślałeś o tym, że podczas dotykania ekranu jego część będzie zasłonięta?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1.2. Rysik\n", + " * Czy wziąłeś pod uwagę możliwość wprowadzania danych za pomocą rysika?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1.3. Mysz i klawiatura\n", + "\n", + " * Czy aplikacja będzie obługiwana myszą i / lub klawiaturą?\n", + " * Jeśli myszą, to weź pod uwagę spójność dotyku i uzycia myszy:\n", + " * pojedyncze dotknięcie - pojedyncze kliknięcie\n", + " * podwójne dotknięcie - podwójne kliknięcie\n", + " * prawy przycisk myszy - przytrzymanie\n", + " * przesuwanie myszą - przesuwanie palcem\n", + " * Jeśli klawiaturą, to weź pod uwagę standardową reakcję klawiszy:\n", + " * Tab\n", + " * Enter\n", + " * Ctrl\n", + " * Shift" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1.4. Wejście głosowe\n", + " * Czy wziąłeś pod uwagę możliwość wejścia głosowego?\n", + " * Jeśli tak, to weź pod uwagę ograniczenia techniczne systemów rozpoznawania mowy (np. architektura: klient - serwer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.2. Ułatwienia wprowadzania danych" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2.1. Minimalizacja wysiłku użytkownika\n", + " * Czy pomyślałeś o zminimalizowaniu wysiłku użytkownika przy wprowadzaniu danych?\n", + " * Wskazówki:\n", + " * proponowane wyboru zamiast ręcznego wprowadzania\n", + " * skróty (szybki dostęp)\n", + " * autosugestie (autouzupełnianie)\n", + " * łączenie wprowadzania danych (np. daty przyjazdu / wyjazdu)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2.2. Optymalizacja formularzy\n", + " * Czy w Twojej aplikacji dane są wprowadzane za pomocą formularzy? Jeśli tak, to odpowiedz na następujące pytania:\n", + " * Czy dobrze posortowałeś listy wyboru?\n", + " * Czy program reaguje już po części wpisanych danych?\n", + " * Czy nad polami są ich etykiety?\n", + " * Czy program podpowiada format danych?\n", + " * Czy zapewniłeś wartości domyślne?\n", + " * Czy pomyślałeś o walidacji danych?\n", + " * Czy błędy pokazywane są w odpowiednim miejscu?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2.3. Altenatywne metody wprowadzania danych\n", + " * Czy wziąłeś pod uwagę alternatywne metody wejścia?\n", + " * wirtualna klawiatura\n", + " * pismo ręczne\n", + " * optyczne rozpoznawanie znaków\n", + " * interaktywne mapy, pozwalające wskazać adres (lokalizację)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.3. Dane z innych źródeł" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Dane z innych źródeł

\n", + "\n", + "Są to dane niewprowadzone przez użytkownika aplikacji.\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3.1. Dane z serwisów sieciowych\n", + " * W jaki sposób nasza aplikacja może pozyskiwać informacje dane z serwisów sieciowych?\n", + " * w formie odpowiedzi na żądanie\n", + " * w formie powiadomień (notyfikacji)\n", + " * w formie SMS-ów\n", + " * Czy pomyślałeś o obsłudze komunikatów o błędach przesłanych z serwisów sieciowych?\n", + " * Czy pomyślałeś o przetworzeniu przesłanych komunikatów (np. skróceniu ich, wyekstrahowaniu tego, co najważniejsze)?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3.2. Dane z systemu operacyjnego\n", + " * Czy nasza aplikacja wykorzystuje dane PIM (Personal Information Manager)?\n", + " * wyszukiwanie danych teleadresowych\n", + " * wyszukiwanie kontaktów\n", + " * sprawdzanie poprawności wprowadzanych danych\n", + " * korzystanie z osobistego kalendarza\n", + " * Czy nasza aplikaca wykorzystuje dane z systemu plików?\n", + " * zdjęcia\n", + " * filmy\n", + " * teksty" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3.3. Dane z innych aplikacji\n", + " * Czy nasza aplikacja wykorzystuje dane z innych aplikacji? \n", + " * Jeśli tak, to w jaki sposób dane są współdzielone?\n", + " * wspólne dane przechowywane lokalnie\n", + " * natywne współdzielenie (wbudowany mechanizm współdzielenia danych)\n", + " * formaty plików (typy MIME: Multipurpose Internet Mail Extensions)\n", + " * metoda \"kopiuj i wklej\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3.4. Dane z czujników\n", + " * Czy nasza aplikacja wykorzystuje dane z czujników? \n", + " * Jeśli tak, to czy zadbałeś o to, aby\n", + " * zapytać użytkownika o uprawnienia\n", + " * wyjaśnić, w jaki sposób aplikacja będzie korzystać z czuujników\n", + " * wyjaśnić, do czego dane te są potrzebne\n", + " * wspomnieć o kwestiach polityki prywatności" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3.5. Inne typy wprowadzania danych\n", + " * Czy istnieją jeszcze inne metody, w jaki aplikacja może pozyskać dane?\n", + " * np. karta z chipem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3. Wyprowadzanie danych (wyjście)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Output

\n", + "\n", + "Information produced by a computer (słownik: Miriam - Webster)\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.1. Wyjście wizualne" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Zasady projektowania wizualnych komponentów wyprowadzania danych:

\n", + " \n", + "
    \n", + "
  1. \"Cele użytkownika na pierwszym miejscu.\"\n", + "
  2. Spełnianie oczekiwań użytkowników\n", + "
  3. Uwzględnianie rodzaju urządzenia\n", + "
  4. Przestrzeganie norm i konwencji\n", + "
\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.2. Wyjście niewizualne\n", + " * Czy wziąłeś pod uwagę możliwości wyprowadzania danych w inny sposób niż wizualnie?\n", + " * dźwięki i wibracje\n", + " * kanały komunikacji dla innych aplikacji\n", + " * powiadomienia \"push\"\n", + " * poczta elektroniczna\n", + " * SMS" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. Responsywność" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Responsywność

\n", + "\n", + "Cecha aplikacji, która powoduje, że użytkownicy uważają, że mogą uzyskać swój cel szybko - bez straty czasu.\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Responsywność aplikacji to nie to samo co responsive design.**\n", + "> Responsive design oznacza, że to co jest wyświetlane w danym momencie w aplikacji, dostosowuje się do zmieniającej się wielkości ekranu. \n", + "> Pojęcie responsywności jest dużo szersze: aplikacja powinna reagować nie tylko na wielkość ekranu, lecz na akcje użytkownika i działania aplikacji. Szybkość i sposób, w jaki aplikacja odpowiada, przekłada się na doświadczenia użytkownika." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 5. Dostęp do sieci\n", + " * Czy wziąłeś pod uwagę potencjalne problemy z dostępem do sieci:\n", + " * szybkość połączenia może się różnić\n", + " * koszt połączenia może być zmienny\n", + " * połączenie może być niedostępne\n", + " * połączenie może być utracone" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 6. Zasoby" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Resource

\n", + "\n", + "A source of supply, support, or aid, especially one that can be readily drawn upon when needed (www. dictionary.com)\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " > A gdy się zasoby skończą, to ich nie będzie.\n", + " \n", + "Ilość zasobów jest skończona, więc naszym obowiązkiem jest je oszczędzać:\n", + "\n", + " * Energia\n", + " * Pojemność dysku\n", + " * Pojemność pamięci\n", + " * Zasoby procesora\n", + " * Możliwości przesyłu danych" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Podsumowanie\n", + "Użyteczność często rozumiana jest jako synonim łatwości użytkowania aplikacji.\n", + "\n", + "Zapewnienie, aby aplikacja używana była **łatwo** nie jest zadaniem banalnym. Wymaga odpowiedzenia sobie na wiele pytań, na które odpowiedzi mogą być zupełnie różne w zależności od typu aplikacji." ] } ], diff --git a/materiały na PPB (wykład)/11_aspekty_użyteczności.ipynb b/materiały na PPB (wykład)/11_aspekty_użyteczności.ipynb index 496c5c5..762ec70 100644 --- a/materiały na PPB (wykład)/11_aspekty_użyteczności.ipynb +++ b/materiały na PPB (wykład)/11_aspekty_użyteczności.ipynb @@ -18,13 +18,99 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Aspekty użyteczności\n", - "Użyteczność aplikacji powinna być analizowana pod kątem sześciu aspektów:\n", + "# Aspekty użyteczności w pytaniach... często bez odpowiedzi\n", + "Na podstawie książki \"Postaw na użyteczność\" Matta Laceya (Wydawnictwo Naukowe PWN, 2019).\n", + "\n", + "Podczas konstruowania systemu informatycznego warto zadać sobie pytania, na które odpowiedź wcale nie musi być oczywista - zależeć może ona od typu aplikacji i środowiska, w którym aplikacja będzie używana." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Definicja użyteczności (...jeszcze jedna)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Użyteczność

\n", + "\n", + "Użyteczność to zestaw cech aplikacji, które sprawiają, że korzysta się z niej łatwo.\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Przepis na sukces\n", + "\n", + "SUKCES = WARTOŚĆ + ODCZUCIA UŻYTKOWNIKA + SZCZĘŚCIE" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Wartość

\n", + "\n", + "Wartość aplikacji to suma korzyści dla użytkownika: \n", + "
    \n", + "
  • zadanie jest wykonalne\n", + "
  • zadanie jest łatwiejsze\n", + "
  • zadanie można wykonać szybciej\n", + "
  • aplikacja dostarcza dochód lub oszczędza środki\n", + "
  • dostarczenie rozrywki\n", + "
  • dostarczenie informacji\n", + "
  • edukacja \n", + "
\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Odczucia użytkownika (User Experience)

\n", + "\n", + "Odczucia użytkownika to uczucia i emocje użytkownika doznawane podczas korzystania z aplikacji.\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Szczęście

\n", + "\n", + "\"Szczęście przychodzi do tego, kto jest przygotowany i napotyka okazje.\" (Seneka)\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Sześć magicznych składników użyteczności...\n", + "...czyli sześć aspektów, pod którymi powinniśmy rozpatrywać użyteczność:\n", "* kontekst, \n", "* wprowadzanie danych, \n", "* wyprowadzanie danych, \n", "* responsywność, \n", - "* łączność z siecią, \n", + "* dostęp do sieci, \n", "* zasoby." ] }, @@ -32,42 +118,546 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Kontekst" + "# 1. Kontekst" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Wprowadzanie danych" + "
\n", + " \n", + "

Kontekst

\n", + "\n", + "Kontekst to środowisko i okoliczności używania aplikacji. Odpowiada na pytania:\n", + "
    \n", + "
  • Kto?\n", + "
  • Gdzie?\n", + "
  • Kiedy?\n", + "
  • Jak? \n", + "
\n", + " \n", + "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Wyprowadzanie danych" + "## 1.1. Kto?\n", + "\n", + "ZASADY:\n", + "\n", + "1. Musisz precyzyjnie poznać użytkownika.\n", + "2. To nie Ty jesteś użytkownikiem.\n", + "3. Każdy jest inny.\n", + "4. Użytkownik ma prawo robić coś innego\n", + " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Responsywność" + "### 1.1.1. Musisz precyzyjnie poznać użytkownika\n", + "\n", + "* Dla kogo aplikacja będzie stanowić wartość?\n", + " * Wskazówka: (patrz definicja wartości)\n", + "* Kto dokładnie będzie użytkownikiem aplikacji?\n", + " * Wskazówka: wykonaj diagram Venna\n", + "\n", + "\"Diagram\n", + "(Przykładowy diagram Venna, Źródło: Matt Lacey, \"Postaw na użyteczność\")\n", + "\n", + "* Jakie są grupy użytkowników?\n", + " * Wskazówka: metoda persony" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Łączność z siecią" + "### 1.1.2. To nie Ty jesteś użytkownikiem\n", + " * Czym użytkownik różni się od siebie?\n", + " * Czym mogą się rożnić oczekiwania innych uzytkowników od Twoich?\n", + " * W stosunku do jakich niedociągnięć użytkownicy mogą być od Ciebie mniej pobłażliwi?\n", + " * Dlaczego TY nie jesteś przeciętnym użytkownikiem Twojej aplikacji?\n", + " * Jakie umiejętności Cię wyróżniają?\n", + " * Dlaczego Tobie będzie łatwiej używać aplikacji?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Zasoby" + "### 1.1.3. Każdy jest inny\n", + " * Czy użytkownicy aplikacji mogą się różnić w aspekcie dostępności?\n", + " Na dostępność składają się:\n", + " * umiejętności\n", + " * wiedza\n", + " * kultura\n", + " * lokalizacja\n", + " * płeć\n", + " * wiek\n", + " * niepełnosprawność\n", + " * choroby (daltonizm)\n", + " * Czy użytkownicy aplikacji mogą mieć od niej różne oczekiwania?\n", + " * Czy użytkownicy aplikacji mogą chcieć uzyskać dzięki niej różne cele?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.1.4. Użytkownik ma prawo robić coś innego\n", + " * Jakie inne działania będą podejmować użytkownicy podczas pracy z naszą aplikacją?\n", + " * Jak się o tym dowiedzieć?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. 2. Gdzie?\n", + "ZASADA: \n", + "Czy aplikacja będzie stosowana w różnych krajach?\n", + " * Jesli nie, to pomiń dalsze pytania.\n", + " * Jeśli tak, to odpowiedz na dalsze pytania.\n", + "\n", + "PYTANIA:\n", + " * Czy zaplanowałeś wielojęzyczność aplikacji?\n", + " * Jakimi językami posługują się użytkownicy w innych krajach?\n", + " * Zaplanuj tłumaczenie aplikacji\n", + " * Czy użytkownicy innych krajów stosują te same formaty liczb / dat?\n", + " * Jeśli nie, to opracuj algorytmy konwersji" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.3. Kiedy?\n", + "### 1.3.1. Pora (dnia, tygodnia, miesiąca, roku)\n", + "Czy aplikacja może działać w różny sposób w zależności od:\n", + " * pory dnia\n", + " * dnia tygodnia\n", + " * dnia miesiąca\n", + " * pory roku" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.3.2. Czas użytkowania\n", + " * Jak długo trwa jedna sesja użytkowania?\n", + " * daj możliwość korzystania nawet w bardzo krótkim czasie\n", + " * Po jakim czasie użytkownik porzuci aplikację?\n", + " * zachęcaj do pozostania z aplikacją" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1.4. Jak?\n", + "### 1.4.1. Okoliczności\n", + " * Czy użytkownik jest w ruchu?\n", + " * Czy użytkownik może wykonywać inne czynności?\n", + " * Jakie?\n", + " * Czy jest skupiony na naszej aplikacji?\n", + " * Czy nasza aplikacja współpracuje z innymi?\n", + " * W jakiej pozycji użytkownik korzysta z aplikacji?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.4.2. Urządzenia\n", + " * Zasada WORE (Write Once Run Everywhere)\n", + " * Plusy\n", + " * szybciej powstaje\n", + " * łatwiejsza w utrzymaniu\n", + " * możliwość dostosowania dla wielu urządzeń\n", + " * przydatna szczególnie w grach (niestandardowy UI)\n", + " * Minusy\n", + " * wymagana znajomość różnych platform\n", + " * wymagana dyscyplina kodu\n", + " * konieczność dostosowania elementów wizualnych do różnych platform\n", + " * konieczność testowania na wielu platformach\n", + " * Różne systemy operacyjne\n", + " * W jakich systamach operacyjnych ma działać aplikacja?\n", + " * Czy wziąłeś pod uwagę ograniczenia narzucane przez różne sklepy?\n", + " * Czy wygląd aplikacji jest zgodny z przyzwyczajeniami użytkowników danego systemu?\n", + "\n", + " * Wielkość urządzenia\n", + " * Czy wziąłeś pod uwagę, że wielkość ekranu ma wpływ na to, co jest wyświetlane?\n", + " * Czy pomyślałeś, jak trzymane jest urządzenie?\n", + " \n", + " * Przyciski sprzętowe\n", + " * Czy przewidziałeś ich wykorzystanie?\n", + " * Czujniki\n", + " * Czy przewidziałeś ich wykorzystanie?\n", + " * Wskazówka: Współczesne urządzenia mogę mieć kilkanaście czujników:\n", + " * ruchu\n", + " * pozycji\n", + " * położenia\n", + " * środowiskowe " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Wprowadzanie danych (Input)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Input

\n", + "\n", + "Information fed into a data processing system or computer (słownik: Miriam - Webster)\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.1. Interakcja użytkownik - system\n", + "### 2.1.1. Wejście dotykowe\n", + " * Czy wziąłeś pod uwagę zalecane minimalne wielkości obszarów dotykowych?\n", + " * iOS: 11 mm\n", + " * Android: 7-10 mm\n", + " * Windows: 7-9 mm\n", + "\n", + " * Czy gesty obsługiwane są standardowo?\n", + " * pojedyncze dotknięcie\n", + " * podwójne dotknięcie\n", + " * przesunięcie palcem po ekranie\n", + " * dotknięcie i przytrzymanie\n", + " * uszczypnięcie / rozciąganie\n", + " * obracanie\n", + " * inne (powstające)\n", + " \n", + " * Czy pomyślałeś o tym, że podczas dotykania ekranu jego część będzie zasłonięta?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1.2. Rysik\n", + " * Czy wziąłeś pod uwagę możliwość wprowadzania danych za pomocą rysika?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1.3. Mysz i klawiatura\n", + "\n", + " * Czy aplikacja będzie obługiwana myszą i / lub klawiaturą?\n", + " * Jeśli myszą, to weź pod uwagę spójność dotyku i uzycia myszy:\n", + " * pojedyncze dotknięcie - pojedyncze kliknięcie\n", + " * podwójne dotknięcie - podwójne kliknięcie\n", + " * prawy przycisk myszy - przytrzymanie\n", + " * przesuwanie myszą - przesuwanie palcem\n", + " * Jeśli klawiaturą, to weź pod uwagę standardową reakcję klawiszy:\n", + " * Tab\n", + " * Enter\n", + " * Ctrl\n", + " * Shift" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1.4. Wejście głosowe\n", + " * Czy wziąłeś pod uwagę możliwość wejścia głosowego?\n", + " * Jeśli tak, to weź pod uwagę ograniczenia techniczne systemów rozpoznawania mowy (np. architektura: klient - serwer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.2. Ułatwienia wprowadzania danych" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2.1. Minimalizacja wysiłku użytkownika\n", + " * Czy pomyślałeś o zminimalizowaniu wysiłku użytkownika przy wprowadzaniu danych?\n", + " * Wskazówki:\n", + " * proponowane wyboru zamiast ręcznego wprowadzania\n", + " * skróty (szybki dostęp)\n", + " * autosugestie (autouzupełnianie)\n", + " * łączenie wprowadzania danych (np. daty przyjazdu / wyjazdu)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2.2. Optymalizacja formularzy\n", + " * Czy w Twojej aplikacji dane są wprowadzane za pomocą formularzy? Jeśli tak, to odpowiedz na następujące pytania:\n", + " * Czy dobrze posortowałeś listy wyboru?\n", + " * Czy program reaguje już po części wpisanych danych?\n", + " * Czy nad polami są ich etykiety?\n", + " * Czy program podpowiada format danych?\n", + " * Czy zapewniłeś wartości domyślne?\n", + " * Czy pomyślałeś o walidacji danych?\n", + " * Czy błędy pokazywane są w odpowiednim miejscu?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2.3. Altenatywne metody wprowadzania danych\n", + " * Czy wziąłeś pod uwagę alternatywne metody wejścia?\n", + " * wirtualna klawiatura\n", + " * pismo ręczne\n", + " * optyczne rozpoznawanie znaków\n", + " * interaktywne mapy, pozwalające wskazać adres (lokalizację)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.3. Dane z innych źródeł" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Dane z innych źródeł

\n", + "\n", + "Są to dane niewprowadzone przez użytkownika aplikacji.\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3.1. Dane z serwisów sieciowych\n", + " * W jaki sposób nasza aplikacja może pozyskiwać informacje dane z serwisów sieciowych?\n", + " * w formie odpowiedzi na żądanie\n", + " * w formie powiadomień (notyfikacji)\n", + " * w formie SMS-ów\n", + " * Czy pomyślałeś o obsłudze komunikatów o błędach przesłanych z serwisów sieciowych?\n", + " * Czy pomyślałeś o przetworzeniu przesłanych komunikatów (np. skróceniu ich, wyekstrahowaniu tego, co najważniejsze)?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3.2. Dane z systemu operacyjnego\n", + " * Czy nasza aplikacja wykorzystuje dane PIM (Personal Information Manager)?\n", + " * wyszukiwanie danych teleadresowych\n", + " * wyszukiwanie kontaktów\n", + " * sprawdzanie poprawności wprowadzanych danych\n", + " * korzystanie z osobistego kalendarza\n", + " * Czy nasza aplikaca wykorzystuje dane z systemu plików?\n", + " * zdjęcia\n", + " * filmy\n", + " * teksty" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3.3. Dane z innych aplikacji\n", + " * Czy nasza aplikacja wykorzystuje dane z innych aplikacji? \n", + " * Jeśli tak, to w jaki sposób dane są współdzielone?\n", + " * wspólne dane przechowywane lokalnie\n", + " * natywne współdzielenie (wbudowany mechanizm współdzielenia danych)\n", + " * formaty plików (typy MIME: Multipurpose Internet Mail Extensions)\n", + " * metoda \"kopiuj i wklej\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3.4. Dane z czujników\n", + " * Czy nasza aplikacja wykorzystuje dane z czujników? \n", + " * Jeśli tak, to czy zadbałeś o to, aby\n", + " * zapytać użytkownika o uprawnienia\n", + " * wyjaśnić, w jaki sposób aplikacja będzie korzystać z czuujników\n", + " * wyjaśnić, do czego dane te są potrzebne\n", + " * wspomnieć o kwestiach polityki prywatności" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.3.5. Inne typy wprowadzania danych\n", + " * Czy istnieją jeszcze inne metody, w jaki aplikacja może pozyskać dane?\n", + " * np. karta z chipem" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3. Wyprowadzanie danych (wyjście)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Output

\n", + "\n", + "Information produced by a computer (słownik: Miriam - Webster)\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.1. Wyjście wizualne" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Zasady projektowania wizualnych komponentów wyprowadzania danych:

\n", + " \n", + "
    \n", + "
  1. \"Cele użytkownika na pierwszym miejscu.\"\n", + "
  2. Spełnianie oczekiwań użytkowników\n", + "
  3. Uwzględnianie rodzaju urządzenia\n", + "
  4. Przestrzeganie norm i konwencji\n", + "
\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.2. Wyjście niewizualne\n", + " * Czy wziąłeś pod uwagę możliwości wyprowadzania danych w inny sposób niż wizualnie?\n", + " * dźwięki i wibracje\n", + " * kanały komunikacji dla innych aplikacji\n", + " * powiadomienia \"push\"\n", + " * poczta elektroniczna\n", + " * SMS" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. Responsywność" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Responsywność

\n", + "\n", + "Cecha aplikacji, która powoduje, że użytkownicy uważają, że mogą uzyskać swój cel szybko - bez straty czasu.\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Responsywność aplikacji to nie to samo co responsive design.**\n", + "> Responsive design oznacza, że to co jest wyświetlane w danym momencie w aplikacji, dostosowuje się do zmieniającej się wielkości ekranu. \n", + "> Pojęcie responsywności jest dużo szersze: aplikacja powinna reagować nie tylko na wielkość ekranu, lecz na akcje użytkownika i działania aplikacji. Szybkość i sposób, w jaki aplikacja odpowiada, przekłada się na doświadczenia użytkownika." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 5. Dostęp do sieci\n", + " * Czy wziąłeś pod uwagę potencjalne problemy z dostępem do sieci:\n", + " * szybkość połączenia może się różnić\n", + " * koszt połączenia może być zmienny\n", + " * połączenie może być niedostępne\n", + " * połączenie może być utracone" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 6. Zasoby" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + " \n", + "

Resource

\n", + "\n", + "A source of supply, support, or aid, especially one that can be readily drawn upon when needed (www. dictionary.com)\n", + " \n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " > A gdy się zasoby skończą, to ich nie będzie.\n", + " \n", + "Ilość zasobów jest skończona, więc naszym obowiązkiem jest je oszczędzać:\n", + "\n", + " * Energia\n", + " * Pojemność dysku\n", + " * Pojemność pamięci\n", + " * Zasoby procesora\n", + " * Możliwości przesyłu danych" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Podsumowanie\n", + "Użyteczność często rozumiana jest jako synonim łatwości użytkowania aplikacji.\n", + "\n", + "Zapewnienie, aby aplikacja używana była **łatwo** nie jest zadaniem banalnym. Wymaga odpowiedzenia sobie na wiele pytań, na które odpowiedzi mogą być zupełnie różne w zależności od typu aplikacji." ] } ], diff --git a/materiały na PPB (wykład)/obrazy/diagram Venna.png b/materiały na PPB (wykład)/obrazy/diagram Venna.png new file mode 100644 index 0000000..c9fcc65 Binary files /dev/null and b/materiały na PPB (wykład)/obrazy/diagram Venna.png differ