Testowanie niezbędnym elementem tworzenia oprogramowania. Jakie są jego typy, rodzaje i poziomy?

Zapewnij produkt najwyższej jakości

Baner wejsciowyParallax

Testowanie niezbędnym elementem tworzenia oprogramowania. Jakie są jego typy, rodzaje i poziomy?

Zapewnij produkt najwyższej jakości

Zdjęcie autora wpisu
Aleksandra Skalska
29 kwietnia 2022
twarz mężczyzny i odbity ekran monitora

Wyobraź sobie, że Twoja firma od kilku lat ciężko pracowała nad nowym produktem technologicznym – np. aplikacją mobilną. Wszyscy są podekscytowani – moment, kiedy jej pierwsza wersja ujrzy światło dzienne zbliża się wielkimi krokami. Gdy jednak nadchodzi ten długo wyczekiwany dzień, okazuje się, że premiera aplikacji to jedna, wielka klapa… Część funkcji nie działa tak jak powinna, aplikacja się zacina i nie da się z niej swobodnie korzystać. Użytkownicy są niezadowoleni, a Twoi pracownicy zamiast świętować zwycięstwo, muszą mierzyć się z kolejnymi zgłaszanymi błędami.

Ta historia nie musi się wcale tak skończyć. Niech będzie tylko przestrogą, która skłoni Cię do refleksji nad tym, dlaczego tak ważne jest wykonywanie testów oprogramowania aplikacji internetowych i mobilnych. Błędy są rzeczą ludzką i zdarzają się nawet największym profesjonalistom. Jednak dbając o wizerunek i dobre prosperowanie firmy, należy zrobić wszystko, co możliwe, aby zminimalizować ich liczbę i ewentualne negatywne skutki.

Jeśli chcesz zapewnić produkt najwyższej jakości, testowanie aplikacji powinno być obowiązkowym elementem jej tworzenia. Dzięki temu można sprawdzić, czy dane oprogramowanie jest wolne od wad, a także ocenić i zweryfikować, czy spełnia zakładane cele.

Czym jest testowanie oprogramowania (software testing)?

Testowanie oprogramowania to proces, który ma na celu identyfikację wszelkiego rodzaju błędów i niedociągnięć, uniemożliwiających prawidłowe działanie danego oprogramowania – aplikacji webowej, mobilnej, PWA, strony internetowej czy sklepu e-commerce.

Jest to przedostatni krok przed wprowadzeniem produktu na rynek. Obejmuje badanie, analizę, obserwację i ocenę jego różnych aspektów – zgodność ze specyfikacją techniczną, funkcjonalność, wydajność, szybkość, przyjazność UI/UX i inne. Wszystko po to, aby oprogramowanie poprawnie działało i spełniało wszystkie zakładane cele. Testerzy po sprawdzeniu wszystkich istotnych czynników, raportują wyniki do zespołu programistycznego. Developerzy naprawiają znalezione przez nich defekty i ulepszają aplikację, aby była w pełni zgodna z wymaganiami funkcjonalnymi. Dopiero, gdy ten warunek będzie spełniony, oprogramowanie może być wypuszczone na rynek, dla użytkownika.

Testy aplikacji sprawdzają m.in.:

  • czy wszystkie wymagania ze specyfikacji technicznej zostały zaimplementowane do oprogramowania;
  • czy dana funkcjonalność działa prawidłowo i spełnia swój cel;
  • poziom bezpieczeństwa oprogramowania wraz z oceną, czy jest on utrzymany na odpowiednim poziomie;
  • poprawność wymagań funkcjonalnych oraz niefunkcjonalnych;
  • zgodność interfejsów API oraz interfejsów użytkownika z wymaganiami;
  • płynność i wydajność komunikacji pomiędzy komponentami oprogramowania.

Ważną kwestią, oprócz samego wykonania rzetelnych i wyczerpujących testów, jest ich sposób udokumentowania. Wszystkie informacje o przeprowadzonych procesach, wynikających z nich wnioskach i rekomendacjach powinny być przedstawione możliwie prostym i zrozumiałym językiem. Tak, aby osoby nie znające fachowej terminologii technicznej też mogły je zrozumieć.

