Testowanie oprogramowania



Podobne dokumenty
Techniki (automatyzacji) projektowania testów. Adam Roman WarszawQA, 24 II 2016

Testowanie oprogramowania. Wykład 3 techniki projektowania testów oparte o specyfikację cz. I

Testowanie oprogramowania

Dni: 3. Opis: Adresaci szkolenia

Testowanie i walidacja oprogramowania

Programowanie w Logice Przykłady programów. Przemysław Kobylański

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Cw.12 JAVAScript w dokumentach HTML

Paradygmaty programowania

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Wykład 8. Testowanie w JEE 5.0 (1) Autor: Zofia Kruczkiewicz. Zofia Kruczkiewicz

Programowanie obiektowe

Zawód tester, czyli na czym polega testowanie. Katarzyna Łabinska Justyna Sacha - Gawlik

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Programowanie zespołowe

Tworzenie przypadków testowych

Przykłady zdań w matematyce. Jeśli a 2 + b 2 = c 2, to trójkąt o bokach długości a, b, c jest prostokątny (a, b, c oznaczają dane liczby dodatnie),

Podstawy programowania skrót z wykładów:

Modelowanie i Programowanie Obiektowe

PODSTAWOWE ZASADY PROGRAMOWANIA OBIEKTOWEGO NA BAZIE PAKIETU ROOT

Logika Temporalna i Automaty Czasowe

Grupy pytań na egzamin magisterski na kierunku Informatyka (dla studentów niestacjonarnych studiów II stopnia)

Metryki. Pomiar złożoności modułowej i międzymodułowej oprogramowania. autor: Zofia Kruczkiewicz

Kumulowanie się defektów jest możliwe - analiza i potwierdzenie tezy

Studia podyplomowe PROGRAM NAUCZANIA PLAN STUDIÓW

JAVAScript w dokumentach HTML (1)

Programowanie Obiektowe i C++

Grupy pytań na egzamin magisterski na kierunku Informatyka (dla studentów dziennych studiów II stopnia)

Projektowanie oprogramowania. Wykład Weryfikacja i Zatwierdzanie Inżynieria Oprogramowania Kazimierz Michalik

Definicje wyższego poziomu

Materiały do laboratorium MS ACCESS BASIC

Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski

Wykład 2. Informatyka Stosowana. 8 października 2018, M. A-B. Informatyka Stosowana Wykład 2 8 października 2018, M. A-B 1 / 41

Wykład 5. Charakterystyki zewnętrzne a wewnętrzne oprogramowania (1) - definicje metryk międzymodułowych i modułowych autor: Zofia Kruczkiewicz

Certyfikowany tester Pytania przykładowe do poziomu podstawowego

Historia modeli programowania

INTERNETOWE BAZY DANYCH materiały pomocnicze - wykład X

Pytania próbne ISTQB CTFL 1 110

Logika Temporalna i Automaty Czasowe

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).

Testowanie oprogramowania. Testowanie oprogramowania 1/34

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

PYTANIA PRÓBNE DO EGZAMINU NA CERTYFIKAT ZAAWANSOWANY REQB KLUCZ ODPOWIEDZI. Część DODATEK

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

JAVAScript w dokumentach HTML - przypomnienie

Podstawy programowania w języku C

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Warunki logiczne instrukcja if

Testowanie i walidacja oprogramowania

ISTQB Poziom Zaawansowany - Techniczny Analityk Testów (Advanced Level - Technical Test Analyst)

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

4. Funkcje. Przykłady

Wykład 1 Inżynieria Oprogramowania

Porównanie metod i technik testowania oprogramowania. Damian Ryś Maja Wojnarowska

Testowanie II. Cel zajęć. Pokrycie kodu

Automatyczne generowanie testów z modeli. Bogdan Bereza Automatyczne generowanie testów z modeli

Testowanie według modelu (MBT) Stowarzyszenie Inżynierii Wymagań wymagania.org.pl

Programowanie Obiektowe i C++ Marcin Benke

