Testowanie aplikacji webowych – dobre praktyki

Tym razem zapraszamy naszych czytelników w świat testowania aplikacji webowych oraz stron WWW. Na potrzeby tego artykułu zawęziliśmy jednak temat do aplikacji webowych, gdyż jest on ciekawszy i zazwyczaj można wykorzystać zdobytą wiedzę w testowaniu stron WWW.

Aplikacje webowe są przez nas używane na co dzień i to praktycznie w każdym obszarze naszego życia, zaczynając od przeglądania poczty elektronicznej, robienia zakupów po wykonywanie przelewów czy zarządzanie zadaniami. Producenci takich aplikacji muszą wykazać się szeroką wiedzą, aby stworzyć wysokiej klasy aplikacje, które będą spełniały potrzeby użytkowników. W artykule tym znajdziecie wiele praktycznych wskazówek, które będziecie mogli wykorzystać przy testowaniu aplikacji webowych.

 

Typy testów, jakim możemy poddać aplikacje webowe

Zanim rozpoczniemy w szczegółach poznawać praktyki testowania aplikacji webowych, warto zastanowić się nad typami testów, którym mogą być one poddawane. Poniżej znajduje się lista rodzajów testów, które można wykorzystać przy przeprowadzaniu testów aplikacji webowych

  • Testy funkcjonalne
  • Testy niefunkcjonalne
    • Testy użyteczności
    • Testy wydajnościowe
    • Testy obciążeniowe
    • Testy przeciążeniowe
    • Testy przenaszalności
    • Testy bezpieczeństwa
    • Testy pielęgnowalności

Do przeprowadzenia każdego z powyższych testów potrzebujemy zazwyczaj innych kompetencji, które będziemy zdobywać wraz z rozwojem naszej kariery zawodowej i pogłębianiem wiedzy. W naszym opracowaniu znajdziecie ogólne informacje, jak podejść do takich testów i na co zwracać uwagę. Każdą aplikację webową trzeba traktować indywidualnie, jednakże bywają wspólne elementy, które należy zawsze zweryfikować.

 

Testy funkcjonalne oraz niefunkcjonalne aplikacji webowych

  • Testy funkcjonalne zawierają w sobie badanie takich elementów systemu, jak np. weryfikacja poprawności wyświetlanych komunikatów, komunikacji pomiędzy aplikacją a serwerem czy sprawdzenie poprawności działania funkcjonalności zgodnie z założeniami poszczególnych elementów aplikacji.
  • Testy niefunkcjonalne obejmują takie rodzaje testów, jak testy obciążeniowe, wydajnościowe, przeciążeniowe, pielęgnowalności, użyteczności, niezawodności i przenaszalności. Ten typ testów określa, JAK system działa. Testy takie mogą być wykonywane praktycznie na każdym z poziomów testów, np. programiści mogą testować czasy odpowiedzi poszczególnych metod / klas na etapie testów jednostkowych. My skupimy się głównie na testach, które dotyczą testowania aplikacji webowych z punktu widzenia użytkownika systemu.

 

Weryfikacja linków dostępnych na stronie WWW

Jednym z etapów testowania aplikacji webowych jest weryfikacja poprawności zamieszczonych linków. Linki mogą występować w wielu częściach naszej aplikacji i postaramy się omówić podstawowe rzeczy z tym związane.

  • Linki wewnętrzne (ang. Internal Links)

  • Wszystkie linki, za pomocą których przemieszczamy się w ramach aplikacji pomiędzy poszczególnymi podstronami. Sprawdzamy tutaj dwie rzeczy, tj. czy link w aplikacji działa poprawnie (nie ma przekierowania do pustej strony – błąd 404) oraz czy prowadzi Nas do poprawnej podstrony. Kto z Nas nie spotkał się ze stroną 404?

PPT6 - error 404

 

  • Linki wykorzystywane przy zakładaniu kont, zakupach itp.