kobieta pokazuje coś palcem na monitorze

Dlaczego testy oprogramowania są ważne?

Testowanie jest ważne, ponieważ skutecznie zapobiega wszelkim błędom, zmniejsza nakłady finansowe na dalszy rozwój i poprawia wydajność oprogramowania. Tym samym pozytywnie wpływa na doświadczenia użytkownika końcowego. Wady w aplikacji mogą mieć dla firm wiele negatywnych skutków. Szkodzą reputacji marki, powodują frustrację, a nawet utratę klientów, a także niosą za sobą szereg kosztów i niebezpieczeństw. Historia jest pełna takich przykładów…

Brak odpowiednich testów oprogramowania? Oni już mają nauczkę

  • Nissan
  • 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.

  • Starbucks
  • 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.

  • Yahoo!
  • 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.

  • China Airlines
  • 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.

  • Morele.net
  • 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.

  • First National Bank of Chicago
  • 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.

Metody testowania oprogramowania – testy ręczne a automatyczne

Chcąc zagłębić się w temat testowania aplikacji, na początku warto rozróżnić podstawowy podział na testy ręczne i automatyczne.

Ręczne testy oprogramowania

W przypadku manualnego testowania oprogramowania, analiza i sprawdzanie jakości kodu wykonywane są ręcznie przez testera. Sprawdza on wszystkie istotne cechy aplikacji lub strony, wchodząc z nią w interakcje bez użycia jakichkolwiek zautomatyzowanych narzędzi czy skryptów. Kontrola jakości dokonywana jest na podstawie unikalnych scenariuszy testowych z perspektywy użytkownika końcowego.

I chociaż wiadomo, że automatyzacja oszczędza czas, testowanie ręczne jest bardzo istotną częścią tworzenia oprogramowania. Testerzy przyjmują wtedy rolę tych, którzy z aplikacji lub strony będą ostatecznie korzystać. Dzięki temu mogą myśleć jak użytkownicy końcowi i wyobrażać sobie wiele możliwych do zaistnienia scenariuszy dla aplikacji lub funkcji.

Przykład testowania ręcznego

Testowanie ręczne ma wiele zastosowań. Szczególnie przydatne okazuje się przy ocenie dostępności, funkcjonalności i użyteczności oprogramowania. Dla przykładu weźmy uruchomienie nowego sklepu internetowego. Zanim zostanie on opublikowany, należy sprawdzić m.in., czy:

  • jest dobrze zoptymalizowany pod kątem różnych przeglądarek i urządzeń;
  • proces realizacji transakcji przebiega płynnie i sprawnie;
  • wszystkie grafiki prawidłowo się wyświetlają;
  • nie ma żadnych problemów z zakładaniem konta i logowaniem itd.

To wszystko można zbadać ręcznie. Testerzy weryfikują kody odpowiedzialne za każdą z tych funkcji i dokładnie przeklikują się przez sklep, oceniając go z perspektywy użytkownika. Jeśli okaże się, że jakaś funkcjonalność nie działa zgodnie z zamierzeniami lub ma nieprawidłowy wygląd, zgłaszane jest to do programisty, który to naprawia.

Automatyczne testy oprogramowania

Testy automatyczne są wykonywane również przez testerów z tą różnicą, że wspierają się oni specjalnymi narzędziami i skryptami, które pomagają zautomatyzować część procesów. Mogą one obejmować zarówno jakąś pojedynczą funkcję oprogramowania, jak i całą sekwencję zdarzeń w interfejsie użytkownika. Uwzględniając przygotowany scenariusz, testy automatyczne porównują otrzymane wyniki z tymi, które zostały w nim założone.

Testy automatyczne są bardziej niezawodne od testów ręcznych, jednak ich jakość zależy od tego, jak dobrze zostały napisane skrypty. Są odpowiednie w przypadku dużych projektów, które wymagają stałej weryfikacji tych samych obszarów oraz aplikacji, które przeszły już wstępny etap testowania ręcznego.

