Grafy wywołań stanowią statyczną reprezentację złożoności komunikacji. Są to grafy skierowane, w których węzły oznaczają jednostki programów, a krawędzie – komunikację między tymi jednostkami.
Grafy wywołań mogą znaleźć zastosowanie w testach jednostkowych, w których istnieją wzajemne wywołania różnych funkcji i modułów, w testach integracyjnych i systemowych, w których istnieją wywołania między modułami, a także w testach integracji systemów, w których istnieją wywołania między systemami.
Grafy wywołań można stosować w następujących celach:
- projektowanie testów wywołujących konkretny moduł lub system,
- określanie liczby miejsc w oprogramowaniu, w których następuje wywołanie modułu lub systemu,
- analiza struktury kodu i architektury systemu,
- określenie zaleceń dotyczących integracji (integracja parami lub sąsiadująco); opcje te zostały szerzej opisane w dalszej części rozdziału.
W sylabusie poziomu podstawowego [ISTQB_FL_SYL] przedstawiono dwie kategorie testowania integracyjnego: przyrostowe (zstępujące, wstępujące itp.) oraz nieprzyrostowe („wielkiego wybuchu”). Stwierdzono tam, że preferowane są metody przyrostowe, ponieważ kod jest analizowany w przyrostach, co ułatwia wykrywanie błędów, ponieważ ilość uwzględnianego każdorazowo kodu jest ograniczona.
W niniejszym sylabusie dla poziomu zaawansowanego prezentowane są trzy dodatkowe metody nieprzyrostowe wykorzystujące grafy wywołań. Mogą one okazać się bardziej przydatne od metod przyrostowych, w których do realizacji testów prawdopodobnie niezbędne będzie budowanie dodatkowych wersji i tworzenie pomocniczego kodu nieprzeznaczonego do dystrybucji. Te metody to:
- Testowanie integracji parami (nie należy mylić tego pojęcia z czarnoskrzynkową techniką testowania o nazwie „testowanie sposobem par”): forma testowania integracyjnego, która uwzględnia pary współpracujących modułów, zgodnie z ich rozmieszczeniem w grafie wywołań. Metoda ta pozwala ograniczyć liczbę budowanych wersji tylko w niewielkim stopniu, jednak umożliwia zmniejszenie rozmiaru niezbędnego kodu tzw. jarzma testowego.
- Testowanie integracji sąsiadująco: forma testowania integracyjnego, w której wszystkie węzły połączone z danym węzłem uczestniczą w testowaniu integracyjnym. Wszystkie poprzedniki i następniki danego węzła w grafie wywołań są uwzględniane w testach.
- Podejście McCabe’a oparte na predykatach projektowych korzysta z teorii złożoności cyklomatycznej w odniesieniu do grafu wywołań modułów. Wymaga ono skonstruowania grafu wywołań, w którym zostaną uwzględnione różne sposoby wzajemnych wywołań modułów, a w szczególności:
- wywołania bezwarunkowe: wywołania jednego modułu przez inny moduł, które zawsze mają miejsce;
- wywołania warunkowe: wywołania jednego modułu przez inny moduł, które występują tylko w pewnych sytuacjach;
- wykluczające się wzajemnie wywołania warunkowe: moduł wywołuje dokładnie jeden spośród pewnej liczby innych modułów;
- wywołania iteracyjne: moduł wywołuje inny moduł co najmniej raz, choć może również wywoływać go wielokrotnie;
- iteracyjne wywołania warunkowe: moduł może wywołać inny moduł wiele razy, jednak może nie wywołać go w ogóle.
Po utworzeniu grafu wywołań oblicza się złożoność integracji i tworzy testy celem pokrycia grafu.
W pracy [Jorgensen07] można znaleźć więcej informacji na temat używania grafów wywołań i testowania integracyjnego parami.