Wszystkie linki, Kolejną grupę linków stanowią te otrzymywane drogą mailową, np. w sytuacji zakładania konta (wymagane potwierdzenie przez kliknięcie w link aktywacyjny), robienia zakupów, resetowania hasła itp. Należy tutaj weryfikować poprawność takich linków, czy działają i wykonują poprawne funkcjonalności. Zazwyczaj te operacyjne musimy wykonywać ręcznie.

  • Wsparcie narzędziowe

Powyższe testy poprawności linków w pewnym stopniu da się zautomatyzować – szczególnie odnalezienie linków, które nie działają w testowanej aplikacji. Poniżej lista zawiera narzędzia wspierające wyszukiwanie niedziałających linków w aplikacji:

 

Testy formularzy dostępnych w aplikacji webowej

Kolejnym wspólnym elementem aplikacji webowych są formularze, które również powinny zostać odpowiednio zweryfikowane. Formularze wyglądają co prawda różnie i są zależne od aplikacji, w której są udostępnione, ale mają kilka cech wspólnych, które należy sprawdzić. Testy formularzy można wykonywać w sposób automatyczny oraz manualny, my natomiast zajmiemy się tutaj przedstawieniem tego, na co w szczególności należy zwrócić uwagę.

  • Walidacja pól

Jedną z największych zmór dla programistów jest zrobienie poprawnej walidacji. Większość bibliotek posiada wbudowane mechanizmy walidacji dla takich pól jak nr telefonu czy adresu e-mail, ale niektóre trzeba stworzyć samemu, co często powoduje pewne problemy. Warto pamiętać o samej walidacji już na etapie projektowania systemu, aby nie doszło do sytuacji, że na końcu będziemy dostosowywać pola do walidacji, którą udało się zaprogramować. Trzeba pamiętać, że błędnie wprowadzone dane (z premedytacją lub przez przypadek) mogą mieć negatywny wpływ na integralność danych w bazie danych, a przez to na działanie całej aplikacji. Testerzy powinni wiedzieć, na podstawie jakich wymagań mają weryfikować walidację i mieć przygotowane zgodnie z tym dane testowe, na których będą opierały się testy.

Do generacji takich danych najlepiej wykorzystać zewnętrzne oprogramowanie lub zbudować własne.

 

PPT6 - walidacja wymagania
  • Weryfikacja języka

Często zdarza się, że gdy formularze budowane są na podstawie gotowych komponentów (np. z WordPressa), to nie do końca wszystko jest poprawnie przetłumaczone. Użytkownik może mieć wówczas problem z wypełnieniem takiego formularza. Dlatego warto nam, jako testerom, zwracać na to uwagę i sprawdzać spójność testowanej aplikacji pod kątem używanego języka.

  • Wymagane pola

Przy testowaniu formularzy warto również zwrócić uwagę, czy wszystkie pola, które są wymagane do wypełnienia, są odpowiednio oznaczane (gwiazdki, czerwone ramki itp) i czy same oznaczenia są spójne. Szczególnie taka weryfikacja jest potrzebna przy dużych systemach webowych, np. w systemach klasy ERP. Dodatkowo tester zawsze powinien być czujny pod względem tego, czy aby na pewno dane pole musi być wymagane.

 

 

  • Komunikaty błędów

Kolejnym elementem, na który należy zwracać uwagę, jest spójność komunikatów w stosunku do tego, co zrobił użytkownik. Zdajemy sobie sprawy, że większość użytkowników nie czyta komunikatów o błędach, ale nie jest to argument, przez który mielibyśmy lekceważyć tego typu błędy. Nie powinna występować sytuacja, że przykładowo użytkownik nie uzupełnił pola “Login”, a dostał informację, że nie wprowadził hasła.

  • Poprawność zapisu danych

W sytuacji, gdy mamy dostęp do bazy danych, wypada zawsze sprawdzić, czy wszystkie dane wprowadzone w formularzu są zapisywane bezpośrednio i poprawnie w bazie danych. Warto również zwracać uwagę na to, jakie wartości i ograniczenia co do liczby znaków wprowadzono po stronie bazy danych, a jakie po stronie formularza. Zdarzają się sytuacje, że przykładowo od strony aplikacji webowej jest ograniczanie nazwy użytkownika do 30 znaków, a po stronie bazy danych do 20 znaków.

  • Na co jeszcze zwracać uwagę w trakcie testów formularzy?

