Quo vadis programování? Automatizace vyhodnocování studentských úloh

Podobné dokumenty
1. Programování proti rozhraní

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

Virtuální metody - polymorfizmus

Vaše jistota na trhu IT. Balíčky. Rudolf Pecinovský

1. Dědičnost a polymorfismus

, Brno Připravil: David Procházka Návrhové vzory

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

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

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

typová konverze typová inference

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

20. Projekt Domácí mediotéka

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

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

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

Dědění, polymorfismus

Generické programování

IRAE 07/08 Přednáška č. 1

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

Abstraktní datové typy: zásobník

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

Jazyk C# (seminář 3)

PREPROCESOR POKRAČOVÁNÍ

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

UJO Framework. revoluční architektura beans. verze

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

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

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

IoC/DI. Tomáš Herceg Microsoft MVP (ASP.NET)

Reflexe RTTI Runtime Type Identification

ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33

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

Objektové programování

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

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

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

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

Jazyk C++ I. Polymorfismus

Jazyk C# (seminář 6)

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

Základy programovaní 3 - Java. Unit testy. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 26.,27.

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

KTE / ZPE Informační technologie

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

PŘETĚŽOVÁNÍ OPERÁTORŮ

Abstraktní třída a rozhraní

Výčtový typ strana 67

Základy objektové orientace I. Únor 2010

Metodika. Architecture First. Rudolf Pecinovský

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.

Pokud neuvedeme override, vznikne v synu nová (nevirtuální) metoda (a pochopitelně se nezavolá, jak bychom

Programování II. Polymorfismus

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

PROGRAMOVÁNÍ V C++ CVIČENÍ

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

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

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

Programovací jazyk Java

9. Polymorfismus a rozhraní

RMI Remote Method Invocation

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

návrhový vzor Singleton.

Úvod do programovacích jazyků (Java)

IRAE 07/08 Přednáška č. 7. Začátek (head)

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Algoritmizace a programování

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

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25

Jazyk C++ I. Šablony

Programování II. Modularita 2017/18

NPRG030 Programování I, 2015/16 1 / :25:32

Remote Method Invocation RMI

Datové struktury. alg12 1

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.

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Jazyk C++ II. Šablony a implementace

Jazyk C++ I. Šablony 2

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

Konstruktory a destruktory

Seminář Java IV p.1/38

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

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

10 Generické implementace

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

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

Nové prvky v C# 3.0. David Keprt

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

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

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Java testovací třída

Datové struktury. Obsah přednášky: Definice pojmů. Abstraktní datové typy a jejich implementace. Algoritmizace (Y36ALG), Šumperk - 12.

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

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

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

knihovna programátora

Transkript:

Vaše jistota na trhu IT Quo vadis programování? Automatizace vyhodnocování studentských úloh Rudolf PECINOVSKÝ rudolf@pecinovsky.cz Vladimír Oraný vladimir.orany@gmail.com

Vaše jistota na trhu IT Obsah s odkazy Děkuji

Vaše jistota na trhu IT Současný stav Metody testování Testování studentských úloh Bílé testování a jeho problémy

Metody testování Podle nutnosti spuštění programu Statické - program nemusí být spuštěn Hledají se (většinou potenciální) chyby ve zdrojových souborech Dynamické testování chodu programu Podle znalosti struktury Černá skříňka (Black box) testuje se funkce programu Kontroluje, zda systém na zadaný vstup odpoví očekávaným výstupem Skleněná/Bílá skříňka (Glass/White box) testuje se i implementace Test využívá znalosti vnitřní struktury programu Šedá skříňka (Gray box) kombinace předchozích dvou Když jsou naše informace o struktuře programu pouze částečné Automatizace Manuální testování testy spouští a kontroluje člověk Testovací program kontroluje výsledky (a často se i spouští) automaticky

Testování studentských úloh Vzhledem k časové náročnosti jsou velké tlaky na jejich automatizaci Většina systémů se soustředí především na odevzdávání a archivaci odevzdaných řešení Mnohé systémy se snaží kontrolovat duplicitu řešení Testy řešení zadaných úloh Statické Spouští se některý z kontrolních programů (PMD, FindBug, ) Ověřuje se především dodržení konvencí Neanalyzuje se správnost řešení Dynamické Testuje se pouze celková funkčnost (program = černá skříňka) Skoro nikde se studentské úlohy netestují jako bílé skříňky

Bílé testování a jeho problémy Bílé testování částečně usnadní, pokud studenty včas naučíme implementovat rozhraní Existenci implementace požadovaných metod zkontroluje překladač Automatický test pak může ověřit správnou funkci metod deklarovaných v implementovaném rozhraní Problém: nelze syntakticky vyžádat definici Statické metody Konstruktoru Soukromé metody Zadaného pole

Vaše jistota na trhu IT Framework Duckapter Principy Koncepce Diagram tříd hlavních součástí Funkce

Principy Kachní typování (Duck typing) Zvíře, které chodí jako kachna, plave jako kachna a kváká jako kachna, bude nejspíš kachna Nevyžaduje přesnou deklaraci typu kontrolovatelnou v době překladu Nevadí, jakého typu objekt ve skutečnosti je, hlavně že umí vše, co má objekt požadovaného typu umět Návrhový vzor Adaptér, resp. Zástupce Potřebujeme-li, aby instance měla jiné rozhraní, než to, které právě má, můžeme mezi ni a potencionálního uživatele vložit instance adaptéru s požadovaným rozhraním, která předá požadavky naší třídě. Anotace Umožňují začlenit do programu požadavky, které nejsou zadatelné standardními prostředky jazyka Z prvních dvou principů vyhází i název frameworku duckapter = duck adapter

Koncepce Vedle rozhraní, které třída musí implementovat, definujeme tzv. požadované rozhraní, přesně definující požadované vlastnosti třídy včetně těch, které syntaxe jazyka neumožňuje zadat Požadavky nezadatelné prostřednictvím standardní syntaxe se zadávají prostřednictvím anotací Příklad: //Testovaná třída má být abstraktní @Abstract public interface PožadovanéRozhraní { @Private @Static void soukrstatickámetoda(); @Private @Final @Field int instančníceločíselnákonstanta(); @Private @Transient @Field String neserializovanástringováproměnná(); }

Diagram tříd hlavních součástí class duckapter_simple http://code.google.com/p/duckapter «interface» Checker «interface,ann... CheckerAnnotation «interface» InvocationAdapter «interface» ClassWrapper «interface» Requests «interface» ObjectWrapper «llibrary class» Duck {leaf}

Funkce Ověření toho, že třída vyhovuje požadovanému rozhraní, má na starosti knihovní třída Duck 1. Zjistí, jestli má pro danou testovanou třídu již vytvořenu instanci třídy ClassWrapper pokud ne, nechá ji vytvořit 2. Požadujeme-li testování objektu, vytvoří pro tento účel instanci třídy ObjectWrapper 3. Pomocí této instance vytvoří virtuálního zástupce (proxy) implementujícího požadované rozhraní Následné testy spočívají ve volání metod tohoto zástupce Konstrukce instance třídy ClassWrapper 1. Projdou se všechny deklarace požadovaného rozhraní a u každé se zjistí, které anotace (CheckerAnnotation) ji zdobí 2. S každou anotací je sdružená třída implementující Checker, která vytvoří instanci třídy implementující InvocationAdapter 3. Tyto instance si vytvářená instance třídy ClassWrapper zapamatuje

Vaše jistota na trhu IT Děkuji za pozornost Rudolf Pecinovský mail: rudolf@pecinovsky.cz ICQ: 158 156 600