Rola, odpowiedzialność i potrzebne umiejętności Testera Agile
Wieloletnie doświadczenie w zapewnianiu jakości oprogramowania nauczyło nas, że ścisłe trzymanie się zasad wybranej metodyki, czy to klasycznej, czy – tym bardziej – zwinnej, nie sprawdza się w praktyce. W codziennej pracy nad projektem optymalnym rozwiązaniem okazują się metodyki hybrydowe, łączące elementy różnych podejść. Tester, który zapewnia jakość we współczesnych projektach informatycznych – Tester Agile (zwinny), powinien mieć więc na tyle szeroki zakres kompetencji, aby umiejętnie poruszać się w rzeczywistości, w której stale przenikają się różne podejścia do realizacji projektów, czy metody wytwarzania oprogramowania.
Istnieje pewna prawidłowość: na etapie planowania wykorzystuje się raczej podejście klasyczne (kaskadowe, Waterfall). Dotyczy to zwłaszcza dużych, dotowanych (systemowo) projektów, które wymagają szczegółowej dokumentacji i ścisłego harmonogramu. Także odbiór systemu musi odbywać się w sposób sformalizowany. Samo wytwarzanie oprogramowania przebiega natomiast bardziej elastycznie, zwinnie (Agile). Taki układ powoduje, że zespół deweloperski, w skład którego wchodzi Tester Agile, swoje wewnętrzne zadania realizuje w sposób zwinny, ale pracuje w ramach większego projektu prowadzonego w znacznej części kaskadowo. Prawdziwa zwinność testera polega na odnalezieniu się w tej kombinacji.
Większość Testerów z długoletnim stażem ma, oczywiście, praktykę w podejściach klasycznych – doskonale zna się na analizie, planowaniu, tworzeniu i zarządzaniu przypadkami testowymi. Znacznie rzadziej zdarzają się osoby doświadczone, biegłe i dobrze czujące się w metodykach zwinnych. Tym bardziej, że Tester Agile musi posiadać szerszy zakres umiejętności: wąska specjalizacja, odpowiednia dla projektów realizowanych klasycznie, nie jest już wystarczająca.
Jak zobaczymy, w zależności od poziomu i typu testów testów trzeba wykazać się różnymi umiejętnościami.
Na każdym poziomie natomiast, poza znajomością rozwiązania, które jest testowane, konieczne jest korzystanie z narzędzi do zarządzania testami typu JIRA, QTest Manager, TestLink, czy HP ALM.
- Kompetencje testera Agile na poziomie testów modułowych
Testy modułowe służą znalezieniu defektów w najmniejszych komponentach oprogramowania. Tester Agile ma tu za zadanie ocenić historyjki użytkownika (US, User Story) oraz manualnie lub automatycznie sprawdzić, czy kod realizuje te zadania, które zakładał właściciel produktu (Product Owner). Na ile Tester będzie w stanie wesprzeć programistę, zależy między innymi od tego, czy zna podstawy języka, w którym jest tworzone oprogramowanie, a także, czy będzie umiał korzystać z zintegrowanego środowiska programistycznego (IDE, Integrated Development Environment).
Tester musi znać podstawowe narzędzia programistyczne, jak na przykład rozproszony system kontroli wersji Git. Powinien umieć uruchomić test na zaślepionych modułach, a także „przeczytać” logi z aplikacji – na tym etapie często nie ma jeszcze gotowego graficznego interfejsu użytkownika (GUI, Graphical User Interface).
Coraz popularniejsze staje się wykorzystywanie platform do tworzenia oprogramowania na urządzenia mobilne, w związku z tym, w zależności od projektu, może być konieczne zapoznanie się z platformami i technologiami takimi jak Kotlin, Angular, React, TypeScript, Swift, itp.
- Testy integracyjne modułów i testy integracyjne systemów
Testy integracyjne mogą dotyczyć przepływu danych pomiędzy modułami wewnątrz systemu, bądź pomiędzy różnymi systemami. W pierwszym przypadku często potrzebne jest przygotowanie odrębnej Historyjki Użytkownika dla konkretnego modułu. Bywa jednak i tak, że za pomocą jednej Historyjki można przetestować wiele modułów. Takie testy modułowe mogą być realizowane w ramach jednego sprintu. Testy integracyjne systemów są natomiast bardziej złożone; w metodykach klasycznych ujmuje się je jako odrębne zadania. W obu wypadkach przedmiotem testów jest struktura i spójność komunikatów, kompletność danych, zgodność specyfikacji interfejsów modułów wewnętrznych, jak i zewnętrznych systemów.
Tester musi zatem wykazać się dobrą znajomością rodzajów i specyfikacji interfejsów oraz stosowanych protokołów przesyłu danych. Mając do czynienia z architekturą REST API, musi umieć czytać dane w formacie JSON i używać narzędzi typu Postman. Pracując z protokołem SOAP, należy z kolei znać format XML oraz język definiowania usług sieciowych WSDL. API napisane w oparciu o tę technologię, możemy testować przy użyciu SoapUI. Posługując się tym programem dobrze jest znać język Groovy. W bardzo nowoczesnych projektach można także zetknąć się z językiem zapytań dla API – GraphQL – promowanym przez Facebook i uważanym za następcę REST.
- Testy UAT
Testy UAT (User Acceptance Tests) są testami potwierdzającymi. Tester Agile nie szuka tutaj defektów, ale stara się sprawdzić, czy wymagania użytkownika zostały faktycznie spełnione. Zwykle testy akceptacyjne powtarzają w jakimś zakresie wcześniej wykonane testy, technologie oraz umiejętności wykorzystywane poprzednio przydadzą się więc i na tym poziomie.
Ogromną rolę odegrają teraz kompetencje miękkie testera, a zwłaszcza komunikatywność oraz umiejętność przyjęcia perspektywy wszystkich interesariuszy. Tester staje się niejako pośrednikiem pomiędzy Użytkownikami a Programistami. Musi szukać kompromisu i umieć podjąć decyzję, w którym momencie dalsze doskonalenie produktu przestaje już być opłacalne i skuteczne.
Tester będzie zatem pełnił funkcję Defect Managera i wykorzystywał narzędzia do zarządzania usterkami. Jego zadaniem będzie przekazywanie programistom czytelnych dla nich informacji o wykrytych defektach oraz sprawdzanie, w jakim stopniu utrudniają one osiągnięcie zamierzonego poziomu jakości działania aplikacji. Konieczne będzie sprawdzanie logów i baz danych, a w związku z tym znajomość Linuxa i podstawowych komend shella takiego jak np. bash.
Więcej na temat szczególnego znaczenia kompetencji miękkich u Testera Agile dowiesz się z naszego artykułu„Kompetencje miękkie w pracy Testera Agile”.
Testy funkcjonalne i niefunkcjonalne
Testy funkcjonalne służą sprawdzeniu, czy system rzeczywiście realizuje to, co zakładano; ten typ testów każdy tester powinien doskonale opanować, gdyż z nim będzie spotykał się najczęściej. Warto jednak pamiętać, że projekty realizowane w metodykach zwinnych dotyczą zazwyczaj aplikacji dla użytkowników końcowych, które powstają w różnych wersjach – na urządzenia mobilne i strony www. Wymaga to od testera dobrej znajomości html czy technologii RWD, a także rozwijania swojego instrumentarium oraz orientowania się, które narzędzia są odpowiednie dla danej wersji oprogramowania.
Testy niefunkcjonalne wykorzystuje się do sprawdzenia poszczególnych charakterystyk systemu, takich jak wydajność, obciążenie, niezawodność, czy bezpieczeństwo.
- Testy wydajnościowe
Aby powstające oprogramowanie mogło wejść w etap produkcji, musimy być pewni, że zakładana liczba klientów będzie mogła skutecznie i wygodnie z niego korzystać. W większości projektów realizowanych w metodyce hybrydowej testy wydajności są przeprowadzane poza sprintami przez wykwalifikowanych specjalistów. Czasem jednak potrzebne jest przeprowadzenie szybkiej i prostej kontroli wydajności – bywa, że już niewielka liczba użytkowników (nawet dosłownie dwóch) uniemożliwia sprawne działanie oprogramowania.
Nieprawidłowa architektura systemu może powodować, że użytkownicy będą sobie wzajemnie utrudniać dostęp do zasobów systemowych lub wręcz spowodować blokadę bazy danych (deadlock). Chcąc na wczesnym etapie wykluczyć takie niebezpieczeństwo, można wykorzystać oparte o Java narzędzie JMeter. Biegłość w posługiwaniu się nim nie jest niezbędna, wystarczy, że tester potrafi zbudować najprostszy plan testów w oparciu o element grupujący, sampler i listener.
- Testy bezpieczeństwa OWASP Top Ten
Aplikacje zawierające dane wrażliwe powinny być poddane osobnemu testowi bezpieczeństwa. Tego typu testy wykonują zazwyczaj wysoko wykwalifikowani specjaliści, ale aplikacje o mniej krytycznym znaczeniu powinien sprawdzać Tester Agile. Trzeba więc, by choć pobieżnie znał podstawowe parametry bezpieczeństwa aplikacji (OWASP Top Ten).
- Testy regresji i automatyzacja
Sieć ścisłych zależności wewnątrz systemów sprawia, że nie sposób przewidzieć, jak wprowadzane zmiany (nowe funkcjonalności, zmiana modułów) wpłyną na cały system. Do przetestowania już wcześniej sprawdzonych obszarów oprogramowania używa się testów regresji. Ilość niezbędnych testów regresji wzrasta jednak wraz z rozwojem oprogramowania, konieczne jest zatem zastosowanie automatyzacji – na pewnym etapie nie byłoby już możliwe ręczne przeprowadzenie wymaganych testów.
Znajomość narzędzi typu „nagraj – odtwórz” (record and playback testing tool) jest obowiązkowa, ale dużo cenniejsza jest umiejętność wykorzystania najprostszych środowisk automatyzujących testy, na przykład w oparciu o Selenium. Warto zatem opanować podstawy programowania w Javie lub Pythonie.
Wszechstronne kompetencje Testera Agile
Tester, który, w ramach zespołu Agile, bierze udział we wszystkich etapach prac nad oprogramowaniem, zdobywa wszechstronne umiejętności, a tego właśnie, w zmieniającym się stale świecie IT, oczekują pracodawcy. Zanika dawny podział na odrębne specjalizacje (analityka testów, lidera, testera automatycznego), a w zespołach zwinnych nie ma miejsca na rozbudowane składy testerskie. Tester Agile musi więc nabywać umiejętności, które pozwolą mu poradzić sobie na każdym etapie pracy i w każdej sytuacji.
Soflab to wiedza, umiejętności i duże doświadczenie w prowadzeniu projektów zwinnych. Jeśli potrzebujesz wsparcia w tym obszarze, skontaktuj się z nami.