Automatyzacja testów oprogramowania może zaoszczędzić czas i pieniądze, ale nigdy nie zastąpi cząstki ludzkiej w znajdowaniu błędów. Zwłaszcza, jeśli chodzi o testowanie użyteczności oprogramowania, które ma być przeznaczone dla prawdziwych użytkowników końcowych.

Rodzaje testów oprogramowania – funkcjonalne i niefunkcjonalne

Testowanie oprogramowania dzieli się na dwie główne kategorie: testowanie funkcjonalne i niefunkcjonalne. To rozróżnienie ze względu na to, jaki aspekt aplikacji sprawdzają – biznesowy czy operacyjny. Nie jest to jednak jedyny podział. Wśród testów funkcjonalnych i niefunkcjonalnych wyróżnia się bowiem kolejne, bardziej szczegółowe typy testów. Zobacz, jakie obszary możesz dzięki nimi zweryfikować w swojej aplikacji lub na stronie.

infografika rodzaje testów oprogramowania

Testy funkcjonalne

Testy funkcjonalne koncentrują się na wymaganiach biznesowych aplikacji lub strony. Dzięki nim można sprawdzić, czy wszystkie jej funkcje i cechy są zgodne z określonymi wcześniej kryteriami. Co za tym idzie – czy produkt końcowy spełnia zakładane oczekiwania klienta.

Poszczególne testy funkcjonalne są zwykle przeprowadzane w określonej kolejności. Wśród nich wyróżnia się 4 poziomy, a każdy z nich dotyczy innej fazy wytwarzania oprogramowania.

Rodzaje testów funkcjonalnych:

  • Testy jednostkowe – zazwyczaj wykonywane są przez programistę na etapie tworzenia aplikacji. Na tym poziomie testuje się poszczególne jednostki oprogramowania (najmniejsza testowalna część aplikacji) i sprawdza, czy każda z nich działa zgodnie z założeniami.
  • Testy integracji – sprawdzają, czy moduły lub usługi używane przez aplikację prawidło ze sobą współpracują.

    Po przetestowaniu poszczególnych jednostek są one integrowane z innymi. Tworzą wtedy moduły lub komponenty, które mają wykonywać określone funkcje. Wtedy testuje się je jako całe segmenty w celu zweryfikowania, czy zachowują się zgodnie z założeniami, a interakcja jest płynna. Dzięki tym testom można np. sprawdzić, czy połączenie między aplikacją a bazą danych działa właściwie lub zbadać integrację z systemami zewnętrznymi.

  • Testy systemu – badają oprogramowanie pod kątem awarii lub błędów. Głównym ich celem jest kompleksowa ocena specyfikacji systemu – jego funkcjonalność jest testowana od początku do końca zanim zostanie wprowadzony do produkcji.
  • Testy akceptacyjne – to rodzaj testów wykonywanych przez klienta w celu zaakceptowania aplikacji przed przeniesieniem jej do środowiska produkcyjnego. Sprawdza on, czy produkt działa bez zarzutu, jest zgodny z wymaganiami biznesowymi i spełnia zakładaną funkcjonalność.

Testy niefunkcjonalne

Testy niefunkcjonalne sprawdzają takie aspekty aplikacji jak jej wydajność, niezawodność, skalowalność, bezpieczeństwo, użyteczność itd. Ich celem jest poprawienie jakości i ulepszenie oprogramowania. Testy niefunkcjonalne wykonywane są po wcześniejszych testach funkcjonalnych.

Testy niefunkcjonalne można podzielić na:

  • Testy bezpieczeństwa – proces mający na celu ustalenie, czy system posiada jakieś luki w zabezpieczeniach, które zwiększają zagrożenie złośliwymi atakami, które mogą skutkować np. utratą danych, pieniędzy lub zaszkodzić reputacji marki.
  • Testy wydajności – to technika używana do określenia tego, jak aplikacja będzie się zachowywać w różnych warunkach. Jej celem jest sprawdzenie zachowania oprogramowania w rzeczywistych sytuacjach, w których będzie wykorzystywana przez użytkownika. Testom poddaje się szybkość aplikacji (czas jej reakcji), skalowalność (maksymalne obciążenie użytkownika, jakie może obsłużyć aplikacja) oraz stabilność przy różnych obciążeniach.
  • Testy użyteczności – zwany też testowaniem UX. To metoda mierząca, jak łatwa i przyjazna dla użytkownika jest aplikacja. Jej główną ideą jest ustalenie, czy oprogramowanie pod względem wizualnym i funkcjonalnym spełnia swojej cele, a także jest zrozumiałe i wygodne w obsłudze.
  • Testy zgodności – oceniają, czy oprogramowanie jest dostosowane do działania w różnych środowiskach. Kompatybilność testowana jest z uwzględnieniem rodzaju sprzętu, urządzenia, systemu operacyjnego, sieci, oprogramowania, przeglądarki internetowej itp..

