SysInf/materiały na wykład/11_aspekty_użyteczności.ipynb

693 lines
20 KiB
Plaintext

{
"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> 11. <i>Aspekty użyteczności</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": [
"# 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": [
"<div class=\"alert alert-block alert-success\">\n",
" \n",
"<h3>Użyteczność</h3> \n",
"\n",
"Użyteczność to zestaw cech aplikacji, które sprawiają, że korzysta się z niej <b>łatwo</b>.\n",
"<div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Przepis na sukces\n",
"\n",
"SUKCES = WARTOŚĆ + ODCZUCIA UŻYTKOWNIKA + SZCZĘŚCIE"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h3>Wartość</h3> \n",
"\n",
"Wartość aplikacji to suma korzyści dla użytkownika: \n",
"<ul>\n",
"<li>zadanie jest wykonalne\n",
"<li>zadanie jest łatwiejsze\n",
"<li>zadanie można wykonać szybciej\n",
"<li>aplikacja dostarcza dochód lub oszczędza środki\n",
"<li>dostarczenie rozrywki\n",
"<li>dostarczenie informacji\n",
"<li>edukacja \n",
"</ul>\n",
" \n",
"<div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h3>Odczucia użytkownika (User Experience)</h3> \n",
"\n",
"Odczucia użytkownika to uczucia i emocje użytkownika doznawane podczas korzystania z aplikacji.\n",
"\n",
"<div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h3>Szczęście</h3> \n",
"\n",
"\"Szczęście przychodzi do tego, kto jest przygotowany i napotyka okazje.\" (Seneka)\n",
"\n",
"<div>"
]
},
{
"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",
"* dostęp do sieci, \n",
"* zasoby."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 1. Kontekst"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h3>Kontekst</h3> \n",
"\n",
"Kontekst to środowisko i okoliczności używania aplikacji. Odpowiada na pytania:\n",
"<ul>\n",
"<li>Kto?\n",
"<li>Gdzie?\n",
"<li>Kiedy?\n",
"<li>Jak? \n",
"</ul>\n",
" \n",
"<div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 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": [
"### 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",
"<img src=\"obrazy/diagram Venna.png\" alt=\"Diagram Venna\" width=500px>\n",
"\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": [
"### 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": [
"### 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": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h3>Input</h3> \n",
"\n",
"Information fed into a data processing system or computer (słownik: Miriam - Webster)\n",
" \n",
"<div>"
]
},
{
"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": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h3>Dane z innych źródeł</h3> \n",
"\n",
"Są to dane niewprowadzone przez użytkownika aplikacji.\n",
" \n",
"<div>"
]
},
{
"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 aplikacja 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": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h3>Output</h3> \n",
"\n",
"Information produced by a computer (słownik: Miriam - Webster)\n",
" \n",
"<div>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3.1. Wyjście wizualne"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div class=\"alert alert-block alert-success\">\n",
" \n",
"<h3>Zasady projektowania wizualnych komponentów wyprowadzania danych:</h3> \n",
" \n",
"<ol>\n",
"<li> \"Cele użytkownika na pierwszym miejscu.\"\n",
"<li> Spełnianie oczekiwań użytkowników\n",
"<li> Uwzględnianie rodzaju urządzenia\n",
"<li> Przestrzeganie norm i konwencji\n",
"</ol>\n",
" \n",
"<div>"
]
},
{
"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": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h3>Responsywność</h3> \n",
"\n",
"Cecha aplikacji, która powoduje, że użytkownicy uważają, że mogą uzyskać swój cel szybko - bez straty czasu.\n",
" \n",
"<div>"
]
},
{
"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": [
"<div class=\"alert alert-info alert-success\">\n",
" \n",
"<h3>Resource</h3> \n",
"\n",
"A source of supply, support, or aid, especially one that can be readily drawn upon when needed (www. dictionary.com)\n",
" \n",
"<div>"
]
},
{
"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 zadania wielu pytań, na które odpowiedzi mogą być zupełnie różne w zależności od typu aplikacji."
]
}
],
"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": "11. Aspekty użyteczności[wykład]",
"title": "Przygotowanie do projektu badawczo-rozwojowego",
"year": "2021"
},
"nbformat": 4,
"nbformat_minor": 4
}