Wiele testów zależy od budowy i zachowania samego formularza. Poniżej znajdziecie kilka dobrych praktyk, na które warto zwracać uwagę przy testach:

  • Jeśli wypełnienie formularza składa się z wielu kroków – ekranów (np. systemy klasy ERP są często tak zbudowane), sprawdzenie, czy zachowywane są dane na poszczególnych ekranach przy przechodzeniu między stronami formularza
  • Weryfikacja, czy próba zapisu nie w pełni uzupełnionego formularza nie spowoduje wykasowania wcześniej wprowadzonych danych (nic bardziej nie irytuje jak mamy pięćdziesiąt pól, w jednym się pomylimy i następnie wszystkie pola trzeba uzupełniać ponownie)
  • Edycja formularza – czy dane są poprawnie edytowane i ponownie zapisywane do bazy
  • Odpowiedni opis dla poszczególnych pól formularza
  • Dodawanie plików (obsługiwane formaty), ich podmiana i usuwanie dodanych plików
  • Poprawnie podpięte pod formularz regulaminy/umowy itp.
  • Poprawność działania Captchy (czy działa poprawnie i jest czytelna)
  • Weryfikacja, czy domyślne opisy / podpowiedzi w polach nie są brane jako wartości wprowadzone przez użytkownika w formularzu
PPT6 - domyślne wartości

 

  • Poprawne zachowanie samego formularza – błędy logiczne

 

Ogólne testy interfejsu użytkownika w aplikacjach webowych

  • Zmiana rozmiaru okna

Podczas testów należy zwrócić uwagę, w jaki sposób zachowuje się testowana aplikacja w trakcie zmian rozmiaru okna przeglądarki (czy skaluje się poprawnie, czy elementy nie nachodzą na siebie itp.).

  • Odświeżanie strony

Warto sprawdzić, czy po odświeżeniu okna przeglądarki strona wyświetla się poprawnie, czy użytkownik pozostaje na tej samej stronie.

  • Wyszukiwanie

Praktycznie w każdej aplikacji webowej występuje funkcjonalność przeszukiwania strony WWW. Należy wobec tego przetestować, czy zwracana jest poprawna liczba wyników, czy rezultaty są trafne, po jakich frazach można wyszukiwać i czy rezultaty otrzymujemy w akceptowalnym czasie.

 

Testy zgodności

Jednymi z bardziej pracochłonnych testów, które należy wykonywać przy testach aplikacji webowych, są testy weryfikacji działania na różnych środowiskach. Wielokrotnie spotkaliśmy się z tym, że funkcjonalność działa pod przeglądarką Mozilla Firefox, a na przykład pod Internet Explorer nie działa. To samo oczywiście dotyczy urządzeń mobilnych, których jest wiele i dostępnych w różnych konfiguracjach. Aby zawęzić listę przypadków testowych można zastosować technikę projektowania testów pairwise testing. Technika ta jest przydatna przy testowaniu konfiguracji i optymalizacji ilości przypadków testowych.

  • Kompatybilność z typami przeglądarek

Warto, już na etapie analizy / projektowania, mieć wiedzę, na jakich przeglądarkach będziemy testować dany system (uwzględniając również wersję przeglądarki – przynajmniej od której wersji). Ta wiedza pozwoli nam na odpowiednie przygotowanie środowisk testowych oraz ewentualnych narzędzi, platform wspierających testy na różnych przeglądarkach.

  • Responsywność / urządzenia mobilne

Obecnie spora część ruchu w aplikacjach webowych generowana jest z wykorzystaniem urządzeń mobilnych. Musimy być zatem przygotowani do tego, aby testować naszą aplikację również na urządzeniach mobilnych. Tu nasuwa się pytanie, na jakich, z jakim systemem operacyjnym, na jakiej rozdzielczości ekranu itd. Mnogość konfiguracji powoduje wiele problemów z testami i warto o tym zacząć myśleć zanim klienci zaczną korzystać z naszych systemów.

  • Kompatybilność z systemami operacyjnymi

