Metody i narzędzia do badań wydajnościowych

Testy wydajnościowe

Analiza i porównywanie wydajności aplikacji jest dziedziną obszerną. Powstało wiele artykułów i badań na ten temat. Zaczynając od analizy porównawczej różnych języków programowania, poprzez porównanie środowisk komputerowych, a kończąc na systemach operacyjnych.

W tym artykule znajdziesz odpowiedzi na poniższe pytania:

  • Czym jest test wydajnościowy?
  • Jakiego narzędzia użyć do testów wydajnościowych?
  • Jaki jest podział dla testów wydajnościowych?

Zanim zostanie wyjaśnione w jaki sposób można przeprowadzać testy wydajnościowe należy wyjaśnić czym jest test wydajnościowy.

Testy wydajnościowe należą do grupy testów niefunkcjonalnych i służą do sprawdzenia zachowania aplikacji przez zastosowanie pewnego obciążenia.

Black box vs White box

Pomiary wydajności technologii możemy wykonać na kilka sposobów. Możemy wyróżnić dwa główne podejścia: black box oraz white box.

W modelu testów black box tester nie ma żadnych informacji o wewnętrznym działaniu aplikacji.  Ten model testów najczęściej używany jest w przypadku, gdy technologie w których została wytworzona aplikacja mocno się różnią lub celem testów są wyższe warstwy aplikacji na przykład przetwarzanie żądań http.

Model white box charakteryzuje się projektowaniem testów wydajnościowych z myślą o testowanych narzędziach i użytych technologiach. Przykładem mogą posłużyć tutaj narzędzia z funkcją profilowania pamięci w Javie za pośrednictwem JVMTI. Taka możliwość zostało wprowadzone w Javie 11 pod kodem JEP 331, które celem jest zapewnienie wydajne próbowanie alokacji sterty Java.

W przypadku aplikacji serwerowych w obu modelach można używać zewnętrznych narzędzi do pomiarów wydajności. W skład badań wydajnościowych wchodzą:

  • współczynniki wydajności, które wpływają na wydajność aplikacji,
  • metryki,
  • metody i narzędzia do pomiarów wydajności.

Poniżej zostały wymienione istotne czynniki, które wpływają na wydajność programów:

  • zużycie pamięci,
  • zajętość procesora.

Przykładowe narzędzia dla Java

Pierwszym narzędziem i najważniejszym do pomiarów wydajnościowych jest biblioteka JMH – Java Microbenchmark Harness. JMH to narzędzie do budowania, wykonywania automatycznie powtarzalnych wywołań kodu, symulowania kontekstu produkcyjnego i monitorowania kodu za pomocą mikro-testów. Dzięki temu jest możliwość utworzenia miarodajnych i precyzyjnych testów wydajnościowych unikając problemów z usuwaniem kodu przez kompilator JIT czy symulowanie dużej ilości wywołań danej metody. Produkt został opracowany przez projekt OpenJDK.

Drugim pomocniczym narzędziem jest VisualVM. Narzędzie pozwala na wizualne monitorowanie zasobów serwera oraz integruje polecenia JDK wiersza poleceń i lekkie funkcje profilowania. Podobnie jak wcześniejsze narzędzie zostało opracowane przez projekt OpenJDK.

Kolejnym ciekawym narzędziem, tym razem dla testów typu black box jest JMeter, który zapewnia kompleksową obsługę testów obciążeniowych serwera. Pozwalając symulować realny ruch użytkowników, tworzenie scenariuszy testowych, sprawdzenie poprawności statusów HTTP, zwracanych wartości, pomiary czasów zapytań i wiele innych testów.


Ciekawe artykuły

  1. Oracle Corporation, JEP 331: Low-Overhead Heap Profiling, http://openjdk.java.net/jeps/331
  2. A. Haiut, White Box Vs. Black Box in Load Testing, https://www.blazemeter.com/blog/white-box-vs-black-box-load-testing
  3. Oracle Corporation, Code Tools: jmh, https://openjdk.java.net/projects/code-tools/jmh/
  4. Oracle Corporation, VisualVM, https://visualvm.github.io/

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *