Testowanie oparte na modelu - Model-based testing

Ogólne ustawienie testowania w oparciu o model

Testowanie oparte na modelach to aplikacja projektowania opartego na modelach do projektowania i opcjonalnie również wykonywania artefaktów w celu testowania oprogramowania lub testowania systemu . Modele mogą być używane do reprezentowania pożądanego zachowania testowanego systemu (SUT) lub do przedstawiania strategii testowania i środowiska testowego. Zdjęcie po prawej stronie przedstawia poprzednie podejście.

Model opisujący SUT jest zwykle abstrakcyjną, częściową prezentacją pożądanego zachowania SUT. Przypadki testowe wyprowadzone z takiego modelu są testami funkcjonalnymi na tym samym poziomie abstrakcji co model. Te przypadki testowe są nazywane zbiorczo abstrakcyjnym zestawem testów . Abstrakcyjny zestaw testów nie może być wykonywany bezpośrednio na SUT, ponieważ zestaw jest na niewłaściwym poziomie abstrakcji. Wykonywalny zestaw testowy musi pochodzić z odpowiedniego pakietu testowego abstrakcyjnego. Zestaw testów wykonywalnych może komunikować się bezpośrednio z testowanym systemem. Osiąga się to poprzez odwzorowanie abstrakcyjnych przypadków testowych na konkretne przypadki testowe nadające się do wykonania. W niektórych środowiskach testowych opartych na modelach modele zawierają wystarczającą ilość informacji, aby bezpośrednio generować wykonywalne zestawy testów. W innych elementach abstrakcyjnego zestawu testów należy odwzorować na określone instrukcje lub wywołania metod w oprogramowaniu, aby utworzyć konkretny zestaw testów . Nazywa się to rozwiązywaniem „problemu mapowania”. W przypadku testów online (patrz poniżej) abstrakcyjne zestawy testów istnieją tylko koncepcyjnie, ale nie jako jawne artefakty.

Testy można wyprowadzić z modeli na różne sposoby. Ponieważ testowanie jest zwykle eksperymentalne i oparte na heurystyce, nie jest znane jedno najlepsze podejście do tworzenia testów. Powszechne jest konsolidowanie wszystkich parametrów związanych z wyprowadzaniem testów w pakiet, który jest często nazywany „wymaganiami testowymi”, „celem testu” lub nawet „przypadkami użycia”. Ten pakiet może zawierać informacje o tych częściach modelu, na których należy się skupić, lub o warunkach zakończenia testowania (kryteria zatrzymania testów).

Ponieważ zestawy testów pochodzą z modeli, a nie z kodu źródłowego, testowanie oparte na modelach jest zwykle postrzegane jako jedna z form testowania czarnoskrzynkowego .

Testowanie oparte na modelach złożonych systemów oprogramowania to wciąż rozwijająca się dziedzina.

Modele

Szczególnie w inżynierii opartej na modelach lub w architekturze opartej na modelach grupy Object Management Group ( OMG ) modele są budowane przed odpowiednimi systemami lub równolegle z nimi. Modele można również budować z gotowych systemów. Typowe języki modelowania do generowania testów obejmują UML , SysML , główne języki programowania, skończone notacje maszynowe i formalizmy matematyczne, takie jak Z , B ( Event-B ), Alloy lub Coq .

Wdrażanie testów opartych na modelach

Przykład przepływu pracy testowania opartego na modelu (generowanie przypadków testowych offline). IXIT odnosi się do dodatkowych informacji dotyczących implementacji i odnosi się do informacji potrzebnych do konwersji abstrakcyjnego zestawu testów na wykonywalny. Zazwyczaj IXIT zawiera informacje o wiązce testowej, mapowaniu danych i konfiguracji SUT.

Istnieje wiele znanych sposobów wdrażania testów opartych na modelach, w tym testowanie online , generowanie plików wykonywalnych w trybie offline oraz generowanie ręcznie testów wdrażanych w trybie offline .

Testowanie online oznacza, że ​​narzędzie testujące oparte na modelu łączy się bezpośrednio z SUT i testuje go dynamicznie.

Generowanie wykonywalnych testów offline oznacza, że ​​narzędzie testowe oparte na modelach generuje przypadki testowe jako zasoby do odczytu komputerowego, które mogą być później uruchamiane automatycznie; na przykład zbiór klas Pythona , które ucieleśniają wygenerowaną logikę testowania.

Generowanie w trybie offline testów wdrażanych ręcznie oznacza, że ​​narzędzie testujące oparte na modelu generuje przypadki testowe jako zasoby czytelne dla człowieka, które mogą później pomóc w testowaniu ręcznym; na przykład dokument PDF w ludzkim języku, opisujący wygenerowane etapy testu.

Wyprowadzanie testów algorytmicznie

Skuteczność testowania opartego na modelach wynika przede wszystkim z możliwości automatyzacji, jakie oferuje. Jeśli model jest czytelny maszynowo i formalny w zakresie, w jakim ma dobrze zdefiniowaną interpretację behawioralną, przypadki testowe można w zasadzie wyprowadzić mechanicznie.

Z maszyn skończonych

