Automatyzacja testów

Jednymi z bardziej cenionych oraz poszukiwanych obecnie na rynku umiejętności testerskich są związane związane z automatyzacją testów która pozwala na skrócenie czasu wykonywania powtarzających się testów. Automatyzacja testów polega na tworzeniu skryptów (np. za pomocą języka programowania lub narzędzi do „nagrywania” typu Capture and Replay)  pozwalających w sposób automatyczny weryfikować funkcjonalność systemu. Automatyzację taką możemy przeprowadzać na różnych poziomach testów ale to omówimy sobie w dalszej części artykułu. Zanim jednak podejdziemy do samej automatyzacji testów warto abyśmy sobie odpowiedzieli na kilka podstawowych pytań które pozwolą nam nakierować kierunek w który  chcemy podążać w obszarze automatyzacji testów.
Ważne aby wszyscy byli świadomi że zrobienie byle jakiej automatyzacji która nie przynosi celów biznesowych jest proste. Trudniej z automatyzacją która ma przynieść założony efekt.
Od kilku lat zaobserwowaliśmy tendencję polegającą na tym że wszyscy chcą automatyzować testy. W przypadku gdy współpracujemy z jakąś firmą w obszarze automatyzacji często na pytanie co chcecie abyśmy zautomatyzowali dostajemy często odpowiedź „no jak to co ? wszystko” . W dalszej części tego artykułu omówimy sobie obszary / produkty które warto automatyzować a które warto tylko testować w sposób manualny.

Co chcemy/potrzebujemy automatyzować ?

Śledząc popularne grupy dyskusyjne związane z testowaniem oprogramowania bardzo wiele osób skupia się jedynie nad automatyzacją pojedynczych elementów systemu – np. GUI zapominając o tym że automatyzacja testów zależy od tego na jakim poziomie testów chcemy ją wprowadzić.  Zanim napiszemy pierwszy test automatyczny musimy się zastanowić czego tak naprawdę potrzebujemy ? Poniżej lista przedstawiająca co tak naprawdę możemy automatyzować.
  • Testy jednostkowe (Unit Tests)
  • API
  • Webservices
  • GUI
  • Testy Wydajnościowe
Zanim wybierzemy „nasz” obszar do automatyzacji warto spojrzeć na Piramidę testów (podejście Agile) która została spopularyzowana przez Mike’a Cohn’a
PiramidaTestow

Co chcemy/potrzebujemy automatyzować ?

Kolejna rzeczą którą powinniśmy zrobić zanim rzucimy się w wir pisania testów automatycznych jest zastanowienie się i odpowiedzenie sobie na pytanie „Po co automatyzować” ? – Co chcemy osiągnąć dzięki naszym automatom ? i do czego te automaty będą nam potrzebne.

Automatyzowanie powtarzających się czynności

Jest to jedna z podstawowych rzeczy do których powinny zostać automaty testowe. Nasza praca powinna polegać na znalezieniu powtarzających się czynności które mogą podlegać automatyzacji. Jak wiemy powtarzanie wielokrotnie tych samych czynności jest bardzo nużące a przez do narażone na błędy ludzkie (ktoś np. pominie test). Warto więc określić w naszych projektach / projekcie te czynności testerskie które warto w pierwszej kolejności zautomatyzować np:
  • Testy Regresyjne
  • Testy Dymne
  • Testy wydajnościowe
  • Testy konfiguracyjne (te same testy na różnych konfiguracjach, OS, Przeglądarki itp)

Szybsze wydawanie wersji do klienta

Automaty testowe pozwalają znacznie ograniczyć czas potrzebny na wydawanie wersji do klienta. W momencie kiedy mamy zautomatyzowane testy regresji nie trzeba skupiać się na ich wykonywaniu ręcznie a jedynie weryfikować nową funkcjonalność. Jeśli do tego mamy stworzone testy jednostkowe jesteśmy w dobrej drodze aby uzyskać szybką informacje zwrotną na temat testowanego produktu. Sukces w szybszym wydawaniu wersji oczywiście zależy od całościowego procesu testowania oprogramowania i jego tworzenia – ale automatyzacja powiązana z systemem ciągłej integracji może sporo pomóc

Szybka informacja zwrotna na temat testowanego produktu

Czasem potrzebujemy szybką informację na temat testowanego produktu – w przypadku gdy mamy stworzone automaty możemy skrócić czas uzyskania takiej informacji

Niektórych testów nie da się zrealizować w sposób manualny

Niektóre z testów nie da zrealizować się poprzez testy manualne. Przykładem mogą tutaj być testy wydajnościowe, za pomocą których możemy symulować pracę wielu użytkowników. Nikt natomiast nie będzie przeprowadzać takiej symulacji ręcznie np. z wykorzystaniem  400 osób

Mity związane z automatyzacja testów

MIT #1 – Automatyzacja Testów pozwala zastąpić testerów manualnych

Nie raz słyszeliśmy że firmy chcą wprowadzić testy automatyczne po to  aby móc uwolnić zasoby w postaci testerów manualnych. Nie ma możliwości aby testy automatyczne w 100% zastąpiły przeprowadzanie testów manualnych. Musimy być świadomi że testy automatyczne są tylko i wyłącznie uzupełnieniem testów manualnych przeprowadzanych przez doświadczonych testerów eksploracyjnych.

