23 listopada 2022

Nie zapominaj o testach!

Testowanie oprogramowania to jeden z procesów wytwarzania oprogramowania i część zarządzania jego jakością. Jego celem jest weryfikacja i walidacja oprogramowania. Weryfikacja pozwala sprawdzić, czy powstałe oprogramowanie jest zgodne ze specyfikacją.

 

Laptop z ikonami zapewnienia jakości i zadowolenia klienta

Po co testować?

 

  1. Część pracy przechodzi z programistów na testerów.
  2. Wytwarzanie oprogramowania przyspiesza.
  3. Eliminacja błędów zapewnia wysoką jakość oprogramowania.
  4. Aplikacja zyskuje spojrzenie z zewnątrz. 

Testy sprawdzają jakość oprogramowania i produktów, które tworzymy. Tester automatyzujący ma na przykład odciążyć programistów. W niektórych firmach dział testów jest całkowicie pomijany i wtedy testy piszą wyłącznie programiści. Utrzymywanie testów bywa dla nich bardzo czasochłonne, bo jednocześnie muszą utrzymywać kod i dokumentację. 

Zestresowany programista trzyma się za głowę przed laptopem

Testy pomagają przyspieszyć prace nad projektem, ale też kontrolować wydanie aplikacji. Błędy mogą opóźnić wydanie, a gdy zostaną usunięte, sam proces wydania na końcu projektu wyraźnie przyspiesza. W trakcie projektu takie testy służą głównie do zarządzania jakością. 

Testy manualne i automatyczne

Testy możemy podzielić na manualne i automatyczne. Co ważne, w obu przypadkach cel jest ten sam – wyeliminować błędy. Testy przeprowadza się, żeby sprawdzić jakość. Jeśli aplikacja jest dobrze przetestowana, testy manualne i automatyczne nie różnią się wynikiem końcowym. Różnią się czasem przygotowania i czasem trwania. Na różnych etapach projektu częściej spotyka się różne rodzaje testów. Testy manualne można zacząć od razu. Wystarczy projekt aplikacji i już można sprawdzać jej funkcje. Zależy to oczywiście od wymagań co do sposobu testowania. Testy manualne stosuje się tam, gdzie nie ma jeszcze testów automatycznych. Testy automatyczne wymagają przygotowania scenariuszy testowych, czyli ustalenia, co i jak będzie testowane. Tester manualny może znać scenariusze z własnego doświadczenia – wie, co sprawdzić i jak. Testy automatyczne wymagają zbudowania całego projektu automatyzacji, a to zajmuje czas – dlatego startują później niż testy manualne. 

Zaletą testów automatycznych jest powtarzalność: za każdym razem robią dokładnie to samo. Do testów automatycznych używamy na przykład frameworka WebDriverIO. Powstał on na bazie Selenium, jednego z najpopularniejszych narzędzi open source do testowania aplikacji webowych. Na Selenium opiera się też Appium, którego używamy do testowania aplikacji mobilnych. 

 

Rodzaje testów

Rodzaje testów: wydajnościowe, backendowe, end-to-end i funkcjonalne

  • Wydajnościowe – sprawdzają, czy oprogramowanie działa szybko, czy wolno, a także jak obciąża sprzęt i bazy danych i czy system ma jakieś górne limity. Jeśli je osiągniemy, projekt wraca do programistów, którzy optymalizują aplikację, żeby działała szybciej albo potrzebowała mniej zasobów sprzętowych. Mogą też wymienić sprzęt na mocniejszy, jeśli chodzi o serwery. Takie testy stosuje się zwykle w projektach z systemami, na przykład do zamówień w sklepie internetowym, albo przy sprawdzaniu, ile wytrzyma serwer – na przykład przy maksymalnej liczbie zalogowanych użytkowników albo maksymalnej liczbie zamówień złożonych w krótkim czasie w aplikacji sklepu. 

  • Backendowe – dotyczą połączenia bazy danych i oprogramowania. To technika badania warstwy serwerowej albo bazy danych aplikacji webowej. Głównym celem testów backendu jest sprawdzenie warstwy bazy danych i warstwy aplikacji. Pozwalają wykryć problem lub błąd w bazie danych albo po stronie serwera.
  • E2E – testy end-to-end obejmują najszerszy zakres. To testowanie z perspektywy końcowego użytkownika aplikacji. Dostajesz do testów całą aplikację i sprawdzasz jej funkcje. Nie sprawdzasz, jak działa w środku – patrzysz tylko na efekt końcowy: czy działa i czy działa poprawnie. Testy powinny zachowywać się jak użytkownik: klikać w pola i sprawdzać elementy, do których użytkownik ma dostęp.

  • Funkcjonalne – rodzaj testów E2E, w którym poszczególne funkcje sprawdza się z perspektywy użytkownika. Przykład: w aplikacji sklepu internetowego jedną funkcją jest dodawanie do koszyka, drugą przeglądanie produktów. Testy funkcjonalne obejmują mniejsze fragmenty aplikacji niż zwykłe testy E2E – tylko pojedyncze moduły. 

