Jak skutecznie testować aplikacje mobilne

Artykuły eksperckie | 20.04.2016 | Czas czytania: 8 minut

W procesie tworzenia aplikacji mobilnych, w celu zapewnienia im wysokiej jakości, kluczowy jest dobrze dobrany zespół i stała kontrola jakości, a więc testy. Możliwości i wyzwania w przypadku testów aplikacji mobilnych różnią się nieco od tych w aplikacjach serwerowych czy desktopowych. Sytuację dodatkowo komplikuje olbrzymia liczba modeli urządzeń mobilnych dostępnych na rynku. Poza testami, istotne jest również prowadzenie projektu w myśl filozofii Agile i zwinnych metodyk. W tym artykule chciałbym więc wskazać najlepsze praktyki testowania aplikacji mobilnych i sposoby zarządzania projektem programistycznym, które świetnie wpisują się w politykę testów aplikacji.

Sprint w modelu Agile

Agile, czyli tak jak wspomniałem 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 zaimplementować podczas kolejnego okresu. Po zakończeniu sprintu, widząc postęp prac, można ocenić stan projektu, zmienić priorytety czy nawet zmienić projekt aplikacji. 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 posiada możliwość zmiany planów po każdym sprincie i bieżące dopasowanie projektu do ciągle zmieniających się wymagań, opinii użytkowników czy nowych priorytetów biznesowych.

Opisane podejście dotyczy wszystkich projektów tworzenia oprogramowania, ale jest szczególnie ważne w świecie aplikacji mobilnych. Obecne platformy dystrybucji (App Store, Google Play i Windows Marketplace) 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 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.

JCommerce-Etapy-Agile-podejscie-zwinne

Etapy projektu prowadzonego zgodnie z podejściem zwinnym (Agile)

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 przetransformowania 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.

JCommerce-Agile-Wlasciciel-Produktu-Scrum

Rola Właściciela Produktu w zwinnym zespole projektowym

Przeczytaj artykuł: 8 sprawdzonych kryteriów wyboru metodyki zarządzania projektami

Zwinny zespół projektowy

Zespół projektowy pracujący zgodnie z filozofią Agile jest odpowiedzialny za wykonanie projektu wg. wizji Właściciela Produktu. W szczególności odpowiada za stworzenie architektury technicznej, zaimplementowanie jej i przetestowanie. Zespół powinien być w ciągłej komunikacji 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 całość jest przekazywana do oceny na koniec sprintu. 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, stary 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 i testów automatycznych), aby zweryfikować, czy działa zgodnie z założonymi wymaganiami.

aplikacje mobilne 3 kiedy-testowac

Modele testowania aplikacji 

 

Testy są również kluczowe, ponieważ pomagają zweryfikować, czy kolejne zmiany w projekcie nie powodują błędów w poprzednio wykonanych funkcjonalnościach. No dobrze, ale jakie typy testów powinniśmy wziąć pod uwagę? Zdecydowanie powinniśmy rozważyć takie możliwości jak:

  • Testy jednostkowe
  • Automatyczne testowanie UI
  • Testowanie aplikacji na farmie urządzeń
  • Beta testy i automatyczne raportowanie błędów

Testy jednostkowe

Testy jednostkowe to klasyczne podejście w testach automatycznych, gdzie każdy element kodu jest sprawdzany w osobnym teście. Testy takie spisują się szczególnie dobrze przy testowaniu procesów i funkcjonalności dotyczących logiki biznesowej. Niestety w przypadku aplikacji mobilnych, takie podejście niekoniecznie będzie najlepsze. Wiele tego typu projektów tworzonych jest bowiem w modelu „cienkiego klienta”, co oznacza, że większość procesów logiki biznesowej jest zaimplementowana po stronie serwera, a rolą aplikacji jest jedynie pobrać i wyświetlić dane. Ten model jest preferowany, ponieważ umożliwia jednorazową implementację architektury logiki biznesowej po stronie serwera i używanie jej na każdej platformie (mobilnej, webowej i desktopowej). Niestety taki model działania aplikacji sprawia także, że testy jednostkowe stają się mało użyteczne – w tym przypadku bowiem większość logiki biznesowej jest poza właściwą aplikacją, gdzie znajduje się jedynie interfejs użytkownika, dla którego tego typu testy sprawdzają się tylko w bardzo ograniczonym zakresie. Testy jednostkowe będą przydatne jedynie w testowaniu technicznych aspektów interfejsu – poprawnej inicjalizacji, obsługi rotacji ekranu, zapisywania danych użytkownika, sprawdzania poprawności danych odebranych z web service’ów itd.

Oczywiście sytuacja zmienia się, gdy aplikacja jest zbudowana w modelu „gruby klient” i posiada własny wewnętrzny model danych i logikę biznesową, która jest częściowo lub całkowicie niezależna od tej na serwerze. W takim wypadku, testy jednostkowe są kluczowe dla sprawdzenia, czy każda funkcjonalność działała poprawnie.

aplikacje mobilne 3 Klient-serwer

Schemat komunikacji klient-serwer w różnych modelach budowy aplikacji

Automatyczne testowanie UI

