Testowanie - podstawy koncepcyjne
Pewnie nieraz spotkaliście się z określeniem „jak chcesz wejść do branży IT, to zacznij od bycia testerem”. O ooo .. Już niektórym robi się gorąco 😉 O co chodzi w tym całym „testowaniu” i byciu testerem czy QA? Bo rzecz nie jest tylko o przeklikiwaniu i wykrywaniu błędów, ale, a w zasadzie przede wszystkim, o zapewnieniu jakości oprogramowania. Dziś chcielibyśmy prześwietlić istotę testowania i bycia testerem, QA’em, przyjrzeć się jak podejmuje się decyzje w tych procesach, na co obecnie trzeba położyć nacisk by testować efektywnie. Zerkniemy na ten temat trochę z lotu ptaka i trochę subiektywnie rzecz jasna 😉 - Okiem JellyTech.
Słowem wstępu. Często używamy tutaj słowa tester jako określenie osoby, która testuje, choć wiemy, że testy i ich planowanie mogą przeprowadzać różne osoby. Czasem na potrzeby artykułu używamy też skrótów myślowych i upraszczamy opis. Temat oczywiście jest złożony i z pewnością można wskazać wyjątki od przykładów, które podajemy 😉
Kompetencje i doświadczenie
Jakie kompetencje i doświadczenie będzie mile widziane w zespole testerskim i/lub u osoby, która odpowiada za testy i testuje? Oczywiście w zależności od funkcji i metodologii zarządzania w której pracuje, naszym zdaniem są to:
- umiejętność planowania (czasem testy planuje tester czasem lider testów czy kierowniku projektu)
- umiejętność dostosowania zakresu i typów testów jakie trzeba i/lub, które warto wykonać -> do celu zdefiniowanego przez Klienta oraz do wymagań funkcjonalnych i niefunkcjonalnych zdefiniowanych przez analityków,
- napisanie Use Case’ów w oparciu o warunki brzegowe -> aby sam proces testowy był efektywny i nie narażał budżetu projektu na zbytnie nadwyrężenie, jednocześnie zapewniając, że cel jaki przyświecał Klientowi, zostanie spełniony.
Planowanie, wykonanie i analiza
Planowanie to tak naprawdę kluczowy element całego procesu wytwarzania oprogramowania. Odpowiednio położony nacisk w określonych obszarach realizacji projektu, daje gwarancję realizacji celów w czasie i w określonym budżecie. Jak wygląda planowanie w samym testowaniu?
1) Analiza wymagań i projektowanie
- analiza wymagań - analiza specyfikacji i wymagań dotyczące oprogramowania, aby zrozumieć, jak powinno ono działać (jeśli tester jest częścią zespołu developerskiego, jest względnie na bieżąco),
- projektowanie testów - na podstawie wymagań i ustaleń, testerzy lub osoby za to odpowiedzialne projektują zestaw przypadków testowych, które obejmują warunki graniczne, różne scenariusze i kombinacje danych wejściowych.
2) Wykonanie testów. Tester/QA/osoba wskazana wykonuje zaprojektowane przypadki testowe.
3) Analiza wyników i ewentualne retestowanie
- testerzy przekazują feedback do zespołu o znalezionych błędach (czyt. szeroko jako funkcjonalności niezgodne z wymaganiami). Testerzy mogą też przeprowadzić ocenę błędów, co może przybliżyć zespół developerski do ich szybszej poprawy i podjęciu dalszych decyzji o przeprowadzeniu retestów (czyli ponownego testowania w celu sprawdzenia, czy błędy zostały poprawione).
Ok, mamy zaplanowany cały proces. Dzięki pogłębionej pracy na etapie analizy wymagań i projektowania, ale także na etapie retestów, osoba wykonująca testy będzie umiała podjąć decyzje jakie testy użyć na wybranym etapie projektu. A ma z czego wybierać 😉Czas odwołać się do doświadczenia i typologii testów.
Rodzaje i typy testów
Możemy roboczo podzielić testy:
- ze względu na sposób realizacji: testy manualne, automatyczne, kombinacja obu,
- pod względem celu doboru właściwych metod testowania (typy wg. ISTQB): funkcjonalne, testowanie charakterystyk niefunkcjonalnych jakości, takich jak wyjdaność lub niezawodność, testowanie struktury lub architektury oprogramowania lub systemu, lub testowanie powiązane ze zmianami, np. potwierdzenie, że defekt został naprawiony (testy potwierdzające) i szukanie niepożądanych skutków zmian (testy regresji).
*należy bez dwóch zdań dodać gwiazdkę, gdyż podział testów jest naprawdę bardzo szeroki i powyższy podział nie wyczerpuje tematu, niemniej na potrzeby tego artykułu skupiamy się tylko na tych dwóch poziomach
Testy manualne i automatyczne
W kwestii sposobu realizacji testów sprawa wydaje się być prosta. Testy można wykonać bowiem ręcznie, tj. manualnie, przeklikujące dane funkcjonalności i sprawdzając systemy lub napisać/wykorzystać skrypt testowy i użyć go w testach automatycznych. Najczęściej spotykane rozwiązanie to kombinacja obu tych technik. Zalety testowania manualnego to przede wszystkim intuicyjne podejście, elastyczność, ocena aspektów związanych z UX. Niemniej jest to metoda czasochłonna i podatna na ludzkie błędy. Nie sposób sobie wyobrazić (choć nie mam pewności, patrząc na kreatywność ludzką 😊), że testujemy wielopłaszczyznową aplikację ręcznie… Po pierwsze czas, po drugie pieniądze… Przypomnijmy jeszcze - podstawową testowania jest założenie, że może ono ujawniać usterki, ale nie może dowieść ich braku.
Są typy testów które należy automatyzować jak chociażby unit testy (niezbędne do wdrożenia procesu CI/CD), ale ich celem nie jest potwierdzenie działania funkcjonalności, celem jest natomiast potwierdzenie, że zmiany wykonane w kodzie przez developera nie zepsuły już obecnie działających funkcjonalności. Manualna odsłona pozwala na utrzymanie tak ważnej interakcji między człowiekiem, a oprogramowaniem. Naszym zdaniem testerzy manualni mogą spać spokojnie - są i będą potrzebni.
Wiele firm decyduje się zatem na kombinacje testowania manualnego i automatyczne. Automatyzacja testów może bowiem cały proces przyspieszyć.
Zastanawialiśmy jak testować, teraz odpowiedzmy na pytanie co testy mają dać, czyli jaki ma być ich cel?
W ustrukturyzowaniu wiedzy pomoże nam podział na typy testowania.
Typy testów:
1) Testowanie funkcjonalne:
Testy czarnej skrzynki - polegają na testowaniu funkcjonalności systemu bez wiedzy na temat wewnętrznej struktury kodu. Nasza analiza zatrzymuje się więc na dostępnych dla oprogramowania interfejsach.
2) Testowanie niefunkcjonalne np.:
- wydajnościowe - polega na testowaniu wydajności systemu pod kątem czasu odpowiedzi, obciążenia, skalowalności i zużycia zasobów.
- niezawodności - obejmuje testowanie systemu pod kątem odporności na awarie, utratę danych i możliwości ich szybkiego odzyskiwania.
3) Testowanie bezpieczeństwa - w ramach tego testowania dokonywana jest ocena podatności systemu na zagrożenia. Podczas testowania można sprawdzić czy możliwe jest np. kopiowanie aplikacji lub danych bez upoważnienia czy nieautoryzowany dostęp do naszego systemu.
4) Testowanie strukturalne (biała skrzynka) - mogą być wykonane na wszystkich poziomach testowych. Technik strukturalnych używa się w celu wsparcia pomiarów dokładności testowania poprzez ocenę pokrycia danego typu struktury.
5) Testowanie regresji - ma na celu sprawdzenie, czy wprowadzenie zmian w oprogramowaniu nie spowodowało regresji, czyli nie spowodowało błędów w już wcześniej przetestowanej funkcjonalności.
6) Testowanie integracyjne - ma na celu sprawdzenie, czy poszczególne komponenty oprogramowania współpracują ze sobą poprawnie, gdy są integrowane w większą całość.
7) Testowanie akceptacyjne lub odbioru - mogą być wykonywane także przez klienta. Testowanie akceptacyjne jest przeprowadzane w celu oceny, czy oprogramowanie spełnia wymagania klienta i jest gotowe do przyjęcia przez użytkowników końcowych.
8 ) Inne - zależne od: narracji, szkoły testerskiej, doświadczenia, fantazji testera, QA 🙂
Testujemy
To co przetestujemy coś razem? 😎
Aplikacja do sprzedaży jabłek. A co - sezon za chwilę 😁 Niestety nie posiadamy takiej aplikacji w portfolio, ale jeśli czyta to jakiś sadownik - zapraszamy do kontaktu 🙂
Dane aplikacji:
🍎 aplikacja do sprzedaży jabłek (dostępna zarówno webowo jak i mobilnie)
🍏 użytkownicy: kupujący i sprzedający (osoby prowadzące sprzedaż owoców, sadownicy, skupy)
Podstawowe funkcjonalności i systemy, które powinny być gotowe na tym początkowym etapie projektu to:
✔ rejestracja na stronie (imię, nazwisko, adres email)
✔ logowanie i wylogowanie
✔ weryfikacja linku aktywacyjnego
Aplikacja będzie jeszcze udoskonalana, ale na tym etapie potrzebujemy sprawdzić ten wycinek - skupiony jak widzicie, głównie na obszarach UX/UI. Co byście przetestowali?
Zrobimy na początek testy funkcjonalne i sprawdzimy czy:
✔ okienko w formularzu przyjmuje liczby i litery i czy użyty regex działa. W polu imię i nazwisko będziemy mogli zatem wpisać tylko litery (małe i duże, w polu email litery i cyfry. Sprawdzimy też czy aplikacja w polu email przyjmie email bez kropki i @
✔sprawdzamy czy udaje nam się na stronie zarejestrować, zalogować i wylogować
✔sprawdzamy czy przychodzi do Nas link aktywacyjny, czy przekierowuje nas na stronę aplikacji i czy udaje się potwierdzić tożsamość
Następnie zrobilibyśmy podstawowe testy bezpieczeństwa (aplikacja będzie przetwarzać dane, musimy mieć pewność, że nigdzie się one nie wydostaną). Sprawdzamy np.:
✔ czy aplikacja korzysta z nagłówków bezpieczeństwa takich jak m.in:
Strict-Transport-Security, X-Frame-Options, Content-Security-Policy, X-Content-Type-Options, Referrer-Policy, Permissions-Policy, X-XSS-Protection,
mechanizmy utrudniające ataki typu brute-force.
✔Testując formularze logowania, zwracamy uwagę, jak zachowuje się aplikacja po wielokrotnym wprowadzeniu nieprawidłowych danych. Dobrze zaprojektowana aplikacja nie pozwoli na przeprowadzenie zmasowanego ataku w celu odgadnięcia hasła.
Jak widać na przykładzie aplikacji do sprzedaży jabłek, typów testów jest wiele, natomiast nie wszystkie użyjemy naraz.
Podsumowanie
Temat testowania i bycia tester czy QA jest naprawdę złożony. Staraliśmy się nakreślić Wam podstawowe aspekty tej pracy i dziedziny. Dużo w pracy osób odpowiedzialnych za testy to planowanie. Na podstawie ich sugestii i raportów, mogą zadziać się w aplikacji ważne zmiany, jeśli wykryto by je później, mogłyby przynieść zespołowi i klientowi duże straty. Tester musi chcieć zrozumieć ważne dla klienta aspekty funkcjonowania jego produktów. Dobrze by było, aby taka osoba starała się być na bieżąco, śledziła trendy świata testów i QA.
Mamy świadomość, że testowanie może być jak góra lodowa😉 Na pierwszy rzut oko widać tylko jego fragment, a jak się zanurzysz to dopiero widzisz ogrom założeń i wytycznych. Nie damy się jednak zatopić 😁W kolejnych artykułach pochylimy się nad konkretnymi typami testów, ich wykorzystaniem i dalszą analizą specyfiki testowania oprogramowania.
Koniecznie śledźcie zatem naszego bloga 😉