Obsah. October 2, Polymorfizmus. Typologie testování. Problém polymorfizmu. Vady/Anomálie. Vazební sekvence ČVUT FEL, K13132

Podobné dokumenty
1. Dědičnost a polymorfismus

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Základy objektové orientace I. Únor 2010

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Programování v C++ 2, 4. cvičení

typová konverze typová inference

NPRG031 Programování II 1 / :25:46

NMIN201 Objektově orientované programování 1 / :36:09

Třída. Atributy. Operace

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Dědění, polymorfismus

Programování II. Polymorfismus

7.5 Diagram tříd pokročilé techniky

Programování v C++ 3, 3. cvičení

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

Programování II. Abstraktní třída Vícenásobná dědičnost 2018/19

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

7.5 Diagram tříd pokročilé techniky

Programování II. Dědičnost změna chování 2018/19

Virtuální metody - polymorfizmus

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

PB161 Programování v jazyce C++ Přednáška 7

PB161 Programování v jazyce C++ Přednáška 7

Úvod do programovacích jazyků (Java)

Objektové programování

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Dědičnost (inheritance)

UML. Unified Modeling Language. Součásti UML

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Objektově orientované programování

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

6 Objektově-orientovaný vývoj programového vybavení

1. Programování proti rozhraní

Abstraktní třídy, polymorfní struktury

Abstraktní třída a rozhraní

ČVUT FEL Katedra telekomunikační techniky, K Radek Mařík Strukturované testování 17.

Programování II. Návrh programu I 2018/19

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy

Programování II. Úvod do dědičnosti 2018/19

Úvod do programování - Java. Cvičení č.4

Výčtový typ strana 67

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Diagram tříd (class diagram)

Programování v C++ VI

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Abstraktní datové typy

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

Testování komponent. May 21, CA CZ, s.r.o. Radek Mařík Testování komponent May 21, / 45

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

24. listopadu 2013, Brno Připravil: David Procházka

7.3 Diagramy tříd - základy

Mnohotvarost (polymorfizmus)

Teoretické minimum z PJV

10 Balíčky, grafické znázornění tříd, základy zapozdření

8 Třídy, objekty, metody, předávání argumentů metod

Dolování v objektových datech. Ivana Rudolfová

Programování v jazyce C a C++

7.3 Diagramy tříd - základy

Vyřešené teoretické otázky do OOP ( )

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Generické programování

Diagramy tříd - základy

Programování v C++ 1, 5. cvičení

Programování II. Návrh programu II

20. Projekt Domácí mediotéka

Jakub Čermák Microsoft Student Partner

Programovací techniky

1/1 ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE PROVOZNĚ EKONOMICKÁ FAKULTA PŘIJÍMACÍ ŘÍZENÍ 2017/2018

Zpracování deklarací a přidělování paměti

Objektově orientované programování v PHP 5. Martin Klíma

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Dědičnost. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 23.března

Seminář Java IV p.1/38

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Objektově orientované programování v jazyce Python

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

7. OBJEKTOVĚ ORIENTOVANÉ PROGRAMOVÁNÍ

Programovací jazyk Java

Seminář Java II p.1/43

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Sdílení dat mezi podprogramy

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Jazyk C++ II. Šablony a implementace

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

3. Třídy. Základní pojmy objektového programování. Třídy

Chování konstruktorů a destruktorů při dědění

Objektově orientované programování v jazyce Python

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

C# - OOP (object oriented programming)

Objektově orientovaný přístup

Polymorfismus. Časová náročnost lekce: 3 hodiny Datum ukončení a splnění lekce: 30.března

Transkript:

OO testování Radek Mařík ČVUT FEL, K13132 October 2, 2014 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 1 / 55 Obsah 1 Kĺıčové OO vlastnosti Dědičnost Řízení přístupu Polymorfizmus 2 Testování OO softwaru Typologie testování Anomálie DU párů Problém polymorfizmu 3 Kategorie OO vad a anomálíı Přehled Vady/Anomálie 4 Testování dědičnosti, polymorfizmu a dynamických vazeb Vazební sekvence Příklady 5 Kritéria OO testování Kritéria Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 2 / 55

