Testowanie aplikacji

Z racji tego, że naszym celem jest dostarczenie klientowi w pełni działającego systemu, z którego będzie on zadowolony, sporo uwagi poświęcamy nie tylko programowaniu, ale i testowaniu wytworzonego przez nas oprogramowania. Nawet najbardziej zdolny programista popełnia błędy, a jest to spowodowane wieloma czynnikami m.in. złożonością systemów, dużym skomplikowaniem kodu, presją czasu, źle zdefiniowanymi bądź zmieniającymi się wymaganiami, a także bardziej przyziemnymi sprawami jak chociażby gorszy dzień czy faktem, iż każdy człowiek jest omylny.

Biorąc pod uwagę powyższe, proces testowania zaczynamy na dość wczesnym etapie - zanim zostanie napisana pierwsza linijka kodu. Możliwość tą daje wykorzystanie statycznych technik testowania (ang. Static Testing) takich jak np. przeglądy, dzięki którym jesteśmy w stanie odnaleźć defekty w specyfikacji funkcjonalnej bądź wymaganiach biznesowych, w oparciu o które będą w późniejszym etapie trwały prace programistyczne. Odnalezienie defektów na tak wczesnym etapie powoduje, że są one znacznie mniej kosztowne do naprawienia zarówno pod względem finansowym jak i czasowym czy też potrzebnych zasobów ludzkich. Znacznie łatwiej przecież poprawić błąd w zdefiniowanych wymaganiach, niż kod w gotowym oprogramowaniu działającym według błędnych założeń. Ponadto więcej błędów znalezionych na wcześniejszych etapach procentuje mniejszą ilością błędów znalezionych w gotowym już systemie.

Kolejnym etapem w naszym procesie testowym jest testowanie dynamiczne (ang. Dynamic Testing) z wykorzystaniem technik czarnoskrzynkowych (ang. Black-box Testing). Oznacza to, że traktujemy oprogramowanie jako przysłowiową czarną skrzynkę, co powoduje, że nie jesteśmy w stanie zobaczyć jej wnętrza, nie wiemy co się w niej skrywa. Przenosząc tą analogię na testowanie oprogramowania, osoba zajmująca się testami nie widzi wnętrza systemu - jego kodu i sposobu w jaki on działa - nie analizuje tego kodu linijka po linijce w celu znalezienia defektu, zachowuje się natomiast jak końcowy użytkownik (który przecież nie jest w stanie zobaczyć jak oprogramowanie funkcjonuje od wewnątrz, nie widzi wnętrza czarnej skrzynki) i testuje jego funkcjonalność, korzystając z tego oprogramowania tak jak będzie to robił w przyszłości użytkownik. Taki rodzaj testowania odbywa się na podstawie przygotowanych wcześniej przypadków testowych, które z kolei opracowuje się na podstawie specyfikacji funkcjonalnej i wymagań. Na tym etapie testów, wspomagamy się specjalistycznymi narzędziami do automatyzacji testów, które to narzędzia są w stanie automatycznie wykonać przygotowane wcześniej testy na Państwa serwisach WWW, bez potrzeby ingerencji ze strony człowieka, co znacznie przyspiesza proces testowania oraz znacząco redukuje zapotrzebowanie na zasoby ludzkie potrzebne do przeprowadzenia takich testów. Narzędzia te najbardziej pomagają podczas przeprowadzania testów regresyjnych (ang. Regression Testing), a więc podczas sprawdzania czy nowo wprowadzone do oprogramowania modyfikacje, nie uszkodziły działającego do tej pory kodu.

Ostatnim ogniwem procesu testowego w naszej firmie jest tzw. testowanie akceptacyjne (ang. User Acceptance Testing), w którym główną rolę odgrywa klient. Nie chodzi tutaj o znalezienie defektów, lecz o sprawdzenie czy system w mniemaniu klienta jest już gotowy do użycia, a także o potwierdzenie, że oprogramowanie, które klient otrzyma jest zgodne z jego wymaganiami oraz zawartą wcześniej umową. Ponieważ testowanie akceptacyjne czasem obnaża różnego rodzaje problemy oraz błędy jakie nastąpiły w definiowaniu wymagań biznesowych oraz komunikacji międzyludzkiej, dodatkową zaletą tego rodzaju testów jest więc, zdobyta wiedza o tego rodzaju problemach i możliwości ich zaistnienia, wyciągnięcie z niej wniosków, co z kolei na pewno zaprocentuje bardziej udaną współpracą między klientem, a naszą firmą w przyszłości.

Na koniec wypada wspomnieć o narzędziach, które wykorzystywane są przez nas w procesie testowania oprogramowania:

- system zgłaszania i śledzenia błędów: Mantis,
- zarządzanie zbiorem przypadków testowych: Test Link,
- automatyzacja testów: Selenium,
- inne narzędzia przydatne w testowaniu: Firebug, HttpFox.