Rozpoczynając swoją karierę w IT na studiach, kursach czy ucząc się samodzielnie, często skupiamy się na programowaniu. Zdarza się, iż do debugowania i analizy siadamy, dopiero gdy coś nie działa zgodnie z naszym oczekiwaniem lub pokazują się błędy. Gdy tworzymy program na potrzeby naszej nauki, brak testów nie jest wielkim wykroczeniem. Niestety w przypadku programów czy aplikacji pisanych komercyjnie samo to, iż program zadziałał, nie jest wystarczające. Taki produkt, z którego później korzysta wielu użytkowników, musi zostać dobrze przetestowany na każdym z etapów życia produktu. Jak zorganizować proces testowania programu?
[Joanna] Pracę w firmie Ericsson zaczęłam od praktyk programistycznych w 2017 roku. Rzeczą, na którą zwróciłam uwagę, gdy dostałam pierwsze zadania programistyczne, był ogrom projektu, nad którym pracował mój dział, a to naprawdę był tylko jeden mały fragment tego, nad czym pracuje cała firma. Z perspektywy studenta zaliczającego praktyki i którego największy do tej pory projekt programistyczny trwał semestr i brało w nim udział zaledwie kilka osób, było to naprawdę coś dużego i zupełnie innego niż miałam okazję widzieć do tej pory.
Projekt taki jak ten, rozwijany latami przez zespół rozproszony na całym świecie jest ogromny i naprawdę robi wrażenie. Zrozumienie sposobu, w jaki funkcjonuje taki projekt, wymaga czasu i pracy. Dlatego do poprawnego realizowania zadań nowy pracownik musi opanować cały flow produktu oraz to, co tak naprawdę testujemy i dlaczego. Jest to wiele specjalistycznych zagadnień z zakresu nie tylko programowania, ale także w przypadku naszej firmy wiedzy z zakresu telekomunikacji. Było to na tyle skomplikowane, iż zajmujemy się testowaniem całego produktu, który trafia do naszych klientów, czyli dostawców usług telefonii komórkowej.
Wymagało to zrozumienia licznych zależności i sposobu działania sieci komórkowej w różnych konfiguracjach, ponieważ bez tej wiedzy prawidłowe napisanie testów wymaganych w naszym obszarze byłoby bardzo trudne. Dodatkowo zawsze zmiany dodawane w kodzie muszą być dobrze przetestowane i spełniać wiele wymagań, zanim zostaną ostatecznie zaakceptowane.
Z praktykanta stałam się pracownikiem i przez długi czas rozwijałam umiejętności, wiedzę i kwalifikacje. Przez kilka ostatnich lat zajmowałam się nie tylko programowaniem, ale i testowaniem. Przez ten czas wyszkoliłam kolejnych pracowników. w tej chwili pracuję na stanowisku Senior Software Developera jako specjalista i zauważam wiele korzyści płynących z wiedzy zarówno z zakresu programowania, jak i testowania.
Tester, który wie, w jaki sposób jest coś napisane, ma znaczenie większą świadomość tego, co i w jaki sposób działa. Dzięki temu może szybciej wyłapać błędy, luki w oprogramowaniu lub w testach, które przeprowadza. Tak samo działa to w drugą stronę, wiedząc w jaki sposób pracuje tester, programista może lepiej przewidzieć, zabezpieczyć i przetestować swój kod, zanim trafi on użycia.
Przejście takiej ścieżki kariery od testera do developera lub odwrotnie daje nam większą świadomość całości procesu oraz pracy, która musi zostać wykonana, otwiera umysł. Dodatkowo zrozumienie tej “drugiej strony” pozwala na stworzenie lepszej atmosfery pracy podczas rozwoju oprogramowania, bo przecież tester to nie osoba, która wytyka błędy programiście. Wspólnie pracujemy nad tym, aby produkt końcowy miał jak najlepszą jakość, aby klient, który kupuje od nas oprogramowanie był zadowolony.
Testowanie nie może być spychane na drugi plan
Odpowiednie przetestowanie systemu i wczesne wykrycie jak największej ilości błędów jest najważniejsze podczas pracy w duży projekcie. Tutaj istotną rolę pełni agilowe podejście do rozwoju oprogramowania, czyli programowanie w sposób iteracyjny, gdzie po powstaniu kolejnych funkcjonalności wykonywane są testy każdego z modułów oraz całego programu w celu wychwycenia błędów. Brak odpowiedniego przetestowania produktu na każdym z etapów powstawania systemu może skutkować poważnymi konsekwencjami.
Często staramy się przewidzieć każdy przypadek testowy, który powinniśmy przeanalizować i zaplanować dla niego odpowiednie testy. Mimo to nie powinniśmy powiedzieć, iż kod nie zawiera żadnych błędów. Może się przecież okazać, iż jakiegoś przypadku nie przewidzieliśmy, co skutkuje nieoczekiwanym zachowaniem u klienta, które musimy rozwiązać od strony programistycznej, poprawnie go przetestować i upewnić się, iż taka sytuacja się nie powtórzy. Dzięki temu nie można powiedzieć, iż praca testera jest nudna. Każdego dnia stajemy przed nowymi wyzwania i zwykle każdy błąd czy problem, który napotkamy jest inny, wymaga dokładnej analizy przez wiele osób, które często pracują w różnych krajach na całym świecie.
[Sebastian] Rangę testów w naszej pracy podnosi świadomość znaczenia i wpływu kodu, jaki tworzymy na nasze codzienne życie. Wielu z nas pracuje w firmach tworzących oprogramowanie mające wpływ na zdrowie i ludzkie życie. Nie zawsze jednak zdajemy sobie z tego sprawę. Nie mówimy tutaj jedynie o charakterystycznych systemach mających krytyczny wpływ na nasze życie, takich jak systemy infrastruktury lotniczej, kolejowej, oprogramowanie sprzętu medycznego czy chociażby wind przewożących miliardy pasażerów dziennie. Testy w oprogramowaniu, które na pierwszy rzut oka nie ma wpływu na powyższe czynniki, mogą jednak przy większej analizie zyskać na znaczeniu.