94. O integracji serwisów z użyciem kontraktów z Jackiem Milewskim
Feb 4, 2025
auto_awesome
Gościem jest Jacek Milewski, ekspert w integracji serwisów i testach kontraktowych. Omawia, jak unikać kosztownych błędów podczas tworzenia integracyjnych środowisk testowych. Wskazuje na znaczenie testów kontraktowych w mikroserwisach oraz ich rolę w weryfikacji komunikacji między usługami. Podkreśla różnice między testami kontraktowymi a end-to-end oraz dzieli się najlepszymi praktykami wdrażania tych testów w zespołach deweloperskich, co może zwiększyć efektywność pracy.
Wdrożenie testów kontraktowych minimalizuje ryzyko błędów w produkcji poprzez wcześniejsze identyfikowanie niezgodności między mikroserwisami.
Ewolucja podejścia do testowania oprogramowania kładzie nacisk na integralność testów w procesie tworzenia, co zwiększa efektywność pracy zespołów deweloperskich.
Praktyczne wprowadzenie testów kontraktowych powinno zaczynać się od jednego konsumenta i jednego testu, co ułatwia adaptację tej techniki.
Deep dives
Ewolucja podejścia do testowania
Podejście do testowania oprogramowania ewoluowało z frywolnego na bardziej zdyscyplinowane i strukturalne. Kiedyś programiści mogą eksperymentować z testowaniem na produkcji, teraz podkreśla się konieczność popierania testów w fazie rozwoju, aby wykrywać błędy przed wdrożeniem. Oprogramowanie musi być przetestowane w sposób, który potwierdzi jego działanie zgodnie z założeniami, a najlepsze praktyki zakładają, że testy powinny być integralną częścią designu oprogramowania. Ważne jest, by architektura aplikacji wpływała na strategię testowania, a nie odwrotnie, co stawia testy jako kluczowy element procesu tworzenia oprogramowania.
Znaczenie testów kontraktowych
Testy kontraktowe zyskują na znaczeniu jako technika w nowoczesnym testowaniu oprogramowania, zwłaszcza w architekturze mikroserwisowej. Pomagają one w zapewnieniu, że interakcje między różnymi systemami działają zgodnie z oczekiwaniami, poprzez definiowanie zestawu reguł dotyczących komunikacji między konsumentem a providerem API. Kluczowe jest stworzenie umowy, która określa, jakie dane i w jakiej formie są wymieniane, co pozwala na wcześniejsze wykrywanie niezgodności i zmniejsza ryzyko błędów na etapie produkcyjnym. Dzięki temu możliwe jest zminimalizowanie liczby regresji oraz skrócenie cyklu testowania, co staje się coraz bardziej istotne w dynamicznie rozwijających się projektach.
Nowe wyzwania w testowaniu mikroserwisów
Przejście od monolitycznych systemów do architektury mikroserwisowej stworzyło nowe wyzwania w zakresie testowania, w tym zarządzania stanem aplikacji. Złożoność związana z mikroserwisami sprawia, że wdrożenie testów kontraktowych staje się niezbędne, aby upewnić się, że zmiany w jednym z serwisów nie wpłyną negatywnie na inne. Problemy ze zgodnością komunikacyjną między mikroserwisami są powszechne, a testy kontraktowe pozwalają na weryfikację, czy ewolucja jednego serwisu jest akceptowana przez pozostałe. Warto zauważyć, że testowanie integracyjne nie jest wystarczające, aby zapewnić stabilność całego systemu, co wymaga podejścia testowania w izolacji.
Praktyczne zastosowanie testów kontraktowych
W praktyce wdrożenie testów kontraktowych wiąże się z przemyślanym podejściem do organizacji przepływu pracy w zespołach deweloperskich. Kluczowe jest, aby zacząć od jednego konsumenta i jednego testu, co pozwala na stopniowe wprowadzanie tej techniki bez zbytniego obciążania zespołu. Wykorzystanie narzędzi automatyzujących, takich jak Pact, do tworzenia i zarządzania kontraktami ułatwia ich implementację w procesie CI/CD. Dzięki temu zespoły mogą szybko reagować na zmiany i dostosowywać swoje oczekiwania w miarę, jak projekt się rozwija, co przekłada się na większą efektywność pracy.
Korzyści z wdrożenia testów kontraktowych
Wdrożenie testów kontraktowych przynosi szereg korzyści dla zespołów deweloperskich, w tym redukcję czasu poświęcanego na testy oraz eliminację nieprzewidzianych problemów na etapie produkcyjnym. Zmniejsza to obciążenie dla testerów oraz deweloperów, którzy mogą zredukować liczbę regresji i szybciej identyfikować błędy. Raporty wskazują na znaczące oszczędności, zarówno czasowe, jak i kosztowe, co czyni testy kontraktowe opłacalną inwestycją. Ponadto, stworzenie bardziej elastycznego i responsywnego podejścia do testowania pozwala na szybsze dostosowywanie się do zmieniających się wymagań biznesowych.
Tworzenie integracyjnych środowisk testowych w całym przedsiębiorstwie jest powszechną, marnotrawną praktyką, która spowalnia wszystko i wszystkich. Brzmi ostro lub może także nawet znajomo? Ale właśnie w taki sposób duże środowiska integracyjne są określane w kolejnych wydaniach Technology Radaru Thoughtworks i to od 2017 roku! O rok dłużej, bo od 2016 raport ten sugeruje także wdrażanie testów kontraktowych jako jedno z możliwych rozwiązań tego problemu.
Temat samych testów kontraktowych pojawił się już w podkaście, w odcinku "O testowaniu kontraktowym z Rafałem Maciakiem". W dzisiejszej rozmowie, wraz z Jackiem Milewskim, uzupełniamy to podejście o aspekty praktyczne, aby zabezpieczanie komunikacji pomiędzy serwisami nie stało się szybko długiem technicznym, którego utrzymanie będzie kosztować wszystkie zespoły czas i niepotrzebne nerwy.
Materiały dodatkowe do tego odcinka znajdują się na stronie tego odcinka na bettersoftwaredesign.pl.
Remember Everything You Learn from Podcasts
Save insights instantly, chat with episodes, and build lasting knowledge - all powered by AI.