Bycie skutecznym testerem oprogramowania to znacznie więcej niż tylko mechaniczne wykonywanie przypadków testowych.
Wymaga to połączenia wiedzy technicznej, umiejętności analitycznych, specyficznych cech osobowości oraz stosowania dobrych praktyk, które wspierają współpracę i zapewniają wysoką jakość pracy.
W tej ostatniej lekcji pierwszego rozdziału przyjrzymy się kluczowym umiejętnościom, zarówno ogólnym (miękkim), jak i technicznym, które są niezbędne w pracy testera.
Omówimy również dwie fundamentalne dobre praktyki podkreślane przez ISTQB: podejście całego zespołu do jakości oraz znaczenie niezależności testowania.
Umiejętność (skill) to zdolność do robienia czegoś dobrze, wynikająca z wiedzy, praktyki i predyspozycji.
Efektywni testerzy powinni posiadać zestaw umiejętności, które pozwalają im nie tylko znajdować defekty, ale także efektywnie komunikować się, współpracować w zespole i przyczyniać się do ogólnego sukcesu projektu.
Rozwijanie tych umiejętności jest procesem ciągłym, niezbędnym do utrzymania wysokiego poziomu profesjonalizmu w dynamicznie zmieniającej się branży IT.
1.5.1 Ogólne Umiejętności Wymagane w Testowaniu (Generic Skills Required for Testing)
Chociaż specyficzne wymagania mogą zależeć od projektu i kontekstu, istnieje zestaw ogólnych umiejętności, które są szczególnie istotne dla testerów.
Są to cechy i zdolności, które pozwalają efektywnie podchodzić do zadań testowych i interakcji w zespole:
- Wiedza o testowaniu (Testing knowledge): Zrozumienie podstawowych zasad, procesów, technik i terminologii testowania (czyli wszystkiego, czego uczymy się w tym kursie!). Pozwala to na bardziej efektywne planowanie, projektowanie i wykonywanie testów. Ciągłe poszerzanie wiedzy, np. poprzez certyfikacje, czytanie literatury branżowej czy udział w konferencjach, jest kluczowe.
- Dokładność, staranność, ciekawość, dbałość o szczegóły, metodyczność (Thoroughness, carefulness, curiosity, attention to details, being methodical): Testerzy muszą być skrupulatni w swojej pracy, zwracając uwagę na najmniejsze detale, które mogą wskazywać na problem. Ciekawość popycha do eksplorowania systemu i zadawania pytań "co jeśli?". Metodyczne podejście pomaga w systematycznym pokrywaniu funkcjonalności i unikaniu pominięć, szczególnie przy identyfikacji trudnych do znalezienia defektów.
- Dobra komunikacja, aktywne słuchanie, bycie graczem zespołowym (Good communication skills, active listening, being a team player): Testerzy muszą efektywnie komunikować się z różnymi interesariuszami (programistami, analitykami, menedżerami, użytkownikami). Obejmuje to jasne opisywanie znalezionych defektów, zadawanie precyzyjnych pytań, aktywne słuchanie w celu zrozumienia perspektywy innych oraz konstruktywne przekazywanie informacji zwrotnej. Umiejętność pracy w zespole jest niezbędna do osiągania wspólnych celów.
- Myślenie analityczne, krytyczne myślenie, kreatywność (Analytical thinking, critical thinking, creativity): Testerzy muszą analizować złożone systemy, identyfikować potencjalne problemy i oceniać ryzyko. Krytyczne myślenie pozwala kwestionować założenia i oceniać informacje obiektywnie. Kreatywność jest potrzebna do wymyślania nietypowych scenariuszy testowych i znajdowania nieoczywistych błędów, co zwiększa efektywność testowania.
- Wiedza techniczna (Technical knowledge): Zrozumienie technologii używanych w testowanym systemie (np. języki programowania, bazy danych, protokoły sieciowe) oraz narzędzi testowych (np. do automatyzacji, zarządzania testami, śledzenia defektów) pozwala na efektywniejsze projektowanie i wykonywanie testów, szczególnie tych bardziej technicznych (np. testy wydajności, bezpieczeństwa).
- Wiedza domenowa (Domain knowledge): Zrozumienie obszaru biznesowego, w którym działa testowane oprogramowanie (np. finanse, e-commerce, opieka zdrowotna) pozwala testerom lepiej zrozumieć oczekiwania użytkowników końcowych, identyfikować bardziej realistyczne scenariusze testowe i efektywniej komunikować się z przedstawicielami biznesu.
Posiadanie tych umiejętności jest fundamentem skutecznego testowania.
Warto również zwrócić uwagę na specyficzne wyzwanie komunikacyjne, jakim jest przekazywanie "złych wiadomości".
Testerzy często są tymi, którzy informują o problemach i defektach.
Naturalną ludzką tendencją jest obwinianie posłańca, dlatego kluczowe jest, aby testerzy potrafili komunikować wyniki testów w sposób obiektywny, konstruktywny i pozbawiony emocji.
Wyniki testów mogą być postrzegane jako krytyka produktu lub pracy autora, a tendencyjność potwierdzenia (confirmation bias) może utrudniać akceptację wyników niezgodnych z oczekiwaniami.
Dlatego ważne jest, aby postrzegać testowanie nie jako działanie destrukcyjne, ale jako konstruktywny wkład w sukces projektu i jakość produktu.
Informacje o defektach i awariach powinny być komunikowane w sposób budujący.
1.5.2 Podejście Całego Zespołu (Whole Team Approach)
Jedną z najważniejszych umiejętności testera jest zdolność do efektywnej pracy w kontekście zespołowym i przyczyniania się do realizacji celów zespołu.
Podejście całego zespołu (whole team approach), wywodzące się z praktyk Programowania Ekstremalnego (Extreme Programming) i szeroko stosowane w metodykach zwinnych, opiera się na założeniu, że odpowiedzialność za jakość spoczywa na całym zespole, a nie tylko na dedykowanych testerach.
W tym podejściu:
- Jakość jest wbudowywana, a nie dodawana na końcu: Zamiast traktować testowanie jako osobną fazę po zakończeniu programowania, jakość jest uwzględniana na każdym etapie cyklu życia oprogramowania.
- Współpraca jest kluczowa: Testerzy, programiści, analitycy biznesowi, projektanci UX, specjaliści DevOps i inni członkowie zespołu ściśle współpracują, dzieląc się wiedzą i odpowiedzialnością za jakość.
- Komunikacja jest otwarta i częsta: Regularne spotkania, wspólne sesje pracy (np. nad kryteriami akceptacji, przypadkami testowymi) i szybka informacja zwrotna pomagają wczesne wykrywanie i rozwiązywanie problemów.
- Różne perspektywy są cenione: Każdy członek zespołu wnosi unikalną perspektywę i umiejętności, które przyczyniają się do lepszego zrozumienia wymagań i potencjalnych ryzyk.
Testerzy w podejściu całego zespołu odgrywają rolę ekspertów ds. jakości, wspierając innych członków zespołu w działaniach związanych z testowaniem (np. poprzez szkolenia, dostarczanie narzędzi, pomoc w projektowaniu testów).
Jednocześnie sami angażują się we wcześniejsze etapy, np. przeglądając wymagania czy uczestnicząc w projektowaniu.
Celem jest stworzenie kultury jakości, w której każdy czuje się odpowiedzialny za dostarczenie wartościowego i niezawodnego produktu.
1.5.3 Niezależność Testowania (Independence of Testing)
Chociaż podejście całego zespołu promuje współpracę, ISTQB podkreśla również znaczenie niezależności testowania.
Niezależność oznacza, że testy są przeprowadzane przez osoby, które nie były bezpośrednio zaangażowane w tworzenie testowanego komponentu lub systemu.
Dlaczego niezależność jest ważna?
Głównym powodem jest unikanie tendencyjności potwierdzenia (confirmation bias) – naturalnej skłonności ludzkiej do szukania, interpretowania i zapamiętywania informacji w sposób potwierdzający wcześniejsze przekonania lub hipotezy.
Autor kodu, testując własną pracę, może nieświadomie unikać scenariuszy, które mogłyby ujawnić błędy, lub interpretować wyniki w sposób dla siebie korzystny.
Niezależni testerzy:
- Mają inną perspektywę: Podchodzą do systemu z punktu widzenia użytkownika lub innych interesariuszy, nie znając wewnętrznych szczegółów implementacji, co pozwala im znaleźć defekty pominięte przez autorów.
- Są bardziej obiektywni: Nie mają emocjonalnego związku z kodem, co ułatwia im krytyczną ocenę i raportowanie problemów.
- Mogą kwestionować założenia: Niezależny tester może zadać pytania dotyczące założeń przyjętych przez programistów lub analityków, które mogły prowadzić do błędów.
ISTQB wyróżnia różne poziomy niezależności, od najniższego do najwyższego:
- Brak niezależności: Testy wykonywane przez autora kodu (np. testy jednostkowe).
- Niezależność w ramach zespołu: Testy wykonywane przez innego członka tego samego zespołu deweloperskiego (np. inny programista, tester w zespole zintegrowanym).
- Niezależny zespół testowy w ramach organizacji: Testy wykonywane przez dedykowany zespół testerów, który jest częścią tej samej organizacji, ale raportuje do innego menedżera niż zespół deweloperski.
- Niezależność biznesowa lub użytkowników: Testy wykonywane przez przedstawicieli biznesu, ekspertów domenowych lub użytkowników końcowych (np. testy akceptacyjne użytkownika - UAT).
- Niezależność zewnętrzna: Testy wykonywane przez zewnętrzną firmę specjalizującą się w testowaniu lub przez certyfikowane laboratoria testowe (często stosowane w testach bezpieczeństwa lub zgodności z normami).
Korzyści z niezależności rosną wraz z jej poziomem, ale rosną również potencjalne wady, takie jak:
- Izolacja od zespołu deweloperskiego: Może prowadzić do problemów komunikacyjnych, opóźnień w uzyskiwaniu informacji i poczucia "my kontra oni".
- Brak wiedzy domenowej lub technicznej: Zewnętrzni testerzy mogą potrzebować więcej czasu na zrozumienie systemu i kontekstu biznesowego.
- Wyższe koszty: Zatrudnienie zewnętrznych specjalistów jest zazwyczaj droższe.
- Potencjalne wąskie gardło: Jeśli niezależny zespół jest przeciążony, może stać się wąskim gardłem w procesie dostarczania.
Optymalny poziom niezależności zależy od kontekstu projektu, wymagań dotyczących jakości, budżetu i kultury organizacyjnej.
Często stosuje się kombinację różnych poziomów niezależności dla różnych poziomów i typów testów (np. testy jednostkowe wykonywane przez programistów, testy systemowe przez niezależny zespół wewnętrzny, a UAT przez użytkowników).
Podsumowanie
Skuteczne testowanie wymaga szerokiego zakresu umiejętności, w tym wiedzy o testowaniu, dokładności, ciekawości, umiejętności komunikacyjnych, analitycznego myślenia oraz wiedzy technicznej i domenowej.
Dobre praktyki, takie jak podejście całego zespołu, promują współpracę i wspólną odpowiedzialność za jakość.
Jednocześnie, zapewnienie odpowiedniego poziomu niezależności testowania pomaga w obiektywnej ocenie produktu i unikaniu tendencyjności potwierdzenia.
Znalezienie równowagi między współpracą a niezależnością jest kluczem do sukcesu w nowoczesnym testowaniu oprogramowania.