Od zera do automatyzera

Każdy może automatyzować, lecz nie każdy powinien. Ponadto odsetek osób, które rozumieją to co robią nie jest duży, jeszcze mniej osób lubi to robić. Oto dziesięcioro przykazań skutecznej nauki automatyzacji testów, które zostały spisane na podstawie moich osobistych doświadczeń zarówno jako osoby szkolącej jak i szkolonej. Nie są to prawdy objawione lecz empirycznie wywiedzione prawa stanowiące przynajmniej próbę wsparcia osób przygotowujących i prowadzących szkolenia z zakresu automatyzacji testów.

1. Nie ucz programowania, umiejętność ta przyjdzie z czasem

Rozpoczęcie nauki automatyzacji testów od nauki programowania nie jest dobrym pomysłem. Nauka programowania pochłonie zbyt dużo czasu, będzie nudna i nieefektywna. Skuteczniejszą metodą jest wprowadzanie kolejnych elementów programowania w trakcie pisania testów automatycznych: Przykładowo w języku obiektowym możesz powoli pokazywać w jaki sposób tworzyć klasy, deklarować zmienne i metody, tworzyć i inicjalizować obiekty, używać w metodach pętli for i while, korzystać z modyfikatorów dostępu, wywoływać elementy z klasy nadrzędnej, przeciążać i przesłaniać metody, używać switchy i kolekcji. Jeśli student będzie swobodnie korzystał z powyższych zagadnień popracujcie wspólnie nad jakością kodu. Skorzystajcie z dobrej wtyczki np. SonarLint i poszukajcie „smelly code”.

2. Nie ucz automatyzacji testów grupy osób

Warsztaty służą jedynie przedstawieniu tematu i narzędzi. Większość kursantów nie ma w sobie na tyle motywacji by robić coś po godzinach przez dłuższy czas. Prędzej czy później pojawi się znużenie tematem. Jedynie siedząc ze studentem indywidualnie, przedstawiając temat krok po kroku skutecznie go nauczysz automatyzacji.

3. Jeśli warsztaty są oderwane od projektu, motywacja większości kursantów szybko zniknie

Nic tak nie motywuje jak praca nad konkretnym projektem. Jeśli już zabierzesz się za naukę automatyzacji testów przygotuj szkolenie tak by dotyczyło ono istniejącej aplikacji.

4. Bądź ekspertem ale nie wszechwiedzącym, daj się wykazać kursantom

Zapoznaj studentów z branżowymi portalami takimi jak Stackoverflow, jsfiddle itp. i pozwól im proponować ulepszenia do istniejącego kodu. Przykładowo jeśli kroki w scenariuszach napisanych w gherkinie powtarzają się nie mów im o opcji Background niech sami odkryją, że da się to zapisać w lepszy sposób. Podobnie ze switchami z dużą ilością case’ów, niech studenci zauważą, że ich metody przestają być czytelne i niech zaproponują coś nowego np. użycie kolekcji.

5. Zacznij od nauki czegoś prostego

Jeśli framework do testów automatycznych składa się z warstwy BDD zacznijcie naukę od pisania scenariuszy od gherkina i dalej schodźcie w stronę implementacji kroków w kodzie. Jeśli planujecie zautomatyzować zarówno testy UI, API jak i DB zacznijcie od testów UI, wprowadźcie następnie do testów kroki bazodanowe na ładowanie i usuwanie danych testowych, w ten sposób student nauczy się przełączać pomiędzy różnymi językami i technologiami. Na koniec wprowadź testy API, dzięki temu student zrozumie architekturę systemu i przepływ danych.

6. Bądź cierpliwy

Jeśli nie potrafisz czegoś wyjaśnić to albo tego nie rozumiesz zbyt dobrze albo nie posiadasz odpowiedniej ilości cierpliwości w sobie. To jest moment żeby przestać to robić. Przynajmniej na jakiś czas.

7. Nie siedź za długo z jedną osobą

Jeśli będziesz za długo siedział z jedną osobą, student wyczuje że zawsze może na Ciebie liczyć i na podpowiedzi lub nawet gotowe rozwiązania problemów. Należy dosyć szybko próbować pozostawić studentów z problemami do samodzielnego rozwiązania.

8. Naucz rozmowy z developerami

Nie wystarczy umiejętność pisania testów automatycznych żeby być przydatnym w zespole. Podstawowa cecha technicznego testera to umiejętność rozmowy z developerami ich językiem. Zacznij od samego początku wprowadzać odpowiednią nomenklaturą w trakcie tłumaczenia narzędzi do zarządzania kodem (przykładowe słowa: commit, pull, push, merge itd.), narzędzi do ciągłej integracji (przykładowe słowa: CI/CD, build, deploy itd.), środowiska programistycznego (przykładowe słowa: package, runner, biblioteka, plugin itd.), architektury systemu (przykładowe słowa: backend, frontend, API, Rest, Soap itd. )

9. Pokaż plan nauki i regularnie przedstawiaj postępy

Niech student wie gdzie jest i dokąd zmierza. Przedstaw plan pisania testów automatycznych: BDD, testy UI, testy DB, testy API. Zróbcie sobie raz w tygodniu grupowe spotkanie statusowe pokazujące postępy nauki i prac projektowych. Może to być w postaci wykresu Gantta i małego dema testów automatycznych napisanych przez studenta.

10. Rozwiązujcie problemy techniczne razem

Na początku koniecznym jest by rozwiązywać razem problemy techniczne. Naucz studenta czytać komunikaty i logi z konsoli, naucz go korzystania z takich portali jak Stackoverflow. Nadzoruj to co robi i jeśli wykaże się umiejętnościami pozwól by stał się małym ekspertem i przekazywał wiedzę dalej.

Przemek Jagodziński