Testowanie – prawdopodobnie najbardziej niedoceniana część tworzenia aplikacji

Opublikowany: 2018-04-03

Dlaczego mam ci płacić za przetestowanie własnej pracy?

To pytanie, które często słyszałem przez lata, omawiając budżety testowe z klientami. Dla niewtajemniczonych brzmi to jak uczciwe pytanie. Jednak każdy, kto zajmuje się tworzeniem oprogramowania, wie, jak skomplikowane i czasochłonne może być testowanie. Testowanie jest w rzeczywistości jedną z najważniejszych części każdego projektu rozwoju oprogramowania.

Duża platforma e-commerce to niezwykle złożona rzecz z milionami linii kodu, gigabajtami danych i wieloma punktami integracji. Jest tak wiele powiązanych ze sobą ruchomych części; tak wiele ogniw w łańcuchu, że bardzo łatwo coś pójdzie nie tak. Aplikacja będzie używana na miliony różnych sposobów za pośrednictwem wielu przeglądarek na wielu urządzeniach stacjonarnych i mobilnych. Projekt rozwojowy będzie trwał co najmniej 6 miesięcy i będzie nad nim pracowało wiele różnych osób. Liczba obszarów i scenariuszy, które można przetestować, jest prawie nieograniczona. To cud, że wszystko w ogóle działa!

Testowanie można podzielić na wiele różnych obszarów, ale każdy obszar testowania jest ważny do rozważenia. Każdy projekt jest trochę inny; niektórzy klienci lubią przeprowadzać większość testów samodzielnie, inni zlecają to na zewnątrz, podczas gdy niektórzy oczekują, że zrobi to ich programista. Testowanie również nie jest stałą jednostką; możesz zrobić dużo testów i możesz zrobić trochę. Im więcej będziesz testować, tym bardziej zaryzykujesz projekt, ale im więcej to zajmie i tym więcej będzie kosztowało.

Testów jednostkowych

Test jednostkowy to taki, który testuje małe „jednostki” kodu, aby upewnić się, że działają zgodnie z oczekiwaniami. Na przykład po przesłaniu formularza należy zapisać wprowadzone dane w tabeli bazy danych. Jest to samodzielny test, który konkretnie i tylko zapewnia, że ​​urządzenie działa zgodnie z oczekiwaniami. Korzystając z prawdziwej metodologii programowania opartej na testach, programista najpierw napisze test, zanim faktycznie utworzy jakikolwiek kod, tak aby kod można było uznać za ukończony dopiero po pomyślnym zakończeniu testu. W praktyce testy jednostkowe są używane tylko w niektórych kluczowych obszarach aplikacji, aby zapewnić, że podstawowe funkcje działają zgodnie z oczekiwaniami. Chociaż testowanie jednostkowe może zmniejszyć prawdopodobieństwo wystąpienia problemów funkcjonalnych, może również wydłużyć czas opracowywania.

Testowanie dymu

Prawdopodobnie usłyszysz, jak Twoja agencja deweloperska dużo mówi o testowaniu dymu. Test dymny to pragmatyczny podzbiór przypadków testowych, który obejmuje kluczowe ścieżki i funkcje użytkowników w całej aplikacji. Przynajmniej od twojego programisty należy oczekiwać, że przeprowadzi testy dymu przed przekazaniem ci czegokolwiek do UAT.

Testowanie interfejsu użytkownika

Testowanie interfejsu użytkownika (UI) może być bardzo złożone i czasochłonne. Ogromna gama urządzeń mobilnych, tabletów i komputerów stacjonarnych, systemów operacyjnych i przeglądarek, które będą używane do uzyskiwania dostępu do strony internetowej, oznacza, że ​​kompleksowe ręczne testowanie każdej kombinacji jest prawie niemożliwe. Ze względu na ogromną liczbę różnych odmian, które należy uwzględnić, testowanie interfejsu użytkownika jest idealnym kandydatem do testów automatycznych. Zautomatyzowane narzędzia testowe są w stanie śledzić oskryptowaną podróż po Twojej witrynie i testować, czy osiągnięto oczekiwane wyniki. Mogą również nagrywać każdą podróż, aby każdą z nich można było odtworzyć. Chociaż ta metoda nie jest idealna, może znacznie zmniejszyć liczbę poważnych problemów z interfejsem użytkownika, z którymi może się zmierzyć witryna.

