Load testing
Słownik ISTQB® definiuje testowanie obciążenia (load testing) jako rodzaj testów wydajnościowych, których zadaniem jest ocena zachowania modułu lub systemu przy zmieniającym się obciążeniu, na ogół pomiędzy przewidywanymi warunkami niskiego, typowego i szczytowego poziomu wykorzystania. Pozwala ono ocenić wydajność systemu i oprogramowania, gdy są one poddawane różnym warunkom obciążenia.
Procedura testowania obciążenia może służyć do testowania wykorzystania zasobów i czasów odpowiedzi, gdy oprogramowanie jest używane. Dzięki takim testom jego twórcy mogą w sposób łatwy wykryć i naprawić wszelkie problemy związane z przestojami spowodowanymi obciążeniem systemu przed uruchomieniem oprogramowania.
Stress testing
Testy przeciążające (stress testing) pozwalają ocenić, czy oprogramowanie działa w sposób zadowalający w niekorzystnych lub ekstremalnych warunkach, np. podczas dużego ruchu w sieci, dużej liczbie uruchomionych procesów, na nieodpowiednim sprzęcie oraz przy żądaniach maksymalnego wykorzystania zasobów. Słownik ISTQB® definiuje je jako typ testowania wydajnościowego wykonywany, by określić jak system lub jego moduł pracuje na przewidywanej lub wyspecyfikowanej granicy obciążenia lub poza nią lub też przy ograniczonym dostępie do pamięci lub serwerów.
Stress testing określa również punkty awarii i odzyskiwania systemu, kiedy zostaną przekroczone określone limity. Niektóre problemy, które mogą zostać wykryte w systemie podczas testów przeciążających, obejmują problemy z synchronizacją i wycieki pamięci.
To, czym dokładnie różnią się między sobą obie te metody testowania wydajnościowego, najlepiej obrazuje poniższa tabela:
Load testing | Stress testing |
---|---|
Sprawdza, jak aplikacja działa w przypadku wzrostu obciążenia. | Są gwarancją, że serwery nie będą ulegać awarii pod nieoczekiwanie dużym obciążeniem działającym przez dłuższy czas. |
Pozwala określić górną granicę systemu. | Pozwalają sprawdzić, w jaki sposób system reaguje na duże obciążenia i jak wraca do pierwotnego stanu po awarii. |
Sprawdza jakość serwera, czas odpowiedzi i szczytową wydajność. | Sprawdza czas reakcji stabilności i niezawodność systemu na poziomie katastrofy. |
Limit obciążenia to próg przerwy w testowaniu obciążenia. | Limit obciążenia przekracza próg przerwy w testowaniu przeciążającym. |
Load testing. Korzyści
- Pozwala określić problemy z wydajnością oprogramowania, zanim jeszcze produkt zostanie oddany w ręce użytkowników
Testy obciążeniowe umożliwiają programistom lepsze zrozumienie tego, w jaki sposób wzrost liczby użytkowników systemu wpływa na jego wydajność. Wykrycie dzięki nim ewentualnych problemów z wydajnością przed wypuszczeniem oprogramowania, pozwala znacznie zwiększyć komfort użytkownika. - Pomaga określić produktywność systemu
Testowanie obciążenia pomaga twórcom oprogramowania poznać punkty szczytowe tworzonego przez nich systemu podczas określania możliwości użytkownika i celów optymalizacji oprogramowania. - Poprawia skalowalność
Firmy mogą opracować dobry plan skalowalności podczas testowania obciążenia. Dzieje się tak, ponieważ testowanie obciążenia może pomóc w ustaleniu, kiedy oprogramowanie jest gotowe do skalowania, a kiedy nie. - Zwiększa zadowolenie klientów z produktu
Testy obciążeniowe dostarczają informacji, które są przydatne w zoptymalizowaniu wrażeń użytkownika, jeszcze zanim oprogramowanie dotrze do końcowych odbiorców. Jest to kluczowe, ponieważ doświadczenie użytkownika jest jednym z czynników, które mogą utrudnić przyjęcie oprogramowania. - Pozwala zminimalizować koszty awarii
Awaria po uruchomieniu zmniejsza zaufanie użytkowników do produktu. Na szczęście koszt odbudowania tego zaufania poprzez ulepszenia oprogramowania można zmniejszyć lub całkowicie mu zapobiec, jeśli organizacje poddadzą swoje oprogramowanie testom obciążeniowym jeszcze przed wypuszczeniem go na produkcję. - Gwarantuje, że system spełnia standardy wydajności
Menedżerowie produktów w organizacjach biznesowych często określają wymagania dotyczące oprogramowania, które zamierzają wprowadzić. Testy obciążeniowe umożliwiają podjęcie niezbędnych środków w celu zapewnienia spełnienia tych wymagań.
Stress testing. Korzyści
- Pozwala przygotować się na ekstremalne sytuacje
Testy przeciążeniowe umożliwiają zespołom sprawdzenie, które punkty awarii mogą się wydarzyć i które są najbardziej szkodliwe dla oprogramowania. Ta wiedza jest kluczowa do stworzenia planu działania, jeśli oprogramowanie rzeczywiście ulegnie takiej awarii. - Pomaga zachować stabilność projektu
Prawidłowo przeprowadzone testy przeciążeniowe zapewniają zespołowi informacje i wskaźniki wczesnego ostrzegania, które ułatwiają identyfikację większości defektów i pozwalają ochronić przed nimi system. W efekcie programiści mogą lepiej chronić oprogramowanie przed skryptami, botami i atakami DOS.
Dodatkowo testy warunków skrajnych pozwalają zidentyfikować słabe punkty systemu i poprawić jego bezpieczeństwo przed oddaniem gotowego produktu klientowi. - Ułatwia tworzenie planów alternatywnych
Testy przeciążeniowe koncentrują się na znajdowaniu różnych problemów, takich jak zakleszczenia, problemy ze współbieżnością, niespójność danych, czy wąskie gardła w synchronizacji. Ponadto dane z testów warunków skrajnych pozwalają wzmocnić plany awaryjne i skalowalności. - Pokazuje, jak system regeneruje się w warunkach stresu
Stress testing umożliwia szczegółowy wgląd w wydajność systemu po jego przeciążeniu. Bazując na wskaźnikach takich jak zdolność przetwarzania, użycie dysku, zużycie Internetu, udane/nieudane transakcje czy zakleszczenia, tester jest w stanie określić możliwe szkody, jakie może spowodować zamknięcie systemu.
Podsumowanie
Testy obciążeniowe są przykładem testowania oprogramowania zgodnie z wymaganiami, które nie prowadzi do popsucia aplikacji i w których tester stopniowo obciąża system, aby dzięki temu sprawdzić jak zachowuje się aplikacja w "naturalnych" dla niej warunkach. Testy przeciążeniowe to z kolei testowanie oprogramowania ponad wymagania; tester stopniowo przekracza "naturalne" warunki, w których pracuje aplikacja, a jego celem jest sprawdzenie tego, jak zareaguje oprogramowanie po osiągnięciu jego limitów. Ten typ testowania często kończy się crashem serwera.