Mam nadzieję, że po przeczytaniu tego tekstu będziesz w stanie zdefiniować, czym jest testowanie? Po co testować? Jak to robić? Czy warto testować?
W naszym życiu spotykamy się z najprzeróżniejszymi rzeczami codziennego użytku. Korzystamy z nich bez zastanowienia, bo po prostu są i od zawsze je używamy. Nie myślimy o tym, czemu, na jakiej zasadzie i jak działają i funkcjonują, jak są zbudowane. Mechanicznie sięgamy po klucze do domu i otwieramy zamki, po kartę płatniczą i płacimy za zakupy, po telefon, żeby odebrać połączenie, napisać SMS, sprawdzić media społecznościowe, otwieramy lodówkę, by coś z niej wyciągnąć, przykładów można mnożyć w nieskończoność.
Czy tak naprawdę kiedyś zastanawialiście się, jak to jest, że to wszystko działa?
Oczywiście na samym początku drogi każdego przedmiotu stoi potrzeba oraz ktoś, kto stwierdzi, że ktoś inny będzie miał potrzebę z danej rzeczy korzystać. Następnie mamy pomysł co to ma być, założenia, jak to ma działać, co robić. Powstaje szkic, projekt techniczny, wykonanie prototypu. Następuje zlecenie do produkcji, sprzedaż. Chwileczkę. Czegoś w tym toku myślenia brakuje. Ano właśnie. Brakuje jednej bardzo ważnej rzeczy, jaką jest sprawdzenie, czy dany przedmiot działa i spełnia wymagania pomysłu, założenia odnośnie do jego funkcjonalności, sprawności, niezawodności itp.
I w tym momencie dochodzimy do pytania, jak to zrobić, jak sprawdzić powyższe. Z pomocą przychodzi nam przetestowanie danego produktu.
Oczywiście testowanie, jak każdy element składowy procesu od pomysłu do sprzedaży ma swoje miejsce w hierarchii kolejnych wykonywanych czynności. Z mojego punktu widzenia plasuje się pomiędzy etapem projekt techniczny – prototyp – zlecenie do produkcji. Cóż nam przyjdzie z pięknego przedmiotu, który jest bezużyteczny. Czy ktoś będzie chciał go kupić w celu innym niż wątpliwej jakości ozdoba w domu, biurze?
Testom podlegają przedmioty nas otaczające.
Kupując pustaki na budowę domu, nikt nie zastanawia się, czy i jak działają. Patrzymy co najwyżej do specyfikacji technicznej i sprawdzamy mało komu mówiący parametr przenikalności cieplnej. Robimy to, ponieważ przeczytaliśmy w prasie fachowej, że ma być jak najmniejszy, by dom miał małe straty ciepła. No ok, ale, jak określić choćby ten właśnie parametr. Jedyna metoda to przetestowanie danej mieszanki służącej do produkcji pustaków pod względem interesującego nas parametru, czyli przenikalności cieplnej.
Wyciągając klucze z kieszeni, chcemy mieć pewność, że otworzymy zamek, że zapadki nie poprzestawiają się, uniemożliwiając nam wejście do domu, Aby mieć pewność poprawnego funkcjonowania, zamek jest testowany, nie tylko pod kątem czy klucz da się wsunąć w dziurkę od klucza. Sprawdzane są również możliwość przekręcenia klucza w zamku, czy zamek wytrzyma 10, 100, 1000… przekręceń klucza, zanim się zatnie, uniemożliwiając nam wejście do domu. By mieć pewność, producenci testują zamki, tak pod względem funkcjonalnym (czy „działa”), ale również pod względem niezawodnościowym, oraz bezpieczeństwa (kiepsko by było, żeby ktoś swoim kluczem otworzył mój zamek i mógł wejść do mojego domu, nieprawdaż?).
Nie inaczej jest w zakresie testowania oprogramowania. Korzystając z danej aplikacji, chcemy mieć pewność, że działa ona zgodnie z opisem funkcjonalności, zaleceniami i zapewnieniami producenta. Używając przeglądarki internetowej, oczekujemy, bezwiednie czasami, że po wpisaniu adresu www.abc.pl otworzy nam się właśnie ta strona, nie zaś strona www.klm.pl. Używając telefonu komórkowego do wykonania połączenia z numerem 123456789, chcemy mieć pewność, że połączenie zostanie nawiązane z tym właśnie numerem, nie zaś z numerem 212121212.
Musimy pogodzić się z tym, że systemy oprogramowania stały się nieodłączną częścią naszego życia, nawet w tak prostych rzeczach, jak choćby czajnik elektryczny.
Co, jeśli w oprogramowaniu czy sprzęcie wystąpił błąd?
Każdemu też z nas zapewne przydarzyło się „spotkanie” z oprogramowaniem, które nie zadziałało, jak należy. Pamiętasz, jak się wtedy czułeś? Mały problem, jeśli po dodaniu produktu do koszyka w sklepie internetowym i naciśnięciu „cofnij” w przeglądarce, dodany produkt został usunięty z koszyka. Jest to problem, ale oprócz czasu i nerwów nie tracimy wiele w tym przypadku. A co jeżeli wykonując przelew, po wpisaniu właściwego numeru konta, przez błąd w aplikacji, z naszego konta pobierze się niewłaściwa kwota? Przelew zostanie wysłany na inne konto?
Zastanawialiście się kiedyś nad tym?
Po co testujemy?
Aby zaradzić tym problemom i zminimalizować ryzyko nieprawidłowego działania aplikacji poddajemy ją testom. Testowanie pozwala zmierzyć jakość i ograniczyć ryzyko wystąpienia awarii podczas eksploatacji. W ogólnej świadomości wielu z nas uważa się, że testowanie polega tylko na „odpaleniu” aplikacji i sprawdzeniu „czy działa”. Jest to bardzo okrojone postrzeganie zagadnienia testowania.
W skład „testów” wchodzą również inne czynności jak: planowanie, analiza, projektowanie, implementacja, raportowanie o postępie testów, o ich wynikach, a na końcu ocenie jakości danego oprogramowania. Ponadto, testowanie może wymagać uruchomienia danej aplikacji, lub też sprawdzenia funkcjonalności bez uruchomienia danego modułu, mówimy wówczas o testach odpowiednio: dynamicznych i statycznych.
Niewłaściwym jest też postrzeganie testów, jako czynności skupionej wyłącznie na weryfikacji założeń projektowych, historyjek użytkowników, czy też innych elementów specyfikacji. Oczywiście, podczas testowania sprawdza się system pod kątem spełnienia warunków specyfikacji, ale również sprawdza się, czy system spełnia założenia i oczekiwania użytkowników, oraz inne scenariusze mogące pojawić się w środowisku operacyjnym.
Typowymi celami testowania w przypadku każdego projektu mogą być między innymi:
- ocena wymagań, projektu, kodu, historyjek użytkownika,
- weryfikacja, czy spełnione są wszystkie wymagania specyfikacji,
- weryfikacja, czy przedmiot testów jest kompletny i działa zgodnie z oczekiwaniami użytkownika, wykrywanie defektów,
- dostarczanie informacji o faktycznej jakości produktu,
- obniżenie ryzyka związanego z używaniem oprogramowania, przestrzeganiem wymogów zawartych w umowach, prawach, normach,
- weryfikacja, czy obiekt testów jest zgodny z tymi wymaganiami.
Całość sprawnie funkcjonująca buduje zaufanie co do jakości oprogramowania, a co za tym idzie testów, którymi oprogramowanie zostało poddane.
Po co to wszystko robić? Po co testujemy?
Kompleksowe, rygorystyczne i systematyczne testowanie może pomóc w zmniejszeniu ryzyka wystąpienia awarii oprogramowania, jego niewłaściwego działania. Przyczynia się do podniesienia jakości i niezawodności. Przecież każdy z nas chce, aby np. logowanie do jego banku działało bezbłędnie, i aby tylko on mógł się zalogować na swoje konto, nieprawdaż? Kupując grę, przecież chcemy móc w nią pograć, a nie pooglądać tylko ekran startowy, lub panel instalatora oprogramowania…
Na koniec ostatnie pytanie: Czy warto testować?
Według mnie kupując czajnik, chcę, żeby zagotował wodę, budując dom, chcę, żeby stał długie lata i nie zawalił się, wysyłając przelew, chcę mieć pewność, że wskazana kwota trafi na wskazane konto odbiorcy, płacąc za zakupy kartą, chcę mieć pewność, że z mojego konta pobranie zostanie kwota odpowiadająca wysokości rachunku – myślę więc, że po przeczytaniu powyższego każdy z nas powinien sam odpowiedzieć sobie na pytanie, CZY WARTO?.