Podstawy Informatyki i algorytmizacji

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Java Persistence API - zagadnienia zaawansowane

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2

TECHNOLOGIE OBIEKTOWE. Wykład 3

3. Instrukcje warunkowe

Zasady organizacji projektów informatycznych

Wykład 2. Relacyjny model danych

PROJEKTOWANIE. kodowanie implementacja. PROJEKT most pomiędzy specyfikowaniem a kodowaniem

Wprowadzenie do programowania aplikacji mobilnych

Znajdowanie skojarzeń na maszynie równoległej


PRZEWODNIK PO PRZEDMIOCIE

Systemy zabezpieczeń

Wykład 0 Informacje Podstawowe

Komputerowe Systemy Przemysłowe: Modelowanie - UML. Arkadiusz Banasik arkadiusz.banasik@polsl.pl

Język C : programowanie dla początkujących : przewodnik dla adeptów programowania / Greg Perry, Dean Miller. Gliwice, cop

Operatory logiczne. Podstawowe operatory logiczne, składanie wyrażeń z użyciem operatorów logicznych

12) Wadą modelu kaskadowego jest: Zagadnienia obowiązujące na egzaminie z inżynierii oprogramowania: 13) Wadą modelu opartego na prototypowaniu jest:

Programowanie Rozproszone i Równoległe. Edward Görlich goerlich@th.if.uj.edu.pl

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Laboratorium Systemów SCADA

UML w Visual Studio. Michał Ciećwierz

Składnia rachunku predykatów pierwszego rzędu

Wykład VII. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Analiza konstrukcji zawierających wskaźniki. Piotr Błaszyński

REQB POZIOM PODSTAWOWY PRZYKŁADOWY EGZAMIN

Wykład 4. Projektowanie. MIS n Inżynieria oprogramowania Październik 2014

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Język JAVA podstawy. wykład 1, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Logika Stosowana. Wykład 1 - Logika zdaniowa. Marcin Szczuka. Instytut Informatyki UW. Wykład monograficzny, semestr letni 2016/2017

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Jakość w procesie wytwarzania oprogramowania

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017

Liczby losowe i pętla while w języku Python

Podstawy Informatyki i algorytmizacji

ZARZĄDZANIU. Wykład VI. dr Jan Kazimirski

Języki skryptowe w programie Plans

Transkrypt:

estowanie oprogramowania Adam Roman Instytut Informatyki UJ Wykład 6 techniki projektowania testów oparte o strukturę: pokrycia logiczne pokrycie decyzji, warunków, D/C, MC/DC pokrycia elementów projektowych 1/41

OPARE O SKŁADNIĘ (CZARNOSKRZYNKOWE) OPARE O SRUKURĘ (BIAŁOSKRZYNKOWE) OPARE NA DOŚWIADCZENIU I DEEKACH PRZEGLĄDY ANALIZA SAYCZNA KODU ANALIZA SAYCZNA ARCHIEKURY ANALIZA DYNAMICZNA klasy równoważności, wartości brzegowe tablice decyzyjne, grafy przyczynowo-skutkowe przejścia pomiędzy stanami (maszyna stanowa) drzewa klasyfikacji, tablice ortogonalne pokrycie specyfikacji, pokrycie przypadków użycia przypadki użycia, testowanie losowe pokrycia przepływu sterowania i danych testowanie ścieżek (LCSAJ, ścieżki bazowe, CC) techniki oparte o składnię (np. t. mutacyjne) taksonomie błędów zgadywanie błędów testowanie w oparciu o listy kontrolne testowanie eksploracyjne ataki usterkowe analiza złożoności, metryki kodu analiza przepływu sterowania analiza przepływu danych zgodność ze standardami programowania analiza statyczna strony webowej grafy wywołań wykrywanie wycieków pamięci wykrywanie dzikich wskaźników analiza wydajności 2/41

Dlaczego kryteria oparte o logikę? przykład Włączenie kryteriów bazujących na wyrażeniach logicznych do standardów akceptowanych przez ederalną Administrację Lotnictwa USA dla zapewnienia bezpieczeństwa systemów krytycznych awioniki w lotnictwie cywilnym 3/41