Testy regresji (związane ze zmianami)

Niektórzy przypisują je do rodzaju testów funkcjonalnych, jednak tak naprawdę często odnoszą się one zarówno do testów jednostkowych, jak i testów wydajności czy API, które są już przykładami testów niefunkcjonalnych.

Testy regresyjne są wykonywane są za każdym razem, gdy do oprogramowania dodawany jest nowy moduł. Sprawdzają, czy wprowadzone lub zmienione elementy nie wpływają negatywnie na funkcjonalność całej aplikacji.

Testy białoskrzynkowe, czarnoskrzynkowe i szaroskrzynkowe

Oprócz podziału na funkcjonalne i niefunkcjonalne typy testowania, możemy rozróżnić także 3 podejścia do testowania aplikacji. Są to:

  • Testy czarnej skrzynki – to metoda testowania oprogramowania, w której testerzy oceniają jego funkcjonalność bez znajomości wewnętrznej struktury kodu i porównują wartość wejściową z wartością wyjściową. Można je stosować na każdym poziomie funkcjonalnego testowania oprogramowania.
  • Testy białej skrzynki – to z kolei technika, w której wewnętrzna struktura lub kod aplikacji są widoczne i dostępne dla osoby testującej. Dzięki temu podejściu łatwo znaleźć luki w projekcie lub błędy w logice biznesowej i upewnić się, że wszystkie operacje wewnętrzne zachodzą zgodnie ze specyfikacją. Testy białoskrzynkowe te są zwykle wykonywane na poziomie jednostki.
  • Testy szarej skrzynki – to, jak sama nazwa wskazuje, połączenie testowania białoskrzynkowego i czarnoskrzynkowego. W tym przypadku tester posiada częściową wiedzę na temat wewnętrznej struktury lub kodu aplikacji.
Rozwiązania zawsze dobrze przetestowane

Dobrze przetestowany produkt zapewnia optymalne wyniki, które przekładają się na sukces biznesu. Warto to zadanie powierzyć profesjonalistom, którzy są w stanie tworzyć w pełni dopasowane do potrzeb rozwiązania technologiczne. Dzięki wiedzy i bogatemu doświadczeniu pomogą ocenić słabe punkty i zaproponują działania ulepszające Twoje oprogramowanie.

Testowanie oprogramowania – kluczowy aspekt jakości

Mamy nadzieję, że nauczyłeś się czegoś ważnego, jeśli chodzi o świat testowania oprogramowania. Pamiętaj jednak, że tworząc swoją aplikację lub stronę nie musisz wykonywać wszystkich wymienionych rodzajów testów. Każdy projekt, w zależności od rodzaju i specyfikacji, będzie wymagał innego zestawu metod badawczych.

Najważniejsze, aby nie pominąć tego etapu tworzenia oprogramowania. Wypuszczając produkt na rynek, musisz mieć pewność, że jest on funkcjonalny i spełnia wszystkie swoje najważniejsze zastosowania. W końcu po co tworzyć sklep internetowy, w którym użytkownik nie może założyć konta lub wrzucić produktów do koszyka? To kluczowe zadania, których się od niego oczekuje. Biznes opiera się na zaufaniu klientów. Aby je zdobyć i później sukcesywnie monetyzować, musisz dostarczać spójne i niezawodne rozwiązania.

Podziel się tym artykułem z innymi!

Twitter Facebook Linke.din
Zdjęcie autora wpisu
Aleksandra Skalska
Marketing Manager