Automatyczne testowanie interfejsu użytkownika (UI) to odpowiedź na wspomniane wcześniej problemy z testami jednostkowymi. Zamiast skupiać się na testowaniu pojedynczych fragmentów kodu, testowana jest w tym przypadku aplikacja jako całość. Wbrew nazwie, ten model testowania nie służy tylko do sprawdzania interfejsu – testuje się w ten sposób całą aplikacje, 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. Co więcej, tego typu testy pozwalają sprawdzić, czy aplikacja nie zawiesza się podczas pracy.

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 urządzeń – takich jak problemy z rozmieszczeniem elementów na ekranie, czy 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.

Przeczytaj również inne artykuły z obszaru testów – Quality Assurance:

Testowanie aplikacji na farmie urządzeń

Każdy szanujący się dostawca aplikacji mobilnych, posiada sporą liczbę urządzeń do testowania – zarówno manualnie, jak i przy użyciu testów automatycznych. 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ń i tyle różnych wersji systemów operacyjnych, że właściwie niemożliwe jest posiadanie ich wszystkich. System Android jest dostępny na ponad 11 000 modeli urządzeń i ta liczba wciąż rośnie. Sam tylko Samsung ma w swojej ofercie ponad 1 000 modeli z Androidem (wliczając w to także lokalne wariacje na światowych rynkach). iOS funkcjonuje na nieco mniejszej liczbie urządzeń, ale wciąż mówimy tutaj o bardzo wielu różnych wariacjach modeli i wersji tych systemów.

W celu rozwiązania tego problemu powstały tzw. „farmy urządzeń” – zdalne usługi, które umożliwiają firmom uruchamianie testów na dużej liczby urządzeń w krótkim czasie, przeprowadzając je zdalnie przez Internet. Farmy urządzeń są stosunkowo niedrogie, ponieważ płaci się tylko za czas spędzony na konkretnym urządzeniu, a testy zazwyczaj wykonywane są stosunkowo szybko. To pozwala zminimalizować koszty zakupu urządzeń do testowania i pozwala na szybkie testy na różnych wersjach systemu operacyjnego.

farma urządzeń

Farma urządzeń

Farmy urządzeń pozwalają na uruchamianie większości typów testów – jednostkowych, automatycznych UI i innych. Po przeprowadzeniu testów generowany jest raport. który umożliwia zlokalizowanie problemów, nawet jeśli wystąpiły tylko na małej liczbie konfiguracji „model urządzenia/wersja systemu operacyjnego”. 

Oprócz testów, 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, powodujących błędy. Nowe urządzenia i wersje systemów operacyjnych pojawiają się cały czas i mogą powodować problemy z poprawnym działaniem aplikacji. Dlatego przed finalną publikacją, dobrym pomysłem jest publikacja aplikacji w trybie beta testu. Aplikacja będzie dostępna dla wszystkich, 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, za każdym razem, gdy aplikacja się zawiesi na urządzeniu użytkownika, programista otrzyma szczegółowy raport zawierający przyczynę błędu oraz informację o tym, na jakim urządzeniu takie zdarzenie wystąpiło. Dzięki temu, możliwe jest wyeliminowanie błędów, które nie zostały wykryte wcześniej, a które występują u użytkowników biorących udział w beta testach.

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, programista dostanie o tym natychmiastowy raport, dzięki któremu będzie mógł szybko znaleźć przyczynę i ją poprawić.

Testowanie to kluczowy element kontroli jakości i powinno być wykonywane w trakcie całego procesu tworzenia aplikacji, nie tylko przed jej publikacją. Łącząc testy jednostkowe z testami UI można uzyskać zadawalająco stabilną aplikację, a dzięki beta testom i raportowaniu błędów mieć pewność, że aplikacja działa poprawnie przez cały cykl życia.

Przeczytaj pierwszą część tego artykułu: Definiowanie wymagań dla aplikacji mobilnych

Autorem wpisu jest

Paweł Smagała, JCommerce SA

Delivery Manager, PMO

Z branżą IT związany od 10 lat. Absolwent Wydziału Informatyki Uniwersytetu Śląskiego. Zarządzał projektami z różnych branż, od systemów alarmowych w chmurze do systemów autonomicznej jazdy. Ma duże doświadczenie w prowadzeniu analizy biznesowej, projektowaniu i implementacji aplikacji mobilnych oraz kierowaniu zespołami specjalistów.

Komentarze

  • HoOrza dnia 2017-05-10 19:13:58
    Panie Pawle, mam pytanie dotyczące farm urządzeń. Czy zna Pan jakąś godną polecenia? Szykuję sie do wypuszczenia swojej pierwszej gry. Nie jest to absolutnie nic skomplikowanego. Chciałby wiedzieć na jak dużej ilości urządzeń będzie działać. Gra jest stworzona w Unity i tylko na system Android. Jest stworzona żeby poznał cały proces publikacji i zrozumiał z jakimi problemami się będę borykał przy publikowaniu do Google Play w przyszłości w przypadku mojej docelowej produkcji. Dlatego szukam niedrogiej firmy, która by mi przeprowadziła szybkie testy dla zgodności z najbardziej popularnymi urządzeniami. Z poważaniem
  • Paweł Smagała dnia 2017-05-11 10:37:14
    Witam, proponuje farmę Amazona https://aws.amazon.com/device-farm/?nc2=h_m1 Szczególnie przy obecnej promocji na 1000 min jest to dość opłacalna i stabilna platforma.

Skontaktuj się z nami