Prowadzenie projektów informatycznych z wykorzystaniem metodyk zwinnych, jak np. scrum, pozwala szybciej wypracować rozwiązania informatyczne, które spełniają oczekiwania użytkowników. W przeciwieństwie do tradycyjnego modelu kaskadowego, odbiorca oprogramowania nie musi czekać na gotowe oprogramowanie do końca projektu. W scrum praca odbywa się krótkimi etapami (zwanymi sprintami), z których każdy skutkuje przekazaniem klientowi gotowych, uzgodnionych wcześniej funkcjonalności. W ten sposób powstaje rozwiązanie, które z jednej strony uwzględnia zmienność potrzeb klienta, z drugiej odzwierciedla priorytety jego oczekiwań.
Bardziej rozumieć klienta niż sam program
Etapowa, iteracyjna realizacja projektu zmienia sposób pracy zespołów projektowych, w tym przede wszystkim testerów, którzy w scrum zyskują nowe funkcje. W zwinnym modelu wytwarzania oprogramowania zespoły mają mało czasu na oddanie zakontraktowanej na dany sprint funkcjonalności. Oznacza to, że praktycznie nie ma miejsca na błędy, a testy należy wykonać szybko. Stąd podstawową różnicą między rolą testera w scrum a rolą, jaką pełni w tradycyjnych metodykach, jest sprawowanie funkcji aktywnego pośrednika między klientem, użytkownikami i zespołem programistów. Tester w projekcie scrum powinien nie tylko wykorzystywać wiedzę techniczną, ale przede wszystkim umieć szybko rozpoznać potrzeby użytkowników, precyzować je, by we właściwy sposób przekazywać wskazówki programistom. Jego podstawowym zadaniem jest wiedzieć, jakiej funkcjonalności (tzw. „definition of done”) oczekuje odbiorca oprogramowania po zakończeniu każdego sprintu, tak by na etapie wytwarzania oprogramowania móc spełniać rolę partnera dla programisty i jednocześnie umieć weryfikować jakość powstającego produktu. W scrum tester jest partnerem dla klienta – niejako konsultantem biznesowym – i zespołu projektowego – niejako tłumaczem języka oczekiwań na język projektowy i zadaniowy.
Rola testera w zespole scrum
Co może należeć do zadań testera w metodyce scrum? Tester, który w scrum wykazuje zdolność do realizacji poniższej listy zadań daje większą gwarancję sukcesu realizowanych projektów.
- Poznanie oczekiwań klienta i użytkowników
Zadaniem testera w każdym sprincie jest zrozumienie oczekiwań odbiorcy wobec zamawianego rozwiązania. Tester jako pośrednik między klientem, a zespołem projektowym dostawcy, analizuje jakość wymaganą przez klienta oraz jakość zakontraktowaną w ramach sprintu. Wiedzę tę tester przekłada na standardy oczekiwane w projekcie i odnosi się do nich na etapie testowania powstałego rozwiązania.
- Wspieranie zespołu wiedzą i doświadczeniem
Tester powinien udzielać programistom wsparcia w postaci określania scenariuszy i przypadków testowych dla różnego rodzaju testów: zarówno wewnętrznych jak i akceptacyjnych. Tester jako osoba wyspecjalizowana w obszarze testowania oprogramowania posiada wiedzę nt. sposobów testowania, technik tworzenia przypadków testowych oraz zasad, które są przydatne w procesie testowania. O ile w zespole scrum każdy członek zespołu może zajmować się testowaniem (przynajmniej od czasu do czasu) to wskazane jest, by korzystał z tej wiedzy, którą posiada tester (w takiej sytuacji tester pełni rolę konsultanta – eksperta w obszarze testów). Jednocześnie istotnym wkładem testera w projekt może być weryfikacja opisu tzw. „user stories” – karty wymagań, a zwłaszcza identyfikacja i omawianie ukrytych założeń, które mogą się pojawić w trakcie wytwarzania oprogramowania, w każdym sprincie.
- Pomoc w ustaleniu „Definition of done”
Współpracując z zespołem tester powinien umieć przetworzyć oczekiwania jakościowe klienta i użytkowników na język cech produktu, zarówno funkcjonalnych jak i niefunkcjonalnych. Zadanie to określa termin „Definition of done” („definicja ukończenia”), czyli określanie efektu oczekiwanego przez odbiorcę oprogramowania. Znając w pełni „definicję ukończenia” tester może zweryfikować jakość powstających elementów oraz całego systemu także z perspektywy użytkownika, a nie tylko zespołu wytwarzającego oprogramowanie. Jednocześnie, zarówno na etapie tworzenia oprogramowania jak i testowania, może udzielić dokładnych wskazówek programistom, mówiąc jak należy zaprogramować poszczególne elementy (dostarczając informacji o przykładach zastosowania oprogramowania) oraz wskazując, które z nich nie spełniają oczekiwań i potrzeb klienta. Dzięki tej roli testera znacznie szybciej mogą powstawać funkcjonalności, i do tego spełniające oczekiwania klienta. Ponadto w przypadkach kiedy do powstałego na etapie poprzednich sprintów rozwiązania wprowadzane są zmiany, tester powinien stale korygować przyjętą definicję ukończenia i badać, czy nowopowstające rozwiązanie spełnia aktualne założenia klienta. Bez tego działania, tworzony system byłby niespójny.
- Egzekwowanie „Definition of done”
O ile dla programisty głównym celem jest zaprogramowanie funkcjonalności, dla testera w scrum głównym celem jest oddanie klientowi funkcjonalności o oczekiwanej przez niego jakości. Ważną kompetencją testera jest orientacja na wymagania klienta (jego sytuację biznesową, oczekiwania i potrzeby, potencjalne problemy użytkownika). Dokładne zrozumienie przez testera oczekiwań i potrzeb klienta oraz użytkowników końcowych zwiększa gwarancję oddania rozwiązania, które spełnia warunki kontraktu i skutecznie odpowie na oczekiwania użytkowników.
- Testowanie i automatyzowanie testów
Poza współpracą z odbiorcą i zespołem projektowym tester zajmuje się oczywiście testowaniem i walidacją oprogramowania. W scrum testowanie nabiera szczególnego znaczenia, ponieważ zespół ma mało czasu na oddanie gotowej funkcjonalności. Poza tym, faza testów jest częścią stałą każdego sprintu i odbywa się regularnie. Tester rozpoczyna testowanie jak najwcześniej, jak tylko nowoutworzona funkcjonalność jest gotowa na tyle, by można było wykonać test. Potem przynajmniej raz wykonuje testy, gdy funkcjonalność jest uznana za gotową. Tester powinien minimalizować czas trwania testów – głównie poprzez tworzenie i aktualizowanie testów automatycznych. Powinien również odpowiadać za przeprowadzenie testów manualnych będących uzupełnieniem testowania automatycznego. Tester odpowiada także za niestandardowe testy, takie jak badanie użyteczności, bezpieczeństwa, czy wydajności. Pogłębienie relacji testera z klientem ma bezpośredni wpływ na jakość testów – dzięki współpracy z klientem i lepszej znajomości wymagań użytkowników systemu, tester może tworzyć bardziej adekwatne scenariusze testów i opisy produktów („user stories”).
Kompetencje dobrego testera:
Kompetencje dobrego testera można podzielić na dwie kategorie:
Kompetencje techniczne: obejmują znajomość technik, zasad, metod oraz standardów testowania. Do tej kategorii należy także znajomość narzędzi wspierających proces testowania oraz umiejętność tworzenia testów automatycznych.
Kompetencje osobiste obejmują umiejętności miękkie, z jednej strony takie jak rzetelność i dokładność, troskę o detale i dociekliwość, z drugiej strony umiejętności komunikacyjne: umiejętność słuchania i wyciągania wniosków, umiejętność zadawania pytań, zorientowanie na klienta, umiejętność pracy w zespole. Z trzeciej strony ważne są zdolności organizacji pracy: ustalanie priorytetów, zarządzanie czasem, szybkie uczenie się.
Właściwa komunikacja między twórcami a użytkownikami systemu jest podstawą sprawnej realizacji projektu scrum i docelowo uzyskania zamierzonych rezultatów. Bez testera sukces jest trudniejszy do osiągnięcia. A czym jest sukces? Im lepiej dopasowany system do potrzeb użytkownika i organizacji, tym lepsze wyniki jego działania, szybsza adaptacja i mniejszy opór przed zmianami.
autor: Tomasz Dudek, Główny Specjalista IT,
Pentacomp Systemy Informatyczne S.A., www.pentacomp.pl