Smoke, sanity, regression testy

766
views

Czy wyobrażasz sobie, że Twoja aplikacja, przekazywana jest klientowi, bez przeprowadzenia testów? Jak ustrzec się przed sytuacją, że klient dostaje nową wersję aplikacji, po czym nie potrafi jej zainstalować czy uruchomić albo nie jest w stanie zalogować się do systemu? To chyba czarny sen każdego programisty.

Tutaj z pomocą przychodzą testy, dzięki którym ryzyko pojawienia się błędów u klienta zostanie zminimalizowane… Ale pojawia się pytanie, jak testować i kiedy testować?

Dzisiaj skupię się na trzech rodzajach testów – smoke testach, sanity testach oraz testach regresji. W teorii testowania powstało bardzo dużo interpretacji tych rodzajów testów, w szczególności dotyczących sanity i smoke testów.

Jeszcze parę lat temu, mało kto słyszał o takim podejściu do testowania. Często smoke testy były wręcz utożsamiane z testami sanity. Świadczy o tym choćby sam słownik ISTQB z 2014 roku gdzie występuje wytłumaczenie smoke testów jako “Podzbiór wszystkich zdefiniowanych/ zaplanowanych przypadków testowych, które pokrywają główne funkcjonalności modułu lub systemu, mający na celu potwierdzenie że działają kluczowe funkcjonalności programu, bez zagłębienia się w szczegóły”. Gdy odnajdziemy słowniku Testy sanity znajdziemy odnośnik do pojęcia smoke testów. Nie ma wyraźnego rozróżnienia.

Smoke i sanity testy – czym to się je?

Sama nazwa “Smoke testy” podsuwa nam zasadę tych testów – testy dymne – pierwsze smoke testy polegały po prostu na podłączeniu urządzenia do prądu, uruchomienia go i sprawdzenia czy nie wydobywa się z niego dym. Tego rodzaju testu mają nam odpowiedzieć na pytanie czy dalsze testowanie ma sens, czy jest w ogóle możliwe. Ponadto testy te są bardzo szybkie, powierzchowne.

Jeżeli smoke testy zakończą się sukcesem, można przystąpić do sanity testów. Po wykonaniu tego rodzaju testów otrzymamy odpowiedź na pytanie czy logika aplikacji i funkcjonalności są zgodne z wymaganiami.

Z biegiem czasu jednak nastąpiło wyraźne rozróżnienie tych dwóch rodzajów testów – zatem czym są ? Zapytałam znajomych QA jak rozumieją temat smoke i sanity testów.

Oto cytaty z rozmów z nimi:

  • “Smoke jest bardziej chyba skupiony na nowych funkcjonalnościach, a sanity to taka trochę regresja w ciemno”,
  • “Smoke potwierdza że działa, a sanity to masz sprawdzić czy działa zgodnie ze specyfikacją”,
  • “Smoke test to czy w ogóle coś działa, a sanity testy to czy działa tak jak ma działać”,
  • “Smoke test –> Czy da się uruchomić aplikację” ,
  • “Sanity test –> Czy aplikacja wymaga logowania”.

Analizując ich odpowiedzi można stwierdzić, że QA są świadomi różnicy pomiędzy tymi dwoma typami testów. Praktycznie każdy tester bardziej lub mniej świadomie doskonale radzi sobie z tymi dwoma różnymi podejściami.

Dobrze, zatem do czego nam są potrzebne takie testy? Pozwalają nam wychwycić we wczesnej fazie tworzenia produktu błędy w podstawowych funkcjonalnościach. Dzięki czemu oszczędzamy czas i pieniądze ponieważ nie wykonujemy zbędnej pracy.

Przykład smoke i sanity testów:

Przykład smoke testu dla aplikacji zawierającej wyszukiwarkę najkorzystniejszych cen:

  • Przejdź do okna wyszukiwarki
  • Wprowadź nazwę produktu w polu wyszukiwarki
  • Kliknij przycisk “Szukaj”
  • Czy użytkownikowi został zwrócony wynik?

Dla tego samego przypadku Sanity test:

  • Czy oferty specjalne wyświetlane są jako pierwsze?
  • Czy reszta ofert jest posortowanych wg. cen?

To jeszcze coś o testach regresji

Znając różnice pomiędzy testami smoke i sanity warto odnieść się jeszcze do testów regresji. Testy regresji wg Słownika ISTQB to “Ponowne przetestowanie uprzednio testowanego programu po dokonaniu w nim modyfikacji, w celu upewnienia się, że w wyniku zmian nie powstały nowe defekty lub nie ujawniły się defekty w niezmienionej części oprogramowania. Testy takie są przeprowadzane po zmianach oprogramowania lub jego środowiska pracy”.

Innymi słowy mówiąc są to testy które mają na celu upewnienie się że w aplikacji nie ma nowych, nieznanych błędów które mogły być wynikiem wprowadzonych zmian. Są to dosyć szczegółowe testy, przeprowadzane na znacznie szerszą skalę niż smoke i sanity testy. Często mogą zawierać zestaw testów który obejmuje zgłoszone i naprawione już błędy.

Różnice pomiędzy omawianymi rodzajami testów obrazuje poniższa grafika:

Podsumowanie

Najprościej rzecz ujmując:

  • Smoke testy, to powierzchowne testy pozwalające nam znaleźć krytyczne błędy.
  • Sanity testy, są bardziej rozbudowane, pozwalają nam upewnić się że aplikacja działa jak należy.
  • Testy regresji są to najbardziej rozbudowane testy, pozwalające nam sprawdzić czy w aplikacji nie pojawiły się jakieś błędy w trakcie implementacji innych funkcjonalności. Ten rodzaj testów pozwala uchwycić nawet drobne zmiany.

Zatem można powiedzieć, że te trzy rodzaje testów różnią się czasem, kiedy powinny być przeprowadzane – smoke i sanity testy na początku fazy testowej, testy regresji na jej końcu.

Świadomość różnic i korzyści płynących ze stosowania takiego podejścia do testów wpływa bezpośrednio na jakość produktu. Dlatego tak ważne jest zrozumienie, czym różnią się te podejścia a potem świadomie je stosować w projekcie.