Porównywanie aplikacji (widoki)

Pojęcia i implementacja Jetpack Compose

Testy porównawcze to sposób na sprawdzanie i monitorowanie wydajności aplikacji. Możesz regularnie przeprowadzać testy porównawcze, aby analizować i debugować problemy z wydajnością oraz zapobiegać wprowadzaniu regresji w ostatnich zmianach.

Android udostępnia 2 biblioteki i podejścia do analizy porównawczej, które umożliwiają analizowanie i testowanie różnych sytuacji w aplikacji: Macrobenchmark i Microbenchmark.

Makrotest porównawczy

Biblioteka Macrobenchmark mierzy większe interakcje użytkowników, takie jak uruchamianie, interakcje z interfejsem i animacje. Biblioteka zapewnia bezpośrednią kontrolę nad testowanym środowiskiem wydajności. Umożliwia kontrolowanie kompilacji oraz uruchamianie i zatrzymywanie aplikacji w celu bezpośredniego pomiaru rzeczywistego uruchamiania lub przewijania aplikacji.

Biblioteka Macrobenchmark wstrzykuje zdarzenia i monitoruje wyniki zewnętrznie z aplikacji testowej utworzonej na podstawie testów. Dlatego podczas pisania testów porównawczych nie wywołujesz kodu aplikacji bezpośrednio, ale poruszasz się po aplikacji jako użytkownik.

Mikrotest porównawczy

Biblioteka Microbenchmark umożliwia testowanie kodu aplikacji bezpośrednio w pętli. Służy do pomiaru pracy procesora, która ocenia wydajność w najlepszym przypadku – np. rozgrzany JIT (Just in Time) i buforowany dostęp do dysku – którą można zaobserwować w przypadku pętli wewnętrznej lub konkretnej funkcji hot. Biblioteka może mierzyć tylko kod, który można wywołać bezpośrednio w izolacji.

Oto przykłady sytuacji, w których warto korzystać z analizy porównawczej:

  • gdy aplikacja musi przetworzyć złożoną strukturę danych;
  • gdy aplikacja ma określony algorytm wymagający dużej mocy obliczeniowej, który jest wywoływany wielokrotnie podczas jej działania;

Możesz też mierzyć elementy interfejsu. Możesz na przykład zmierzyć koszt wiązania elementu RecyclerView, czas potrzebny na rozszerzenie układu lub wydajność etapu układu i pomiaru klasy View.

Nie możesz jednak zmierzyć, jak przypadki testowe wpływają na ogólne wrażenia użytkownika. W niektórych przypadkach testy porównawcze nie pokazują, czy udało się wyeliminować wąskie gardło, np. gubienie klatek czy długi czas uruchamiania aplikacji. Dlatego ważne jest, aby najpierw zidentyfikować te wąskie gardła za pomocą Profilera Androida. Po znalezieniu kodu, który chcesz przeanalizować i zoptymalizować, możesz wielokrotnie uruchomić pętlę testu porównawczego, aby uzyskać wyniki z mniejszą ilością szumu. Dzięki temu możesz skupić się na jednym obszarze wymagającym poprawy.

Biblioteka Microbenchmark podaje informacje tylko o aplikacji, a nie o całym systemie. Dlatego najlepiej sprawdza się przy analizowaniu wydajności w sytuacjach specyficznych dla aplikacji, a nie tych, które mogą dotyczyć ogólnych problemów z systemem.

Porównanie bibliotek testów porównawczych

Makrotest porównawczy Mikrotest porównawczy
Funkcja Mierz punkty wejścia lub interakcje wysokiego poziomu, takie jak uruchomienie aktywności lub przewijanie listy. Mierz poszczególne funkcje.
Zakres Test całej aplikacji poza procesem. Test działania procesora w trakcie procesu.
Szybkość Średnia szybkość iteracji. Może przekraczać minutę. Szybkie tempo iteracji. Często zajmuje to mniej niż 10 sekund.
Śledzenie Wyniki zawierają ślady systemowe. Wyniki domyślnie zawierają minimalne śledzenie systemu i ślad metody.