Kolejnym aspektem do uwzględnienia przy testach aplikacji webowych są systemy operacyjne i działające tam przeglądarki. Niby przeglądarka ta sama – Mozilla Firefox, ale działanie jakby trochę inne, więc również należy odpowiednio sprofilować nasze testy i testować na środowiskach zbliżonych do tych, z których korzystają klienci.

  • Narzędzia wspierające testy różnych konfiguracji

Zestaw narzędzi, które wspierają przeprowadzanie testów na różnych konfiguracjach, znajdziecie poniżej. Zazwyczaj narzędzia te pozwalają na uruchamianie testowanej aplikacji na środowisku testowym, którego konfiguracja nas interesuje, i tam przeprowadzanie testów. Z reguły mamy do wyboru system operacyjny, przeglądarkę i jej wersję oraz rozdzielczość, w której chcemy wykonywać testy.

Oto linki do wspomnianych narzędzi:

 

 

 

Testy użyteczności

Obecnie na rynku jest bardzo dużo oprogramowania posiadających podobne funkcjonalności. Przykładem mogą być systemy zarządzania zadaniami, obsługi poczty e-mail, pakiety biurowe itp. Jednym z atrybutów wyróżniających oprogramowanie i zachęcających klientów do zakupu jest jego użyteczność. Oprogramowanie jest przeznaczone do tego, aby go używać – używać w sposób najbardziej dla nas wygodny i intuicyjny. Zazwyczaj tester oprogramowania jest pierwszą osobą (poza programistą, analitykiem…), który korzysta z danego oprogramowania, dlatego też warto, aby testerzy zwracali uwagę na użyteczność tworzonego oprogramowania. Nie będziemy tutaj rozpisywać się o sposobach badania aplikacji pod względem użyteczności, ale zwrócimy uwagę na podstawowe rzeczy, które powinien mieć na uwadze tester aplikacji internetowej.

  • Konsekwencja w używaniu komponentów

Wielokrotnie mieliśmy okazję widzieć oprogramowanie, np. klasy ERP, które składa się z wielu modułów oraz podobnych komponentów (np. mechanizm logowania, kalendarze, filtry itp). W przypadku braku korzystania z identycznych komponentów narażamy się na to, że nasi użytkownicy będą zwyczajnie narzekać w trakcie korzystania systemu. Przykładem może być zastosowanie pięciu różnych typów kalendarza w jednej aplikacji – raz użytkownik mógł skorzystać ze skrótów klawiszowych, za drugim razem miesiące miał w liście rozwijanej, a na kolejnym musiał datę wpisać ręcznie itd. Niby funkcjonalność ta sama, a użytkownik musi w różny sposób korzystać z tego samego elementu, co bywa uciążliwe.

  • Zgodność ze standardami

Organizacja powinna pracować nad stworzeniem standardów wyglądu tworzonych oprogramowań, obejmujących m.in. wytyczne co do układu okien, komunikatów błędów czy stosowanych kolorów w systemie. Dobrze byłoby, aby były również uzupełnione o nasze wewnętrzne praktyki tworzenia oprogramowania. Pozwoli to na tworzenie zarówno spójnych interfejsów oprogramowania, jak i łatwość ich implementacji. W momencie, kiedy zostawimy dowolność tworzenia interfejsu użytkownika na barkach programistów, niekoniecznie otrzymamy użyteczne oprogramowanie z przyjaznym interfejsem użytkownika.

PPT-6_użyteczne_gui
  • Komunikaty błędów i informacyjne

Komunikaty błędów i te informacyjne powinny być spójne i dostarczać użytkownikowi pełnych informacji odnośnie akcji wykonanych w systemie oraz co ewentualnie należy zrobić, aby nie było błędów. Ważne również, aby komunikaty charakteryzowały się odpowiednimi elementami graficznymi.

  • Nawigacja w systemie

