Strona główna > Web development > Co to jest Testowanie Oprogramowania (Software Testing)?
Journal

Co to jest Testowanie Oprogramowania (Software Testing)?

Oceń artykuł:

W największym skrócie Testowanie Oprogramowania (Software Testing) można zdefiniować jako proces weryfikacji zgodności działania aplikacji z wymaganiami funkcjonalnymi.

Testom poddaje się zarówno całość oprogramowania, jak również wybrane elementy. Bez względu jednak na zakres testów, ich celem zawsze jest wykrycie błędów, luk, defektów.

Testowanie Oprogramowania - znów w najogólniejszym sensie - pozwala zdecydowanie zmniejszyć koszty rozwoju aplikacji, oferować produkty, usługi wydajniejsze, stabilniejsze, bardziej bezpieczne. Testowanie i jakość oprogramowania to niemal synonimy.

Na czym polega testowanie oprogramowania, testowanie automatyczne, proces testowania? Co robi tester oprogramowania? Czym zajmuje się tester oprogramowania?

W jaki sposób testowanie wpływa na zapewnianie jakości oprogramowania w branży IT? Dlaczego z wytwarzaniem oprogramowania testowanie aplikacji internetowych wiąże się ściśle?

Jaka odpowiedzialność spoczywa w rękach testera oprogramowania? Czy testowanie oprogramowania jest trudne?

Co to jest klasyfikacja błędów testowanie oprogramowania? Czy testowanie oprogramowania online jest efektywne?

Testowanie oprogramowania - na czym polega? Dowiecie się już za chwilę!

Interesuje Cię DevOps?

Co to jest Testowanie Zgodności Oprogramowania (Software Testing)?

Testowanie Oprogramowania podnosi konkurencyjność produktu cyfrowego, ale także zapobiega wielu kryzysom biznesowym, wizerunkowym, jakie mogą wystąpić w wyniku oferowania produktów, które nie zostały poddane różnorodnym testom.

Bagatelizowanie Testowania Oprogramowania niestety ma bardzo poważne konsekwencje o czym doskonale przekonały się firmy takie jak Bloomberg, Nissan, Starbucks, Amazon, Microsoft, China Airlines. I wiele, wiele innych.

O zakresie, wadze możliwych problemów niech najlepiej świadczy przykład błędu w oprogramowaniu, który miał miejsce w 1999 roku, kiedy to wystrzelono satelitę wojskowego wartego ponad miliard dolarów.

Co to jest Testowanie Zgodności Oprogramowania

A wszystko przez niedostateczne poświęcenie uwagi Testom Oprogramowania.

Software Testing jest zbiorem metod, narzędzi, praktyk, które pozwalają odpowiedzieć na pytanie, czy stworzony produkt cyfrowy, oprogramowanie jest wolny od wad, jest zgodny ze specyfikacją wymagań systemu informatycznego, specyfikacją wymagań funkcjonalnych.

Testowanie Oprogramowania ma na celu identyfikację błędów, luk lub brakujących wymagań.

W głównej mierze chodzi o sprawdzenie, czy:

  • dana funkcja działa prawidłowo
  • nie występują sprzeczności wymagań funkcjonalnych oraz niefunkcjonalnych
  • wymagania zostały zaimplementowane w oprogramowaniu w sposób kompletny
  • interfejsy użytkownika oraz API są zgodne z wymaganiami
  • aplikacja zapewnia odpowiedni poziom bezpieczeństwa
  • komunikacja między komponentami aplikacji przebiega w sposób niezakłócony, płynny i wydajny.

Testowanie Oprogramowania powinno być przeprowadzane w sposób planowy, konsekwentny, rzetelny, wyczerpujący oraz klarowny.

Ważną kwestią - oprócz problemów technicznych - jest także odpowiednie dokumentowanie procesów testowych, które powinno być komunikatywne także dla interesariuszy nietechnicznych.

Stąd też raporty powinny być napisane językiem możliwie prostym i zrozumiałym.

Równie istotną kwestią, oprócz samego wyniku testów, jest ich komunikatywne i przekonujące - także od strony biznesowej - umotywowanie.

