Jest porządek, nie ma stresu. Jak unikać błędów w testowaniu i aktualizowaniu aplikacji? | KISS digital

Adam Kubiczek

Współzałożyciel KISS digital.

Przemysław Ćwik

Senior Editor.

22 November 2019

Jest porządek, nie ma stresu. Jak unikać błędów w testowaniu i aktualizowaniu aplikacji?

postMainImage

Starożytni Grecy twierdzili, że świat realny powstał z chaosu. Całkiem prawdopodobne, że mieli rację. W przypadku światów wirtualnych to jednak nie do pomyślenia. Do wykreowania i rozwoju aplikacji webowej niezbędna jest nie tylko znakomicie dopracowana koncepcja, ale również znakomicie uporządkowane procesy. W warunkach bałaganu projekt może posypać się jak domek z kart. Radzimy, jak okiełznać chaos i usystematyzować proces testowania oraz aktualizacji oprogramowania.

Tworzysz genialny projekt. Na przykład innowacyjną aplikację social mediową. Po kolejnej aktualizacji dostarczonej przez software house okazuje się, że użytkownicy nie mogą zalogować się na swoje konta. Problem trwa kilka dni, userzy odpływają, inwestorzy zgrzytają zębami, na wizerunku marki pojawiają się rysy, plan zawojowania rynku leży w gruzach. Zamieńmy aplikację social mediową na płatniczą. Podczas tworzenia łaty programiści nie przetestowali dobrze zabezpieczeń i przegapili lukę w systemie. Wyciekają dane użytkowników i ich środki finansowe. Sprawą interesuje się prokuratura. W żadnym przypadku nie było złej woli. Wyłącznie bałagan. Konsekwencje chaosu mogą być przerażające.

Podróż kodu po serwerach, czyli jak testować oprogramowanie

W procesie powstawania światów wirtualnych kluczową rolę odgrywa infrastruktura, czyli serwery. Można je podzielić na kilka kategorii, choć jest to rozróżnienie do pewnego stopnia umowne. Konkretna klasyfikacja i przypisanie serwerom określonych funkcji zależy od podejścia danego zespołu IT do realizacji projektów. Odpowiada również porządkowi prac. W przypadku tworzenia aplikacji webowych całkiem nieźle sprawdza się następujący podział:

  1. serwery deweloperskie,
  2. serwery testowe,
  3. serwery akceptacyjne,
  4. serwery produkcyjne.

Urządzenia te zazwyczaj różnią się od siebie m.in. pod względem wydajności procesora, pojemności pamięci, rodzaju systemu operacyjnego, bibliotek programowych, a przede wszystkim funkcji. Serwer deweloperski to środowisko rozwojowe, w którym wykluwa się kod. Jest to często proces „konwulsyjny”, pełen prób i błędów, dlatego powinien być izolowany. Gdy deweloperzy stwierdzą, że nowe dzieło jest stabilne, a nowe funkcje są gotowe do weryfikacji, publikują kod na serwerze testowym. Wówczas do akcji wkraczają testerzy, którzy polują na błędy przeoczone przez programistów. Jeśli znajdą buga, cofają kod do poprawek i proces się powtarza. Jeśli wszystko jest zgodne z zasadami sztuki – zmiany trafiają na serwer akceptacyjny.

Na tym etapie do procesu włącza się klient. Powinien on ocenić, czy realizacja spełnia jego oczekiwania, zanim zostanie wdrożona do systemu. Ostatnie ogniwo tego łańcucha stanowi serwer produkcyjny. To właśnie tam trafiają zmiany zatwierdzone przez klienta, który uznał, że kod może zostać zintegrowany z aplikacją. Wbrew temu, co może sugerować nazwa, nie jest to więc środowisko, w którym „produkowane” jest oprogramowanie, tylko infrastruktura, na której działa aplikacja udostępniana użytkownikom. Przykład? Logując się na skrzynkę Gmail, łączymy się właśnie z serwerem produkcyjnym – w tym przypadku: należącym do Google.

Uporządkowane testy, bezpieczne aktualizacje

