person writing on a book
03 października 2024

Sztuka w IT, czyli o sztuce testowania!

Testowanie oprogramowania jest sztuką, która opiera się na kilku kluczowych zasadach, rozwiniętych przez lata praktyki. Zrozumienie tych zasad nie tylko ułatwia przeprowadzanie testów, ale także pozwala testerom skutecznie planować działania, minimalizując ryzyko wystąpienia defektów w końcowym produkcie. W świecie, gdzie aplikacje stają się coraz bardziej skomplikowane, zasady te są niezbędne, aby zachować jakość oprogramowania i zadowolenie użytkowników.

1. Testowanie ujawnia defekty, ale nie może dowieść ich braku

Jedną z najważniejszych zasad testowania jest to, że testowanie może pokazać obecność defektów, ale nigdy nie może dowieść, że oprogramowanie jest ich całkowicie pozbawione. Oznacza to, że bez względu na to, jak dokładnie przeprowadzamy testy, nigdy nie możemy być pewni, że system działa idealnie w każdej możliwej sytuacji. Wynika to z faktu, że zawsze mogą istnieć nieprzewidziane scenariusze, których nie udało się uwzględnić w testach.

Na przykład, tester może przeprowadzić setki testów na aplikacji bankowej, które pokazują, że funkcje działają poprawnie. Jednak może istnieć scenariusz, którego nie udało się przetestować, a który w przyszłości wywoła nieoczekiwany błąd. Testowanie redukuje niepewność, ale nigdy jej nie eliminuje całkowicie.

2. Testowanie gruntowne jest niemożliwe

Testowanie każdego możliwego scenariusza, kombinacji danych wejściowych i warunków początkowych jest po prostu niemożliwe. W przypadku większości aplikacji liczba możliwych ścieżek, danych, konfiguracji sprzętowych i innych zmiennych jest nieskończona. Dlatego testerzy muszą podejmować decyzje, które elementy systemu przetestować priorytetowo, a które można pominąć lub sprawdzić w mniejszym zakresie.

Weźmy przykład aplikacji obsługującej płatności w wielu walutach. Można przetestować różne kwoty, kursy wymiany, opłaty transakcyjne itp., ale nie da się przetestować każdej możliwej kombinacji tych zmiennych. W praktyce testerzy wybierają zestaw testów reprezentatywnych, które pozwalają na sprawdzenie kluczowych obszarów aplikacji. To podejście, zwane analizą ryzyka, umożliwia skoncentrowanie się na najbardziej krytycznych aspektach oprogramowania.

3. Wczesne testowanie oszczędza czas i pieniądze

Zasada ta jest jedną z najważniejszych w procesie tworzenia oprogramowania. Wczesne wykrycie defektów znacznie zmniejsza koszty ich naprawy oraz czas potrzebny na ich usunięcie. Wykrycie błędu na wczesnym etapie, np. w fazie projektowania lub kodowania, jest znacznie tańsze niż jego naprawa po wdrożeniu oprogramowania.

Wyobraź sobie, że podczas projektowania systemu rezerwacji lotów, błędnie zdefiniowano logikę przetwarzania danych pasażerów. Jeśli ten błąd zostanie wykryty w fazie projektowania, jego naprawa będzie stosunkowo prosta – wystarczy poprawić dokumentację. Jeśli jednak błąd zostanie wykryty dopiero po wdrożeniu systemu, jego naprawa będzie wymagała zmiany kodu, testowania, a nawet wycofania aplikacji z rynku na czas wprowadzenia poprawek. Koszty tych działań są znacznie wyższe, niż gdyby błąd został wykryty na wcześniejszym etapie. Dlatego zasada „przesunięcia testów w lewo” (shift left) zakłada, że testowanie powinno zaczynać się jak najwcześniej w cyklu życia oprogramowania.

4. Defekty mogą się kumulować

Często defekty oprogramowania nie występują w sposób przypadkowy, ale kumulują się w pewnych obszarach systemu. Zazwyczaj jest tak, że większość błędów jest wynikiem niewielkiej liczby defektów w kodzie, które wpływają na inne obszary aplikacji. Zasada Pareto mówi, że 80% defektów można znaleźć w 20% modułów – oznacza to, że jeśli jakaś część aplikacji ma problem, istnieje wysokie prawdopodobieństwo, że w tej części pojawi się więcej błędów.

Dzięki tej zasadzie testerzy mogą skupić się na tych obszarach systemu, które są najbardziej podatne na błędy, co pozwala na efektywniejsze alokowanie zasobów. Identyfikowanie „problemowych” części kodu i intensywniejsze ich testowanie może znacząco poprawić jakość oprogramowania przy mniejszym nakładzie pracy.

5. Testy ulegają zużyciu

Testowanie nie jest jednorazowym działaniem – testy, które były skuteczne na początku, z czasem tracą swoją wartość. Wynika to z faktu, że każda aplikacja ewoluuje, a testy, które raz wykryły defekty, mogą z czasem stać się mniej skuteczne, jeśli nie są regularnie aktualizowane. Testy regresyjne, które są powtarzane po każdej zmianie w kodzie, są kluczowym elementem w tym procesie, ale również one wymagają modyfikacji, aby nadążyć za zmieniającym się oprogramowaniem.

Automatyzacja testów może pomóc w regularnym przeprowadzaniu regresji, ale nawet wtedy dane testowe i scenariusze muszą być na bieżąco aktualizowane. W przeciwnym razie aplikacja może rozwijać się szybciej niż testy, co doprowadzi do sytuacji, w której testy przestają wychwytywać nowe błędy.

6. Testowanie zależy od kontekstu

Każdy projekt jest inny, dlatego testowanie oprogramowania musi być dostosowane do specyfiki danego projektu, branży, a nawet technologii. Inne podejście będzie zastosowane do testowania systemu, który odpowiada za podtrzymywanie życia pacjentów w szpitalu, a inne do nowej aplikacji do mediów społecznościowych. Testowanie aplikacji medycznej musi być bardziej rygorystyczne, z naciskiem na zgodność z regulacjami prawnymi i normami bezpieczeństwa, podczas gdy w aplikacjach rozrywkowych priorytetem może być płynność działania i użyteczność.

Dostosowanie testów do kontekstu oznacza także wybór odpowiednich narzędzi, metod testowania oraz technik analizy ryzyka, które najlepiej pasują do specyfiki projektu.

7. Przekonanie o braku defektów jest błędem

Niezależnie od tego, jak dokładnie testowaliśmy system, nigdy nie możemy być w 100% pewni, że nie zawiera on żadnych defektów. Często po przejściu serii testów z sukcesem pojawia się pokusa myślenia, że aplikacja jest wolna od błędów. Jednak zasada ta przypomina nam, że takie myślenie jest błędne i niebezpieczne. Oprogramowanie to złożony system, a błędy mogą być ukryte w najmniej oczekiwanych miejscach. Zaufanie do wyników testów powinno być połączone z ostrożnością i świadomością ograniczeń testowania.

Zasady testowania oprogramowania stanowią podstawę skutecznych procesów zapewniania jakości. Każda z nich przypomina testerom, że testowanie to skomplikowany proces, który wymaga nie tylko znajomości technik testowania, ale także umiejętności strategicznego myślenia. Przestrzeganie tych zasad pomaga w identyfikowaniu defektów, minimalizowaniu ryzyka i dostarczaniu oprogramowania o wysokiej jakości.

Strona zrobiona w WebWave.