Testowanie oprogramowania

Testowanie oprogramowania
Czym jest testowanie oprogramowania? Czasami musimy sięgać do podstaw, aby lepiej zrozumieć, co testowanie może, a czego nie może osiągnąć. A definicja testowania jest znacznie węższa od tego, co nam się wydaje.
 

Testowanie oprogramowania jest wykonywaną przez testerów oprogramowania weryfikacją poprawności działania oprogramowania i dostarczanie informacji na jego temat. Testerzy poszukują tzw. wyroczni testowych do tego, aby zrozumieć, jak działa dane oprogramowanie. Wyrocznią oprogramowania może być zarówno dokument, jak i inne, podobne oprogramowanie. Wyrocznią może być również człowiek. Taką osobą może być np. doświadczony użytkownik oprogramowania. W ostateczności wyrocznią może być tester, co jest podstawą weryfikacji w testowaniu eksploracyjnym.

Testowanie oprogramowania określa się również jako walidację zgodności oprogramowania z oczekiwaniami użytkownika (lub zamawiającego). Walidacja taka zazwyczaj wykonywana jest jako testy akceptacyjne lub odbiorowe.  

Kluczowym jest, aby testowanie weryfikacyjne i testowanie walidacyjne osiągało podobne wyniki. Im większa rozbieżność występuje w tych testach, tym bardziej możemy mówić o braku efektywności testowania wykonywanego przez testerów.

Testowanie oprogramowania jest częścią procesu zapewnienia jakości i można je potraktować jako jedną z wielu czynności w całej serii aktywności mających na celu dostarczenie oprogramowania wysokiej jakości. Oprócz testowania oprogramowania możemy jeszcze wyróżnić takie czynności zapewnienia jakości jak: analiza statyczna i dynamiczna, testowanie statyczne (przeglądy dokumentacji), definiowanie i stosowanie procedur wytwarzania oprogramowania, itd.

Testowanie jest efektywniejsze jeśli wykonywane jest na wielu poziomach w całym cyklu wytwarzania oprogramowania. Testować można kod źródłowy i wówczas nazywamy to testowaniem jednostkowym lub programistycznym. Na kolejnym poziomie możemy testować zdolność modułów do wymiany informacji (testowanie integracyjne). Na poziomie testów systemowych weryfikujemy, czy zdefiniowane dla oprogramowania funkcje oraz atrybuty niefunkcjonalne zostały zaprojektowane zgodnie ze specyfikacją systemową. Dla dużych multisystemów złożonych z innych systemów weryfikujemy zdolność systemów do wymiany informacji (testowanie integracji systemów).

Wyróżniamy wiele innych typów i metod testowania:

  • testowanie negatywne i pozytywne, w zależności od tego, czy chcemy udowodnić, że oprogramowanie działa lub nie działa,
  • testowanie potwierdzające wykonywane jako weryfikacja poprawności wdrożonej poprawki dla defektu,
  • testowanie regresywne jako sprawdzenie, czy już przynajmniej raz zweryfikowane oprogramowania nie zostało zepsute podczas dokonywanej (nawet najdrobniejszej) w nim zmiany lub w jego środowisku,
  • testowanie akceptacyjne alfa wykonywane przez użytkowników (lub też potencjalnych użytkowników) w środowisku wytwórców oprogramowania i testowanie akceptacyjne beta wykonywane przez użytkowników (lub też potencjalnych użytkowników) w docelowym środowisku użycia oprogramowania,
  • testowanie manualne, polegające na uruchomieniu testów przez testera oprogramowania oraz  testowanie automatyczne, polegające na uruchomieniu wcześniej przygotowanych skryptów testowych,
  • etc.

 

Testowanie może być sformalizowane albo w pełni ad hocowe. Podejście ustrukturyzowane wymaga przemyślanego i formalnego podejścia do testów. Wśród podejść nieformalnych możemy wskazać między innymi małpie testowanie, które nie wymaga żadnych procedur, doświadczenia i jest traktowane jako losowe klikanie.

Wbrew obiegowym opiniom testowanie nie jest psuciem oprogramowania, ponieważ testerzy nie mogą zepsuć oprogramowania przez same jego uruchomienie. Jeżeli jakikolwiek użytkownik może przypadkowo uszkodzić oprogramowanie, oznacza to, że nie zostało ono poprawnie skonstruowane przez architekta czy też programistę.

Idealnym testowaniem, choć niestety nieosiągalnym, jest testowanie gruntowne, które weryfikuje wszystkie możliwe zachowania oprogramowania we wszystkich zdefiniowanych kombinacjach środowisk. Takie testowanie jest nieopłacalne i wykonuje się je jedynie dla trywialnych aplikacji. Ponieważ testowanie wszystkiego jest niemożliwe, to testowanie nie daje gwarancji, że oprogramowanie działa i nie zawiera defektów.

Definicji metodologii, metodyk i metod testowania oprogramowania jest bardzo wiele i nie sposób opisać ich w jednym artykule. Każde z typów i poziomów testowania oprogramowania można potraktować jako osobny dział w testowaniu.

 

To powinno Cię zainteresować