Warto bowiem pamiętać, że oprogramowanie poddane adekwatnym, rzetelnym testom zapewnia pożądaną, realną:

  • niezawodność, stabilność działania
  • wysoką wydajność
  • ochronę, bezpieczeństwo - użytkownikom końcowym oraz właścicielom biznesu
  • satysfakcję użytkowników - gwarantuje lepsze User Experience
  • oszczędność - poprawianie oprogramowania już funkcjonującego na rynku jest zdecydowanie bardziej kosztowne niż udoskonalanie aplikacji będących w procesie produkcji
  • oszczędność pracy oraz czasu.

Dlaczego manualne, automatyczne Testowanie Oprogramowania jest ważne?

Historia niestety zna przypadki, w których wady oprogramowania zaciążyły na ludzkim życiu w sposób ostateczny (case China Airlines).

Nawet, jeśli założymy, że tak drastyczne, dramatyczne sytuacje stanowią ewenement, to wciąż mówimy o bardzo donośnych problemach biznesowych, wizerunkowych płynących z oferowania oprogramowania, które nie zostało poddane testowaniu.

Mówiąc wprost niedoskonałego lub po prostu wadliwego.

Straty finansowe, wizerunkowe, utrata pozycji rynkowej, utrata wiarygodności, zaufania, łatka oprogramowania szkodliwego, ryzykownego naprawdę stanowić może powód biznesowego kolapsu lub co najmniej długotrwałego kryzysu.

Mówiąc może nieco zbyt kategorycznie - z potrzebą Testowania Oprogramowania się nie dyskutuje, testy się wykonuje.

jak testować oprogramowanie

Przynajmniej, jeśli nie chce się podzielić losu firmy Nissan, która musiała wycofać ze sprzedaży ponad milion swoich aut, w których oprogramowanie obsługujące czujniki poduszek powietrznych zawierało bardzo ryzykowne błędy.

Dane zaprezentowane w artykule pt. „What is software testing?”, opublikowanym na blogu firmy IBM robią naprawdę mocne wrażenie.

W 2016 roku awarie oprogramowania (wynikające z zaniedbania testów) w Stanach Zjednoczonych kosztowały gospodarkę amerykańską ponad bilion dolarów.

A przełożyły się na realny problem dla ponad czterech miliardów klientów.

Bardzo częstym oporem organizacji, odczuwanym wobec testowania, jest jego kosztowność.

Przy czym jest to perspektywa bardzo krótkoterminowa, nie biorąca pod uwagę, że doraźny wydatek jest tak naprawdę oszczędnością. Lub po prostu inwestycją w bezpieczeństwo biznesu.

Rozwój, wsparcie oprogramowania testowanego oraz nie poddanego testom jest zawsze mniej kosztowne w przypadku pierwszej opcji i zdecydowanie wymagające większych budżetów, prac, czasu w przypadku drugiej opcji.

Dobrą praktyką jest poddawanie testom oprogramowania już na bardzo wczesnym etapie jego tworzenia, dzięki czemu możliwe jest:

  • szybsze reagowanie na odkryte problemy, które wraz z zaawansowaniem projektu stawałyby się coraz bardziej problematyczne, kosztowne
  • odkrycie wad architektonicznych
  • odkrycie luk w zabezpieczeniach
  • odkrycie  nieprawidłowo działających funkcjonalności
  • odkrycie problemów ze skalowalnością
  • zwiększenie niezawodności.

Przez wiele lat Testowanie Oprogramowania było wykonywane na późnych etapach rozwoju produktu cyfrowego, co częstokroć było źródłem wielu problemów - od budżetowych, po czysto technologiczne.

Cykl życia rozwoju produktu (Software Development Life Cycle) nie pokrywał się z cyklem życia Testowania Oprogramowania (Software Testing Life Cycle).

Aktualnie w tworzeniu oprogramowania dominuje metodologia ciągłego, nieustannego testowania, która jest częścią podejścia DevOps, a która pozwala dostarczać oprogramowanie w sposób szybszy oraz bardziej zrównoważony pod względem kosztów, jakości oraz ryzyka.

