Wirtualizacja usług - Service virtualization
| Rozwój oprogramowania |
|---|
W inżynierii oprogramowania , wirtualizacja usług lub wirtualizacji usługa jest metodą naśladować zachowanie określonych składników w heterogenicznych aplikacji opartych na komponentach takich jak API -driven zastosowań cloud opartych aplikacji i architektur zorientowanych na usługi . Służy do zapewniania zespołom programistycznym i QA/testującym dostępu do zależnych składników systemu, które są potrzebne do wykonania testowanej aplikacji (AUT), ale są niedostępne lub trudno dostępne w celach programistycznych i testowych. Przy zachowaniu „wirtualizacji” zależnych komponentów, testowanie i rozwój mogą być kontynuowane bez dostępu do rzeczywistych aktywnych komponentów. Wirtualizacja usług jest uznawana przez dostawców, analityków branżowych i publikacje branżowe za coś innego niż wyśmiewanie. Zobacz tutaj porównanie narzędzi do symulacji API .
Przegląd
Wirtualizacja usług emuluje zachowanie składników oprogramowania, aby usunąć ograniczenia zależności między zespołami programistycznymi i testowymi. Takie ograniczenia występują w złożonych, współzależnych środowiskach, gdy komponent podłączony do testowanej aplikacji jest:
- Jeszcze nie ukończony
- Wciąż się rozwija
- Kontrolowane przez stronę trzecią lub partnera
- Dostępne do testowania tylko w ograniczonej pojemności lub w niedogodnych momentach
- Trudne do udostępnienia lub skonfigurowania w środowisku testowym
- Potrzebne do jednoczesnego dostępu różnych zespołów o zróżnicowanej konfiguracji danych testowych i innych wymaganiach
- Ograniczone lub kosztowne w użyciu do testowania obciążenia i wydajności
Chociaż termin „wirtualizacja usług” odzwierciedla początkowe ukierunkowanie tej techniki na wirtualizację usług internetowych , wirtualizacja usług obejmuje wszystkie aspekty aplikacji złożonych: usługi, bazy danych , komputery mainframe , ESB i inne komponenty, które komunikują się za pomocą popularnych protokołów przesyłania wiadomości. Inne podobne narzędzia są nazywane API symulatory, API szyderczy narzędzia, nad drutu deblu testowych .
Wirtualizacja usług emuluje tylko zachowanie określonych komponentów zależnych, które deweloperzy lub testerzy muszą wykonać, aby zakończyć swoje transakcje typu end-to-end. Zamiast wirtualizować całe systemy, wirtualizuje tylko określone fragmenty zależnego zachowania krytycznego dla wykonywania zadań programistycznych i testowych. Zapewnia to wystarczającą logikę aplikacji, aby programiści lub testerzy otrzymali to, czego potrzebują, bez konieczności oczekiwania na ukończenie i natychmiastową dostępność rzeczywistej usługi. Na przykład, zamiast wirtualizować całą bazę danych (i wykonywać wszystkie powiązane zarządzanie danymi testowymi, a także konfigurować bazę danych dla każdej sesji testowej), monitorujesz interakcję aplikacji z bazą danych, a następnie emulujesz zachowanie powiązanej bazy danych ( SQL zapytania, które są przekazywane do bazy danych, odpowiednie zestawy wyników, które są zwracane i tak dalej).
Podanie
Wirtualizacja usług obejmuje tworzenie i wdrażanie „wirtualnego zasobu”, który symuluje zachowanie rzeczywistego komponentu, który jest wymagany do działania testowanej aplikacji, ale jest trudny lub niemożliwy do uzyskania w celach programistycznych i testowych.
Zasób wirtualny zastępuje składnik zależny, nasłuchując żądań i zwracając odpowiednią odpowiedź — z odpowiednią wydajnością. W przypadku bazy danych może to obejmować nasłuchiwanie instrukcji SQL, a następnie zwracanie wierszy źródła danych. W przypadku usługi WWW może to obejmować nasłuchiwanie komunikatu XML za pośrednictwem protokołu HTTP , JMS lub MQ , a następnie zwrócenie innego komunikatu XML. Funkcjonalność i wydajność zasobu wirtualnego może odzwierciedlać rzeczywistą funkcjonalność/wydajność składnika zależnego lub może symulować wyjątkowe warunki (takie jak ekstremalne obciążenia lub warunki błędów), aby określić, jak testowana aplikacja reaguje w tych okolicznościach.
Zasoby wirtualne są zazwyczaj tworzone przez:
- Nagrywanie komunikacji na żywo między komponentami podczas wykonywania systemu z testowanej aplikacji (AUT)
- Udostępnianie logów reprezentujących historyczną komunikację między komponentami
- Analizowanie specyfikacji interfejsu usługi (takich jak WSDL )
- Ręczne definiowanie zachowania za pomocą różnych kontrolek interfejsu i wartości źródeł danych
Są one następnie konfigurowane tak, aby reprezentowały określone dane, funkcje i czasy odpowiedzi.
Zasoby wirtualne są wdrażane lokalnie lub w chmurze (publicznej lub prywatnej). W środowiskach programistycznych/testowych skonfigurowanych do korzystania z zasobów wirtualnych zamiast komponentów zależnych programiści lub testerzy mogą następnie testować aplikację, nad którą pracują, bez konieczności oczekiwania na ukończenie lub dostępność komponentów zależnych.
Analitycy branżowi donoszą, że wirtualizacja usług najlepiej nadaje się dla „sklepów IT, które mają duże doświadczenie w „pomijaniu” testów integracji ze względu na „zależne oprogramowanie” i dysponują dość wyrafinowanym zestawem testowym.
Związek z karaniem i wyśmiewaniem
Alternatywnym podejściem do obejścia ograniczeń dostępu do środowiska testowego opisanych we wprowadzeniu do tego artykułu jest opracowanie przez członków zespołu kodów pośredniczących metod lub obiektów pozorowanych, które zastępują zasoby zależne. Słabość tego podejścia ujawniła się na początku XXI wieku wraz z rozwojem architektury zorientowanej na usługi . Rozprzestrzenianie się aplikacji złożonych, które opierają się na wielu usługach zależnych, a także wzrost rozwoju oprogramowania Agile po publikacji Manifestu Agile w 2001 r., coraz bardziej utrudniał programistom i testerom ręczne opracowywanie liczby, zakresu i złożoności kodów pośredniczących lub mocków wymagane do wykonania zadań programistycznych i testowych w zakresie tworzenia nowoczesnych aplikacji dla przedsiębiorstw.
Pierwszym krokiem w ewolucji od tworzenia skrótów do wirtualizacji usług była technologia zawarta w narzędziach testowych SOA od 2002 roku. . W miarę jak systemy korporacyjne stawały się coraz bardziej złożone i rozproszone, dostawcy narzędzi programowych przenieśli punkt ciężkości z tworzenia skrótów na bardziej skoncentrowaną na środowisku wirtualizację usług. Podczas gdy tworzenie kodu pośredniczącego nadal można wykonać poprzez ręczne opracowywanie i zarządzanie kodami pośredniczącymi, to, co stało się znane jako „wirtualizacja usług”, jest realizowane przy użyciu jednej z dostępnych komercyjnych technologii wirtualizacji usług (COTS) jako platformy do opracowywania i wdrażania ich „zasoby wirtualizacji usług”.
Agile i DevOps
Rosnąca popularność tworzenia oprogramowania Agile i DevOps stworzyła zapotrzebowanie na nowy zestaw narzędzi do dostarczania wirtualizacji usług społecznościom, które pracują w ten sposób. Praktyki, takie jak ciągłe dostarczanie i odchodzenie od rozwoju systemów mainframe i monolitów do bardziej rozproszonych architektur opartych na mikrousługach , dobrze pasują do możliwości wirtualizacji usług. Zespoły Agile i DevOps wolą pracować z lekkimi narzędziami, które mają mniej nagromadzonego rozrostu i nie mają uciążliwych ograniczeń licencyjnych.