Klasyfikacja pokryć logicznych POKRYCIA LOGICZNE POKRYCIA KODU POKRYCIA INNYCH AREAKÓW OPROGRAMOWANIA D (pokrycie decyzji) C (pokrycie warunków) C/D (p. decyzyjno-warunkowe) MC (p, wielokrotnych warunków) MC/DC (p. warunków znaczących) pokrycie logiczne oparte o specyfikację pokrycie logiczne maszyny stanowej 4/41

Przykłady źródeł wyrażeń logicznych if (((a>b) C) && (x<y)) o.m(); else o.n(); c!=delimit InWord End c==eo c==delimit c==eol Dupeound prev==cur EndWord 5/41

Podstawowe definicje (1) predykat, operatory logiczne Decyzja (predykat) to wyrażenie posiadające wartość logiczną, np.: Decyzja może zawierać: stałe i zmienne logiczne zmienne porównywane operatorami porównania wywołania funkcji Wewnętrzna struktura oparta o operatory logiczne negacji implikacji koniunkcji rozłącznej alternatywy alternatywy równoważności 6/41

Podstawowe definicje (2) warunek (klauzula) Warunek (klauzula) to predykat nie zawierający operatorów logicznych 7/41

Oznaczenia zbiór predykatów zbiór klauzul w predykatach z P zbiór klauzul w predykacie p P ewaluacja predykatu p P (prawda lub fałsz) 8/41

Pokrycie decyzji DC decision coverage Inna nazwa: pokrycie predykatów, PC predicate coverage Dla każdego p P, R zawiera dwa wymagania: a b C q(x) p t 1 5 4 RUE RUE RUE t 2 5 6 RUE ALSE ALSE 9/41

Pokrycie decyzji a pokrycie rozgałęzień praktycznie to samo, ale subtelna różnica dot. pokrycia 100% pokrycie warunków = 100% pokrycie rozgałęzień różnią się dla niższych stopni pokrycia 1 2 3 5 7 6 Decyzje w 1, 3, 5 p = (1, 3, 5, 7) Pokrycie decyzji: 3/6 = 50% 4 Pokrycie rozgałęzień: 3/9 = 33% 10/41

Pokrycie warunków C condition coverage Inna nazwa: pokrycie klauzul, CC clause coverage Dla każdego c C, R zawiera dwa wymagania: a b C q(x) a>b p t 1 5 4 RUE ALSE RUE ALSE t 2 5 6 ALSE RUE ALSE ALSE 11/41

Pokrycie wielokrotnych warunków MC multiple condition coverage inna nazwa: CoC combinatorial coverage Dla każdego p P, R zawiera wymagania dla klauzul w C p ewaluacji wszystkich możliwych kombinacji wartości logicznych a b C q(x) a>b p t 1 5 4 RUE RUE RUE RUE t 2 5 6 RUE RUE ALSE RUE t 3 5 4 RUE ALSE RUE ALSE t 4 5 6 RUE ALSE ALSE ALSE t 5 5 4 ALSE RUE RUE RUE t 6 5 6 ALSE RUE ALSE ALSE t 7 5 4 ALSE ALSE RUE ALSE t 8 5 6 ALSE ALSE ALSE ALSE 12/41

Pokrycie warunków znaczących (1) MC/DC modified D/C coverage Inne nazwy: pokrycie klauzulami aktywnymi, ACC active clause coverage Motywacja: Chcemy, by testy na poziomie klauzul miały również efekt na poziomie predykatów UWAGA z definicji wymaga pokrycia klauzul i predykatów! W predykacie wyróżniamy jedną klauzulę (klauzula główna), a reszta to klauzule poboczne Kluczowe pojęcie: determinacja Klauzula główna c i w predykacie p determinuje p, jeśli klauzule poboczne c j p, j i, mają wartości takie, że zmiana wartości logicznej c i zmienia wartość logiczną p. 13/41

Pokrycie warunków znaczących (2) MC/DC modified D/C coverage 14/41

