Z ręką na automacie

Właściwie wdrożone narzędzia automatyzujące testowanie oprogramowania pozwalają znacznie podnieść jego jakość.

Właściwie wdrożone narzędzia automatyzujące testowanie oprogramowania pozwalają znacznie podnieść jego jakość.

Kiedyś ludzie jeździli konno, dziś jeżdżą samochodami. Ciężary, które dziś z łatwością przenosi się za pomocą dźwigu, jeszcze niedawno noszono na plecach. Przy obsłudze operacji bankowych trudziły się niegdyś setki buchalterów, dziś ich pracę wykonuje jeden komputer. U zarania ery informatyki testerzy programów musieli ręcznie wykonywać setki czy tysiące zadań testowych, dziś... no cóż, w przytłaczającej większości przypadków testowanie nadal jest wykonywane ręcznie.

Boris Beizer, znany amerykański guru w dziedzinie testowania, napisał kiedyś: "Nie ma dla mnie widoku bardziej przygnębiającego niż widok kogoś trudzącego się ręcznie nad zrobieniem tego, co można wykonać automatycznie". To doprawdy zaskakujące, że do weryfikowania jakości systemów mających w założeniu odciążyć użytkowników od mozołu ręcznej pracy, wciąż są używane te same mozolne metody. Czyżby nieustannie dokonujący się w informatyce postęp z jakichś powodów ominął sferę testów oprogramowania? I tak, i nie.

Argumenty przemawiające na korzyść automatyzacji procesu testowania wydają się oczywiste i przekonywające. Doświadczenia wielu projektów pouczają jednak, że w praktyce nie jest takie proste. Sztuka testowania polega na tym, by osiągnąć dostateczną jakość oprogramowania jak najmniejszymi środkami w możliwie najkrótszym czasie. Automatyzacja może być w tej walce potężnym sprzymierzeńcem. Może, ale nie musi. Jak dowodzi praktyka, nieumiejętna automatyzacja może zakończyć się fiaskiem. To m.in. właśnie dla narzędzi do automatycznego testowania, które zakupiono z nadzieją na radykalne usprawnienie testów, a którego nie potrafiono wykorzystać, ukuto pojęcie "kurzołapy" (shelfware).

Czym jest automatyzacja testowania? Z pozoru, wydaje się, jest to zagadnienie łatwe do zdefiniowania, jednak wokół automatyzacji nagromadziło się wiele nieporozumień. Niektórzy twierdzą, że automatyzacja to automatyczne wykonywanie zdefiniowanych wcześniej zadań testowych. Inni, bardziej wymagający, głoszą, że na miano automatyzacji zasługuje dopiero w pełni zautomatyzowane wykonywanie serii przypadków testowych, połączone z automatycznym zapisywaniem wyników, sterowaniem przebiegiem pracy w razie awarii itd. Jeszcze inni z kolei wskazują na korzyści płynące z automatycznego generowania danych testowych czy np. automatycznego porównywania wyników uzyskanych w testach z wynikami oczekiwanymi, nawet jeśli zadanie jest wykonywane ręcznie. Każde z opisanych zastosowań narzędzi do automatycznego wykonywania tego, co w przeciwnym razie trzeba by robić ręcznie, jest w jakimś stopniu automatyzacją. Automatyzacji może być "więcej" lub "mniej", choć "więcej" nie zawsze oznacza "lepiej".

Automat na straży jakości

Korzyści płynące z automatyzacji procesu testowania są wielorakie. Po pierwsze, automatyzacja testów pozwala skrócić czas potrzebny do weryfikacji jakości oprogramowania. Po drugie, umożliwia zmniejszenie liczby błędów poprzez wykonanie większej liczby przypadków testowych lub zwiększenie zakresu testów. Po trzecie, i bardzo istotne, pozwala skupić uwagę testera na pracy koncepcyjnej, uwalniając go jednocześnie od wykonywania najbardziej nużących, powtarzalnych czynności. A znużenie to w pracy testera realne zagrożenie: osłabia motywację, obniża spostrzegawczość, powoduje apatię i pomijanie mniej groźnych awarii na zasadzie "po co się męczyć, skoro jakoś działa". Automatyzacja pozwala upiec dwie pieczenie przy jednym ogniu: podnieść jakość testów, a także motywację i zadowolenie w zespole testowym. Automatyzacja wydaje się więc korzystna dla procesu testowania nawet wtedy, gdy nie przyspiesza istotnie pracy testerów ani też nie zwiększa ich precyzji czy zakresu prac.

Proces testowania można poprzez automatyzację przyspieszyć na kilka sposobów. Automat, np. skrypt, potrafi wprowadzać dane do programu wielokrotnie szybciej niż człowiek. Przede wszystkim jednak automat nie męczy się i nie choruje - potrafi pracować nieprzerwanie, 24 godzinę na dobę, również w soboty i niedziele, nie tracąc ani na chwilę czujności i staranności. Nie żąda przy tym zapłaty za nadgodziny. Tester natomiast, wykonując po raz kolejny te same zadania, świadomie lub nie, popada w końcu w niebezpieczną rutynę, która nie pozwala mu kontrolować poprawności wyników testów równie starannie, jak na początku.

Bądźmy jednak precyzyjni: automatyzacja przyspiesza wykonywanie zadań testowych, kiedy te zostały już odpowiednio skonfigurowane i zaprogramowane, kiedy działają. Nie przyspiesza procesu testowania jako całość. Oczekiwanie, że poprzez zautomatyzowanie wykonywania testów uda się np. uratować opóźniający się projekt, jest zwykle niebezpiecznym złudzeniem. Efekt będzie z reguły przeciwny do oczekiwań: instalowanie i uruchamianie narzędzi pochłaniają z reguły więcej czasu, niż można zaoszczędzić na skróceniu czasu wykonania testów. Wniosek z tego taki, że inwestycja w narzędzia do automatyzacji testowania zwraca się dopiero przy testowaniu powtarzalnym, kiedy te same bądź podobne przypadki testowe są wykonywane wielokrotnie - zazwyczaj w wielu projektach.