Dziś chciałbym, żebyś na chwilę zapomniał/-a o testowaniu. Dziś pomyśl o innych aspektach, które pomogą w dostarczeniu rozwiązania WYSOKIEJ JAKOŚCI. Przy czym nie ma znaczenia czy jesteś Testerem, Developerem, Architektem czy Analitykiem.
Testowanie to za mało
Samo testowanie choćby nie wiem jak dojrzałe i zaawansowane nie wystarczy do zapewnienia wysokiej jakości. Potrzeba dużo szerszych działań w różnych obszarach, żeby to co dostarczamy było na odpowiednim poziomie, by myśleć o zadowoleniu klienta. Do tego by to osiągnąć, konieczne wydaje się zaangażowanie wszystkich członków zespołu, na każdym etapie, by mówić o wymiernych wynikach tych działań. Wszak zapewnienie jakości już dawno przestało być postrzegane jako domena tych, którzy klikają po aplikacji. Teraz coraz więcej osób rozumie to jako odpowiedzialność całego zespołu, a nie pojedynczych jednostek zwanych testerami.
Należy pamiętać, że samo sprawdzenie konkretnego wymagania, user story, PBI czy jakkolwiek to jest określane w twojej organizacji, jest tylko małym wycinkiem tego co się dzieje w całym cyklu wytwarzania. Dlatego ważne jest zaangażowanie wszystkich członków zespołu nie tylko w realizację pojedynczych zadań, ale dążenie do osiągnięcia większego celu i skupienie na big picture, a przez to rozwiązanie potrzeby biznesowej.
Zrozumienie biznesu
Kluczem do uzyskania odpowiedniego poziomu jakości jest zrozumienie biznesu. No, bo czy można dostarczyć coś, co spełnia wymagania klienta bez wiedzy na temat jego potrzeby biznesowej. Samo zrozumienie tego z czym boryka się nasz zleceniodawca jest niezbędnym elementem, by z sukcesem realizować kolejne user story. Cały czas jednak należy pamiętać, że jest to jeden z kawałków całej układanki. Finalnie mają one stworzyć pełny, działający system lub aplikację, ale poza nimi trzeba dołożyć jeszcze trochę innych, by obrazek był pełny. O nich poniżej. Staraj się zrozumieć w jakim celu dany projekt jest realizowany, a nie tylko to konkretne wymaganie.
Kontekst
Nie ma co ukrywać, że realizacja projektu nie jest zwykle prostym zadaniem. Raczej jest to dość skomplikowane i wymagające przedsięwzięcie. Ale to dobrze, bo warto brać udział w takich wyzwaniach. Warto starać się zrozumieć, w jakim kontekście dany system ma pracować. I to nie koniecznie w momencie pierwszego wdrożenia na produkcję, ale także w kolejnych latach. Zamykanie jednego zadania bez pełnego zrozumienia tych warunków, może powodować problemy w późniejszym okresie. Tutaj należy też pamiętać nie tylko o funkcjonalnym aspekcie implementacji, ale także o zapewnieniu stabilności, skalowalności, bezpieczeństwa, wolumenie danych czy zgodności z różnymi standardami.
Automation checks
W osiągnięciu wysokiej jakości może pomóc wdrożenie testów automatycznych. Mogą one być na różnych poziomach – unity, testy integracyjne, testy API czy UI testy. Do tego podpięcie tego pod CI, co zapewni krótką pętle zwrotną,. To zaś powinno dać nam szanse na szybką reakcję i poprawę jakości. Nie należy się jednak zatracić w namiętności pisania automatów, a raczej traktować je jako narzędzie, a nie cel sam w sobie. Dobrym przykładem może być tutaj wpis na blogu Maćka Wyrodka, gdzie opisuje próbę naprawy testów automatycznych, ponieważ coś zaczęło się wysypywać. Ostatecznie okazało się, że to był błąd w aplikacji, a nie problem z testem.
Metryki
Kolejną rzeczą, o którą warto zadbać, to wprowadzenie metryk. Tutaj można patrzeć na różne aspekty. Nie tylko na ilość, rodzaj błędów czy ich ważność, ale także na efektywność zespołu i to co zajmuje najwięcej czasu zespołu.
Ach te branche
Nasze działania jednak nie powinny się na tym kończyć. Jest jeszcze sporo rzeczy, o których warto pomyśleć. Jedną z nich moim zdaniem jest polityka branchowania i zrozumienie tego zagadnienia. To może znacząco wpływać na jakość, a także na samo podejście do testowania. Jeśli używane są feature branche, to możemy borykać się z problemami wynikającymi z mergowania – może pojawić się konieczność dalszej weryfikacji. Może warto wybrać inny sposób pracy z branchami?
Środowiska, dane
Kolejnym ważnym punktem są środowiska – rozdzielenie developmentu od testów wydaje się czymś oczywistym, a jednak czasami jest ciężkie do zrealizowania. Brak sensownej polityki związanej ze środowiskami może mieć wpływ na jakość tego nad czym pracujemy.
Nie inaczej jest z danymi, które będą przetwarzane przez nasz system. Ciężko przygotować rozwiązanie, gdy nie wiemy o tym jakie dane mamy obsługiwać. Również jakość danych testowych nie jest bez znaczenia. Nasza wiedza w tym zakresie też będzie miała spory wpływ na wyniki testów, co przekłada się również na jakość. W skrajnych przypadkach zdarzyć się może, że zaimplementowany kod nie będzie w stanie poprawnie przetworzyć wszystkich danych. Ale tak jak wspomniałem nie powinniśmy skupiać się tylko i wyłącznie na samym testowaniu.
Ekosystem
Ważny jest także ekosystem, w którym nasze rozwiązanie musi działać. Konieczność integracji z systemami zewnętrznymi często bywa wyzwaniem nie tylko w momencie działania aplikacji, ale także z punktu widzenia samego jej wdrożenia. Mogą się tutaj pojawić zależności, które należy uwzględnić w momencie releasa. Warto pomyśleć o próbnym wdrożeniu (dry run). To pomoże zweryfikować plan wdrożenia, sprawdzić zależności pomiędzy różnymi komponentami, czy nawet zweryfikować czas potrzebny na poszczególne aktywności. Dry run powinien kończyć się też wykonaniem smoke testów, które potwierdzą poprawność wdrożenia.
Podsumowanie
Jak widzisz jest szereg różnych aktywności, które mają wpływ na jakość, a finalnie przekładają się na zadowolenie klienta z dostarczonego systemu. Mam przeczucie, że wymieniłem tylko kilka z nich. Resztę pozostawiam indywidualnemu odkrywaniu.
Zachęcam do wyjścia daleko poza samo testowanie jeśli chcesz zrobić coś na prawdę wysokiej jakości. Zresztą to dotyczy wszystkich członków zespołu, który wspólnie odpowiada za to co wytwarza. Bliska współpraca i wizja wspólnego celu powinna być czymś nadrzędnym. Reszta to tylko mniejsze lub większe zadania do zrealizowania, by na końcu zobaczyć cały obrazek.
- Skup się na jakości, a nie tylko samym testowaniu – testowanie to tylko jeden z elementów
- Zrozum cel danego projektu z punktu widzenia klienta – nie skupiaj się tylko na konkretnym wymaganiu
- Pomyśl o tym w jakich warunkach dane rozwiązanie będzie pracować – nie tylko w momencie wdrożenia, ale też na przestrzeni czasu
- Wprowadź automatyczne checki na różnych poziomach, ale nie zatrać się w nich
- Dowiedz się jaki jest proces branchowania i zastanów się jak to może się przekładać na jakość
- Zidentyfikuj dane, które system ma przetwarzać – wykorzystaj tą wiedzę do przygotowania odpowiednich danych testowych i przypadków do sprawdzenia
- Pytaj o otoczenie w jakim będzie działało rozwiązanie, nad którym pracujesz – integracja zawsze jest wyzwaniem, także podczas wdrożenia
- Zadbaj o próbne wdrożenie
- Szukaj innych miejsc w procesie wytwarzania, które mogą poprawić jakość
- Pytaj, pytaj, pytaj – to jedna z najważniejszych umiejętności jakimi powinien charakteryzować się dobry tester