MIT #2 – Raz napisany automat testowy będzie działał niezmiennie

Często w ofercie dla klienta związanej z automatyzacją testów znajduje się pozycja związana z utrzymaniem i konserwacją testów automatycznych i dostosowania ich do nowych wersji produktów. Klient czasem jest zaskoczony że napisane testy należy utrzymywać (czasem nawet trzeba je przepisywać i dostosowywać do nowej wersji produktu). Warto pamiętać że testy trzeba nie tylko dostosowywać do nowych wersji produktu (kto automatyzował wie że zmiana identyfikacji jednego pola przez programistę może spowodować że nasze testy przestaną działać). Również pojawiają się nowe pola, nowe formatki które należy również trzeba zautomatyzować. Dodatkowo proszę pamiętać że jedną z 7 podstawowych zasad testowania jest „Paradoks Pestycydów” który generalnie polega na tym aby regularnie dokonywać przeglądu bieżących przypadków testowych (również testów automatycznych) i odpowiednio je modyfikować aby wykrywały nowe defekty.

MIT #3 – Wszyscy potrafią automatyzować

Umiejętności/kompetencje pozwalające na tworzenie testów automatycznych są inne w stosunku do przeprowadzanych testów manualnych. W zależności od tego na jakim poziomie testów chcemy wdrożyć testy automatyczne są potrzebne unikatowe umiejętności. Zazwyczaj tester automatyczny musi być biegłym programistą znającym się dobrze na programowaniu i dodatkowo zna narzędzia / frameworki pozwalające na przeprowadzenie testów automatycznych. Za dobre kompetencje oczywiście musimy odpowiednio zapłacić.

MIT #4 – Testy automatyczne są bardzo szybkie

Wszystko zależy od tego na jakim poziomie mamy wdrożone testy automatyczne. W przypadku gdy nasz testy polegają jedynie na weryfikacji z poziomu GUI może się okazać że czas ich trwania nie jest tak szybki jaki byśmy sobie oczekiwali – przykładowo testy na 4 przeglądarkach + 3 różnych systemach operacyjnych mogą trwać nawet kilkadziesiąt godzin.

MIT #5 -Tylko testerzy są od automatyzacji testów

Istnieje MIT który ciągle gdzieś się przewija w osobach tworzących systemy że automatyzacja testów to działka przeznaczona tylko dla testerów. Nic bardziej mylnego. Patrząc na jeden z rozdziałów wyżej, w którym przedstawiona została Piramida Testów automatycznych – jednymi z najszybszych testów pozwalających na weryfikację działania poszczególnych modułów są testy jednostkowe. Kto powinien pisać testy jednostkowe ? no właśnie najlepiej w tej roli sprawdzają się twórcy samego produktu. Dodatkowo kto powiedział że testy  GUI interfejsu użytkownika nie mogą być tworzone przez np. Programistów

Problemy / zagrożenia związane z automatyzacją testów

Automatyzacja testów niesie ze sobą ogrom zalet ale powinniśmy być również świadomi tego jakie zagrożenia one niosą:
  • Oczekiwania
W sytuacji gdy firma ma nierealistyczne oczekiwania co do automatów (np. zrobienie automatów przez 2 tygodnie dla produktu rozwijanego przez 8 lat) mogę one skutkować tym że tak szybko jak się zdecydowaliśmy co do tworzenia automatów tak szybko z nich zrezygnujemy
  • Fałszywe poczucie dobrego produktu
Testy automatyczne są tak dobre, jak zostały zaprojektowane do nich przypadki testowe oraz zostały zautomatyzowane. To że mamy 3000 zautomatyzowanych test casów które zawsze przechodzą na „zielono” nie znaczy że mamy świetny produkt. Trzeba poważnie się zastanowić gdy nasze testy nie wykrywają żadnych błędów a dochodzą do Nas informacje od klientów że produkt nie jest dobrej jakości. W takiej sytuacji trzeba bardzo szybko zrobić przegląd testów, obszarów które są pokryte.
  • Koszt utrzymania testów
Koszt utrzymania testów musi zostać uwzględniony w kosztach produktu a koszt takich testów często nie jest mały. W sytuacji gdy aplikacja zmienia się bardzo dynamicznie, i trzeba ciągle poprawiać scenariusze testowe oraz testy automatyczne w oparciu o te scenariusze może się okazać że nasze testy są nieopłacalne. Warto wtedy się zastanowić nad zawężeniem testów automatycznych do newralgicznych części systemu
  • Problemy techniczne 
Ogrom różnych technologii/frameworków/komponentów wykorzystywanych przy pisaniu systemu ma duży wpływ na czas oraz koszt jego późniejszej automatyzacji. Warto o tym pomyśleć już na etapie budowy samej aplikacji z jakich komponentów będzie nasza aplikacja będzie zbudowana i czy istnieją narzędzia pozwalające na automatyzację testów.
  • Automatyzacja Testów sposobem na słabą jakość produktu
Pamiętajmy że automatyzacja jest tylko i wyłącznie uzupełnieniem testów manualnych. W sytuacji gdy mamy źle zdefiniowany / brak proces testowy, słabą jakość produktu, brak dobrych praktyk programistycznych – żadne automaty nie pomogą w rozwiązaniu tych problemów

Share This Post!