Treść zaktualizowana 20.12.2021. Konsultacja merytoryczna: Tomasz Nykiel
- 1. Aplikacje mobilne w 2021 roku
- 2. Sprintem przez projekt?
- 3. Zwinne podejście do testowania aplikacji mobilnych
- 4. Właściciel Produktu w metodologiach zwinnych Agile
- 5. Zwinny zespół projektowy
- 6. Ciągłe przeprowadzanie testów
- 7. Modele testowania aplikacji
- 8. Testowanie aplikacji mobilnych na emulatorach
- 9. Testowanie aplikacji mobilnych na farmie urządzeń
- 10. Beta-testy i automatyczne raportowanie błędów
- 11. Podsumowanie
Aplikacje mobilne w 2021 roku
Według raportu „State of Mobile 2021” nowa, pandemiczna rzeczywistość przełożyła się na większe wykorzystanie urządzeń mobilnych, a to z kolei – na rekordowe wydatki na aplikacje mobilne. Użytkownicy urządzeń iOS i Android chętniej kupowali aplikacje i gry w App Store oraz Google Play, wydając na nie 35-40% więcej niż w roku poprzednim. Za dynamicznym rozwojem sektora aplikacji mobilnych idzie konieczność szybkiego dostarczania na rynek przetestowanych aplikacji. Jak zatem zadbać o efektywne testowanie aplikacji mobilnych? Z pomocą przychodzą metodyki zwinne, coraz chętniej stosowane w realizacji projektów rozwoju aplikacji.
Sprintem przez projekt?
Metodyki zwinne to preferowany sposób tworzenia aplikacji mobilnych. Charakterystyczną cechą filozofii Agile jest sprint – czyli określony czas, podczas którego zespół wykonuje dany etap prac i dostarcza go do oceny klientowi. Czas trwania sprintu jest ustalany z góry na początku projektu. Może to być okres 2 tygodni i jest stały przez całą długość życia projektu. Na początku każdego sprintu zespół ustala cele, czyli definiuje, co chce osiągnąć podczas kolejnego okresu. Po zakończeniu sprintu, widząc postęp prac, można ocenić stan projektu, zmienić priorytety czy nawet zmodyfikować projekt aplikacji (np. dodając nowe funkcjonalności). Dzięki temu metodyka zwinna pozwala elastycznie podchodzić do zmian, a programiści mają zapewnioną stałość wymagań w czasie trwania sprintu, co pozwala im wydajnie pracować. Klient natomiast ma możliwość zmiany planów po każdym sprincie i bieżącego dopasowania projektu do ciągle zmieniających się wymagań, opinii użytkowników czy nowych priorytetów biznesowych.
Zwinne podejście do testowania aplikacji mobilnych
Opisane podejście dotyczy wszystkich projektów tworzenia oprogramowania, ale jest szczególnie ważne w świecie testowania aplikacji mobilnych. Obecne platformy dystrybucji (App Store dla iOS, Google Play dla Androida) umożliwiają publikację aplikacji jeszcze w procesie jej tworzenia i aktualizowanie jej regularnie bez żadnego wysiłku użytkownika końcowego. To, w połączeniu z metodologią zwinną, pozwala opublikować aplikacje mobilne jak najwcześniej, zebrać opinie użytkowników i na tej podstawie ustalać dalszy plan rozwoju aplikacji, publikując regularnie kolejne funkcjonalności. Bazując na opinii końcowych użytkowników, klient ma możliwość ustalenia priorytetów rozwoju, które są zgodne z rzeczywistymi oczekiwaniami, i płynnie zmieniać oryginalną wizję produktu na taką, która jest najbardziej atrakcyjna na docelowym rynku.
Metodologia zwinna Agile, wraz z modelem częstego publikowania aplikacji, pozwala szybciej uzyskać dopracowany, funkcjonalny produkt.
Właściciel Produktu w metodologiach zwinnych Agile
Właściciel Produktu (Product Owner) to osoba odpowiedzialna za definiowanie wymagań projektowych. Klient powinien wybrać do tej roli jedną osobę, która będzie osobą kontaktową dla zespołu. Głównym zadaniem Właściciela Produktu jest współpraca z zespołem w celu zamiany wizji produktu w finalną aplikację. Jest on odpowiedzialny za znajomość oczekiwanych funkcjonalności, dopasowanie produktu do docelowego odbiorcy i proces ustalania priorytetów na następny sprint. Właściciel Produktu nie musi posiadać wiedzy programistycznej, dobrze jednak, jeśli dysponuje informacją na temat rynku, podobnych rozwiązań i posiada podstawowy poziom wiedzy technicznej. Konieczne jest natomiast, aby Właściciel Produktu dysponował wystarczająco dużą ilością czasu, tak by być dostępnym dla zespołu przez cały czas trwania projektu.
Zwinny zespół projektowy
Zespół projektowy pracujący zgodnie z filozofią Agile jest odpowiedzialny za wykonanie projektu według wizji Właściciela Produktu. W szczególności odpowiada za stworzenie architektury technicznej, zaimplementowanie jej i przetestowanie. Zespół powinien być w ciągłym kontakcie z Właścicielem Produktu przez cały okres produkcji. Na początku sprintu Właściciel Produktu wybiera najważniejsze zadania do wykonania, a zespół jest odpowiedzialny za ocenę, jak dużo z tych zadań jest w stanie wykonać podczas trwania sprintu. Członkowie zespołu ustalają szczegóły wymagań z Właścicielem Produktu przez cały okres trwania sprintu. Wyniki pracy programistów są testowane przez testerów (którzy wchodzą w skład tego samego zespołu), po czym odbywa się spotkanie „Demo”, na którym programiści bądź testerzy prezentują całemu zespołowi oraz klientowi postęp prac. Zależnie od wybranego modelu współpracy cały zespół (z wyjątkiem Właściciela Produktu) może być po stronie dostawcy usług lub też może być złożony z pracowników zarówno klienta, jak i partnera outsourcingowego.
Skoro już wiemy, że testy oprogramowania to nieodłączny element metodyk zwinnych Agile, podczas tworzenia aplikacji, skupmy się teraz na ich możliwościach.
Ciągłe przeprowadzanie testów
Biorąc pod uwagę poziom skomplikowania aplikacji tworzonych obecnie, dawny wzorzec testowania, który czas na testy przewidywał pod koniec cyklu produkcyjnego, jest już przestarzały. Testowanie powinno być wykonywane przez cały okres produkcji. Każda nowa funkcjonalność powinna być sprawdzana od razu po jej stworzeniu za pomocą testów manualnych, a jeśli to możliwe i wskazane, to dodana do zestawu testów automatycznych (aby testy regresji sprawdzały, czy również w przyszłości funkcjonalność będzie działać niezmiennie, zgodnie z wymaganiami).
Modele testowania aplikacji
Jak zadbać o jakość rozwijanej aplikacji mobilnej? Zdecydowanie powinniśmy rozważyć takie możliwości jak:
Testy jednostkowe
Testy jednostkowe pomagają zweryfikować, czy kolejne zmiany w projekcie nie powodują błędów w poprzednio wykonanych funkcjonalnościach. Unit testing to klasyczne podejście w programowaniu – niezależnie od tego, czy tworzymy aplikację mobilną, desktopową czy webową – w którym wybrane elementy kodu są sprawdzane za pomocą osobnych testów. Stosowanie testów jednostkowych nie jest niezbędne i niestety często są one pomijane. Niemniej jednak, ich przeprowadzanie jest dobrą praktyką i pozytywnie wpływa na jakość produktu.
Automatyczne testowanie UI
Automatyczne testowanie interfejsu użytkownika (UI) to odpowiedź na wyzwania wiążące się z testami jednostkowymi. Zamiast skupiać się na testowaniu pojedynczych fragmentów kodu, testujemy aplikację jako całość. Wbrew nazwie, ten model testowania nie służy tylko do sprawdzania interfejsu – testuje się w ten sposób całą aplikację, tyle że z perspektywy użytkownika. Zamiast ręcznie wywoływać fragmenty kodu, testuje się efekt interakcji przez symulowane zachowania użytkownika. Można na przykład symulować naciśnięcie przycisku w aplikacji i sprawdzić, czy w rezultacie na ekranie pojawi się oczekiwany wynik. Ta metoda pozwala na przetestowanie całości aplikacji – zarówno UI, czy wewnętrznego kodu komunikacji z web service’ami, jak i kodu po stronie serwera odpowiadającego na zapytania.
Dodatkową zaletą testów automatycznych UI jest to, że o wiele lepiej nadają się do testowania błędów pojawiających się tylko na niektórych modelach, związanych ze specyficznym zachowaniem aplikacji. Uruchamianie tych samych testów na różnych urządzeniach pozwala testować, czy aplikacja działa poprawnie w szerokim zakresie charakterystyk urządzeń. Takie testowanie pomaga też znaleźć nietypowe błędy, które nie zostałyby wyłapane w trakcie testów jednostkowych.
Testowanie aplikacji mobilnych na emulatorach
Emulatory to mobilne urządzenia wirtualne, które pozwalają na przeprowadzenie testów. Jest to przydatne zwłaszcza w projektach, w których pojawia się potrzeba zaoszczędzenia na zakupie fizycznych urządzeń. Emulator sprawdzi się w przypadku podstawowych testów funkcjonalnych.
Przeczytaj również inne artykuły z obszaru testów i Quality Assurance:
- Scenariusze testowe bez tajemnic
- Piramida testów – czyli co, kiedy i jak testować, żeby testy przyniosły zysk?
- Testy E2E – wprowadzenie do Cypress
Testowanie aplikacji mobilnych na farmie urządzeń
Każdy dostawca aplikacji mobilnych, na potrzeby testów manualnych, powinien posiadać rozbudowaną i na bieżąco aktualizowaną o nowe modele listę urządzeń. W przypadku testów automatycznych mogą być (i najczęściej są) one wykonywane za pomocą platform takich jak BrowserStack. Zestaw najpopularniejszych urządzeń wraz z najważniejszymi wersjami programów operacyjnych to podstawa podczas procesu tworzenia aplikacji, umożliwiająca znalezienie błędów występujących na różnych urządzeniach i poprawiania ich zaraz po wykryciu. Problem w tym, że na rynku jest tak wiele urządzeń mobilnych i tyle różnych wersji systemów operacyjnych, że właściwie niemożliwe jest posiadanie ich wszystkich. Lista dostępnych modeli ciągle się wydłuża, a sam tylko Samsung w 2020 roku wydał 9 modeli w wielu różnych konfiguracjach sprzętowych. W projektach IT dla zdefiniowania listy urządzeń dla wybranego kraju korzysta się np. z https://gs.statcounter.com/vendor-market-share/mobile oraz na bieżąco wyszukuje się, jakich urządzeń jest najwięcej w danym kraju, które z nich najlepiej się sprzedają itp.
W celu rozwiązania problemu testowania aplikacji powstały tzw. „farmy urządzeń” – zdalne usługi, które umożliwiają firmom uruchamianie testów na dużej liczbie urządzeń w krótkim czasie, przeprowadzając je przez Internet. Farmy urządzeń są stosunkowo niedrogie w porównaniu z zakupem, utrzymaniem i bieżącą modernizacją urządzeń wynikającą z potrzeb szybko zmieniającego się rynku.
Farma urządzeń
Farmy urządzeń pozwalają na uruchamianie dwóch z czterech typów testów: funkcjonalnych oraz związanych ze zmianami w czasie (regresji).
Po przeprowadzeniu testów automatycznych generowany jest raport, który umożliwia zlokalizowanie problemów, nawet jeśli wystąpiły tylko na małej liczbie urządzeń. Farmy urządzeń pozwalają także tworzyć zrzuty ekranu z każdego miejsca w aplikacji, dzięki czemu możliwa jest ocena, czy aplikacja poprawnie wygląda na każdym typie telefonu i ekranu.
Beta-testy i automatyczne raportowanie błędów
Nawet dokładnie przetestowana aplikacja może wciąż doświadczać pewnych problemów. Nowe urządzenia i wersje systemów operacyjnych pojawiają się cały czas, dlatego przed finalną publikacją dobrym pomysłem jest publikacja aplikacji w trybie beta-testu. Aplikacja będzie dostępna dla wybranych urządzeń, ale recenzje i oceny z wersji beta zostaną usunięte, gdy ostateczna wersja zostanie opublikowana (dzięki czemu potencjalne problemy wersji beta nie wpłyną negatywnie na gotową aplikację). Dzięki narzędziom do automatycznego raportowania błędów (takim jak np. Firebase, za każdym razem, gdy w aplikacji na urządzeniu użytkownika pojawi się błąd, zespół otrzyma raport zawierający wskazówki co do prawdopodobnej przyczyny oraz informację o tym, na jakim urządzeniu takie zdarzenie wystąpiło. Dzięki temu możliwy jest stały monitoring pozwalający na wyeliminowanie błędów, które nie zostały wykryte wcześniej.
Automatyczne raportowanie błędów jest kluczowe również po publikacji ostatecznej wersji aplikacji – mechanizm pozwala monitorować działanie aplikacji i raportować problemy, zanim użytkownicy je zgłoszą. Jeśli np. nowa wersja systemu iOS sprawia, że aplikacja się zawiesza, zespół dostanie o tym natychmiastowy raport, dzięki któremu będzie mógł szybko znaleźć przyczynę i ją poprawić.
Podsumowanie
Testowanie powinno być wykonywane w trakcie całego procesu tworzenia aplikacji mobilnej, nie tylko przed jej publikacją. Łącząc testy jednostkowe z testami UI można uzyskać zadawalająco stabilną aplikację. Beta-testy pomagają znaleźć błędy, których nie wychwycił zespół, a dzięki wykorzystaniu narzędzi do raportowania błędów, monitorować poprawność działania przez cały cykl życia aplikacji. Warto też pamiętać, że testy aplikacji mobilnej to nie tylko testy funkcjonalne, ale też testy niefunkcjonalne, sprawdzające działanie i użyteczność systemu.
- 1. Aplikacje mobilne w 2021 roku
- 2. Sprintem przez projekt?
- 3. Zwinne podejście do testowania aplikacji mobilnych
- 4. Właściciel Produktu w metodologiach zwinnych Agile
- 5. Zwinny zespół projektowy
- 6. Ciągłe przeprowadzanie testów
- 7. Modele testowania aplikacji
- 8. Testowanie aplikacji mobilnych na emulatorach
- 9. Testowanie aplikacji mobilnych na farmie urządzeń
- 10. Beta-testy i automatyczne raportowanie błędów
- 11. Podsumowanie