Choć dziś wydajemy się być w pełni świadomi otaczających nas technologii (nawet jeśli aktywnie z nich nie korzystamy), to nadal jednak lwia część aplikacji i systemów pozostaje w cieniu; cicho i skutecznie wykonując swoją pracę przy zakupach online, nauce języków obcych czy umawianiu wizyty lekarskiej. Dziesiątki systemów IT wymieniają między sobą dane, analizują je i przeliczają. Użytkownik końcowy widzi zaś jedynie atrakcyjny front-end i tylko w momencie gdy COŚ nie zadziała, zastanawia się nad technologią, która stoi za całą usługą.
Cel testowania - minimalizacja ryzyk
My - tj. użytkownicy - jesteśmy przyzwyczajeni do wysokiego standardu i bezawaryjnego działania aplikacji (niezależnie od tego czy gramy na giełdzie czy zamawiamy sushi). Wszelkie wyskakujące błędy, zwłaszcza poważne, powodują, że stopniowo tracimy do niej zaufanie, a w dłuższej perspektywie - zwłaszcza przy powtarzających się błędach - rezygnujemy z jej użytkowania.
Jednak powszechność produktów programistycznych nie spowodowała, że są one bezawaryjne. Aplikacje tworzą ludzie, którzy z natury są omylni, ponadto na sam proces ich tworzenia składają się tysiące i miliony zmiennych, które w efekcie mogą generować usterki w funkcjonowaniu. Jeśli więc nie możemy się przed błędami ustrzec, musimy minimalizować ryzyko ich powstania. I tutaj z pomocą przychodzi testowanie oprogramowania.
Testowanie systemów IT czy aplikacji przede wszystkim minimalizuje ryzyko ewentualnej poważnej awarii. Zatrzymanie systemu, utrata danych… mogą przynieść ogromne straty finansowe; liczone nawet w milionach złotych. Stąd do dokładnych testów, jako partner w zakresie software, przykładamy ogromną wagę - mówi Maria Zagożdżon, CEO w Programa™.
Testowanie oprogramowania: próba definicji
Testy oprogramowania najprościej nazwać “sprawdzeniem” czy wytworzony kod działa poprawnie. To jednak definicja mocno spłycająca ten proces. Testy nie są jednorazową czynnością: są procesem. Program testów jest starannie zaplanowany w czasie, planowanym obciążeniu i budżecie. Testów nie wykonuje się raz (np. tuż przed uruchomieniem produkcyjnym systemu), ale praktykuje się je kilku- lub nawet kilkudziesięciokrotnie w zależności od stopnia złożoności projektu.
Im więcej “bramek” testowych, tym więcej szans dla zespołu developerskiego na naprawienie ewentualnych błędów, a także na poprawienie jakości wytwarzanego oprogramowania i wyników wydajności aplikacji czy systemu. Co więcej, solidne testy to też gwarancja wyeliminowania możliwych usterek często zanim tak naprawdę powstaną.

W zależności do specyfiki projektu, testy oprogramowania powinny odbywac się na możliwie największej liczbie i rodzaju urządzeń, na których ma działać system
Ciężko uspójnić definicję testowania w IT tak, aby w jednym zdaniu oddać całą jego złożoność. My w Programie patrzymy na to jak na wieloetapowy i powtarzalny proces, którego celem jest zniwelowanie ryzyk projektowych poprzez zróżnicowane i dokładne testy kodu i dokumentacji. Szczególnie ważne jest dla nas wdrażanie testów od jak najwcześniejszych etapów tworzenia aplikacji. Przeprowadzenie procesu testów zgodnie ze zdefiniowanymi na początku pracy standardami pozwala osiągnąć maksymalny możliwy poziom bezpieczeństwa i audytu kodu przy założonym czasie i budżecie - Rafał Capiński, Software Tester w Programa™.
Rodzaje testowania
Pod pojęciem “testów oprogramowania” kryje się wiele rodzajów procesów, których celem jest sprawdzenie różnych obszarów pod wpływem różnych warunków.
Podstawowy podział dzieli testy na:
- testy czarnoskrzynkowe, ang. black-box testing - bazujące na specyfikacji i fizycznym sprawdzaniu oprogramowania, bez analizy poprawności i jakości kodu. Ich efektem jest wykrycie dużej liczby błędów, jednak bez odnalezienia ich przyczyny. Czarnoskrzynkowe testy możemy podzielić dalej na:
- funkcjonalne - podstawowa weryfikacja zgodności poszczególnych komponentów i funkcjonalności z wymaganiami zawartymi w dokumentacji,
- niefunkcjonalne - kładące nacisk na osadzenie testowanych komponentów w środowisku i analizujące ich wpływ na obciążenie systemu, bezpieczeństwo danych itp.
- testy białoskrzynkowe, ang. white-box testing (tzw. strukturalne) - to rodzaj testów, którego zadaniem jest przejście wszystkich możliwych ścieżek oprogramowania przy podaniu na wejściu zdefiniowanych danych. Umożliwia to sprawdzenie, czy wykonanie danej akcji generuje kolejne, założone w architekturze kodu.
Warte wspomnienia są też inne podziały, jak choćby podział ze względu na wprowadzane zmiany, gdzie wyróżniamy:
- retesty - sprawdzające skuteczność naniesionych uprzednio w kodzie poprawek,
- testy regresyjne - weryfikujące, czy wprowadzone modyfikacje kodu nie spowodowały powstania błędów w innych modułach lub funkcjonalnościach.
I wreszcie testy oprogramowania możemy podzielić na:
- manualne - gdzie istotą pracy testera jest ręczne sprawdzenie scenariuszy wcielając się w rolę użytkownika “przeklikanie” scenariuszy i zweryfikowanie na podstawie wskazań specyfikacji i innych narzędzi, czy wszystko działa poprawnie,
- automatyczne - gdzie tester przygotowuje i programuje automatyzacje sprawdzające masowo dany komponent (np. czy formularz akceptuje używanie niewłaściwych danych).
Jak szacować budżet na testy?
Zabudżetowanie testów jest wyzwaniem, ponieważ trudno dokładnie przewidzieć ilość pracy, jaka zostanie wykonana. W trakcie projektu może się okazać, że system jest bardziej złożony, niż pierwotnie oszacowano i tym samym estymowane wartości zostaną przekroczone.
Budżet na testy estymuje się biorąc pod uwagę trzy najważniejsze czynniki:
- czas, jaki może zostać przeznaczony na testy,
- dostępność specjalistów i czas, jakiego potrzeba na ukończenie pracy,
- całościowy budżet do dyspozycji.
Ważna jest także formuła pracy: czy dostawca działa kaskadowo, czy pracuje na metodykach zwinnych. W pierwszym przypadku trzeba możliwie dokładnie zaplanować całość kosztów (co często bywa poprzedzone ogromną pracą analityczną), w drugiej zaś - elastycznie zarządzać budżetem, planując tylko najbliższe kroki.