Dědičnost Kĺıčové OO vlastnosti Dědičnost Umožňuje, aby společné vlastnosti mnoha tříd byly definovány v jedné třídě Odvozená třída má vše, co má její bázová třída. Navíc může: vylepšit odvozené vlastnosti (přepsáním) omezit odvozené vlastnosti přidat nové vlastnosti (rozšířením) Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 4 / 55 Dědičnost typů Kĺıčové OO vlastnosti Dědičnost Deklarovaný typ... typ specifikovaný v deklaraci reference na objekt Clock w1; // declared type Clock Skutečný typ... typ skutečného objektu w1 = new Watch(); // actual type Watch Metoda v Java Metoda, která se volá, je nejnižší verze metody definované mezi skutečným a deklarovaným typem v hierarchii dědičnosti. A B C Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 5 / 55

Kĺıčové OO vlastnosti Dědičnost podtypu a podtřídy Dědičnost Jestliže B dědí z A, pak Dědičnost podtypu... kterýkoliv objekt typu B může nahradit objekt typu A. Notebook je speciálním typem počítače. nahraditelnost. Dědičnost podtřídy... objekty typu B nesmí být použity jako náhrady za objekty typu A. Objekty typu B nemusí být typově kompatibilní. Stack dědí z Vector... pohodlné pro implementaci, ale stack není určitě vektor. Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 6 / 55 Řízení přístupu (v Java) Kĺıčové OO vlastnosti Řízení přístupu Class 1 Package Class 3 inheritance Class 2 Class 4 Class 5 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 8 / 55

Řízení přístupu (v Java) Kĺıčové OO vlastnosti Řízení přístupu public members Class 1 Package Class 3 inheritance Class 2 Class 4 Class 5 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 9 / 55 Řízení přístupu (v Java) Kĺıčové OO vlastnosti Řízení přístupu public members protected members Class 1 Package Class 3 inheritance Class 2 Class 4 Class 5 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 10 / 55

Řízení přístupu (v Java) Kĺıčové OO vlastnosti Řízení přístupu Class 1 public members protected members default Package Class 3 inheritance Class 2 Class 4 Class 5 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 11 / 55 Řízení přístupu (v Java) Kĺıčové OO vlastnosti Řízení přístupu Class 1 public members protected members default private members Package Class 3 inheritance Class 2 Class 4 Class 5 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 12 / 55

Polymorfizmus Kĺıčové OO vlastnosti Polymorfizmus Ta samá proměnná může mít různé typy, které závisí na běhu programů. Jestliže B dědí z A, potom objekt typu B může být použit tam, kde se očekává objekt typu A. Jestliže jak A tak B definují tu samou metodu M (B přepisuje A), potom ten samý příkaz může volat jak A verzi M, tak i B verzi. Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 14 / 55 Typy testování Testování OO softwaru Typologie testování Testování intra-metod... testování v rámci jedné metody jedné třídy. Testování inter-metod... testování v rámci několika metod jedné třídy. Testování intra-třídy... testování v rámci jedné třídy. obvykle použitím sekvencí volání metod v rámci jedné třídy. Testování inter-tříd... testování několika tříd najednou. ověřování možností integrace Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 16 / 55

Testování OO softwaru Anomálie DU párů DU páry a jejich možné anomálie 1 Přepisující metoda má jinou def-množinu než přepisovaná metoda? Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 18 / 55 Testování OO softwaru Anomálie DU párů DU páry a jejich možné anomálie 2 Přepisující metoda má jinou def-množinu než přepisovaná metoda? Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 19 / 55

Testování OO softwaru Anomálie DU párů DU páry a jejich možné anomálie 3 Přepisující metoda má jinou def-množinu než přepisovaná metoda? Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 20 / 55 Testování OO softwaru Anomálie DU párů DU páry a jejich možné anomálie 4 Přepisující metoda má jinou def-množinu než přepisovaná metoda? Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 21 / 55

Testování OO softwaru Anomálie DU párů DU páry a jejich možné anomálie 5 Přepisující metoda má jinou def-množinu než přepisovaná metoda? Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 22 / 55 Anomálie polymorfizmu 1 Testování OO softwaru Problém polymorfizmu Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 24 / 55