Często model jest tłumaczony lub interpretowany jako automat skończony lub system zmian stanów . Automat ten przedstawia możliwe konfiguracje testowanego systemu. Aby znaleźć przypadki testowe, automat przeszukuje ścieżki wykonywalne. Możliwa ścieżka wykonania może służyć jako przypadek testowy. Ta metoda działa, jeśli model jest deterministyczny lub można go przekształcić w deterministyczny. Cenne, nietypowe przypadki testowe można uzyskać, wykorzystując nieokreślone przejścia w tych modelach.

W zależności od złożoności testowanego systemu i odpowiadającego mu modelu liczba ścieżek może być bardzo duża ze względu na ogromną ilość możliwych konfiguracji systemu. Aby znaleźć przypadki testowe, które mogą obejmować odpowiednią, ale skończoną liczbę ścieżek, potrzebne są kryteria testowe do kierowania wyborem. Technika ta została po raz pierwszy zaproponowana przez Offutta i Abdurazika w artykule, w którym rozpoczęto testowanie oparte na modelach. Opracowano wiele technik generowania przypadków testowych, które są badane przez firmę Rushby. Kryteria testów są opisane za pomocą ogólnych wykresów w podręczniku testowania.

Dowodzenie twierdzeń

Dowodzenie twierdzeń było pierwotnie używane do automatycznego dowodzenia formuł logicznych. W przypadku metod testowania opartych na modelach system jest modelowany za pomocą zestawu predykatów określających zachowanie systemu. Aby wyprowadzić przypadki testowe, model jest podzielony na klasy równoważności w ramach prawidłowej interpretacji zbioru predykatów opisujących testowany system. Każda klasa opisuje pewne zachowanie systemu i dlatego może służyć jako przypadek testowy. Najprostszym partycjonowaniem jest podejście w postaci rozłącznej postaci normalnej, w którym wyrażenia logiczne opisujące zachowanie systemu są przekształcane w rozłączną postać normalną .

Programowanie w logice z ograniczeniami i wykonanie symboliczne

Programowanie z ograniczeniami może służyć do wybierania przypadków testowych spełniających określone ograniczenia poprzez rozwiązywanie zbioru ograniczeń na zbiorze zmiennych. System jest opisany za pomocą ograniczeń. Rozwiązanie zbioru ograniczeń można wykonać za pomocą solwerów boolowskich (np. Rozwiązujących SAT opartych na zadaniu spełnialności Boole'a ) lub za pomocą analizy numerycznej , takiej jak eliminacja Gaussa . Rozwiązanie znalezione przez rozwiązanie zestawu formuł ograniczeń może służyć jako przypadki testowe dla odpowiedniego systemu.

Programowanie z ograniczeniami można łączyć z wykonywaniem symbolicznym. W tym podejściu model systemu jest wykonywany symbolicznie, tj. Zbiera ograniczenia danych na różnych ścieżkach sterowania, a następnie wykorzystuje metodę programowania ograniczeń do rozwiązywania ograniczeń i tworzenia przypadków testowych.

Sprawdzanie modelu

Narzędzia do sprawdzania modeli mogą być również używane do generowania przypadków testowych. Pierwotnie sprawdzanie modelu zostało opracowane jako technika sprawdzania, czy właściwość specyfikacji jest poprawna w modelu. W przypadku użycia do testowania model testowanego systemu i właściwość do przetestowania są dostarczane do narzędzia do sprawdzania modeli. W ramach procedury proofingu, jeśli właściwość ta obowiązuje w modelu, weryfikator modelu wykrywa świadków i kontrprzykłady. Świadek to ścieżka, w której właściwość jest spełniona, podczas gdy kontrprzykład to ścieżka w wykonaniu modelu, w której właściwość jest naruszona. Te ścieżki można ponownie wykorzystać jako przypadki testowe.

Generowanie przypadków testowych przy użyciu modelu testowego łańcucha Markowa

Łańcuchy Markowa to skuteczny sposób obsługi testowania opartego na modelu. Modele testowe realizowane za pomocą łańcuchów Markowa można rozumieć jako model użycia: określa się je jako testowanie oparte na modelu użytkowania / statystycznym. Modele użytkowania, czyli łańcuchy Markowa, składają się głównie z 2 artefaktów: maszyny skończonej (FSM), która reprezentuje wszystkie możliwe scenariusze użycia testowanego systemu oraz profili operacyjnych (OP), które kwalifikują FSM do reprezentowania tego, w jaki sposób system jest lub będzie być używane statystycznie. Pierwsza (FSM) pomaga wiedzieć, co może być lub była testowana, a druga (OP) pomaga w wyprowadzaniu operacyjnych przypadków testowych. Testowanie oparte na modelu użytkowania / statystycznym rozpoczyna się od faktów, które nie są możliwe do wyczerpującego przetestowania systemu, a awaria może pojawić się z bardzo małą częstością. Podejście to oferuje pragmatyczny sposób statycznego wyprowadzania przypadków testowych, które koncentrują się na poprawie niezawodności testowanego systemu. Testowanie oparte na modelu użytkowania / statystycznym zostało ostatnio rozszerzone, aby można było je zastosować w systemach oprogramowania wbudowanego.

Zobacz też

Bibliografia

Dalsza lektura