diff --git a/10_wybrane_zagadnienia_testowania.ipynb b/10_wybrane_zagadnienia_testowania.ipynb new file mode 100644 index 0000000..251440b --- /dev/null +++ b/10_wybrane_zagadnienia_testowania.ipynb @@ -0,0 +1,334 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "lJs0WcXzpfho" + }, + "source": [ + "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", + "
\n", + "

Przygotowanie do projektu badawczo-rozwojowego

\n", + "

10. Wybrane zagadnienia testowania[wykład]

\n", + "

Rafał Jaworski (2023)

\n", + "
\n", + "\n", + "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Plan wykładu\n", + "\n", + "1. Dlaczego warto testować?\n", + "1. Określenie pojęcia testowania.\n", + "1. Typy testowania.\n", + "1. Planowanie testów.\n", + "1. Testowanie automatyczne ![img](./obrazy/testing.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. Dlaczego warto testować?\n", + "*(źródło: https://udigroup.pl/blog/testowanie-oprogramowania-typy-rodzaje-poziomy/#co-to-testowanie-oprogramowania)*\n", + "\n", + "### Nissan\n", + "W samochodach Nissana wykryto awarię oprogramowania w czujnikach poduszek powietrznych. Zgłoszono dwa wypadki, które spowodowane były tą wadą. W związku z tym niedopatrzeniem, firma musiała wycofać ponad milion aut z rynku.\n", + "\n", + "### Starbucks\n", + "Starbucks napotkał awarię oprogramowania w swoim systemie POS (Point of Sale – narzędzie do przyjmowania i obsługi zamówień). Ze względu na brak możliwości przetworzenia transakcji, kawiarnia wydawała klientom kawę za darmo i musiała zamknąć ok. 60% swoich placówek w Kanadzie i USA.\n", + "\n", + "### Yahoo!\n", + "W 2016 r. Yahoo! ujawnił, że padł ofiarą jednego z największych w historii wycieków danych, który dotyczył ponad 3,5 miliardów kont użytkowników. Firma stała się przez to podmiotem wielkiej krytyki za niedopatrzenia w zakresie bezpieczeństwa. Ponadto musiała zmierzyć się z kilkoma procesami sądowymi, a jej wartość w transakcji przejęcia przez Verizon Communications spadła o 350 milionów dolarów.\n", + "\n", + "### China Airlines\n", + "26 kwietnia 1994 r. samolot China Airlines rozbił się w Japonii podczas podejścia do lądowania. Z powodu błędu oprogramowania, w katastrofie śmierć poniosły 264 osoby, a 7 w stanie ciężkim trafiło do szpitala.\n", + "\n", + "### Morele.net\n", + "W 2018 roku doszło do wycieku danych ponad 2 milionów użytkowników sklepu internetowego Morele. UODO nałożyło na firmę rekordową karę 2,8 milionów złotych za brak właściwych zabezpieczeń sklepu przed atakiem hakerów.\n", + "\n", + "### First National Bank of Chicago\n", + "W 1996 r. w dużym banku amerykańskim wystąpił błąd oprogramowania. W wyniku tego na konta ponad 800 klientów wpłynęło po 920 mln dolarów amerykańskich." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "LGcbq5Wmpfhy" + }, + "source": [ + "# 2. Podstawowe definicje" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "L6Of2X4kpfhy" + }, + "source": [ + " - ***Testowanie** to poddawanie czegoś próbie z oczekiwaniem na **konkretny wynik***\n", + " - ***Testowanie** to proces składający się ze wszystkich czynności cyklu życia, zarówno statycznych, jak i dynamicznych, skoncentrowany na planowaniu, przygotowaniu i ewaluacji oprogramowania oraz powiązanych produktów w celu określenia, czy spełniają one **wyspecyfikowane wymagania**, na wykazaniu, że są one dopasowane do swoich celów oraz na wykrywaniu usterek*\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " - **Błąd (error)** to objaw nieoczekiwanego działania programu ujawniony podczas testów.\n", + " - **Defekt (fault)** to niedoskonałość w kodzie programu. \n", + "\n", + "Błąd ujawniony w czasie testów świadczy o defekcie w testowanym kodzie.\n", + " " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3. Typy testowania" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.1. Podział testów - ze względu na dostępność kodu źródłowego" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " - **testy białej skrzynki** - tester ma pełny dostęp do kodu źródłowego\n", + " - **testy czarnej skrzynki** - tester nie ma dostępu do kodu źródłowego\n", + " - **testy szarej skrzynki** - tester ma ograniczony dostęp do kodu źródłowego\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.2 Podział testów - ze względu na zakres testowanego systemu" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- **modułowe** - testowana jest jedna klasa lub niewielki pakiet klas (np. jUnit),\n", + "- **integracyjne wewnętrzne** - testowanych jest wspólnie kilka modułów,\n", + "- **systemowe** - testowany jest cały system ze wszystkimi funkcjonalnościami,\n", + "- **integracyjne zewnętrzne** - testowana jest współpraca systemu z innymi systemami.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.3. Podział testów - ze względu na przedmiot testowania" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Testy funkcjonalne\n", + "Testy funkcjonalności systemu na podstawie przypadków testowych.\n", + "\n", + "### Testy niefunkcjonalne\n", + "\n", + "- **Testy wydajnościowe** - testy szybkości działania wybranych funkcji systemu.\n", + "- **Testy przeciążeniowe** - testy systemu w warunkach wysokiego obciążenia (znaczna liczba jednoczesnych użytkowników).\n", + "- **Testy pamięciowe** - testy zużycia pamięci.\n", + "- **Testy ochrony danych** - zapewnienie bezpieczeństwa danych przed wyciekiem.\n", + "- **Testy konfiguracji** - testowanie działania systemu uruchamianego w różnych konfiguracjach (np. na różnych systemach operacyjnych).\n", + "- **Testy zgodności wersji** - testowanie zgodności aplikacji z jej poprzednimi wersjami.\n", + "- **Testowanie zgodności z instrukcją użytkownika** - testom jest w zasadzie poddawana instrukcja.\n", + "- **Testowanie procedury instalacyjnej** - testowanie procedury instalacji systemu w czystym środowisku." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.4. Podział testów - ze względu na fazę testowania\n", + "- **Testy dymne (smoke tests)** - powierzchowne testy sprawdzające tylko podstawowe funkcje aplikacji\n", + "- **Testy zdroworozsądkowe (sanity tests)** - testy sprawdzające, czy aplikacja lub jej konkretna funkcjonalność działają zgodnie z podstawowymi założeniami\n", + "- **Testy akceptacyjne** - sprawdzenie kompletności systemu i jego prawidłowego działania\n", + "- **Testy regresywne** - sprawdzenie, czy naprawa błędów nie wprowadziła nowych błędów." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. Plan testów\n", + "**Plan testów** to dokument opisujący organizację procesu testowania. \n", + " * Dotyczy zazwyczaj testowania systemowego.\n", + " * Plan testów składa się z następujących elementów:\n", + " * Zakres testów\n", + " * Strategia testowania\n", + " * Zasoby niezbędne do testów\n", + " * Specyfikacja testów" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4.1. Zakres testów\n", + " * Identyfikacja testowanego produktu (co testujemy?)\n", + " * Określenie wymagań (właściwości), które testujemy\n", + " * Określenie wymagań (właściwości), których nie testujemy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4.2. Metodologia testowania\n", + " * Określenie typów testowania, które przeprowadzimy.\n", + " * Określenie typów testowania, których nie przeprowadzimy.\n", + " * Zdefiniowanie metod oceny testu\n", + " * Zdefiniowanie typów błędów (awarie, błędy istotne, błędy nieistotne)\n", + " * Określenie kryteriów pozytywnego zakończenia testów\n", + " * Przykładowo: określenie dopuszczalnej liczby błędów poszczególnego typu\n", + " * Określenie postaci raportu z testów" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4.3. Zasoby niezbędne do testów\n", + " * Środowisko testowe\n", + " * Oprogramowanie zastosowane w testowaniu\n", + " * Zespół wykonawców\n", + " * Warunki początkowe, np.:\n", + " * np. wykonane prace instalacyjne lub konfiguracyjne\n", + " * stopień ukończenia prac implementacyjnych" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4.4. Specyfikacja testów \n", + "**Specyfikacja testów** to zestaw scenariuszy testowych (przypadków testowych)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 5. Testowanie automatyczne\n", + "**Automatyzacja testowania** polega na zastąpienia testera oprogramowaniem, które:\n", + "* Steruje testem,\n", + "* Porównuje wyniki z oczekiwaniami,\n", + "* Raportuje błędy." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5.1. Podejścia do testowania automatycznego\n", + "\n", + "### Code-driven testing (testowanie sterowane kodem)\n", + " * Testowane są publiczne interfejsy do klas (modułów, bibliotek) poprzez podanie różnorakich danych wejściowych i walidacji wyników.\n", + " * Jest to poziom testów jednostkowych.\n", + "\n", + "### Graphical user interface testing (testowanie graficznego interfejsu użytkownika)\n", + " * Generowane są zdarzenia interfejsu takie jak: kliknięcia myszką czy naciśnięcie klawiszy i obserwowane są zmiany w interfejsie użytkownika. \n", + " * Jest to poziom testów systemowych.\n", + " \n", + "#### Testowanie za pomocą makr, np. Macro Express (https://www.macros.com/)\n", + "1. Nagrywamy makro realizujące ciąg zdarzeń (kliknięć, klawiszy itp.),\n", + "2. przygotowujemy zestaw plików graficznych, które obrazują kolejne oczekiwane wyglądy interfejsu,\n", + "3. podczas testowania każdorazowo porównujemy obrazy interfejsu z obrazami oczekiwanymi.\n", + "\n", + "#### Testowanie za pomocą oprogramowania, np. Selenium\n", + "(http://tynecki.pl/pdf/Automating-functional-tests-using-Python-and-Selenium-Piotr-Tynecki.pdf)\n", + "* Opracowujemy sekwencję zdarzeń (kliknięć, klawiszy itp.).\n", + "* Sprawdzamy powodzenie testowanej operacji (np. sprawdzamy, czy istnieje na stronie poszukiwany element).\n", + "\n", + "#### Zalety automatycznego testowania GUI\n", + "* Może być stosowane do każdego oprogramowania z graficznym interfejsem użytkownika.\n", + "* Znakomicie wkomponowuje się w paradygmat „continous integration”.\n", + "\n", + "#### Wady automatycznego testowania GUI\n", + "* Przygotowanie przypadków testowych jest czasochłonne.\n", + "* Każda najmniejsza zmiana interfejsu powoduje konieczność opracowania nowego zestawu testowego.\n", + "* W scenariuszach zawarte są często operacje nieistotne z punktu widzenia testowania." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Bibliografia\n", + "\n", + "1. \"Testowanie oprogramowania – poznaj świat testów\", Ilona Kusztykiewicz https://www.jcommerce.pl/jpro/artykuly/testowanie-oprogramowania\n", + "1. \"Testowanie niezbędnym elementem tworzenia oprogramowania. Jakie są jego typy, rodzaje i poziomy?\", Aleksandra Skalska, https://udigroup.pl/blog/testowanie-oprogramowania-typy-rodzaje-poziomy/#co-to-testowanie-oprogramowania\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DBJy5KNHpfh4" + }, + "source": [ + "## Zadania (proponowane do realizacji na laboratoriach)\n", + "\n", + "### Zadanie 1. Dyskusja nad odpowiednim sposobem testowania\n", + "Przeprowadźcie dyskusję nad odpowiednim sposobem testowania, który będzie najbardziej odpowiedni dla Waszego projektu. Sporządźcie raport z dyskusji, w którym zawarte będą wady i zalety proponowanych metod.\n", + "\n", + "### Zadanie 2. Plan testowania\n", + "\n", + "Sporządźcie realny plan testowania Waszej aplikacji. Określcie metodykę testowania, osoby testujące (dobrze byłoby mieć testerów spoza zespołu projektowego, proszę się wymieniać), kryteria akceptacji projektu oraz obieg pracy związany ze zgłaszaniem i naprawą błędów.\n", + "\n", + "### Zadanie 3. Scenariusze testowe\n", + "\n", + "Sporządźcie szczegółowe scenariusze testowe dla wybranych najważniejszych funkcjonalności Waszego projektu.\n", + "\n", + "\n", + "\n" + ] + } + ], + "metadata": { + "author": "Rafał Jaworski", + "colab": { + "provenance": [] + }, + "email": "rjawor@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.10.6" + }, + "org": null, + "subtitle": "10. Wybrane zagadnienia testowania", + "title": "Przygotowanie do projektu badawczo-rozwojowego", + "year": "2022" + }, + "nbformat": 4, + "nbformat_minor": 4 +}