Piramida testów, techniki projektowania testów

Od ponad dekady, piramida testowania pomaga programistom w planowaniu automatycznych testów oprogramowania. W tym artykule, zbadamy co składa się na piramidę, jak jest ona pomocna i jakie są alternatywne „kształty”.

Czym jest Piramida Testowania?


Wprowadzona przez Mike’a Cohna w jego książce Succeeding with Agile (2009), piramida jest metaforą myślenia o testowaniu oprogramowania. Jest to pomysł, który przyjął się tak mocno, że do dziś jest standardem przemysłowym w kręgach inżynierskich.

A prościej, jest to framework, który może ułatwić zarówno deweloperom jak i QA budowanie wysokiej jakości oprogramowania. Minimalizuje ilość czasu potrzebną do określenia, czy aktualizacja, której dokonali, wpływa na kod. Pomaga również w tworzeniu bardziej solidnego zestawu testów.

Piramida testowa, znana również jako piramida automatyzacji testów, zasadniczo opisuje typy testów, które zespoły deweloperskie i QA powinny włączyć do zautomatyzowanego zestawu testów. Ponadto, definiuje kolejność i częstotliwość takich testów. Celem jest dostarczenie szybkiej informacji zwrotnej, aby zapewnić, że zmiany w kodzie nie wpływają na istniejącą funkcjonalność.

Kolejność testowania, priorytety testów

Tak więc jeśli Twój zespół programistów musi czekać dłużej na uruchomienie pakietu testów? Czy muszą wielokrotnie uruchamiać pakiet testowy po nieudanych testach, ponieważ ponowne uruchomienie wydaje się rozwiązywać problem? Jeśli Twoi programiści doświadczają tych problemów, to najprawdopodobniej ich zestaw testów nie jest zgodny z piramidą automatyzacji testów.

Piramida testów ma trzy poziomy: (od najniższego)

  • Testy jednostkowe
  • Testy integracyjne
  • Testy akceptacyjne

Testy jednostkowe

Podstawą piramidy są testy jednostkowe. Jednostka jest małym logicznym fragmentem kodu: może to być funkcja, klasa, a nawet metoda w klasie. Test jednostkowy sprawdza jedynie, czy dana jednostka zachowuje się tak, jak zamierzał to zrobić programista. Poprzez bezpośrednie wywołanie testowanego kodu i ocenę jego wyjścia, programista może napisać test jednostkowy bez zależności od innych komponentów czy usług.

Testy jednostkowe służą jako fundament piramidy testów. Testy jednostkowe mają ograniczony zakres i zapewniają, że wyizolowane jednostki kodu działają zgodnie z oczekiwaniami. Testy jednostkowe powinny oceniać pojedynczą zmienną i nie polegać na zewnętrznych zależnościach.

Testy integracyjne

Jeden poziom wyżej, na środku piramidy, znajdziemy testy integracyjne, które nazywane są „testami usług„. Integracja w tym kontekście odnosi się do testowania, jak różne komponenty systemu działają razem. Na przykład, czy model w kodzie może poprawnie wymieniać dane z bazą danych lub czy metoda może pobierać informacje z API. Nie są potrzebne interakcje, ponieważ testy integracyjne mogą bezpośrednio wywoływać kod na interfejsach.

Testy integracyjne zapewniają, że oprogramowanie komunikuje się sprawnie i korzysta z poprawnych danych, aby działać zgodnie z oczekiwaniami i wymaganiami.
Testy te są zazwyczaj wolniejsze niż testy jednostkowe ze względu na konieczność interakcji z zewnętrznymi źródłami.

Testy akceptacyjne


I na koniec o testach akceptacyjnych. Testowanie akceptacyjne jest wierzchołkiem piramidy testów. Spotkać się można również z określeniem: testy end to end (E2E). Testy akceptacyjne mają za zadanie zweryfikować aplikację jako cały, kompletny, gotowy produkt najlepiej już w środowisku produkcyjnym. Tego typu testy mogą wykonywać nie tylko profesjonalni testerzy oprogramowania, ale także klienci, użytkownicy biznesowi, operatorzy systemów lub inni interesariusze.
Idealną metodą podejścia do testów akceptacyjnych jest podejście z perspektywy użytkownika końcowego, tzn. powinni jak najwierniej symulować ich potencjalną pracę z aplikacją.