Pokrycie warunków znaczących (3) ogólna definicja (pamiętać o wymogu pokrycia klauzul i predykatów!) (MC/DC): Dla każdego p P i każdej klauzuli głównej c i C p, wybierz klauzule poboczne c j, j i tak, by c i determinowało p. R zawiera dwa wymagania dla każdej c i : a b RUE ALSE ALSE ALSE ALSE RUE ALSE ALSE test a b t 1 RUE ALSE t 2 ALSE ALSE t 3 ALSE RUE 15/41

Pokrycie warunków znaczących (4) wersja1: General Active Clause Coverage (GACC) Dla każdego p P i każdej klauzuli głównej c i C p, wybierz klauzule poboczne c j, j i tak, że c i determinuje p. R ma dwa wymagania dla każdej c i : Wartości wybrane dla klauzul pobocznych nie muszą być takie same dla obu przypadków: c i true oraz c i false. test a b t 1 RUE RUE t 2 ALSE ALSE 16/41

Pokrycie warunków znaczących (5) wersja2: Correlated Active Clause Coverage (CACC) Dla każdego p P i każdej klauzuli głównej c i C p, wybierz klauzule poboczne c j, j i tak, że c i determinuje p. R ma dwa wymagania dla każdej c i : Wartości wybrane dla klauzul pobocznych muszą ewaluować p na true w jednym przypadku i na false w drugim. a główna b główna test a b p t 1 ALSE RUE ALSE t 2 RUE RUE RUE t 3 RUE ALSE ALSE 17/41

Pokrycie warunków znaczących (6) wersja3: Restricted Active Clause Coverage (RACC) Dla każdego p P i każdej klauzuli głównej c i C p, wybierz klauzule poboczne c j, j i tak, że c i determinuje p. R ma dwa wymagania dla każdej c i : Wartości wybrane dla klauzul pobocznych muszą być takie same dla obu przypadków: c i true oraz c i false. abela zbioru testów tylko dla a jako głównej test a b c p t 1 RUE RUE RUE RUE t 2 ALSE RUE RUE ALSE 18/41

Pokrycie warunków znaczących (7) CACC vs. RACC Pewne wyrażenia można pokryć CACC, ale nie można RACC Więzy: 1) zawór otwarty w trybie Operational i zamknięty w innych 2) tryb nie może być jednocześnie Operational i Standby a = zawór zamknięty, b = tryb Operational, c = tryb Standby p = zawór zamknięty i (tryb Operational lub tryb Standby) test a b c p co narusza? t 1 RUE RUE RUE RUE 1, 2 t 2 RUE RUE ALSE RUE 1 t 3 RUE ALSE RUE RUE t 4 RUE ALSE ALSE ALSE t 5 ALSE RUE RUE ALSE 2 t 6 ALSE RUE ALSE ALSE t 7 ALSE ALSE RUE ALSE 1 t 8 ALSE ALSE ALSE ALSE 1 19/41

Pokrycie warunków znaczących (8) CACC vs. RACC Pewne wyrażenia można pokryć CACC, ale nie można RACC Więzy: 1) zawór otwarty w trybie Operational i zamknięty w innych przypadek, gdy a determinuje P 2) tryb nie może być jednocześnie Operational i Standby CACC można spełnić wybierając jeden a = zawór zamknięty, b = tryb Operational, c = tryb Standby wiersz z 1, 2, 3 oraz jeden z 5, 6, 7 p = zawór zamknięty i (tryb Operational lub tryb Standby) test a b c p co narusza? t 1 RUE RUE RUE RUE 1, 2 t 2 RUE RUE ALSE RUE 1 t 3 RUE ALSE RUE RUE t 4 RUE ALSE ALSE ALSE t 5 ALSE RUE RUE ALSE 2 t 6 ALSE RUE ALSE ALSE t 7 ALSE ALSE RUE ALSE 1 t 8 ALSE ALSE ALSE ALSE 1 20/41