Cykl życia Testowania Oprogramowania (Software Testing Life Cycle)

Jak pisaliśmy powyżej, Testowanie Oprogramowania jest procesem, w którego ramach można wyróżnić różne etapy, fazy, układające się w pewien cykl.

A cykl życia to nic innego jak pewnego rodzaju sekwencja zmian, przez które przechodzi oprogramowanie. Po prostu z jednej formy przechodzi w drugą.

Cykl życia Testowania Oprogramowania, jeśli jest wdrożony w sposób dobrze zaplanowany, gwarantuje organizacji uzyskanie możliwie dużej kontroli nad jakością tworzonego oprogramowania.

Można mówić o strategicznym podejściu do jakości tworzonych produktów i usług cyfrowych.

Stosując rozsądny cykl życia testowania oprogramowania, organizacja uzyskuje strategię jakości, która ma większe szanse na uzyskanie lepszych wyników.

By tak się stało konieczne jest odpowiednie przejście przez kolejne fazy, które obejmują:

  • planowanie testów
  • przygotowanie testów
  • wykonanie testów
  • raportowanie testów.

W fazie planowania konieczne jest zbieranie wszystkich wymagań (funkcjonalnych i niefunkcjonalnych), jakie są stawiane produktowi lub usłudze cyfrowej.

Bardzo często w tym zakresie testerzy oprogramowania współpracują z analitykami biznesowymi.

Lista powinna być wyrażona w formie zadań, które należy wykonać w trakcie testów. Kolejność zadań jest istotna i powinna być priorytetyzowana.

W kolejnym etapie przygotowań konieczne jest stworzenie środowiska testowego, zebranie wszystkich przypadków testowych, badanie cech produktu oraz przypadków testowych.

To także moment, w którym należy przygotować narzędzia do testowania oprogramowania oraz dopasować rodzaje, techniki testowania.

W fazie wykonania, jak sama nazwa sugeruje, wykonywane są konkretne Testy Oprogramowania, a ich wyniki są konfrontowane z założeniami, oczekiwaniami.

W fazie raportowania konieczne jest udokumentowanie wszystkich wyników, analiz, diagnoz w formie możliwie prostej i komunikatywnej.

Jakie są rodzaje Testowania Oprogramowania? Przykłady Testów Oprogramowania

Testowanie Oprogramowania jest dziedziną, która rozwija się bardzo dynamicznie, stąd też istnieje wiele rodzajów Testów Oprogramowania, służących bardzo różnym celom.

W najbardziej ogólnym sensie, zgodnie z kryterium sposobu wykonania testu, testowanie aplikacji desktopowych, mobilnych można podzielić na:

  • testowanie oprogramowania - testy manualne, ręczne
  • testowanie oprogramowania - testy automatyczne.

Testowanie aplikacji webowych, testowanie aplikacji mobilnych w wariancie manualnym wykonywane jest przez testera, który w odpowiednim środowisku testowym wchodzi w interakcję z interfejsami oprogramowania i sprawdza sposób ich działania.

Testy manualne, jak wszystkie rodzaje testów, nie są idealne i posiadają swoiste ograniczenia.

Do najważniejszych należy:

  • kosztowność
  • podatność na typowo ludzkie błędy (np. pominięcie jakiegoś przypadku testowego).

Ograniczenia te spowodowały dużą popularyzację testów automatycznych, które są o wiele bardziej niezawodne, złożone, szybsze i koniec końców tańsze.

Testy automatyczne są rekomendowane przede wszystkim ze względu na możliwość wykorzystania zróżnicowanych scenariuszy testowych.

Aktualnie stały się jednym z kluczowych elementów kontroli jakości w miarę rozwoju, dodawania nowych funkcji do aplikacji.

Innymi popularnym podziałem Testów Oprogramowania jest podział na:

  • testowanie czarnoskrzynkowe
  • testowanie białoskrzynkowe
  • testowanie szaroskrzynkowe.

Testy czarnoskrzynkowe (używane do testowania funkcjonalnego) polegają na testowaniu oprogramowania bez znajomości struktury jego kodu oraz zaimplementowanej logiki.