Niektóre zewnętrzne usługi testowe, takie jak Wyszukiwarki błędów, oferują usługę crowdsourcingową, w której setki niezależnych testerów z całego świata są wykorzystywane do testowania strony internetowej i otrzymują wynagrodzenie, gdy znajdą problem. Takie podejście może być stosunkowo opłacalnym sposobem testowania aplikacji na setkach kombinacji urządzenia/platformy/przeglądarki. To normalne, że cykl testowy powoduje zgłoszenie około 200 problemów. Wyzwaniem jest często kategoryzowanie i ustalanie priorytetów problemów, tak abyś mógł skoncentrować swoje zasoby na radzeniu sobie z najważniejszymi. Każda strona internetowa będzie miała ciągłe zaległości dotyczące problemów niskiego poziomu, które prawdopodobnie nigdy nie zostaną rozwiązane.

Testy regresji

Testowanie regresji jest niezwykle ważną częścią ciągłego rozwoju. Jest przeznaczony do testowania, czy jakiekolwiek zmiany w jednej części aplikacji spowodowały problem w innej części. Na przykład zmiana w funkcji JavaScript używanej do sprawdzania poprawności formularza kontaktowego może potencjalnie wpłynąć na formularze używane w kasie. Ze względu na złożoną naturę każdej platformy handlu elektronicznego problemy z regresją nie są rzadkością, więc opracowanie solidnego planu testów regresji jest niezbędne, aby upewnić się, że te problemy nie wpływają negatywnie na wrażenia użytkowników.

UAT

Testowanie akceptacji użytkownika (UAT) jest krytyczną częścią każdego projektu programistycznego i obejmuje przeprowadzenie przez klienta pełnego, kompleksowego testowania platformy przed uruchomieniem. UAT to proces, który najczęściej uważam za niedoceniany. Jest to również część projektu, która ucierpi jako pierwsza, gdy terminy są napięte. Jednak może to prowadzić do wyższego wskaźnika niepowodzeń. W przypadku każdej nowej budowy strony internetowej radzimy zaplanować co najmniej 2 miesiące UAT. Twoja witryna e-commerce to tylko jedna część Twojej działalności handlowej, a kompleksowy proces obejmujący wyszukiwanie, kasę, zarządzanie zamówieniami, płatności, wysyłkę, obsługę klienta, finanse i wszystkie inne części łańcucha przetestowany.

UAT jest często mylony lub łączony z SIT (System Integration Testing), gdzie będziesz specjalnie testować integrację między wieloma systemami. SIT jest częścią kompleksowego testowania, które zapewnia, że ​​wszystkie części łańcucha współpracują ze sobą poprawnie.

Dobra UAT obejmuje tworzenie przypadków testowych i planów testów. Zwykle przybierają one formę zestawu skryptów (skrypt będący zestawem zadań do wykonania), które tester manualny będzie wykonywał i zaliczył lub nie zaliczył testu w zależności od wyniku. Nie jest niczym niezwykłym, że kompleksowy plan testów UAT obejmuje ponad 500 przypadków testowych.

A w UAT jest jednym z powodów, dla których jest tak ważny. Pod koniec procesu UAT ogólnie uzna się, że zaakceptowałeś wniosek, dlatego ważne jest, abyś dokładnie go przetestował, aby upewnić się, że działa dokładnie tak, jak oczekiwałeś. Nie oznacza to, że nieodkryte błędy nie będą objęte gwarancją, ale jeśli jakaś funkcjonalność nie działa w oczekiwany sposób, należy to sprawdzić w UAT. Innym powodem, dla którego jest to tak ważne, jest to, że jest to ostatnia szansa na wykrycie problemów, zanim zostaną opublikowane. Wszelkie błędy i problemy mogą negatywnie wpłynąć na wrażenia użytkownika.

UAT wymaga dużego wysiłku ze strony klienta, co często jest niedoceniane. Niektórzy klienci korzystają z zewnętrznych agencji testujących, aby wspierać ich podczas UAT, co może znacznie zmniejszyć ryzyko projektu, w którym klient nie ma siły roboczej, aby skutecznie przeprowadzić UAT.

Testy bezpieczeństwa