Pokrycie warunków znaczących (9) CACC vs. RACC Pewne wyrażenia można pokryć CACC, ale nie można RACC Więzy: 1) zawór otwarty w trybie przypadek, Operational gdy a i zamknięty determinuje w P innych 2) tryb nie może być jednocześnie RACC można spełnić Operational wybierając i Standby jedną z a = zawór zamknięty, b = tryb par: Operational, (2, 6), (3, 7) lub c = (1, tryb 5) Standby p = zawór zamknięty i (tryb RACC Operational jest więc lub nieosiągalne! tryb Standby) test a b c p co narusza? t 1 RUE RUE RUE RUE 1, 2 t 2 RUE RUE ALSE RUE 1 t 3 RUE ALSE RUE RUE t 4 RUE ALSE ALSE ALSE t 5 ALSE RUE RUE ALSE 2 t 6 ALSE RUE ALSE ALSE t 7 ALSE ALSE RUE ALSE 1 t 8 ALSE ALSE ALSE ALSE 1 21/41

Jak zdeterminować predykat? Dla predykatu p z klauzulą c niech oznacza predykat p z każdym wystąpieniem c zmienionym na true, a oznacza predykat p z każdym wystąpieniem c zmienionym na false. Wtedy opisuje warunki, pod jakimi c determinuje p. 22/41

Przykłady 23/41

Nieosiągalność wymagań (infeasibility) while (i<n && a[i]!=0) { zrób coś z a[i] } typowa konstrukcja pętli z short circuit semantic przypadek, gdy i>=n oraz a[1]!=0 jest nieosiągalny Możliwe postępowania w sytuacji wystąpienia nieosiągalnych wymagań: (najprostsze): zignorować nieosiągalne wymagania (lepsze): rozważyć spełnienie wymagań w innym, subsumowanym kryterium 24/41

Subsumpcja kryteriów MC Multiple Condition Coverage RACC Restricted Active Clause Coverage CACC Correlated Active Clause Coverage GACC General Active Clause Coverage D/C Decision/Condition Coverage C Condition Coverage D Decision Coverage 25/41

Przykład (1) Read a, b, c a=0 & b>c c++ a++ b==c a>b END a = b+c 26/41

Przykład (2): pokrycie decyzji Read a, b, c a=0 & b>c c++ a++ b==c Jaka jest najmniejsza liczba przypadków testowych spełniających kryterium pokrycia predykatów (decyzji) dla zadanego programu? a>b END a = b+c 27/41

Przykład (2): pokrycie decyzji Read a, b, c a=0 & b>c c++ a++ C 1: (a = 5, b = 7, c = 4) C 2: (a = 0, b = 3, c = 1) C 3: (a = 0, b = 2, c = 2) b==c a>b END a = b+c 28/41

Przykład (3): pokrycie warunków Read a, b, c a=0 & b>c c++ a++ b==c Jaka jest najmniejsza liczba przypadków testowych spełniających kryterium pokrycia klauzul (warunków) dla zadanego programu? a>b END a = b+c 29/41

Przykład (3): pokrycie warunków Read a, b, c a=0 & b>c c++ a++ C 1: (a = 0, b = 7, c = 4) C 2: (a = 0, b = 3, c = 5) C 3: (a = 1, b = 2, c = 3) b==c C 1 C 2 C 3 a==0 b>c a>b b==c,, a>b END a = b+c 30/41

Przykład (4): pokrycie MC/DC Read a, b, c a=0 & b>c c++ a++ b==c Jaka jest najmniejsza liczba przypadków testowych spełniających kryterium pokrycia MC/DC dla zadanego programu? a>b 1. klauzule 2. predykaty 3. klauzule aktywne END a = b+c 31/41

Przykład (4): pokrycie MC/DC Read a, b, c a=0 & b>c c++ a++ C 1: (a = 0, b = 7, c = 4) C 2: (a = 0, b = 3, c = 5) C 3: (a = 1, b = 3, c = 2) C 4: (a = 0, b = 0, c = 8) b==c C 1 C 2 C 3 C 4 a==0 a>b b>c b==c,, a>b END a = b+c 32/41