Określenie budżetu na testowanie oprogramowania to bardzo złożony proces
Czasem budżet nie pozwala wykonać testów w wersji “de luxe”. Wtedy dostawca oprogramowania wspólnie z klientem planują np. położenie nacisku na moduł x, zaś moduł y proponują przetestować w minimalnym wymaganym zakresie.
Oczywiście sytuacją idealną jest możliwość wykonania wszystkich wskazanych form testowania, ale czasem trzeba ograniczyć rozmach procesu. Niemożliwym jest jednak nie przeprowadzić go w ogóle. To skazuje projekt IT na porażkę już przy samym starcie - mówi Rafał Capiński.
Changes-challenges, czyli rola testowania w tworzeniu i utrzymaniu oprogramowania
Przy podejmowaniu decyzji o stworzeniu nowego projektu IT warto powiedzieć jasno: żaden, nawet najdoskonalszy kod, nie jest dziełem skończonym i kompletnym. To żywy organizm, który z jednej strony może ( i powinien) ewoluować, z drugiej zaś - poddaje się upływowi czasu. Na cykl życia oprogramowania mają wpływ czynniki zewnętrzne (np. nowe wersje systemów operacyjnych czy technologii, na których opiera się system - w tym hardware) i wewnętrzne (potrzeba rozwoju, usprawnień, przystosowania do nowych oczekiwań biznesu). Wszystko to sprawia, że kod poddawany jest częstym zmianom, a te z kolei wymagają… testów.
W praktyce może się okazać, że z pozoru drobna zmiana generuje nieprawidłowe działanie systemu. Implementacja zmiany bez dokładnych testów np. na środowisku testowym i stabilnym mogłaby mieć poważne konsekwencje dla systemu klienta - mówi Rafał Capiński.
Testom poddajemy więc produkt zarówno w procesie tworzenia, jak i utrzymania.
Skąd biorą się usterki?
Każdą linijkę kodu tworzą ludzie. I choć współpracujemy z najlepszymi w swoim fachu specjalistami, zawsze może zdarzyć się błąd w kodzie, który wymusi na systemie wykonanie niewłaściwego działania. Jednak wiedząc o tym, możemy się przed tym uchronić. Poprawne działanie systemu gwarantuje czuwający nad projektem zespół testerów.
Praca z bardzo złożonym kodem, w nowej technologii i nowym środowisku opartym o liczne integracje - to tylko niektóre z przyczyn tzw. “błędów ludzkich”.

Ważnym ogniwem w procesie testowania są... sami testerzy.
Do listy możemy dopisać też te mniej oczywiste, ale nie mniej prawdziwe: presja czasu, stres czy braki merytoryczne. Kod to złożony, żywy organizm i jednocześnie - zespół naczyń połączonych.
Testowanie to świadectwo jakości
Z pojęciem testowania wiąże się hasło Quality Assurance (ang. Zapewnienie jakości). Im lepiej przetestowany system, im więcej “bugów” odnotowali testerzy, a developerzy usunęli - tym większą pewność odnośnie jakości końcowego produktu ma klient.
Otrzymując aplikację lub system po wnikliwych i wieloetapowych testach może organizować jej start bez obaw o niemiłe technologiczne niespodzianki, które - w zależności od charakteru prowadzonego biznesu - mogą przynosić straty liczone w milionach użytkowników lub/i złotych. Dobra jakość testów to także wizytówka software house’u, który dzięki temu gwarantuje wysoką jakość usług.
Słowem podsumowania: testów nigdy dość. To bardzo ważna dziedzina wytwarzania, rozwoju i utrzymania oprogramowania IT, bez której żaden projekt nie mógłby skończyć się powodzeniem. Nie pomijajmy zatem testów, bo to one gwarantują bezpieczne i poprawne funkcjonowanie systemów.
