eszcze kilka lat temu praca testera aplikacji była niedoceniana. Często rola testów znajdowała się na marginesie projektu, a czasem była wręcz pomijana. W ostatnich latach tendencja ta zaczęła się zmieniać. Istotność testów coraz częściej stoi na równi z pracami programistów, a biznes zaczyna dostrzegać wagę testów w projektach.
Jak wygląda codzienna praca testera i jego odpowiedzialność w projekcie oraz z jakich narzędzi korzysta ? Na te pytania postaram się odpowiedzieć w dalszej części artykułu.
Praca testera rozpoczyna się już na pierwszym spotkaniu inicjującym projekt, tzw. kickoff meeting. Wtedy zespół zostaje wprowadzony w tematykę projektu, otrzymuje dokumentacje oraz inne informacje niezbędne do zapoznania się ze specyfiką projektu. Spotkanie takie czasem jest pomijane, członkowie zespołu otrzymują wcześniej dokumentacje, a po zapoznaniu się z materiałami rozpoczyna się pierwsze planowanie. Już wówczas zarówno tester jak i pozostali członkowie zespołu posiadają przynajmniej ogólną wiedzę o projekcie i powinni potrafić zaplanować pierwszy sprint. Już na etapie czytania dokumentacji tester powinien planować przypadki testowe. Takie podejście pomaga przygotować się do planowania kolejnych sprintów oraz prac nad konkretnymi zadaniami. Po spotkaniu planistycznym, z którego zespół wychodzi z rozpisanymi user story, rozpoczyna się podział user stories na taski. To głównie zadanie programistów, ale dobrze jest jeśli w tym procesie uczestniczy również tester. Pozwala mu to na bardziej wnikliwe zapoznanie się z kolejnymi obszarami projektu. Tester, biorąc udział w analizie każdego zagadnienia, chłonie wiedzę od programistów, ale również zgłasza swoje uwagi bądź sugestie związane ze sposobem realizacji poszczególnych zadań. Takie podejście niejednokrotnie pozwala uniknąć różnych nieporozumień, np. dotyczących odpowiedniego podziału zadań oraz kolejności ich realizacji, tak aby tester na każdym etapie mógł testować kolejne zadania, bez zbędnego oczekiwania.
Realizacja kolejnych zadań w projekcie to często żmudna praca. Rozpoczyna się od analizy dokumentacji, przypadków użycia, poszczególnych zadań, w końcu testy, aż do wdrożenia na produkcję. Tester uczestniczy w pracach projektowych począwszy od analizy dokumentacji i realizacji zadań projektowych, kończąc na wdrożeniu. Najczęściej pierwsze wdrożenie nie jest ostatnim, a w międzyczasie dochodzi utrzymanie, czyli dbanie o zachowanie stabilności aplikacji na każdym etapie, pomiędzy każdym wdrożeniem i po wdrożeniu. Utrzymanie, nazywane najczęściej wsparciem, to reagowanie na zgłaszane błędy, uwagi klienta bądź członków zespołu, którzy zauważyli jakieś nieprawidłowości. Rolą testera jest weryfikacja ewentualnych zgłoszeń, a po poprawieniu aplikacji przetestowanie poprawności realizacji zadań.
Testowanie- co to takiego?
Jak wygląda testowanie aplikacji? Testowanie to przede wszystkim sprawdzenie poprawności wykonania zadania, zgodności ze specyfikacją. Sprawdzając dane zadanie, często należy sprawdzić również inne funkcjonalności, na które zmiana mogła wpłynąć. Kontrolowanie innych funkcjonalności daje testerowi pewność, że realizacja konkretnego zadania nie wpłynęła negatywnie na inne obszary aplikacji.
Takie sprawdzanie innych funkcjonalności nazywa się testami regresyjnymi. Mają one na celu potwierdzenie poprawnego działania funkcjonalności, które zostały już wcześniej wdrożone.
W swojej codziennej pracy tester musi zadbać o to aby aplikacja działała poprawnie na różnych przeglądarkach, na urządzeniach mobilnych, w specyficznych sytuacjach również na różnych systemach operacyjnych.
Dodatki do przeglądarek
Tester ma do dyspozycji również różne narzędzia, które wspomagają proces testowania. Są to przede wszystkim dodatki do przeglądarek, rozszerzające funkcjonalności przeglądarek o nowe możliwości. Za pomocą takich dodatków tester ma możliwość np. przeglądnięcia komunikacji przeglądarka (klient) <=> aplikacja (serwer).
Testy automatyczne
W utrzymaniu stabilności aplikacji na każdym etapie rozwoju, jak również po wdrożeniu, pomagają testy automatyczne. Najprostsze testy automatyczne można wykonać za pomocą dodatku do przeglądarki o nazwie Selenium IDE. Dodatek ten pozwala na nagranie kroków testu i odtwarzanie testu na żądanie.
Testy automatyczne, które dają dużo więcej możliwości są pisane za pomocą jednego z języków programowania, np. Java. W tym przypadku wymagana jest już znajomość programowania, czasami również obsługi baz danych.
Jenkins
Kolejnymi narzędziami spotykanymi w pracy testera są narzędzia wspomagające proces dostarczania oprogramowania (wgrywania aplikacji na poszczególne środowiska testowe i produkcyjne, uruchamianie testów automatycznych). Narzędziem takim jest np. Jenkins, za pomocą którego cały proces jest zautomatyzowany i przejrzysty.
Jenkins jest narzędziem, za pomocą którego można uruchamiać np. proces budowania i wdrażania aplikacji (tzw. deployment) oraz uruchamiać testy automatyczne. Każdy z tych elementów (deployment, testy automatyczne itd.) nazywa się zadaniami. Zadania te po zakończeniu są odpowiednio raportowane.
Raport z testów dostarczany jest np. mailem lub sms-em do zainteresowanych osób. Proces taki pozwala na znacznie mniejsze zaangażowanie ludzi poprzez większe wykorzystanie automatyzacji.
Co nam daje automatyzacja ww. procesów ? Przede wszystkim obniżenie kosztów dostarczenia projektu, jego obsługi powdrożeniowej, przy jednoczesnym stałym monitoringu zadań.Raporty pozwalają na stałą kontrolę stabilności aplikacji i dostarczają informacji o pojawiających się defektach. Automatyczne testowanie aplikacji może odbywać się 24 godziny na dobę przez 7 dni w tygodniu z minimalnym zaangażowaniem człowieka. Człowiek w tym procesie ma jedynie za zadanie reagowanie na błędy pojawiające się w raportach. Zadania mogą być uruchamiane ręcznie na żądanie lub wyzwalane automatycznie za pomocą tzw. crona (program do cyklicznego uruchamiania zadań).
Testy obciążeniowo-wydajnościowe
Kolejnym obszarem, o którym chcę napisać są testy obciążeniowo – wydajnościowe. Są to testy, za pomocą których tester może sprawdzić jak aplikacja reaguje na duże obciążenie. Duże obciążenie to przede wszystkim duża liczba użytkowników korzystających z aplikacji w określonym przedziale czasu. Do tego typu testów wykorzystywane są narzędzia, które pozwalają na symulację wielu użytkowników. Taką aplikacją jest np. JMeter. Można w niej między innymi ustawić liczbę użytkowników korzystających z aplikacji, czas wejścia wszystkich użytkowników oraz liczbę powtórzeń cyklu.
Po uruchomieniu testu można śledzić jego postępy oraz przede wszystkim pojawiające się błędy oraz aktualne czasy wykonywania. Dzięki tym danym możemy obserwować jak zachowuje się aplikacja przy narastającym obciążeniu. W przypadku, gdy pojawia się coraz więcej błędów, a czasy zaczynają się znacznie wydłużać, oznacza to, że osiągnięty został próg, przy którym aplikacja staje się mało wydajna. Wówczas należy sobie zadać pytanie czy to jest to czego oczekiwaliśmy, czy chcemy aby aplikacja była bardziej wydajna. Wina jednak często nie leży po stronie aplikacji, a również po stronie infrastruktury serwerowo – sieciowej. Bywa jednak tak, że aplikacja sobie nie radzi z dużą liczbą użytkowników i należy ją odpowiednio zoptymalizować.
Testy bezpieczeństwa
Ostatnim tematem, o którym chciałem jedynie wspomnieć, są testy bezpieczeństwa. Są to testy, które polegają na sprawdzaniu podatności aplikacji na różne typy ataków hakerskich. Testy te są bardzo skomplikowane i potrzebna jest tutaj bardzo specjalistyczna wiedza i narzędzia. Tym obszarem testów zajmują się najczęściej wyspecjalizowane firmy bądź specjalnie do tego celu przeszkoleni testerzy.
Podsumowanie
Mam nadzieję, że udało mi się w przystępny sposób przybliżyć nieco pracę testera, proces testowania aplikacji
oraz pokazać ważność roli testera w projekcie.
Poniższe stwierdzenia niech będą podsumowaniem pracy testera i całego procesu testowego:
- do testera najczęściej należy ostatnie słowo jeśli chodzi o poprawność realizacji zadań,
- tester sprawdza i decyduje czy dana funkcjonalność została zrealizowana zgodnie z założeniami projektowymi i działa poprawnie,
- czasem tester musi powiedzieć “Stop! Aplikacja nie działa poprawnie! Nie możemy jej wdrożyć w zakładanym terminie!” lub “Jest OK! Zielone światło na wdrożenie!”,
- tester musi posiadać szeroką wiedzę z zakresu projektu, poszczególnych zadań,
- tester musi posiadać szeroką wiedzę z zakresu różnych technologii, narzędzi wspomagających proces wytwarzania i testowania oprogramowania.
Na zakończenie wyobraźmy sobie projekt bez testera, wdrożenie bez testera, utrzymanie powdrożeniowe bez testera. Wyobraźmy sobie brak możliwości finalizacji zamówienia w sklepie internetowym bo nie miał kto tego sprawdzić po “poprawkach”. Wyobraźmy sobie funkcjonalności, które działały przy poprzednim wdrożeniu, a przy kolejnym przestały działać bo nikt nie sprawdził czy nowe zmiany nie psują dotychczas działających obszarów aplikacji. Wyobraźmy sobie idące za tym straty finansowe.