Warto wiedzieć, w jakiej obecnie lokalizacji w systemie się znajdujemy, chociażby po to, aby mieć możliwość powrotu w późniejszym czasie do interesujących nas treści.

  • Wsparcie dla niepełnosprawnych

Przy testowaniu aplikacji webowych należy sprawdzić (powinno być to wyspecyfikowane w wymaganiach), czy aplikacja ma być dostosowana dla osób niepełnosprawnych. Jeśli tak, wówczas należy zweryfikować działanie poszczególnych opcji ułatwiających pracę z aplikacją również dla tej grupy osób.

 

Testy bezpieczeństwa

Jednym z kolejnych etapów testów, które należy przeprowadzić, aby zweryfikować kompleksowo aplikację, jest przeprowadzenie testów bezpieczeństwa. Testy te mają na celu zweryfikowanie, czy istnieje m.in. możliwość nieautoryzowanego dostępu do zasobów zamieszczonych na stronach aplikacji webowej. Warto zwrócić tutaj uwagę, że testy bezpieczeństwa należy wykonać zarówno od strony samej aplikacji webowej, jak i konfiguracji samego serwera, na którym hostowana jest aplikacja. My jednak skupimy się tutaj na podstawowych błędach bezpieczeństwa.

  • Dostęp do stron widocznych tylko po zalogowaniu

Należy sprawdzić, czy nie ma możliwości dostępu do stron, które powinny być widoczne tylko po zalogowaniu się użytkownika. Aby to zweryfikować, wystarczy czasem po prostu wpisać adres takiej strony w przeglądarce.

  • Wygaśnięcie sesji

W zależności od typu i przeznaczenia aplikacji, otwarta sesja powinna być zamykana po upływie określonego czasu. Przykładem tego są chociażby aplikacje bankowe.

  • Weryfikacja SSL

Należy zweryfikować, czy transmisja danych na stronie odbywa się po bezpiecznym protokole HTTPS.

  • Pobieranie plików

Nie powinno być nieautoryzowanego dostępu do pobierania plików z części systemu dostępnej tylko po zalogowaniu.

  • Mechanizm Captcha

Chcąc zapobiec atakom typu brute force, należy zweryfikować, czy zaimplementowano mechanizm Captcha.

  • Polityka nadawania haseł

Należy sprawdzić, czy w aplikacji jest wdrożona polityka nadawania haseł dla kont użytkownika, obejmująca odpowiednią siłę hasła, wymuszanie jego zmiany itp.

  • Wyszukiwanie podatności XSS

  • Wyszukiwanie podatności typu SQL Injection

 

Testy wydajnościowe

Poza testami bezpieczeństwa należy przeprowadzić testy wydajnościowe aplikacji webowej, badające jej zachowanie przy dużych obciążeniach. Głównym problemem w przeprowadzaniu tych testów dla nowego projektu jest trudność określenia, ilu użytkowników będzie korzystało z naszego systemu. W trakcie testów należy rozważyć przeprowadzenie także testów obciążeniowych i przeciążeniowych. Przeprowadzenie tych testów powinno dać nam odpowiedź, czy aplikacja odpowiada w akceptowalnym dla nas czasie, uwzględniając rosnącą liczbę użytkowników. Ponadto uzyskamy odpowiedź, czy po przekroczeniu maksymalnej liczby użytkowników w systemie aplikacja jest w stanie powrócić do prawidłowego trybu pracy.

Jednym z podstawowych narzędzi, które możemy wykorzystać do przeprowadzania testów wydajnościowych jest JMETER (http://jmeter.apache.org/).

 

Mamy nadzieję, że udało nam się zainteresować Was tematyką testów aplikacji webowych i jesteście ciekawi, co jeszcze te aplikacje mogą „kryć w sobie”. Jeśli chcielibyście zgłębić swoją wiedzę, to zapraszamy na nasze szkolenie „Testowanie aplikacji webowych”

TestowanieAplikacjiWebowych