Żeby dobrze wykorzystać testy w projekcie, testerzy korzystają z odpowiednich narzędzi. Jednym z rozwiązań do zarządzania scenariuszami testowymi, planami testów i przebiegami testów jest „Kiwi TCMS”. Narzędzie przechowuje wszystkie scenariusze testowe i pozwala tworzyć nowe przebiegi testów, które sprawdzają aplikację. Kiwi pozwala zgłaszać błędy i przypisywać je do przebiegu konkretnego testu. Dzięki temu wystąpienie błędu w konkretnej wersji aplikacji jest udokumentowane. Błędy trafiają też do „Jiry”, gdzie zgłasza się je kierownikowi projektu i przypisuje programiście do poprawy.

 

Architektura testów

To zarządzanie i planowanie całego projektu aplikacji – etap, na którym aplikację się planuje. 

BDD / TDD w skrócie

Cykl TDD: napisz test, który nie przechodzi, spraw, by przeszedł, zrefaktoryzuj

Źródło: https://www.infolytx.com/development/processes/bdd-tdd/attachment/tdd-bdd/

  • TDD (test-driven development, wytwarzanie sterowane testami) – testy powstają na początku projektu, a projekt buduje się tak, żeby cały czas je przechodził. Najpierw powstają testy jednostkowe, które sprawdzają działanie metod. Dopiero potem tworzy się projekt aplikacji i metody, które od samego początku są sprawdzane testami jednostkowymi, żeby aplikacja zawsze działała poprawnie – czy zwróci właściwe wartości. Praca testera zaczyna się tu wcześniej, bo projekt startuje od zaplanowania testów. Na początku projektu w TDD wszystkie testy kończą się niepowodzeniem. Im więcej części projektu powstaje, tym więcej testów przechodzi.
  • BDD (behaviour-driven development, wytwarzanie sterowane zachowaniem) – wytwarzanie i testowanie aplikacji na podstawie jej zachowania, czyli popularniejsze testy end-to-end. Testy przeprowadza się, gdy fragmenty aplikacji już powstały.

 

Testowanie jako usługa

Najprościej mówiąc, to udostępnianie testerów klientom, czyli outsourcing. Klient nie musi wtedy martwić się o zespół. Swoich testerów może skierować do innych projektów albo do zarządzania testami. Interesuje go wynik końcowy: czy zgłoszono błędy i czy zostały poprawione.

Inna możliwość w zapewnieniu jakości to optymalizacja lub refaktoryzacja aplikacji – klient przychodzi ze swoją aplikacją, bo chce poprawić wydajność albo sprawdzić jej spójność. Przy ulepszaniu aplikacji tester sprawdza, jak działa obecna wersja, i może wskazać moduły, które wymagają poprawy. 

Tworzenie rozwiązań do testowania: projekty testów automatycznych i urządzenia testowe. Przykład: zespół IoT buduje urządzenie do testowania produktu klienta. Urządzenie jest zintegrowane z testami automatycznymi, które sprawdzają, czy produkt klienta działa poprawnie. Testy automatyczne mogą odczytywać wartości z czujników urządzenia i sterować siłownikiem, który naciska przycisk na produkcie.



 

Może Cię też zainteresować:
CTO EMBIQ o zapewnianiu jakości oprogramowania
Jak dostarczamy rozwiązania IT?
Generatywna AI w zapewnianiu jakości rozwiązań IoT

Zapytaj o wycenę lub poradę

Administratorem Twoich danych osobowych jest EMBIQ sp. z o.o. (Lublin). Podane przez Ciebie dane przetwarzamy wyłącznie po to, aby odpowiedzieć na Twoje zapytanie, i przechowujemy je nie dłużej niż 24 miesiące. W sprawach dotyczących Twoich danych napisz do nas na adres info@embiq.com.

Przeanalizujmy razem koncepcję Twojego projektu i to, na jakim jest etapie.

Otrzymasz od nas wstępną propozycję zakresu projektu oraz szacunek czasu i kosztów.

Konsultacje są objęte umową NDA.

EMBIQ sp. z o.o. z siedzibą w Lublinie, al. Kraśnicka 27, 20-718 Lublin · Sąd Rejonowy Lublin-Wschód w Lublinie z siedzibą w Świdniku, VI Wydział Gospodarczy Krajowego Rejestru Sądowego · KRS 0000338852 · NIP 9462590420 · kapitał zakładowy 75 000,00 zł