\n",
+ "\n",
+ "Kontekst to środowisko i okoliczności używania aplikacji. Odpowiada na pytania:\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](\"obrazy/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",
+ "- \"Cele użytkownika na pierwszym miejscu.\"\n",
+ "
- Spełnianie oczekiwań użytkowników\n",
+ "
- Uwzględnianie rodzaju urządzenia\n",
+ "
- 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](\"obrazy/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",
+ "- \"Cele użytkownika na pierwszym miejscu.\"\n",
+ "
- Spełnianie oczekiwań użytkowników\n",
+ "
- Uwzględnianie rodzaju urządzenia\n",
+ "
- 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