Są testami przeprowadzanymi z perspektywy użytkownika końcowego. Celem testu jest sprawdzenie działania interfejsów aplikacji, oprogramowania.

W przeciwieństwie do testów czarnoskrzynkowych, testy białoskrzynkowe są wykorzystywane do przetestowania serca aplikacji, oprogramowania, a więc jej kodu. Mają na celu przede wszystkim sprawdzenie spójności kodu, czystości kodu, zwięzłości kodu, bezpieczeństwa kodu.

Testy białoskrzynkowe nie skupiają się na działaniu aplikacji, tylko pozwalają sprawdzić mocne i słabe strony oprogramowania od strony czysto technologicznej.

Z kolei testy szaroskrzynkowe, będące mariażem obu powyższych rodzajów, polegają na testowaniu oprogramowania, które do pewnego stopnia jest znane testerowi.

Wiedza o produkcie (częściowa i ukierunkowująca poszukiwanie błędów) pozwala identyfikować błędy, które byłyby trudne do odkrycia w innych wariantach testów.

Ponadto, do najpopularniejszych testów Oprogramowania należą:

  • testy jednostkowe
  • testy integracyjne
  • testy funkcjonalne
  • testy akceptacyjne
  • testy wydajności
  • testy dymne
  • testy użyteczności.

Testy jednostkowe służą do sprawdzenia, czy każda jednostka (najmniejszy testowalny komponent aplikacji) działa zgodnie z oczekiwaniami.

Mówiąc bardziej szczegółowo, chodzi w nich o testowanie poszczególnych metod i funkcji klas, komponentów lub modułów używanych przez oprogramowanie.

Testy integracyjne pozwalają sprawdzić zgodność, efektywność współpracy, powiązania poszczególnych modułów.

Testy funkcjonalne pozwalają sprawdzić, w jaki sposób są realizowane przez aplikację wymagania biznesowe.

Testy akceptacyjne pozwalają zweryfikować, czy oprogramowanie działa zgodnie z przeznaczeniem, czy spełnia wymagania biznesowe.

Testy wydajności sprawdzają zachowanie oprogramowania przy różnych obciążeniach. Pozwalają ustalić poziom niezawodności, stabilności i dostępności aplikacji.

Testy dymne służą do przetestowania podstawowych funkcjonalności aplikacji.

Testy użyteczności weryfikują poziom użyteczności oprogramowania dla użytkownika końcowego.

Najlepsze praktyki Testowania Oprogramowania

Sposób przeprowadzenia Testów Oprogramowania ma kluczowe znaczenie dla ich rzetelności, konkluzywności, użyteczności.

Do najważniejszych kwestii, które wpływają na jakość uzyskanych w testach wyników należy:

  • właściwe zdefiniowanie zadań, kroków
  • odpowiednie zaprojektowanie środowiska testowego
  • wyczerpujące opracowanie przypadków testowych
  • stworzenie adekwatnych skryptów
  • analiza wyników
  • raportowanie.

Czas wdrożenia pierwszych testów, ich zakres (najczęściej obejmuje się nimi interfejsy API, interfejsy użytkownika oraz poziomy systemu) oraz regularność mają kluczowe znaczenie.

Ponadto, ważne jest, by utrzymać:

  • ciągłość testów - testy są automatyzowane oraz zintegrowane z procesem wdrożenia
  • odpowiednie zarządzanie konfiguracją (Software Configuration Management) - obejmujące odpowiednio zdefiniowane działania, których celem jest planowanie, organizowanie, sterowanie i koordynowanie zmian w oprogramowaniu
  • stałe śledzenie błędów (Bug Tracking) - polegające na wykrywaniu błędów, określaniu ich zakresu i wpływu
  • właściwe raportowanie - pozwalające skutecznie dzielić się wynikami testów, co pozwala szybko określać i komunikować relacje zachodzące między testami, programowaniem i innymi elementami projektu.

Jakie są podstawowe role przy Testowaniu Oprogramowania?

