Przy okazji niedawno organizowanych przez Kainos warsztatów Test Automation Academy, inicjatywy mającej na celu zainteresowanie uczestników szkolenia testami automatycznymi, a przede wszystkim bardzo szybko rozwijającym się narzędziem do testowania aplikacji webowych, jakim jest Selenium, miałem okazję przedstawić krótki wykład dotyczący testów automatycznych. Zebraną tam wiedzę chciałbym również przedstawić w tym wpisie. Dzisiaj publikuję część pierwszą, natomiast już niedługo możecie się spodziewać części drugiej.

Na samym początku pragnę wyjaśnić, czym właściwie są testy automatyczne i co jest w nich takiego niesamowitego. Z punktu widzenia deweloperów oprogramowania testowanie może wydawać się zajęciem nieco nudnym i monotonnym. Powszechne wyobrażenia na temat tego, czym zajmują się testerzy, często powielają obraz testera-klikacza. Pisząc ten artykuł, chciałbym obalić ten mit i pokazać, że testowanie aplikacji w sposób automatyczny może być zajęciem nie mniej kreatywnym, niż samo tworzenie oprogramowania.

Testy automatyczne, w opozycji do testów manualnych, w dużej mierze opierają się na programowaniu. Zadaniem testera jest przygotowanie narzędzi, które w sposób jak najbardziej autonomiczny wykonają zadany scenariusz i ocenią jego rezultaty.

Dlaczego testy automatyczne?

Wiemy już czym są testy automatyczne. Jednak nasuwa się pytanie, dlaczego je używamy. Jakie są zalety testów automatycznych?

Przede wszystkim testy automatyczne świetnie uzupełniają testy manualne. Trzeba jednak podkreślić słowo uzupełniają. Mylne jest mniemanie, że testy automatyczne mogą całkowicie zastąpić i wyeliminować z użycia testy manualne. W ogólności, pewne sfery testowanego produktu powinny zostać testowane w sposób ręczny. Przyczyną tego może być fakt, że komputery mają trudności z przetwarzaniem i interpretowaniem pewnych informacji, które są naturalne dla człowieka. Prawidłowość ta działa jednak także w drugą stronę. Obliczenia, które człowiekowi mogą sprawić wiele trudności przez maszynę zostaną przetworzone w ułamku sekundy.

Ważną zaletą automatycznego wykonywania testów jest ich powtarzalność. W przypadku scenariusza wykonywanego przez człowieka wręcz niemożliwe jest wymuszenie powtarzania jego kroków dokładnie w ten sam sposób za każdym razem. Pojawią się różnice w kolejności kroków, czasie czy szybkości ich wykonania, które mogą mieć wpływ na wynik. Wraz z upływem czasu organizm człowieka się męczy, spada koncentracja i coraz trudniej jest mu ustrzec się błędów. Natomiast poprawnie przygotowany test automatyczny gwarantuje niemal całkowitą powtarzalność wykonywanych akcji, niezależnie od pory dnia czy pogody za oknem.

Powtarzalność wykonywania wiąże się także z systematycznością. Testy automatyczne mogą być uruchamiane cyklicznie (np. codziennie wraz z daily buildem oprogramowania). Dzięki temu deweloperzy otrzymują aktualny obraz jakości produktu oraz szybką informację, że dana funkcjonalność przestała działać. Trudno taką systematyczność osiągnąć przy użyciu testów manualnych.

Ponadto wdrożone testy automatyczne pozwalają oszczędzić czas testerów, którzy w innych warunkach musieliby wykonywać więcej testów manualnych. Należy tutaj jednak zaznaczyć, że ta oszczędność czasu może być tylko pozorna, ponieważ, co zostanie pokazane w dalszej części wpisu, obsługa automatycznego środowiska testowego także wymaga sporych nakładów.

Warto też wspomnieć, że jedną z głównych wad testów manualnych są błędy związane z czynnikiem ludzkim. Człowiek ma tendencję do popełniania pomyłek. Z oczywistych względów poprawnie przygotowane testy automatyczne są tej niedogodności pozbawione.

Koszty automatyzacji

Niewątpliwie automatyzacja testów dostarcza wielu pozytywnych efektów, ale nie można zapominać także o tych negatywnych. Jak każde zjawisko, automatyzacja także wywołuje pewne koszty jej wprowadzenia. Za przykład niech posłuży ten obrazek (źródło: www.simply-the-test.blogspot.com):

Koszty automatyzacji można podzielić na trzy grupy:

  • koszty implementacji
  • koszty eksploatacji
  • koszty utrzymania.

Koszty implementacji związane są z przygotowaniem środowiska testów automatycznych, czyli przede wszystkim skryptów testowych, ale nie tylko. Koszty te są ponoszone jednorazowo, w momencie wprowadzanie testów automatycznych.

Drugi rodzaj kosztów jest związany z eksploatacją środowiska testowego. Mimo, że scenariusze testowe wykonują się samodzielnie, to wymagana jest ingerencja człowieka w ich bieżącą obsługę, np. utrzymanie ich niezawodności czy analizę wyników.

Ostatni rodzaj kosztów związany jest z dynamiką zmian przedmiotu testu. Każda zmiana testowanego oprogramowania może nieść ze sobą konieczność dostosowania do niej testów automatycznych. W punkcie tym także uwzględniona jest implementacja nowych testów w przypadku dodania do oprogramowania nowych funkcjonalności.

Podejmując decyzję o wprowadzeniu automatycznego środowiska testowego warto mieć na uwadze zarówno pozytywne skutki, jakie ona za sobą niesie, ale także koszty, jakie są z nią związane.

W następnej części wprowadzenia do testów automatycznych przedstawię ich rodzaje i zastosowania oraz pokażę kilka przydatnych narzędzi, które ułatwiają ich tworzenie. Już teraz serdecznie zapraszam :)