Anomálie polymorfizmu 2 Testování OO softwaru Problém polymorfizmu Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 25 / 55 Anomálie polymorfizmu 3 Testování OO softwaru Problém polymorfizmu Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 26 / 55

Kategorie OO vad a anomálíı Přehled Možné vady OO programů Složitost vniká množstvím propojení komponent. Statický determinismus mizí - mnoho vad je možné detekovat pouze za běhu. Dědičnost a polymorfizmus umožňuje vertiální a dynamickou integraci. Agregační vazby a vazby užití jsou mnohem složitější. Návrháři ne vždy zacházejí opatrně s viditelností dat a metod. Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 28 / 55 OO vady a anomálie Kategorie OO vad a anomálíı Přehled Zkratka Vada/Anomálie ITU* Nekonzistetní užití typu SDA* Anomálie definice stavu SDIH* Nekonzistentní definice stavu SDI Nesprávná definice stavu IISD Nepřímá nekonzistentní definice stavu ACB1* Anomální chování konstrukce (1) ACB2 Anomální chování konstrukce (2) IC Neúplná konstrukce SVA* Anomálie viditelnosti stavu Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 29 / 55

Kategorie OO vad a anomálíı Vady/Anomálie Nekonzistetní užití typu (ITU) nepřepisuje se (nejedná se o polymorfizmus). C rozšiřuje T a C přidává nové metody (rozšíření objekt je použit jako C, potom jako T, potom jako C metody T mohou přivést objekt do stavu nekonzistentním s C Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 31 / 55 Kategorie OO vad a anomálíı Vady/Anomálie Anomálie definice stavu (SDA) X rozšíří W, a X přepisuje některé z metod. Přepisující metody v X nenadefinují některé proměnné, které jsou definovány přepsanými metodami v W Selhání pro objekt Y při zavolání m() následovaném n() W :: m() definuje v a W :: n() používá v X :: n() používá v Y :: m() nedefinuje v Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 32 / 55

Kategorie OO vad a anomálíı Vady/Anomálie Nekonzistence definice stavu (SDIH) Překrytí proměnné, možná náhodně. Jestliže proměnná v potomku je definována, verze v předchůdci nemusí být. Selhání pro objekt Y při zavolání m() následovaném n() Y přepíše W ) verzi v Y :: m() definuje Y :: v X :: n() používá v Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 33 / 55 Kategorie OO vad a anomálíı Vady/Anomálie Anomálie v chování konstruktoru (ACB1) Konstruktor W volá metodu f (). Potomek W, X, přepíše f (). X :: f () používá proměnné, které by měly být definovány v konstruktoru X Selhání při konstrukci Když je konstruován objekt typu X, W () se provádí před X :: () Když W () volá X :: f (), použije se x, ale té zatím nebyla dána hodnota! Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 34 / 55

Kategorie OO vad a anomálíı Vady/Anomálie Anomálie ve viditelnosti stavu (SVA) Privátní proměnná v je deklarována v předchůdci W a v je definována W :: m(). X rozšiřuje W a Y rozšiřuje X. Y přepisuje m() a volá W :: m() k nadefinování v Selhání X :: m() je přidána později. Y :: m() nemůže dále již volat W :: m()! Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 35 / 55 Testování dědičnosti, polymorfizmu a dynamických vazeb Vazební sekvence Vazební sekvence Páry volání metod v rámci jedné testované metody: společný kontext instance. množina stavových proměnných, které jsou referencovány oběma metodami. obsahuje alespoň jednu vazební cestu mezi volání obou metod vzhledem k dané stavové proměnné. Reprezentují možné interakce stavových prostorů mezi volanými metodami vzhledem k volající metodě. Používá se k identifikaci bodů integrace a testovacích požadavků. Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 37 / 55

Testování dědičnosti, polymorfizmu a dynamických vazeb Typy Def-Use párů Vazební sekvence Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 38 / 55 Testování dědičnosti, polymorfizmu a dynamických vazeb Vazební sekvence Testování založené na vazbách Integrace nastává pomocí vazeb softwarových artefaktů. Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 39 / 55