Zakres osobowy, kompetencyjny, związany z odpowiedzialnością oraz zarządzaniem procesem testowania będzie oczywiście się różnił w zależności od charakteru projektu, jego wielkości, złożoności.

testowanie oprogramowania rodzaje

Niemniej jednak, w skład standardowego zespołu odpowiedzialnego za testowanie wchodzić powinni:

  • kierownik testów
  • inżynier automatyzacji testów
  • tester
  • analityk testów.

Kierownik testów odpowiada za tworzenie strategii testów, jego wdrożenie, konieczne do jego wykonania zasoby.

Inżynier automatyzacji testów odpowiada za projektowanie, rozwój i utrzymanie architektury testów automatycznych.

Tester jest odpowiedzialny za wykonanie konkretnych testów.

Analityk testów dokonują analizy wymagań aplikacji, opracowuje plany testów oraz analizuje wyniki testów.

Pisząc o rolach w procesie Testowania Oprogramowania trzeba także wspomnieć o Właścicielach Produktów (Product Owners), których zadaniem jest utrzymywanie pożądanego kierunku oraz określanie kryteriów akceptacji efektów prac, także testowych.

Współpraca między Właścicielem Produktu a zespołem testowym w dużej mierze przesądza o jakości samego oprogramowania.

Co to jest Testowanie Oprogramowania (Software Testing)? Podsumowanie

  1. Każdy program, aplikacja wymaga testowania - w każdej branży, bez względu na doświadczenie, jakie posiada zespół programistów pracujących nad produktem cyfrowym.
  2. Testowanie Oprogramowania najczęściej definiuje się jako proces weryfikacji zgodności działania aplikacji z wymaganiami funkcjonalnymi.
  3. Pracując nad projektami produktów cyfrowych należy pamiętać, że testom poddaje się całość oprogramowania oraz poszczególne jego elementy.
  4. Celem Testów Oprogramowania jest wykrycie błędów, luk, defektów.
  5. Testowanie Oprogramowania wymaga uwagi, bowiem pozwala zmniejszyć koszty rozwoju aplikacji, oferować produkty, usługi wydajniejsze, stabilniejsze, bardziej bezpieczne.
  6. Software Testing jest zbiorem metod, narzędzi, praktyk, które pozwalają ustalić, czy produkt cyfrowy jest wolny od wad oraz zgodny ze specyfikacją wymagań funkcjonalnych.
  7. Oprogramowania, technologie należy testować w sposób planowy, konsekwentny, rzetelny, wyczerpujący oraz klarowny, zgodny ze specyfikacją określoną w wymaganiach.
  8. Oprogramowanie przetestowane zapewnia niezawodność, stabilność działania, wyższą wydajność, bezpieczeństwo oraz lepsze User Experience.
  9. Oprogramowanie należy testować już na wczesnym etapie jego produkcji.
  10. Metodologia ciągłego testowania pozwala dostarczać oprogramowanie w sposób szybszy oraz bardziej zrównoważony pod względem kosztów, jakości oraz ryzyka.
  11. Cykl życia Testowania Oprogramowania gwarantuje organizacji uzyskanie możliwie dużej kontroli nad jakością tworzonego oprogramowania.
  12. W procesie Testowania Oprogramowania konieczne jest przejście przez kolejne fazy, które obejmują planowanie testów, przygotowanie testów, wykonanie testów, raportowanie testów.
  13. Testowanie Oprogramowania modele można podzielić na testy manualne, automatyczne, czarnoskrzynkowe, białoskrzynkowe oraz szaroskrzynkowe.
  14. Sposób przeprowadzenia Testów Oprogramowania ma kluczowe znaczenie dla ich rzetelności, konkluzywności, użyteczności.
  15. W skład standardowego zespołu odpowiedzialnego za test oprogramowania wchodzić powinni kierownik testów, inżynier automatyzacji testów, tester, analityk testów.
Oceń artykuł:
Journal / Redaktor
Autor: Radek
UX Writer i badacz z wykształcenia + doświadczenia. Zbiera wiedzę The Story i dzieli się nią na Journalu.

Jesteś zainteresowany współpracą z nami? Zajrzyj do Portfolio