Utrzymanie takiego lub zbliżonego porządku prac odgrywa fundamentalną rolę w rozwijaniu aplikacji webowych. Chodzi przede wszystkim o bezpieczeństwo. Odpowiednio skoordynowany proces testowania i aktualizacji oprogramowania minimalizuje ryzyko błędów, a więc i kosztów. I odwrotnie: rozwijanie kodu w warunkach chaosu zagraża stabilności aplikacji. Przykład? Załóżmy, że testerzy sprawdzają kod na serwerze deweloperskim, podczas gdy programiści nie przestają go rozwijać. W efekcie może dojść do sytuacji, gdy testerzy sprawdzą nieaktualny kod, a zmiany, które zostały wprowadzone w międzyczasie, pozostaną nieprzetestowane – mimo że mogą zawierać poważne błędy.

Duże ryzyko wiąże się również z pominięciem jednego z ogniw tego procesu. W szczególności chodzi o sprawdzenie aktualizacji na serwerze akceptacyjnym. Stanowi on kopię serwera produkcyjnego i pozwala klientowi zorientować się, czy nowe funkcje działają sprawnie i dobrze spełniają swoją rolę w ramach aplikacji (np. jako jej nowe funkcje). Wgranie nowego, niedokładnie sprawdzonego oprogramowania bezpośrednio na produkcję może skutkować awarią całego serwisu. Naprawa błędów często wiąże się z większymi kosztami czasowymi i finansowymi niż prawidłowa organizacja procesu wypuszczania nowych wersji aplikacji.

Unikaniu bugów sprzyja również automatyzacja testów. Odciąża ona programistów i zmniejsza ryzyko pomyłek. W wariancie optymalnym wygląda to następująco: automat analizuje nowy kod pod kątem oczywistych błędów, następnie wgrywa go na serwer testowy oraz zmienia jego status w Jirze, oznaczając nową wersję oprogramowania jako gotową do testów manualnych.

Trzeba również pamiętać o oznaczaniu kolejnych buildów, czyli wersji oprogramowania, na serwerach testowych i akceptacyjnych. Chodzi o to, by nie doszło do sytuacji, w której testerzy weryfikują starą wersję kodu, a pomijają aktualną. To oczywiście nie wszystko. Porządku trzeba pilnować również podczas innych procesów, takich jak migracja baz danych, wgrywanie nowych plików na serwery, instalowanie zależności czy backupowanie kodu. To jednak zagadnienia na osobny tekst.

Software house z dobrymi praktykami

Warto pamiętać, że klient nie jest skazany na standardy software house'u (lub ich brak). Może zasugerować odpowiedni tryb pracy, obliczony na uporządkowanie procesów i minimalizację ryzyka błędów. Software house'owi zwyczajnie opłaca się dostosować do tych wymagań: dla dobra klienta i własnego. W KISS digital wiemy o tym z własnego, wieloletniego doświadczenia. Zdobyliśmy je, nadzorując kilka długoterminowych projektów. Jednym z nich jest Haddad PLM. To pokaźnych rozmiarów aplikacja, wykorzystywana przez setki pracowników firmy Haddad. Podczas jej aktualizowania nie możemy pozwolić sobie na najmniejsze ryzyko błędów. Dobre praktyki zarówno w zakresie developmentu, jak i testowania są więc koniecznością.

Pracujemy również nad optymalizacją procesów wewnątrz firmy. Przykładowo, zorganizowaliśmy wewnętrzny hackathon, w ramach którego nasi programiści opracowali narzędzie do deploymentu aplikacji webowych i mobilnych. W ten sposób udało nam się w pełni zautomatyzować proces wdrażania nowych wersji oprogramowania: dzięki temu wgranie aktualizacji na serwer to kwestia wciśnięcia kilku klawiszy.

Jeśli szukasz partnera, który zrealizuje Twój projekt z dbałością o jego bezpieczeństwo – porozmawiajmy!

Adam Kubiczek

A co-founder and managing partner of KISS digital. Has a long-term experience as a software developer and a team leader.

Przemysław Ćwik

Senior Editor.