Testování dědičnosti, polymorfizmu a dynamických vazeb Množina polymorfních volání Vazební sekvence PCS množina metod, které mohou být potenciálně provedeny jako výsledek volání metody v rámci dané instance kontextu. pcs(o :: m) = {W :: m, Y :: m, X :: m} Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 40 / 55 Testování dědičnosti, polymorfizmu a dynamických vazeb Příklady Příklad vazební sekvence 1 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 42 / 55

Testování dědičnosti, polymorfizmu a dynamických vazeb Příklady Příklad vazební sekvence 1 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 43 / 55 Testování dědičnosti, polymorfizmu a dynamických vazeb Příklady Příklad vazební sekvence 1 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 44 / 55

Testování dědičnosti, polymorfizmu a dynamických vazeb Příklady Příklad vazební sekvence 1 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 45 / 55 Testování dědičnosti, polymorfizmu a dynamických vazeb Příklady Příklad vazební sekvence 2 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 46 / 55

Testování dědičnosti, polymorfizmu a dynamických vazeb Příklady Příklad vazební sekvence 2 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 47 / 55 Testování dědičnosti, polymorfizmu a dynamických vazeb Příklady Příklad vazební sekvence 2 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 48 / 55

Cíle testování Kritéria OO testování Kritéria Testujeme, jak na sebe vzájemně působí metoda a instance vázaná na objekt o: interakce skrze vazební sekvence. Potřeba uvážit množinu interakcí: Možné typy objektu o Které metody mohou být ve skutečnosti provedeny (množiny polymorfních volání). Testují se všechny vazby se všemi typy. Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 50 / 55 Sekvence všech vazeb Kritéria OO testování Kritéria All-Coupling-Sequences (ACS) Pro všechny vazební sekvence S j,k v f (), existuje alespoň jeden testovací případ t takový, že existuje vazební cesta indukovaná S j,k taková, že je podcestou běhové trasy f (t) Alespoň jedna vazební cesta musí být provedena. Neuvažuje ani dědičnost ani polymorfismus. Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 51 / 55

Všechny poly-třídy Kritéria OO testování Kritéria All-Poly-Classes (APC) Pro všechny vazební sekvence S j,k v f () a pro každou třídu rodiny typů definovanou kontextem S j,k, existuje alespoň jeden testovací případ t takový, že existuje vazební cesta p indukovaná S j,k taková, že je podcestou běhové trasy f (t) Zahrnuje kontexty instací při volání. Nejméně jeden test for každý typ objektu. Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 52 / 55 Všechny vazební Def-Use Kritéria OO testování Kritéria All-Coupling-Defs-Uses (ACDU) Pro každou vazební proměnnou v každé vazební sekvence S j,k v f (), existuje alespoň jeden testovací případ t takový, že existuje vazební cesta p indukovaná S j,k taková, že je podcestou běhové trasy f (t) Každá poslední definice vazební proměnné dosahuje na všechny svá první použití. Neuvažuje dědičnost a polymorfismus. Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 53 / 55

Kritéria OO testování Kritéria Všechny polymorfní vazební Def-Use All-Poly-Coupling-Defs-Uses (APDU) Pro každou vazební proměnnou v, pro každou třídu rodiny typů definovanou kontextem S j,k, každé vazební sekvence S j,k v f (), pro každý uzel m, který má poslední definici v a každý uzel n, který má první použití v, existuje alespoň jeden testovací případ t takový, že existuje vazební cesta p indukovaná S j,k taková, že je podcestou běhové trasy f (t) Každá poslední definice vazební proměnné dosahuje na všechny svá první použití pro každý možný typ. Pracuje s dědičnosti a polymorfismem. Uvažuje definice a použití proměnných. Kombinuje předchozí kritéria. Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 54 / 55 Literatura I Kritéria OO testování Kritéria V této prezentaci je použita řada obrázků z níže uvedených původních anglických přednášek ( c Ammann and Offutt). Paul Ammann and Jeff Offutt. Introduction to Software Testing. Cambridge University Press, Cambridge, UK, first edition, February 2008. ISBN 0-52188-038-1. Paul Ammann and Jeff Offutt. Introduction to software testing, powerpoint slides, August 2010. Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 55 / 55