Czasami jestem bardzo zaskoczony, jak niektórzy sprzedawcy nie traktują testów bezpieczeństwa wystarczająco poważnie. Nie jest niczym niezwykłym, że sprzedawca nie wie, kiedy ostatnio przeprowadził test penetracyjny na swojej platformie internetowej. Są to zazwyczaj ci, którzy nie zostali jeszcze trafieni cyberatakiem (lub jeszcze nie wiedzą, że zostali trafieni). W obecnym klimacie, w którym cyberprzestępczość stale rośnie i staje się coraz bardziej wyrafinowana, a zwłaszcza w obliczu RODO w Europie, testy bezpieczeństwa są coraz ważniejsze. Wszystkie platformy internetowe e-commerce powinny być poddawane testom penetracyjnym przez specjalistyczną firmę zewnętrzną co najmniej raz w roku, a najlepiej dwa razy w roku. Wskazane jest również, aby Twoja aplikacja była regularnie skanowana w poszukiwaniu luk przy użyciu specjalistycznego oprogramowania, takiego jak Nessus. W Envoy co tydzień skanujemy platformy internetowe naszych klientów, aby zapewnić bardzo szybkie wykrywanie luk w zabezpieczeniach aplikacji. Powinieneś przynajmniej przeprowadzać skanowanie bezpieczeństwa aplikacji przed każdym wydaniem na produkcję. Nie ma sensu czekać 6 miesięcy do następnego testu penetracyjnego, gdy wprowadzisz nową lukę w aplikacji.

Test wydajności

Testy wydajności są zwykle używane do określenia, ile ruchu, żądań stron, jednoczesnych użytkowników i wielkości zamówień może obsłużyć Twoja witryna. Jest to trudniejszy proces, niż możesz sobie wyobrazić, ponieważ aby dokładnie przetestować, musisz naśladować zachowanie prawdziwych użytkowników, a jak wiadomo, prawdziwi użytkownicy robią wiele różnych rzeczy. Najlepsze, co możesz zrobić, to naśladować podróże kluczowych użytkowników, takie jak wyszukiwanie, dodawanie do koszyka i kasa. Najlepiej byłoby przeprowadzać testy obciążeniowe w środowisku produkcyjnym, a nie w środowisku przejściowym, ponieważ da to znacznie prawdziwszy obraz, ale prawdopodobnie spowoduje to również wyłączenie platformy w pewnym momencie podczas testu.

Większość sprzedawców przeprowadza testy obciążenia raz w roku, zwykle przed okresami szczytu handlowego, takimi jak Czarny Piątek czy Boże Narodzenie. Problem, jaki może to spowodować, polega na tym, że od ostatniego corocznego testu w aplikacji mogła zostać wprowadzona duża liczba zmian, z których niektóre mogły mieć przyrostowy wpływ na wydajność. Jeśli roczny test obciążenia wykaże spadek wydajności w porównaniu z poprzednim rokiem, bardzo trudno jest określić, która zmiana lub zmiany w ciągu ostatniego roku przyczyniły się do tego spadku wydajności. Może to również nie dać Ci wystarczająco dużo czasu na rozwiązanie problemów z wydajnością przed rozpoczęciem szczytowego handlu.

Aby temu przeciwdziałać, zaleca się przeprowadzanie testów wydajności przed każdym nowym wydaniem kodu. Nie trzeba ich wykonywać w środowisku produkcyjnym, o ile każdy test jest przeprowadzany w tym samym środowisku, ponieważ celem jest ustalenie, czy wydajność wzrosła lub spadła w stosunku do ostatniego wydania. Takie podejście umożliwia zespołom programistycznym zrozumienie, skąd biorą się wzrosty lub spadki wydajności. To oczywiście wymaga czasu, a zatem zwiększy czas i koszty rozwoju

Chociaż powyższa lista nie jest wyczerpująca, można zauważyć, że zakres testowania w ramach tworzenia oprogramowania może być bardzo duży i złożony. Każdy rodzaj testowania wymaga czasu i wysiłku i nie należy zakładać, że wszystko odbywa się standardowo, bez dodatkowych opłat. Firmy silnie skoncentrowane na testowaniu przeznaczają na testowanie do 40% czasu każdego projektu, co może być bardzo zaskakującą ilością. Dobre testowanie może zmniejszyć ryzyko projektu i może się zwrócić na dłuższą metę, ponieważ spowoduje mniej błędów, lepszą wydajność i lepsze ogólne wrażenia dla klientów.