Pokrycie elementów projektowych (1) ABSRAKCJA DANYCH PARADYGMA PROGRAMOWANIA ZORIENOWANEGO OBIEKOWO ZWIĘKSZONY NACISK NA MODULARNOŚĆ I PONOWNE UŻYCIE (REUSE) typ testowania związany najczęściej z testowaniem integracyjnym zaleta modularności: komponenty mogą być testowane niezależnie, np. na etapie testów jednostkowych ESOWANIE BAZUJĄCE NA ELEMENACH PROJEKOWYCH (DESIGN ELEMENS) grafy zwykle opisują powiązania (ang. coupling) pomiędzy elementami 33/41

Pokrycie elementów projektowych (2) strukturalne pokrycie grafowe grafy wywołań (call graphs) A wierzchołki = metody (moduły) krawędzie = wywołania metod NC: każda metoda musi być wywołana co najmniej raz B C D EC: każde wywołanie musi być wykonane co najmniej raz E Graf może być niespójny. Przypadek ekstremalny: brak wywołań wtedy ta technika nie jest właściwa (należy użyć techniki bazującej na sekwencyjności wywołań) 34/41

Pokrycie elementów projektowych (3) kryteria pokrycia dla programów zorientowanych obiektowo A B wciąż brak ustabilizowanej wiedzy o tym jak to najlepiej testować najbardziej oczywisty pomysł: testowanie dziedziczenia, ale klasy nie są testowane bezpośrednio! (dlaczego?) C D krawędzie przepływ wywołań krawędzie = zależności dotyczące dziedziczenia potrzeba modelu: czym jest tutaj pokrycie? 35/41

Pokrycie elementów projektowych (4) kryteria pokrycia dla programów zorientowanych obiektowo c.d. a1 b1 A B by zastosować pokrycie należy dokonać instancjacji obiektów NC: stworzony co najmniej 1 obiekt każdej klasy (nieciekawe nie mówi nic o wykonaniu) OO pokrycie wywołań: wymaga, by kryterium było zastosowane do co najmniej 1 obiektu każdej klasy c1 C d1 D rozszerzenie: All Object Call wymaga, by pokrycie dotyczyło wszystkich obiektów stworzonych dla każdej klasy 36/41

Pokrycie elementów projektowych (5) kryteria pokrycia przepływu danych dla elementów projektowych o wiele bardziej skomplikowane niż kryteria przepływu sterowania, a więc potencjalne źródło błędów! w testowaniu jednostkowym def i use są w tym samym module, w testowaniu integracyjnym mogą być w innych modułach interfejs caller (wołający) A... B(X)... end A B(Y)... end B caller (wołający) parametr aktualny parametr formalny 37/41

Pokrycie elementów projektowych (6) powiązane du-pary 1. X = 5 2. X = 4 3. X = 3 10. B(int y) 11. Z = y 12. = y 13. print(y) last-defs: {2, 3} first-uses: {11, 12} 4. B(X) last-def: zbiór wierzchołków definiujących zmienną, dla której istnieje def-czysta ścieżka z tych wierzchołków przez callsite do użycia w innym module first-use: zbiór wierzchołków używających zmiennej, dla których istnieje defczysta i use-czysta ścieżka z punktu wejścia (jeśli use jest w callee) lub z callsite (jeśli use jest w caller) do tych wierzchołków 38/41

Pokrycie elementów projektowych (7) powiązane du-pary caller callee G(a) du-para du-para x = 14... y = G(x)... print(y) print(a)... b = 42... return(b) last-def callsite first-use first-use last-def 39/41

Pokrycie elementów projektowych (8) inne rodzaje przepływu danych komplikujące testowanie A()... B() A B def use P1 A def komunikat (http, RMI, CORBA ) B P2 use OO bezpośrednio powiązany przepływ danych przepływ danych w oprogramowaniu rozproszonym M()... N() M N A() B() A B def use OO pośrednio powiązany przepływ danych 40/41

KONIEC 41/41