Co to jest test negatywny? Przypadki testowe z przykładem
⚡ Inteligentne podsumowanie
Testowanie negatywne polega na sprawdzeniu zachowania aplikacji po otrzymaniu nieoczekiwanych danych wejściowych lub warunków operacyjnych, tak aby produkt działał prawidłowo i nie uległ awarii, nie uszkodził danych ani nie ujawnił luki w zabezpieczeniach.

Testowanie negatywne
Testowanie negatywne Testowanie negatywne to rodzaj testowania oprogramowania służący do sprawdzania aplikacji pod kątem nieoczekiwanych danych wejściowych i warunków. Nieoczekiwane dane lub warunki mogą mieć różny charakter – od błędnego typu danych w prostym polu formularza po celowy atak hakerski. Celem testowania negatywnego jest zapobieganie awariom aplikacji z powodu nieprawidłowych danych wejściowych oraz poprawa jakości i stabilności produktu.
Pozytywny wynik testów dowodzi jedynie, że system działa w normalnych warunkach. Negatywny wynik testów potwierdza, że ten sam system radzi sobie również w warunkach nietypowych, co jest wymogiem dla produktu odpornego na błędy.
Przykład testu negatywnego
Do wyjaśnienia negatywnych wyników testów najczęściej używanym przykładem jest winda, ponieważ zarówno jej normalne zachowanie, jak i zachowanie w przypadku awarii są łatwe do wyobrażenia.
Wymagania dotyczące windy są znane: naciśnięcie numeru piętra powoduje wjechanie na to piętro, a drzwi otwierają się automatycznie, gdy winda dojedzie do wskazanego piętra.
Poniżej wymieniono kilka negatywnych scenariuszy dla tej samej windy, obok założeń, jakie niesie ze sobą pozytywny wynik testu.
| Testowanie negatywne | Testowanie pozytywne |
|---|---|
| Co się stanie, jeśli liczba osób (waga) przekroczy określony limit? | Zakłada się, że do windy wejdzie tylko określona liczba osób |
| Co się stanie, jeśli ktoś zacznie palić lub spowoduje pożar w windzie? | Zakłada się, że w windzie nie będzie dymu ani ognia |
| Co się stanie, jeżeli w trakcie pracy nastąpi przerwa w dostawie prądu? | Zakłada się, że nie wystąpi przerwa w dostawie prądu podczas pracy windy |
Wszystkie te przypadki kończą się wynikiem negatywnym. Nie ma gwarancji, że żaden z nich nigdy się nie powtórzy, dlatego każdy z nich musi zostać objęty kontrolą.
Załóżmy, że stan przeciążenia nigdy nie jest sprawdzany, a winda zachowuje się nietypowo po przeciążeniu. Ta pojedyncza luka zagraża niezawodności systemu, a nawet może zagrażać życiu. Właśnie to oznacza negatywny wynik testu w praktyce i dlaczego jest on tak ważny.
Oprogramowanie zachowuje się w ten sam sposób. Negatywny wynik testu celowo odbiega od normalnej procedury operacyjnej. Rozważmy przykład formularza rejestracyjnego.
| Testowanie negatywne | Testowanie pozytywne |
|---|---|
| Wprowadź nieprawidłowy adres e-mail w polu „Adres e-mail” | W polu adresu e-mail należy wprowadzać wyłącznie prawidłowe adresy e-mail |
| Wprowadź nieprawidłowy numer telefonu, np. znaki, w polu numeru telefonu | W polu liczbowym wprowadzane są tylko liczby |
| Prześlij obraz o rozmiarze wykraczającym poza określone granice | Przesyłane są tylko obrazy mieszczące się w określonym rozmiarze |
| Prześlij nieprawidłowe pliki, takie jak XML or SQL pliki w polu przesyłania obrazu | Przesyłane są wyłącznie prawidłowe formaty obrazów, takie jak .jpg lub .png |
Każdy z tych negatywnych przypadków musi pozostawić system w działaniu. Jeśli znak zostanie wpisany w polu liczbowym, aplikacja nie będzie mogła przetworzyć nieoczekiwanych danych, których się nie spodziewała, i może się zawiesić. Co gorsza, SQL injection Ciąg znaków w tym samym polu może usunąć zawartość bazy danych. Straty tego typu są powodem istnienia negatywnych testów.
Dlaczego testy negatywne?
Testowanie pochłania czas i pieniądze, dlatego decyzja o tym, co, jak i ile testować, ma znaczenie. Argumenty za przeznaczaniem części budżetu na testy negatywne wyglądają inaczej w przypadku obu stron projektu.
Perspektywa organizacji
Dostarczenie klientowi produktu dobrej jakości jest obowiązkiem organizacji, a negatywne wyniki testów są częścią tego zobowiązania. Stanowią one również dowód na to, że organizacja zrobiła wszystko, co możliwe, aby zapobiec awarii, mimo że żaden system nie jest całkowicie wolny od błędów.
Wpływ jest decydującym czynnikiem. Witryna e-commerce może przejść wszystkie pozytywne testy, a mimo to zawierać lukę, która pozwala atakującemu na wykonanie ataku SQL injection i usunięcie danych. To poważne naruszenie bezpieczeństwa, którego można doszukać się jedynie w negatywnych testach.
Aplikacje publiczne, w szczególności strony internetowe, oferują praktycznie zerową kontrolę nad tym, jak korzystają z nich użytkownicy, dlatego negatywne testy to jedyny sposób na potwierdzenie, że nietypowe użycie jest objęte ochroną i ograniczone. To samo dotyczy złośliwych użytkowników: atakujący aktywnie poszukują możliwości włamania się do systemu, a scenariusze hakerskie idealnie wpisują się w negatywne testy.
Perspektywa klienta
Klienci oczekują produktu bez żadnych luk w zabezpieczeniach, a negatywne wyniki testów potwierdzają to oczekiwanie. W przypadku produktów wrażliwych, takich jak handel elektroniczny czy handel akcjami online, testy bezpieczeństwa a wyniki testów negatywnych są obowiązkowe, a nie opcjonalne.
Jedynym realnym zmartwieniem klienta są koszty. Po przeanalizowaniu wpływu awarii, klient jest w stanie zdecydować, jak daleko powinny sięgać testy negatywne.
Jak wykonać test negatywny
Testowanie negatywne zaczyna się od uwzględnienia każdego sygnału wejściowego, który aplikacja może fizycznie odebrać, a nie tylko tych, które powinna otrzymać. Każdy z nich należy do Przypadek testowy Nawet jeśli jest to ewidentnie niewłaściwy sposób korzystania z tej funkcji. Pole adresu e-mail jest testowane z każdym typem pliku, który nie jest prawidłowym adresem e-mail, a kontrolka przesyłania obrazów jest testowana z każdym typem pliku, który nie jest obrazem.
Lista możliwych nieprawidłowych danych wejściowych jest praktycznie nieskończona, dlatego negatywne przypadki testowe muszą być priorytetyzowane. W przypadku pola obrazu, które akceptuje tylko pliki .png, możliwe do przesłania pliki obejmują pliki .jpeg, .xml, .xls i wiele innych. Plik XML lub SQL ma znacznie większy potencjalny wpływ niż plik .jpeg, dlatego te przypadki są wykonywane w pierwszej kolejności. Ranking przypadków według wpływu przed wykonaniem sprawia, że testowanie negatywne jest opłacalne.
Większość negatywnych przypadków testowych wynika z niewielkiego zestawu ustalonych technik projektowych, a nie z improwizacji:
- Wartości graniczne: wykonaj wartości znajdujące się bezpośrednio poza prawidłowym zakresem, na przykład 0 i 101 w przypadku pola akceptującego wartości od 1 do 100.
- Nieprawidłowe klasy równoważności: wybierz jednego przedstawiciela z każdej klasy odrzuconych danych wejściowych, na przykład liter w polu liczbowym.
- Błąd podczas zgadywania: wykorzystaj doświadczenie z poprzednich usterek, aby wskazać elementy wejściowe, które najprawdopodobniej uszkodzą tego typu funkcję.
- Nieprawidłowe i wrogie dane: znaczniki skryptów, fragmenty SQL i duże ładunki, które sprawdzają walidację i obsługę zabezpieczeń.
- Testowanie rozmycia: automatycznie generować duże ilości losowych lub zmutowanych danych wejściowych w celu znajdowania nieobsłużonych awarii.
- Przepływy przerwane: anulować, odświeżyć, przekroczyć limit czasu lub utracić połączenie w trakcie transakcji.
Bez względu na zastosowaną technikę oczekiwany wynik należy zapisać jako kontrolowaną, czytelną awarię — komunikat weryfikacyjny, odrzucone przesłanie, czyste wycofanie — a nigdy po prostu jako „system się nie zawiesza”.
Zalety i wady negatywnego wyniku testu
Podobnie jak każda inna technika testowania, testowanie negatywne ma swoje zalety i wady, które zależą od tego, gdzie, kiedy i w jakiej ilości jest przeprowadzane.
Zalety testów negatywnych
- Chroni ona bezpośrednio jakość produktu, ponieważ produkt dobrej jakości to taki, który nie ma żadnych podatnych na wykorzystanie luk.
- Poszerza zasięg. Nieprawidłowe dane wejściowe trafiają do aktywnego systemu celowo lub przypadkowo, więc aby zasięg miał sens, przypadki negatywne muszą występować obok przypadków pozytywnych.
- Zwiększa zaufanie klientów przed udostępnieniem wersji finalnej.
- Ujawnia defekty, których pozytywne testy strukturalne nie są w stanie obsłużyć, takie jak nieobsłużone wyjątki i słaba walidacja danych wejściowych.
Wady testów negatywnych
- W niektórych sytuacjach jest to strata czasu i energii. Jeśli aplikacja jest tworzona dla jednego użytkownika, testowanie 100 użytkowników jednocześnie nie jest warte zachodu, dlatego wybór odpowiednich warunków ma znaczenie, a niektóre systemy wymagają bardzo niewielu testów negatywnych.
- Do projektowania obudów potrzebni są wykwalifikowani i doświadczeni ludzie.
- Z punktu widzenia klienta zwiększa to koszty i może opóźnić wydanie produktu.
- Konkurencja o wysiłek. Zespół, który wydaje dużo na testy z wynikiem negatywnym, może skończyć na niedoinwestowaniu tych z wynikiem pozytywnym.