Z wykorzystaniem testów akceptacyjnych sprawdzamy, czy spełnione zostały wszystkie wymagania wysokopoziomowe (czarnoskrzynkowe), oraz czy wszystkie przypadki testowe mają status passed. Głównym celem jest znalezienie potencjalnych błędów komunikacyjnych między wszystkimi komponentami aplikacji, złej interpretacji wymagań stawianych aplikacji, czy też poprawności aplikacji w docelowej infrastructure i środowisku pracy.

Jak widać, te trzy rodzaje testów mają bardzo różne zakresy:

  • Testy jednostkowe mogą znaleźć tylko błędy logiczne na najbardziej podstawowym poziomie. Są szybkie i wymagają bardzo mało zasobów do uruchomienia.
  • Testy integracyjne sprawdzają, czy usługi i bazy danych dobrze współpracują z innymi istniejącymi komponentami. Głównie znajdują problemy komunikacyjne wewnątrz i na zewnątrz aplikacji.
  • Testy akceptacyjne weryfikują całą, gotową aplikację. Są to najbardziej wszechstronne testy i zwykle potrzebują najwięcej zasobów i czasu na ich przeprowadzenie.

Dlaczego więc piramida testów?


Aby zrozumieć jak piramida uzyskała swój kształt, musimy zrozumieć zawiłości każdego typu testów.

Na przykładzie testów jednostkowych – są małe, a więc łatwe do napisania i utrzymania. Ponieważ testują bardzo wąskie, małe, zgranulowane części kodu, potrzebujemy ich dużo. Zazwyczaj nie jest to problem, ponieważ testy jednostkowe są na tyle lekkie, że możemy uruchomić ich duże ilości w bardzo krótkim czasie.

Piramida testów automatycznych – zalety

Kluczowe zalety automatyzacji piramidy testów

  • Oszczędność czasu i kosztów
  • Eliminacja błędów ludzkich dla zapewnienia dokładności
  • Możliwość ponownego użycia, powtarzania i skalowania testów aplikacji w celu spełnienia wymagań oprogramowania.

Mamy nadzieję, że teraz rozumiecie, dlaczego piramida ma swój kształt: szerokość każdej warstwy reprezentuje względną ilość każdego rodzaju testów. Kiedy podążamy w górę piramidy, testy stają się bardziej złożone i obejmują bardziej rozległą część aplikacji. Jednocześnie wzrasta wysiłek związany z ich pisaniem, uruchamianiem i utrzymaniem. Piramida ilustruje poprawny stosunek, który maksymalizuje szansę na znalezienie błędu przy najmniejszym nakładzie pracy.

Notatka o autorze:

Zajmuję się testowaniem, zabezpieczaniem i zapewnianiem jakości oprogramowania od ponad 13 lat. Rozpocząłem swoją karierę od testów manualnych i analizy biznesowo-technicznej. Obecnie prowadzę firmę Quality Island, która zajmuje się szeroko pojętym testowaniem oprogramowania oraz szkoleniami dla przyszłych i obecnych testerów oprogramowania. Moją specjalnością są testy automatyczne aplikacji webowych oraz budowa procesów automatyzacji i robotyzacji. Od 8 lat prowadzę aktywnie szkolenia oraz konsultacje z tych tematów i wykonuję zlecenia dla firm trzecich jako konsultant, ekspert oraz audytor. Współpracuję również z firmami jako osoba do rekrutacji i weryfikacji technicznych. Interesują mnie głównie tematy związane z architekturą IT oraz zagadnienia DevOps/TestOps, ponieważ ściśle wiążą się z zapewnianiem jakości oprogramowania.

 

Tomasz Stelmach

CEO&Founder

 

0 komentarzy

Wyślij komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *