Nice to have u juniora automatyzującego - czyli co trzeba umieć, żeby dostać pierwszy projekt

Automatyzacja to dla wielu ludzi naturalny krok na ścieżce związanej z testowaniem oprogramowania. Jednak zmiana nie zawsze jest prosta. Jeśli zastanawiasz się, jak przygotować się do automatyzacji testów, to dobrze trafiłeś. W tym artykule przyjrzymy się temu, na jakim etapie powinien znajdować się tester manualny, aby zacząć myśleć o nowych perspektywach zawodowych. Odpowiemy także na pytanie, jakie umiejętności musi posiadać osoba, która chce zostać juniorem automatyzującym.

Zanim zaczniesz myśleć o automatyzacji

Dla ludzi związanych z branżą wydaje się to oczywiste, ale osoby, które dopiero zamierzają zostać testerem oprogramowania często zadają sobie pytanie, od czego zacząć, od testowania manualnego lub automatyzacji.

Najczęściej osoba chcąca zostać testerem automatyzującym musi posiadać wiedzę z zakresu testów manualnych, dzięki temu możliwe jest zrozumienie istoty procesów testowych, a także właściwe myślenie o jakości produktów cyfrowych.

Testowanie manualne to konieczny wstęp do automatyzacji

Pierwszy automatyzowany projekt powinien być sukcesem, jeśli wcześniej została utrwalona wiedza z zakresu:

  • Testów aplikacji desktop/web/mobile w zależności od firmy lub projektu, w jakim pracujemy lub pracowaliśmy. Nie są nam obce rodzaje testów funkcjonalnych (np. regresyjne, ad hoc) oraz niefunkcjonalnych (np. integracyjne, wydajnościowe).
  • Pisania scenariuszy testowych wraz z przypadkami testowymi, które sprawdzają poprawność działania odpowiednich funkcji w systemie/aplikacji.
  • Zgłaszania błędów według odpowiedniego szablonu np. (tytuł błędu, środowisko jego wystąpienia, kroki, które pozwolą zreprodukować błąd, zachowanie oczekiwane, zachowanie rzeczywiste, załączniki (zrzuty ekranu, logi, filmy), dobranie odpowiedniej ważności i priorytetu, wersja oprogramowania), znajomość programu służącego do śledzenia błędów np. Jira, dzięki temu oprócz zgłaszania również monitorujemy cykl życia defektu.
  • Pisania dokumentacji do projektu/programu – dokumentacja powinna zawierać informacje, jak używać danego programu, czym jest dany program oraz wskazówki dotyczące dalszego rozwoju programu.
  • Znajomości filozofii Agile (zarządzanie zwinne) – gdzie wykonuje się zadania w krótkich interwałach czasowych (podejście to pozwala dostosować się do zmian w środowisku biznesowym). Najbardziej popularny rodzaj metodyki Agile to Scrum, który bazuje na współpracy całego zespołu w projekcie, poprzez wzajemne uczenie się,  dzięki nabieraniu doświadczenia, pomocy oraz wyciągania wniosków z popełnionych błędów.

Podstawowa znajomość odpowiednich technologii

Warsztat testera automatyzującego w dużej mierze zbudowany jest wokół znajomości języków programowania. To właśnie ten element pozwala wznieść swoją pracę poziom wyżej i zmienić projekty testowane manualnie, na testy, które oparte są na frameworkach i programowaniu.

Co powinieneś znać, aby być pożądanym kandydatem na junior testera automatyzującego:

  • Język programowania – jeżeli chodzi o języki stosujące statyczne typowanie, to możemy wyróżnić: Java, C#, C++, TypeScript języki stosujące dynamiczne typowanie to: Python, PHP oraz JavaScript. Podstawowa znajomość, któregoś wyżej wymienionych języków programowania pozwolą łatwiej przenieść się na inny język, gdy projekt będzie tego wymagał. Można doszukać się tutaj analogii znaków i przepisów drogowych. Każdy kraj ma swoje oznakowania i przepisy, ale gdy się z nimi zapoznamy wiemy jak się poruszać.
  • Baza danych – znajomość podstawowych operacji na bazach danych: wprowadzanie danych, usuwanie, modyfikacje, wyszukiwanie za pomocą języka SQL.
  • Systemy operacyjne – znajomość obsługi Windows oraz Linux (poruszanie się poprzez podstawowe komendy w konsoli).
  • Testowanie API – warto coś na ten temat wiedzieć, ponieważ coraz więcej systemów jest opartych na mikroserwisach + znajomość kodów odpowiedzi HTTP.

Odpowiednie cechy osobowości testera oprogramowania

Oprócz ciekawości, dociekliwości, zdolności analitycznej oraz dokładności i chęci eksploracji, które już posiadasz lub powinieneś posiadać z racji bycia testerem manualnym, powinieneś posiadać również takie cechy jak:

  • Dobra komunikacja w swoim zespole, jak i w innych działach (jak w swoim zespole nie powinno stanowić to problemu, tak po za nim musimy postarać się o zrozumienie i szacunek do drugiej osoby, ponieważ może ona odgrywać inną rolę w firmie i niekoniecznie musi znać się na szeroko pojętym IT).
  • Chęć zdobywania wiedzy (bycie na bieżąco z branżą poprzez czytanie portali internetowych, literatury, uczestnictwo w konferencjach oraz fora dyskusyjnych).
  • Umiejętność wsłuchiwania się w potrzeby i oczekiwania klienta (musimy postawić się na miejscu klienta, aby zrozumieć cel danego projektu).

Chcesz robić krok do przodu, co trzeba opanować

Znajomość systemu kontroli wersji

Inaczej zwany systemem kontroli zmian jest to program narzędziowy służący śledzeniu zmian plików oraz nimi zarządza.

Popularnym programem jest Git, który umożliwia pracę na tym samym kodzie przez wiele osób, pozwala na pracę w lokalnym repozytorium oraz pozwala na scalanie i transferowanie zmian z różnych branchy w danym projekcie.

Warto znać podstawowe komendy dotyczące statusu, zapisu, synchronizacji oraz zaciąganie zmian.

Znajomość środowiska programistycznego

Środowisko programistyczne ma wiele narzędzi ułatwiających pracę z kodem m.in. edytorem kodu, kompilatorem, narzędziami do testowania, środowiskami uruchomieniowymi.

Popularne środowiska programistyczne to Visual Studio Code lub programy ze stajni JetBrains takie jak Intellij IDEA, PyCharm itd.

Znajomość DRY, KISS, YAGNI

Są to wzorce projektowe, które powinny być zawsze z tyłu głowy przy pracy z kodem.

Zasada KISS - KEEP IT SIMPLE STUPID (nasz kod powinien być jak najprostszy w zapisie bez żadnych zawiłości). Najważniejsze to utrzymać przejrzystość i elegancję kodu, co z kolei przełoży się na łatwiejszą jego naprawę i szybsze wdrożenie nowych funkcjonalności. 

Zasada DRY - DON'T REPEAT YOURSELF (w naszym kodzie nie powinny występować powtórzenia, które robią to samo). Musimy unikać powtarzających się tych samych części kodu, to pozwala na lepsze projektowanie interfejsów oraz funkcjonalności.

Zasada YAGNI - YOU AIN’T GONA NEED IT (zasada, która mówi, żeby pisać kod, który w danej chwili jest nam potrzebny oraz żeby nie pisać nadmiarowego kodu). Pisanie linii kodu na “zapas” spowoduje zmarnowanie naszego czasu który zostanie spotęgowany przy utrzymaniu tych dodatkowych linii kodu.  

Znajomość TDD i BDD

TDD - Test Driven Development

Przed napisaniem kodu implementującego daną funkcjonalność najpierw piszemy testy do nieistniejących funkcjonalności.

Dzięki TDD zbudujemy stabilniejszą aplikację oraz obniżymy ryzyko występowanie błędów.

Narzędzi do obsługi TDD to: JUnit, NUnit itp.

BDD - Behaviour Driven Development

Jest to niejako rozwinięcie TDD różnica polega na tym że wykorzystujemy składnię języka naturalnego do pisania testów, które przedstawiają zachowanie, oczekiwanie i rezultat testu.

Testy napisane w BDD są zrozumiałe dla pracowników nietechnicznych oraz mogą posłużyć się jako dokumentacja systemu.

Narzędzi do obsługi BDD to: Cucumber, SpecFlow itp.

Wiedza na temat piramidy testów

Graficzny model, który przedstawia relację między ilością testów a ich poziomem. Im niższy poziom, tym większa ilość testów, a im wyższy tym mniejsza ilość.

Piramida testów składa się z 3 poziomów:

- Testy jednostkowe - poziom najniższy, sprawdzają pojedyncze komponenty (metodę lub klasę), szybki czas wykonywania testu (milisekundy), łatwe w utrzymaniu, niskie koszty utrzymania (na to składa się czas na ich napisanie, który jest krótki oraz ich utrzymanie).

- Testy integracyjne - środkowa część piramidy, sprawdzają kilka komponentów jednocześnie, dłuższy czas wykonywania w stosunku do testów jednostkowych (kilka sekund), w porównaniu do testów jednostkowych są droższe i trudniejsze w utrzymaniu.

- Testy End to End - najwyższa część piramidy, testują całościowe działanie systemu/komponentów, naśladując zachowanie użytkownika, czas wykonywania (kilkadziesiąt sekund), w porównaniu do testów integracyjnych są droższe i trudniejsze w utrzymaniu.

Piramida testów pozwoli nam na odpowiednie rozplanowanie testów, znacząco ograniczy ilość wystąpienia błędów, a to z kolei przełoży się na oszczędność czasu pracy, który jest jedną z najważniejszych kwestii w projektach testerskich.

Warto również dodać, że niezależnie już od hierarchii nad piramidą znajdują się również testy bezpieczeństwa oraz testy wydajnościowe.

Wiedza na temat struktur pisania testów

Przed rozpoczęciem pisania testów powinniśmy je w logiczny sposób ustrukturyzować.

Wzorzec AAA - Arrange, Act, Assert

W części Arrange (aranżacja) definiujemy środowisko testowe np. instancję klasy.

W części Act (odegranie) działamy na np. metodzie

W części Assert (sprawdzenie) sprawdzamy rezultat naszych działań.

Jeden z najpopularniejszych wzorców służących automatyzacji testów webowych to wzorzec Page Object Model. Każda strona aplikacji webowej przedstawiana jest jako Page Object natomiast jej elementy jako obiekt.

Takie podejście pozwoli na oddzielenie funkcjonalności działających na stronie z jej elementami oraz pozwoli łatwiej utrzymać testy.

Umiejętność dostosowania się do projektu

Bardzo pomocne w tym aspekcie będzie ukończenie studiów na kierunku Informatycznym lub Teleinformatycznym, które uczą sprytu, logicznego myślenia, dążenia do celu, wytrwałości oraz współpracy w grupie. Dzięki temu pomimo trudnego projektu lub braku doświadczenia w danej technologii, na której oparty jest projekt, jesteśmy w stanie doprowadzić go do końca, a zarazem wiele się z niego nauczyć.

Język angielski na poziomie komunikatywnym

Znajomość języka angielski w IT jest ważną i pomocną sprawą, ponieważ:

- umożliwi nam czytanie literatury branżowej,

- będziemy w stanie uczestniczyć w spotkaniach biznesowych dotyczących zagranicznych projektów,

- zrozumiemy żargon/określenia w branży informatycznej,

- ułatwi nam porozumiewanie się z ekspertami pochodzącymi z różnych krajów oraz na uczestnictwo w Meetup'ach,

- pozwoli czytać dokumentację techniczną

 Jak zostać testerem automatyzującym - podsumowanie

Powyższa lista umiejętności i wiedzy, którą trzeba opanować, aby rozpocząć pracę w projekcie jako junior tester automatyzujący pozwoli Ci sprawdzić, na jakim etapie swojej kariery jesteś. 

Jeśli brakuje Ci, któregoś z wyżej wymienionych elementów, to możesz zaplanować proces nauki, który pozwoli Ci rozwinąć się w obszarach, w których jesteś najsłabszy. Dlaczego warto to zrobić? Automatyzacja to przyszłość środowiska testerskiego, coraz więcej projektów polega na testach wykonywanych przez skrypty, dlatego krok w tym kierunku może się okazać strzałem w 10. Zwłaszcza, jeśli chcesz się rozwijać i lubisz zawodowe wyzwania.