• Nebyly nalezeny žádné výsledky

2012Jirˇı´Sˇevcˇı´k Aplikaceprospousˇteˇnı´experimentu˚Applicationforexperimentaltesting VSˇB–Technicka´univerzitaOstravaFakultaelektrotechnikyainformatikyKatedrainformatiky

N/A
N/A
Protected

Academic year: 2022

Podíl "2012Jirˇı´Sˇevcˇı´k Aplikaceprospousˇteˇnı´experimentu˚Applicationforexperimentaltesting VSˇB–Technicka´univerzitaOstravaFakultaelektrotechnikyainformatikyKatedrainformatiky"

Copied!
66
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

Fakulta elektrotechniky a informatiky Katedra informatiky

Aplikace pro spousˇteˇnı´ experimentu ˚ Application for experimental testing

2012 Jirˇı´ S ˇ evcˇı´k

(2)
(3)
(4)
(5)

Tato bakala´rˇska´ pra´ce se zaby´va´ rozsˇı´rˇenı´m na´stroje pro spousˇteˇnı´ a testova´nı´ experi- menta´lnı´ch algoritmu˚. V ra´mci te´to pra´ce je popsa´n princip fungova´nı´ pu˚vodnı´ aplikace a zhodnocenı´ nedostatku˚. Hlavnı´ cˇa´stı´ je zde popis vsˇech implementovany´ch rozsˇı´rˇenı´.

Nacha´zı´ se zde i charakteristika XML souboru, pomocı´ ktere´ho je mozˇno algoritmus spus- tit s potrˇebny´m nastavenı´m. Za´veˇrecˇna´ cˇa´st je veˇnova´na testova´nı´ vy´konu prˇi se´riove´m a paralelnı´m spusˇteˇnı´ experimentu pomocı´ tohoto na´stroje.

Klı´cˇova´ slova: Testova´nı´, Experimenty, XML, Vizualizace dat, Paralelismus, C# , .NET

Abstract

This bachelor thesis deals with with enhancement of tool for launching and testing of experimental algorithms. Within the thesis I describe the principle of original application’s work and evaluate its demerits. The description of all implemented extensions is the main part here. There is also a characteristics of XML file with which it is possible to launch the algorithm with necessary adjustment. The concluding part is dedicated to performance trial during the serial and parallel launching of the experiment using this tool.

Keywords: Testing, Experiments, XML, Data Visualisation, Parallelism, C# , .NET

(6)

DTD – Document Type Definition

HTML – HyperText Markup Language

LINQ – Language Integrated Query

PNG – Portable Network Graphics

XAML – Extensible Application Markup Language

XML – Extensible Markup Language

Xpath – XML Path Language

W3C – World Wide Web Consortium

(7)

Obsah

1 U´ vod 6

2 Specifikace aplikace 7

2.1 Vlastnosti . . . 7

2.2 Princip fungova´nı´ . . . 7

2.3 Uzˇivatelske´ rozhranı´ . . . 9

3 Pouzˇite´ technologie 10 3.1 Programovacı´ jazyk C# . . . 10

3.2 XML . . . 11

4 Implementovana´ rozsˇı´rˇenı´ 13 4.1 Analy´za nedostatku˚ pu˚vodnı´ aplikace . . . 13

4.2 Vı´cena´sobne´ spusˇteˇnı´ . . . 14

4.3 Zpracova´nı´ zpra´v generovany´ch experimentem . . . 15

4.4 Ukla´da´nı´ vy´stupnı´ho souboru . . . 16

4.5 Informacˇnı´ zpra´vy . . . 19

4.6 Replay . . . 21

4.7 Nacˇtenı´ vy´stupnı´ho souboru . . . 22

4.8 Genera´tor . . . 23

4.9 Vizualizace . . . 29

4.10 Export sı´t’ovy´ch struktur . . . 30

4.11 Nastavenı´ . . . 31

4.12 Uzˇivatelske´ rozhranı´ . . . 32

4.13 Ostatnı´ rozsˇı´rˇenı´ . . . 34

5 Popis dokumentacˇnı´ho XML 35 5.1 Definicˇnı´ soubor . . . 35

5.2 Vy´stupnı´ zpra´vy . . . 37

5.3 Shrnutı´ dokumentacˇnı´ho XML . . . 38

6 Testova´nı´ 39 6.1 Princip testova´nı´ . . . 39

6.2 Implementace testovacı´ trˇı´dy . . . 40

6.3 Zpu˚sob testova´nı´ . . . 41

6.4 Konfigurace testovany´ch pocˇı´tacˇovy´ch sestav . . . 41

6.5 Nameˇrˇene´ hodnoty prˇi testova´nı´ . . . 42

6.6 Na´ru˚st vy´konu a efektivita vyuzˇitı´ - vy´pocˇty . . . 42

6.7 Zhodnocenı´ dosazˇeny´ch vy´sledku˚ . . . 44

7 Za´veˇr 45

8 Reference 46

(8)

Prˇı´lohy 46

A Zdrojove´ ko´dy 47

B Grafy 52

C Uzˇivatelska´ dokumentace 55

C.1 Vy´beˇr experimentu . . . 55

C.2 Konfigurace a spusˇteˇnı´ experimentu . . . 56

C.3 Opakova´nı´ experimentu . . . 56

C.4 Vizualizace prˇijaty´ch zpra´v . . . 56

C.5 Menu . . . 57

C.6 Nastavenı´ . . . 57

C.7 Genera´tor . . . 57

C.8 Kla´vesove´ zkratky . . . 59

D Struktura CD 60

(9)

Seznam tabulek

1 Porˇadı´ parametru˚ v poli v jednotlivy´ch typech . . . 24

2 Datove´ typy v dokumentacˇnı´m souboru . . . 38

3 Vy´sledne´ cˇasy se´riove´ho spousˇteˇnı´ . . . 42

4 Vy´sledne´ cˇasy paralelnı´ho spousˇteˇnı´ . . . 42

5 Porovna´nı´ pru˚meˇrny´ch cˇasu˚ u se´riove´ho a paralelnı´ho spousˇteˇnı´ . . . 42

6 Na´rust vy´konu a efektivita vyuzˇitı´ . . . 44

7 Kla´vesove´ zkratky . . . 59

(10)

Seznam obra´zku ˚

1 Exportovana´ sı´t’ova´ struktura . . . 31

2 Menu aplikace . . . 33

3 Spousˇteˇnı´ aplikace . . . 33

4 Ulozˇenı´ vy´stupnı´ho souboru . . . 33

5 Dosazˇene´ cˇasy seriove´ spousˇteˇnı´ . . . 52

6 Dosazˇene´ cˇasy paralelnı´ spousˇteˇnı´ . . . 52

7 Pru˚meˇrne´ cˇasy se´riove´ho a paralelnı´ho spousˇteˇnı´ . . . 53

8 Na´ru˚st vy´konosti prˇi paralelnı´m spusˇteˇnı´ . . . 53

9 Efektivita vyuzˇitı´ . . . 54

10 Hlavnı´ okno aplikace . . . 55

11 Seznam u´loh . . . 56

12 Nastavenı´ aplikace . . . 57

13 Genera´tor . . . 58

(11)

Seznam vy´pisu ˚ zdrojove´ho ko ´ du

1 Ukla´da´nı´ zpra´v prˇi se´riove´m spousˇteˇnı´ . . . 16

2 Ukla´da´nı´ zpra´v prˇi paralelnı´m spousˇteˇnı´ . . . 17

3 Algoritmus pro cˇı´slova´nı´ souboru˚ . . . 19

4 Informacˇnı´ zpra´vy . . . 20

5 Ukla´da´nı´ iteracı´ prˇi pouzˇitı´ Tuple . . . 22

6 Zobrazenı´ parametru . . . 24

7 Rozdeˇlenı´ parametru . . . 27

8 Za´hlavı´ souboru . . . 35

9 Vstupnı´ parametry . . . 36

10 Sockets . . . 36

11 Vy´stupnı´ parametry . . . 37

12 Vy´stupnı´ zpra´vy . . . 37

13 Network . . . 38

14 Vstupnı´ dokumentacˇnı´ XML soubor . . . 47

15 Vy´stupnı´ XML soubor . . . 49

(12)

1 U ´ vod

Cı´lem te´to bakala´rˇske´ pra´ce bylo vytvorˇit na´stroj, ktery´ by umozˇnˇoval spousˇteˇnı´ expe- rimenta´lnı´ch algoritmu˚, jejich vizualizaci a ulozˇenı´ dosazˇeny´ch vy´sledku˚. Vzhledem k tomu, zˇe takova´ aplikace se jizˇ v ra´mci VSˇB-TU Ostrava pouzˇı´va´, ma´ tato pra´ce za cı´l zdokonalit sta´vajı´cı´ aplikaci, odstranit nedostatky a celkoveˇ vylepsˇit aplikaci tak, aby co nejle´pe vyhovovala pozˇadavku˚m vy´voja´rˇe takove´ho experimentu. Du˚raz byl kladen hlavneˇ na to, aby vy´voja´rˇ oproti pu˚vodnı´ aplikaci mohl pouzˇı´t sˇirokou sˇka´lu nastavenı´ a mohl si tedy funkcˇnost na´stroje prˇizpu˚sobit prˇı´mo svy´m potrˇeba´m a pomohl tedy tomu, aby se vy´voja´rˇ mohl soustrˇedit pouze na vy´voj algoritmu a nemusel se zaobı´rat proble´my souvisejı´cı´mi s vizualizacı´ a zpracova´nı´m vy´sledku˚ generovany´ch tı´mto algoritmem.

Prvnı´ kapitola teoreticke´ cˇa´sti te´to pra´ce se zaobı´ra´ popisem a za´kladnı´ funkcˇnostı´

pu˚vodnı´ aplikace. V druhe´ kapitole jsou popsa´ny technologie pouzˇite´ prˇi vy´voji aplikace.

Trˇetı´ a nejrozsa´hlejsˇı´ cˇa´st pra´ce se zaby´va´ zhodnocenı´m pu˚vodnı´ aplikace, analy´zou nedo- statku˚ a hlavneˇ popisem noveˇ implementovany´ch rozsˇı´rˇenı´ a funkcı´. Ve cˇtvrte´ kapitole je zdokumentova´n komunikacˇnı´ protokol, ktery´ je nezbytny´ pro spusˇteˇnı´ experimenta´lnı´ho algoritmu pomocı´ aplikace. Poslednı´ cˇa´st jsou veˇnova´na testova´nı´ aplikace prˇi se´riove´m a paralelnı´m spusˇteˇnı´.

(13)

2 Specifikace aplikace

2.1 Vlastnosti

MRCV Tool je na´strojem, ktery´ vy´voja´rˇi da´va´ mozˇnost soustrˇedit se cˇisteˇ jen na vy´voj samotne´ho algoritmu a odstranit tedy neusta´le se opakujı´cı´ redundantnı´ cˇinnost ty´kajı´cı´

se vizualizace vy´pocˇtu˚ nebo spra´vy vy´sledku˚. Vy´voja´rˇ se tedy jizˇ nemusı´ zaobı´rat pro- ble´mem jak zobrazovat cˇi ukla´dat vy´sledky tak, aby mohly by´t podrobeny dalsˇı´ analy´ze.

Princip MRCV Tool tkvı´ v tom, zˇe vyvı´jeny´ algoritmus je spusˇteˇn pomocı´ tohoto na´stroje a v graficke´m rozhranı´ lze jednodusˇe nastavit potrˇebnou konfiguraci pro spusˇteˇnı´ experi- mentu. Po spusˇteˇnı´ jsou vy´sledky vy´pocˇtu˚ zobrazova´ny, prˇehledneˇ ukla´da´ny do souboru a nabı´zı´ se i zpeˇtna´ mozˇnost prˇehra´nı´ jizˇ drˇı´ve spusˇteˇny´ch experimentu˚. Do vy´stupnı´ho souboru je mozˇno si ulozˇit i ru˚zne´ druhy konfiguracı´ konkre´tnı´ho algoritmu a pozdeˇji podle teˇchto nastavenı´ dany´ experiment spustit. Mezi vizualizacˇnı´ mozˇnosti aplikace patrˇı´ zobrazenı´ vy´stupnı´ch hodnot do grafu cˇi zobrazenı´ sı´t’ovy´ch struktur.

Dı´ky teˇmto vlastnostem se tedy vy´voja´rˇi dosta´va´ do rukou velice efektivnı´ a silny´

na´stroj pouzˇitelny´ pro testova´nı´ a vy´voj experimenta´lnı´ch algoritmu˚, jejich konfigurova´nı´

a na´slednou analy´zu dosazˇeny´ch vy´sledku˚. Aby mohly by´t vlastnosti tohoto na´stroje pouzˇity pro testova´nı´ algoritmu, musı´ tento splnˇovat neˇkolik za´kladnı´ch pozˇadavku˚:

• Spustitelnost v prostrˇedı´ MS Windows – spustitelny´ cˇi da´vkovy´ soubor.

• Mozˇnost konfigurace pomocı´ prˇı´kazove´ rˇa´dky.

• Jeho konfigurovatelnost musı´ by´t prˇesneˇ specifikova´na pomocı´ komunikacˇnı´ho XML protokolu.

• Algoritmus musı´ na standartnı´ vy´stup generovat zpra´vy ve forma´tu XML, ktere´

musı´ by´t take´ prˇesneˇ specifikova´ny v komunikacˇnı´m protokolu.

• Pro pouzˇı´va´nı´ samotne´ho MRCV Tool je potrˇeba mı´t nainstalova´n syste´m Windows a .NET Framework 4.

Pokud tedy algoritmus splnˇuje vsˇechny tyto podmı´nky, mu˚zˇe by´t spousˇteˇn pomocı´ MRCV Tool a vy´voja´rˇi je tedy umozˇneˇno pouzˇı´vat vesˇkery´ch prostrˇedku˚ tohoto na´stroje pomocı´

jednoduche´ho graficke´ho rozhranı´.

2.2 Princip fungova´nı´

Jak jizˇ bylo rˇecˇeno, pro mozˇne´ spusˇteˇnı´ a konfiguraci experimentu je zapotrˇebı´ mı´t jeho dokumentacˇnı´ protokol. Prˇesna´ specifikace tohoto protokolu je rozsa´hlejsˇı´ z du˚vodu vel- ke´ho du˚razu na jeho spra´vnost, a proto se nacha´zı´ v samostatne´ kapitole v te´to pra´ci.

V te´to cˇa´sti kapitoly se nacha´zı´ popis principu fungova´nı´ cele´ho MRCV Tool a je zde i zmı´neˇn tento protokol, ale jen v takove´ mı´rˇe, aby byl princip fungova´nı´ srozumitelny´ i bez podrobneˇjsˇı´ znalosti samotne´ho protokolu.

(14)

2.2.1 Nacˇtenı´ komunikacˇnı´ho souboru

Pokud tedy algoritmus splnˇuje vsˇechny pozˇadavky na spusˇteˇnı´ pomocı´ MRCV Tool, mu˚zˇe uzˇivatel prˇistoupit k jeho exekuci. Prvnı´ cˇa´stı´ cele´ho tohoto procesu je nacˇtenı´

komunikacˇnı´ho protokolu. Jelikozˇ je tento protokol v XML forma´tu, je k jeho nacˇtenı´

pouzˇita metoda slouzˇı´cı´ k deserializaci vstupnı´ch dat z XML. Pokud je vstupnı´ soubor v korektnı´m tvaru a odpovı´da´ potrˇebny´m parametru˚m, jsou z neˇj data nacˇtena do aplikace.

2.2.2 Nastavenı´

Jakmile jsou konfiguracˇnı´ informace nacˇteny, aplikace je zobrazı´ do komponenty uzˇi- vatelske´ho rozhranı´, kde je lze konfigurovat podle potrˇebny´ch pozˇadavku˚. Da´le jsou zobrazena i data o vy´stupnı´ch zpra´va´ch, jezˇ bude experiment generovat. Jakmile je toto nastavenı´ dokoncˇeno, lze prˇejı´t ke spusˇteˇnı´ aplikace.

2.2.3 Spusˇteˇnı´ procesu

Pro spusˇteˇnı´ aplikace je zapotrˇebı´ trˇı´ vstupnı´ch parametru˚:

Definice spousˇteˇne´ aplikace– tato definice obsahuje informace obsazˇene´ ve vstup- nı´m XML souboru.

Argumenty pro prˇı´kazovou rˇa´dku– jsou vytvorˇeny podle nastavene´ konfigurace.

Program Executor– Instance te´to trˇı´dy vytvorˇı´ prˇesny´ tvar argumentu˚ pro prˇı´kazo- vou rˇa´dku a spustı´ na za´kladeˇ teˇchto argumentu˚ experimentu.

2.2.4 Prˇı´jem zpra´v

Po spusˇteˇnı´ procesu se zacˇne experiment vykona´vat. Jakmile vyprodukuje experiment na vy´stup zpra´vu, je vyvola´na uda´lost a prˇijata´ zpra´va je zpracova´na aplikacı´ definovany´m zpu˚sobem podle toho, o jaky´ typ zpra´vy se jedna´. Typy zpra´v

Vy´stupnı´ zpra´va– aplikace zpracuje data ve zpra´veˇ.

Pra´zdna´ zpra´va– zpra´va neobsahuje zˇa´dna´ data a proces je tedy ukoncˇen.

Chybova´ zpra´va– indukuje chybu prˇi vykona´va´nı´ procesu.

2.2.4.1 Vy´stupnı´ zpra´va Pokud zpra´va nenı´ pra´zdna´ nebo chybova´, aplikace naprˇed zpra´vu deserializuje pomocı´ dalsˇı´ metody trˇı´dy k tomu urcˇene´. Jestlizˇe deserializace probeˇhne v porˇa´dku, je zpra´va ulozˇena do seznamu zpra´v -messageList. V tomto seznamu jsou ukla´da´ny vsˇechny zpra´vy v tom tvaru, v jake´m jsou definova´ny vy´stupnı´ zpra´vy v komunikacˇnı´m XML protokolu, kde je jejich specifikace popsa´na podrobneˇji.

(15)

2.2.5 Zobrazova´nı´ v grafu

Prˇi prˇijetı´ vy´stupnı´ zpra´vy mu˚zˇe by´t jejı´ hodnota vizualizova´na pomocı´ implementova- ne´ho grafu – v prˇı´padeˇ datovy´ch typu˚intadouble. Jestlizˇe se jedna´ o sı´t’ovou strukturu, je tato zobrazena pomocı´ dalsˇı´ komponenty graficke´ho rozhranı´.

2.2.6 Replay

Jakmile je spusˇteˇny´ proces ukoncˇen, nabı´zı´ se mozˇnost zpeˇtne´ho prˇehra´nı´. V tomto prˇı´- padeˇ se jizˇ zˇa´dny´ proces nevytva´rˇı´, ale jsou znovu zobrazova´ny zpra´vy prˇijate´ prˇi vyko- va´nı´ prˇehra´vane´ho procesu.

2.2.7 Ulozˇenı´ zpra´v

Po ukoncˇenı´ vykona´va´nı´ experimentu jsou vsˇechny zaznamenane´ zpra´vy serializova´ny a na´sledneˇ ulozˇeny do vy´stupnı´ho XML souboru. V tomto souboru se take´ nacha´zı´ na- stavenı´, prˇi jake´m byl dany´ experiment spusˇteˇn.

2.3 Uzˇivatelske´ rozhranı´

Pro testova´nı´, konfiguraci a zpracova´nı´ vy´sledku˚ aplikace vyuzˇı´va´ jednoduche´ graficke´

rozhranı´, ktere´ se da´ rozdeˇlit do dvou hlavnı´ch cˇa´stı´. Prvnı´ z nich se skla´da´ z ovla´dacı´ch prvku˚ pro konfiguraci a spusˇteˇnı´ vy´sledku˚, druha´ cˇa´st zajisˇt’uje grafickou a textovou vizualizaci vy´sledku˚. Da´le se zde nale´za´ okno se seznamem jizˇ drˇı´ve spusˇteˇny´ch u´loh.

Samotne´ uzˇivatelske´ rozhranı´ doznalo v pru˚beˇhu implementova´nı´ rozsˇı´rˇenı´ o neˇkolik podstatneˇjsˇı´ch zmeˇn, a proto je mu veˇnova´n detailneˇjsˇı´ popis v kapitole o rozsˇı´rˇene´ fun- kcˇnosti aplikace. Jsou zde uvedeny i na´hledy na jednotlive´ cˇa´sti uzˇivatelske´ho rozhranı´.

(16)

3 Pouzˇite´ technologie

3.1 Programovacı´ jazyk C#

Jedna´ se o modernı´ programovacı´ jazyk vyvinuty´ firmou Microsoft specia´lneˇ pro plat- formu .NET. Jeho konstrukce a syntaxe vycha´zı´ z programovacı´ch jazyku˚ C/C++ a Java.

Jeho nejrozsˇı´rˇeneˇjsˇı´ implementacı´ je Visual C#, jenzˇ je obsazˇeny´ v balı´ku Microsoft Visual Studio. Jeho za´kladnı´ charakteristika se skla´da´ z neˇkolika bodu˚:

• Objektoveˇ orientovany´ jazyk.

• Obsahuje jednoduchou deˇdicˇnost s mozˇnostı´ implementace vı´ce rozhranı´.

• Nepouzˇı´va´ globa´lnı´ metody cˇi promeˇnne´ ale staticke´ metody a promeˇnne´ verˇejny´ch trˇı´d.

• Typoveˇ bezpecˇny´ jazyk – omezene´ pouzˇitı´ implicitnı´ch konverzı´.

• Automaticka´ zpra´va pameˇti pomocı´garbage collector.

• Prˇekladacˇ jazyka jecase sensitive.

3.1.1 Vyuzˇite´ vlastnosti jazyka C#

Prˇi rozsˇirˇova´nı´ MRCV Tool bylo vyuzˇito neˇkolika specificky´ch vlastnostı´ jazyka C#. V seznamu jsou uvedeny ty, se ktery´mi se lze setkat v kapitole o implementovany´ch rozsˇı´rˇe- nı´ch.

LINQ– dotazovacı´ jazyk integrovany´ do C#.

Tuple– datova´ struktura pro ulozˇenı´ vı´ce hodnot ru˚zny´ch datovy´ch typu˚, novinka v C# 4.0.

XmlDocument– trˇı´da pro pra´ci s XML souborem.

Xpath– dotazovacı´ jazyk pro vyhleda´va´nı´ v XML souboru.

3.1.2 Microsoft Visual Studio

Vy´vojove´ prostrˇedı´ pro platformu .NET. Slouzˇı´ pro vy´voj softwarovy´ch aplikacı´ vsˇech zameˇrˇenı´ – od aplikacı´ konzolovy´ch azˇ trˇeba po webove´ sluzˇby. Kromeˇ C# podporuje i jine´ jazyky (C/C++, Visual Basic a jine´).

(17)

3.2 XML

XML patrˇı´ do kategorie znacˇkovacı´ch jazyku˚. Tato kategorie se vyznacˇuje hlavneˇ tı´m, zˇe samotny´ text obsahuje vlastnı´ text jazyka a i instrukce pro jeho zpracova´nı´, ktere´ vysveˇtlujı´

vy´znam nebo vzhled jednotlivy´ch cˇa´stı´. Z du˚vodu˚ nı´zke´ kompatibility mezi jednotlivy´mi jazyky se zacˇalo prˇistupovat k vy´voji obecny´ch znacˇkovacı´ch jazyku˚ slouzˇı´cı´ch jako k vytva´rˇenı´ dalsˇı´ch znacˇkovacı´ch jazyku˚. XML bylo vyvinuto WC3 konsorciem. Hlavnı´

cı´le spocˇı´valy v jednoduchosti jazyka, minimalizace volitelny´ch rysu˚ cˇi jednoduchost prˇi vytva´rˇenı´ nebo editaci. Hlavnı´ rysy a vy´hody XML jsou:

• Standard pro ukla´da´nı´, prˇenos, sdı´lenı´ a vy´meˇnu dat.

• Nema´ prˇeddefinovane´ tagy – musı´ by´t definova´ny explicitneˇ.

• K popisu dat pouzˇı´va´ DTD nebo XML sche´mata.

• Dobrˇe cˇitelny´ cˇloveˇkem i zarˇı´zenı´m.

• Mezina´rodnı´ podpora – mozˇnost vyuzˇı´t i jine´ho jazyka nezˇ anglicˇtiny.

• Jednoducha´ konverze do jiny´ch forma´tu˚.

• Tvorba a u´prava v libovolne´m editoru cˇi programovacı´m jazyce.

• Podrobny´ popis logicke´ struktury dokumentu.

3.2.1 Struktura XML dokumentu

XML dokument je rozdeˇlen do 3 cˇa´stı´ – XML deklarace, deklarace typu dokumentu a samotny´ obsah, ktery´ je vyznacˇen XML tagy.

3.2.1.1 XML deklarace Znacˇı´, zˇe se jedna´ o dokument typu XML. Mu˚zˇe obsahovat maxima´lneˇ trˇi parametry – verzi, ko´dova´nı´ a samostatnost prˇicˇemzˇ povinny´ parametr je jen ten prvnı´ a ostatnı´ jsou uzˇity podle specificky´ch potrˇeb. Parametr ko´dova´nı´ ma´ ru˚zne´

podoby - naprˇı´kladwindows-1250neboUTF-8. Pokud nenı´ uveden, tak aplikace implicitneˇ prˇedpokla´da´, zˇe se jedna´ o ko´dova´nı´UTF-8. Parametr pro samostatnost slouzˇı´ k indikaci toho, zda lze cˇi nelze dokument pouzˇı´t bez externı´ho DTD. Implicitneˇ je nastaveno no a je nutno tedy pouzˇı´t DTD.

3.2.1.2 Deklarace typu dokumentu Nepovinna´ cˇa´st prˇirˇazujı´cı´ dokumentu pouzˇitou DTD - standard, ktery´ popisuje strukturu znacˇkovacı´ho jazyka a definuje mozˇnost pouzˇitı´

konkre´tnı´ch elementu a atributu˚ v ra´mci dokumentu.

3.2.1.3 Obsah s XML tagy Obsahuje samotne´ informace dokumentu rozdeˇlene´ do elementu˚. Existuje zde podmı´nka vyzˇadujı´cı´ umı´steˇnı´ vsˇech teˇchto elementu˚ do korˇeno- ve´ho elementu.

(18)

3.2.1.4 Syntaxe Syntaxe tohoto jazyka vycha´zı´ z HTML. Oproti HTML je ale vı´ce du˚razneˇjsˇı´ na spra´vnost syntaxe. Jednotlive´ elementy se vyznacˇujı´ pomocı´ tagu˚. Kazˇdy´

z elementu˚ ma´ tyto tagy dva, prˇicˇemzˇ jeden je pocˇa´tecˇnı´ s na´zvem elementu a druhy´

ukoncˇovacı´ obsahujı´cı´ symbol/a na´zev dane´ho elementu.

3.2.1.5 Elementy Samotne´ elementy mu˚zˇou by´t do sebe vnorˇeny, cˇı´mzˇ je vytva´rˇena potrˇebna´ struktura dokumentu. Pro kazˇdy´ element je striktneˇ vyzˇadova´n jeho ukoncˇovacı´

tag. Lze pouzˇı´t i pra´zdny´ element, ktery´ pak tento tag neobsahuje. Pro kazˇdy´ element je striktneˇ vyzˇadova´n jeho ukoncˇovacı´ tag. Lze pouzˇı´t i pra´zdny´ element, ktery´ pak tento tag neobsahuje. K uprˇesneˇnı´ vy´znamu a prˇida´nı´ informacı´ o elementu se pouzˇı´vajı´ atributy, ktere´ jsou zapsa´ny v pocˇa´tecˇnı´m tagu. Samotna´ hodnota atributu musı´ by´t zapsa´na do uvozovek cˇi apostrofu˚.

3.2.1.6 Komenta´rˇe Jako v kazˇde´m jazyce lze i zde vyuzˇı´t mozˇnostı´ komenta´rˇu˚ ko´du prˇi dodrzˇenı´ dane´ syntaxe.

3.2.1.7 CDATA Pokud je potrˇeba vlozˇit cˇa´st textu, kde jsou vyuzˇı´va´ny znaky, ktere´

XML interpretuje jako sve´ znacˇky, je vhodne´ celou cˇa´st oznacˇit jako CDATA. Hlavnı´

vyuzˇitı´ lze nale´zt naprˇı´klad prˇi vlozˇenı´ ko´du programovacı´ho jazyka.

(19)

4 Implementovana´ rozsˇı´rˇenı´

Sta´vajı´cı´ verze MRCV Tool sice umozˇnˇovala korektnı´ spusˇteˇnı´ experimentu a na´sledne´

vygenerova´nı´ vy´stupnı´ho souboru s prˇijaty´mi daty, ale vyskytoval se v nı´ velky´ pocˇet nedostatku˚, ktery´ snizˇoval jejı´ vyuzˇitelnost a uzˇivatelskou prˇı´stupnost. Proto bylo nutne´

prove´st zjisˇteˇnı´ vsˇech teˇchto nedostatku˚ cˇi proble´mu˚.

V ra´mci te´to kapitoly jsou zminˇova´na rozsˇı´rˇenı´, ktera´ doplnˇujı´ sta´vajı´cı´ funkcˇnost programu. Navazujı´ tak na princip fungova´nı´ samotne´ aplikace, ktery´m se zaby´va´ prˇed- chozı´ kapitola. Pro pochopenı´ implementovany´ch rozsˇı´rˇenı´ je tedy potrˇeba zna´t za´kladnı´

postup, jaky´m MRCV Tool zpracova´va´ spousˇteˇny´ experiment.

4.1 Analy´za nedostatku˚ pu˚ vodnı´ aplikace

Nejveˇtsˇı´m nedostatkem byla nemozˇnost nastavenı´ vı´cena´sobne´ho spusˇteˇnı´ se´riovy´m cˇi paralelnı´m zpu˚sobem. Pokud tedy uzˇivatel chteˇl vı´ce vy´sledku˚ jednoho experimentu prˇi stejne´m nastavenı´, musel pocˇkat na dokoncˇenı´ jednoho cyklu vykona´va´nı´, a pote´ spustit aplikaci znovu, cozˇ se jevilo velice neprakticky naprˇı´klad prˇi pozˇadavku veˇtsˇı´ho pocˇtu opakova´nı´. Nutna´ byla tedy i prˇı´tomnost u pocˇı´tacˇe a kontrola, zda jizˇ experiment ukoncˇil sve´ vykona´va´nı´.

Druhy´m proble´mem bylo nevhodneˇ nastavene´ ukla´da´nı´ vy´stupnı´ho souboru s vy´- sledky experimentu. V pu˚vodnı´ verzi bylo nutne´ po dokoncˇenı´ vykona´va´nı´ vy´sledek ulozˇit pomocı´Replay, zadat jeho jme´no a vy´stupnı´ soubor se vygeneroval azˇ po ukoncˇenı´

cele´ aplikace. Tento zpu˚sob manipulace s vy´sledky se tedy jevil velice uzˇivatelsky ne- prˇı´veˇtiveˇ. Velikou nevy´hodou byla te´zˇ nemozˇnost doplneˇnı´ dodatecˇny´ch informacı´ do vy´stupnı´ho souboru, ktere´ by umozˇnovaly lepsˇı´ popis dane´ho experimentu.

Hodneˇ neprakticke´ bylo i ukla´da´nı´ vygenerovany´ch zpra´v do sta´le stejne´ho a impli- citneˇ nastavene´ho souboru nacha´zejı´cı´ho se ve slozˇce s aplikacı´. Ukla´da´nı´ na stejne´ mı´sto probı´halo i za prˇedpokladu, zˇe bylo spusˇteˇno neˇkolik ru˚zny´ch experimentu˚. Uzˇivatel si tedy nemohl vybrat, kam se majı´ generovane´ zpra´vy ulozˇit, a pokud byl MRCV Tool pouzˇit neˇkolikra´t, tak se do prˇedem definovane´ho souboru ukla´daly vsˇechny informace s konkre´tnı´mi nastavenı´mi a na´sledna´ manipulace s teˇmito vy´sledky byla obtı´zˇna´. Od tohoto sˇpatne´ho rˇesˇenı´ se odvı´jel i dalsˇı´ proble´m ty´kajı´cı´ se nacˇı´ta´nı´ vy´sledku˚ jizˇ drˇı´ve spusˇteˇny´ch procesu˚ a jejich nastavenı´. Pokud se ve vy´sledne´m souboru vyskytovaly vy´- sledky vı´ce procesu˚, nebylo mozˇne´ vsˇechny znovu nacˇı´st a zpeˇtneˇ spustit jejich pru˚beˇh pomocı´ funkceReplay.

Poslednı´ za´sadnı´ proble´m se ty´kal samotne´ho definicˇnı´ho XML souboru. Uzˇivateli se sice poskytoval za´kladnı´ popis syntaxı´ a pravidel, ale nejednalo se o nejlepsˇı´ rˇesˇenı´.

Korektnı´ vytvorˇenı´ tohoto vstupnı´ho dokumentu uzˇivateli zabralo zbytecˇny´ cˇas. Navı´c, jestlizˇe by se v tomto dokumentu vyskytla chyba, tak by samotny´ experiment nemusel by´t vu˚bec pomocı´ aplikace spustitelny´ nebo by mohlo docha´zet k nekorektnı´mu zpracova´nı´

a na´sledne´ chybne´ vizualizaci a ulozˇenı´ vy´sledku˚.

Na za´kladeˇ analy´zy hlavnı´ch nedostatku˚ bylo implementova´no neˇkolik rozsˇı´rˇenı´, ktere´ aplikaci cˇinı´ uzˇivatelsky vı´ce prˇı´veˇtivou a umozˇnˇujı´ nastavenı´ jejı´ho fungova´nı´

prˇesneˇ podle potrˇeb konkre´tnı´ho zpracova´vane´ho algoritmu. V pru˚beˇhu implementace

(20)

bylo nalezeno jesˇteˇ neˇkolik dalsˇı´ch nedostatku˚, a take´ se vyskytly dalsˇı´ na´pady, jak aplikaci rozsˇı´rˇit o dalsˇı´ funkcˇnı´ mozˇnosti a dosa´hnout tak co nejveˇtsˇı´ efektivity prˇi pra´ci s aplikacı´.

Popis teˇchto rozsˇı´rˇenı´ a jejich rˇesˇenı´ je popsa´n v na´sledujı´cı´ch podkapitola´ch. Za´rovenˇ je u neˇktery´ch rozsˇı´rˇenı´ nastı´neˇn zpu˚sob, jak aplikace fungovala v pu˚vodnı´ verzi a jak byla tato funkcˇnost upravena cˇi u´plneˇ zmeˇneˇna.

4.2 Vı´cena´sobne´ spusˇteˇnı´

Jak jizˇ vyplynulo z analy´zy nedostatku˚, velky´m proble´mem byla nemozˇnost opakovat spusˇteˇnı´ experimentu prˇi stejne´m nastavenı´ automaticky. Bylo tedy trˇeba implementovat mozˇnost nastavenı´ pocˇtu celkovy´ch spusˇteˇnı´. Jako nejlepsˇı´ a nejjednodusˇsˇı´ rˇesˇenı´ bylo zvoleno prˇida´nı´ ovla´dacı´ho prvkuNumericUpDownna viditelne´ a intuitivnı´ mı´sto vedle tlacˇı´tka pro spusˇteˇnı´ a zastavenı´ chodu aplikace. Tento ovla´dacı´ prvek ma´ nastavenou minima´lnı´ hodnotu 1, aby bylo zajisˇteˇno, zˇe bude experiment spusˇteˇn minima´lneˇ jednou.

Hornı´ hranice nenı´ nijak omezena a za´lezˇı´ na konkre´tnı´ch potrˇeba´ch uzˇivatele.

Prˇi potrˇebeˇ vy´sˇe uvedene´ho vı´cena´sobne´ho spusˇteˇnı´ se take´ nabı´zı´ mozˇnost s vy´beˇrem, jak dany´ experiment spustit. Na vy´beˇr je zde:

Spusˇteˇnı´ se´riovy´m zpu˚sobem– je spusˇteˇn vzˇdy jen jeden proces.

Spusˇteˇnı´ paralelnı´m zpu˚sobem- vsˇechny potrˇebne´ opakova´nı´ jsou spusˇteˇny za´ro- venˇ jako samostatne´ procesy.

Vy´beˇr zpu˚sobu spusˇteˇnı´ probı´ha´ pomocı´ dvou ovla´dacı´ch prvku˚ RadioButton, ktere´

se nacha´zı´, podobneˇ jako pocˇet spusˇteˇnı´, v sekci pro spusˇteˇnı´ aplikace. Podle vybrane´ho zpu˚sobu je po spusˇteˇnı´ nastavena promeˇnna´ typuboolna hodnotutruev prˇı´padeˇ vy´beˇru se´riove´ho spusˇteˇnı´. V opacˇne´m prˇı´padeˇ je tedy hodnotafalse. Tato promeˇnna´ je pouzˇı´va´na ve vı´ce cˇa´stech aplikace a odvı´jı´ se podle nı´ zpu˚sob zpracova´vanı´ prˇijaty´ch zpra´v z experimentu. Konkre´tnı´ pouzˇitı´ je popsa´no v dalsˇı´ch cˇa´stech te´to kapitoly.

4.2.1 Spusˇteˇnı´ se´riovy´m zpu˚ sobem

Po spusˇteˇnı´ experimentu je zvolena´ hodnota z NumericUpDown prvku, ktery´ indikuje pocˇet opakova´nı´, prˇevedena do promeˇnne´ countIter a pouzˇı´va´ se k porovna´nı´ s dalsˇı´

promeˇnnouexecuted, ktera´ ma´ prˇi spusˇteˇnı´ experimentu nulovou hodnotu. Skoncˇı´-li vy- kona´va´nı´ jedne´ iterace,executedse zveˇtsˇı´ o 1 a provede se porovna´nı´ se zadany´m pocˇtem opakova´nı´ – promeˇnnoucountIter. Pokud je pocˇet vykonany´ch mensˇı´, nezˇ je zadana´ hod- nota, spustı´ se dalsˇı´ proces se stejny´m nastavenı´m. Pokud ne, vykona´va´nı´ je dokoncˇeno a do konzolove´ cˇa´sti aplikace je prˇida´n vy´pis o ukoncˇenı´ vykona´va´nı´. Tı´mto zpu˚sobem funguje se´riove´ spousˇteˇnı´ experimentu, paralelnı´ podoba se lisˇı´ v neˇkolika cˇa´stech a je popsa´na v na´sledujı´cı´ cˇa´sti.

4.2.2 Spusˇteˇnı´ paralelnı´m zpu˚ sobem

Prˇi vy´beˇru paralelnı´ho spusˇteˇnı´ je opeˇt nastavena hodnota promeˇnne´countIterale nenı´

spusˇteˇn jen jeden proces. V tomto prˇı´padeˇ jsou pomocı´ cyklu spusˇteˇny vla´kna z Sys-

(21)

tem.Threading.ThreadPool. Kazˇde´ vla´kno si vytvorˇı´ vlastnı´ proces. Jakmile neˇktery´ z pro- cesu˚ ukoncˇı´ svoji cˇinnost, hodnotaexecutedse zvy´sˇı´ o 1 a probeˇhne porovna´nı´ scountIter.

Jak bude vykona´n zvoleny´ pocˇet procesu˚, do konzole se vypı´sˇe za´pis o dokoncˇenı´ vyko- na´va´nı´ stejneˇ jako prˇi se´riove´m spusˇtenı´.

Prˇi spusˇteˇnı´ dalsˇı´ho experimentu jsou tyto promeˇnne´ nastaveny na sve´ vy´chozı´ hod- noty. V prˇı´padeˇcountIter se tedy jedna´ o pocˇet potrˇebny´ch opakova´nı´ a uexecutedje to opeˇt nulova´ hodnota.

4.3 Zpracova´nı´ zpra´v generovany´ch experimentem

Nejpodstatneˇjsˇı´ funkcˇnı´ vlastnostı´ MRCV Tool je zpracova´va´nı´ zpra´v generovany´ch spu- sˇteˇny´m experimentem - za´kladnı´m popisem a rozdeˇlenı´m zpra´v se zaby´va´ kapitola o vlastnostech na´stroje. V te´to cˇa´sti je trˇeba zmı´nit zpu˚sob zpracova´nı´ a selekce zpra´v prˇi implementovane´m paralelnı´m spusˇteˇnı´ vı´ce experimentu˚. Prˇi se´riove´m spusˇteˇnı´ je vzˇdy spusˇteˇn jen jeden proces a zpra´vy jsou tedy ukla´da´ny postupneˇ podle toho, v jake´m porˇadı´

byly prˇijaty. Proble´m zde nasta´va´ pra´veˇ v prˇı´padeˇ paralelnı´ho zpu˚sobu, jelikozˇ aplikace za´rovenˇ zpracova´va´ neˇkolik teˇchto procesu˚ a prˇijı´ma´ zpra´vy ode vsˇech spusˇteˇny´ch pro- cesu˚ za´rovenˇ. Pokud by byl seznam zpra´v v tomto tvaru ulozˇen do vy´stupnı´ho souboru, zpra´vy by tedy byly ru˚zneˇ zprˇeha´zene´ a nebylo by mimo jine´ mozˇno zjistit, ktera´ zpra´va patrˇı´ ke ktere´mu procesu. Dalsˇı´ proble´m by nastal prˇi znovunacˇtenı´ aplikace a pozˇa- davku prˇehra´nı´ procesu – aplikace by nebyla schopna jednotlive´ zpra´vy rozparserovat na jednotlive´ procesy a pote´ je prˇehra´t.

K vyrˇesˇenı´ tohoto proble´mu bylo potrˇeba zjistit jedinecˇny´ identifika´tor procesu gene- rujı´cı´ho zpra´vu, aby bylo mozˇno prˇi dalsˇı´m zpracova´nı´ jednoznacˇneˇ urcˇit, ktere´ zpra´vy patrˇı´ ke konkre´tnı´mu procesu, a vhodny´m zpu˚sobem ulozˇit informaci o kterou zpra´vu se jedna´ a ktery´ proces ji vygeneroval. Prˇi implementaci toho rˇesˇenı´ bylo vyuzˇito datovy´ch struktur typuListaDictionary. Toto rˇesˇenı´ pouzˇı´va´ aplikace v prˇı´padeˇ, zˇe drˇı´ve zmı´neˇna´

promeˇnna´runType, ktera´ znacˇı´ zpu˚sob spusˇteˇnı´, ma´ hodnotufalse.

4.3.1 Seznam identifika´toru˚ procesu˚

Jakmile aplikace prˇijme zpra´vu z procesu, prvnı´m krokem je zde zjisˇteˇnı´ identifika´toru tohoto procesu, ktery´ je ulozˇen v promeˇnne´ProcessID. Na´sledneˇ je provedena kontrola, zda dany´ proces jizˇ neˇjakou zpra´vu vygeneroval. Je tedy zjisˇteˇno, zda se jeho identifika´tor jizˇ nacha´zı´ v seznamu teˇchto identifika´toru˚. Pokud ne, je zde prˇida´n. Tento seznam je da´le pouzˇı´va´n prˇi ukla´da´nı´ zpra´v a je i tedy zmı´neˇn v prˇı´slusˇne´ sekci. Pro tento seznam byla pouzˇita strukturaLista nazy´va´ seidList.

4.3.2 Seznam pozic zpra´v a jejich procesu˚

Pokud je prˇijata´ zpra´va vy´stupnı´ho typu, do seznamu je ulozˇen index, na ktere´m se zpra´va nacha´zı´ v seznamu vsˇech prˇijaty´ch zpra´v, jenzˇ ma´ na´zev Messages. Pote´ je zde ulozˇen identifika´tor procesu, ktery´ zpra´vu vygeneroval. Tı´mto zpu˚sobem je pote´ mozˇno prˇirˇadit kazˇde´mu procesu seznam vsˇech jeho zpra´v prˇesneˇ v porˇadı´, v jake´m byly generova´ny

(22)

na vy´stup. Prˇesny´m vyuzˇitı´m tohoto seznamu se zaby´va´ kapitola o ukla´da´nı´ zpra´v.

Datova´ struktura seznamu jeDictionary– klı´cˇem je pozice zpra´vy a hodnotou identifika´tor procesu.

4.4 Ukla´da´nı´ vy´stupnı´ho souboru

Syste´m ukla´da´nı´ vy´stupnı´ho souboru v pu˚vodnı´ verzi byl znacˇneˇ nedostacˇujı´cı´, a proto bylo implementova´no neˇkolik podstatny´ch zmeˇn, dı´ky ktery´m je pra´ce s vy´sledky vy- hovujı´cı´ pro potrˇebu uzˇivatele. Nejvy´razneˇjsˇı´ zmeˇnou je mozˇnost ulozˇenı´ vy´stupnı´ho souboru s vy´sledky prˇı´mo na uzˇivatelem definovane´ mı´sto a pod definovany´m na´zvem, cˇı´mzˇ jsou odstraneˇny vsˇechny proble´my, ktere´ byly popsa´ny v analy´ze nedostatku˚. Prˇı´- klad vy´stupnı´ho souboru se nacha´zı´ v prˇı´loze.

Zpu˚sob ukla´da´nı´ byl rozsˇı´rˇen i o nastavenı´, kdy se majı´ vy´sledky experimentu ulozˇit:

• Ulozˇenı´ po skoncˇenı´ procesu.

• Ulozˇenı´ po zavrˇenı´ aplikace.

• Neulozˇenı´ vy´sledku˚.

4.4.1 Ulozˇenı´ po skoncˇenı´ procesu

Po dokoncˇenı´ vykona´va´nı´ vsˇech iteracı´ procesu jsou vygenerovane´ zpra´vy serializova´ny a ulozˇeny do vy´stupnı´ho souboru. Jsou zde ale rozdı´ly ve zpu˚sobu prˇipravenı´ zpra´v pro serializaci prˇi se´riove´m a paralelnı´m spusˇteˇnı´.

4.4.1.1 Ulozˇenı´ prˇi se´riove´m spusˇteˇnı´ Seznam se zpra´vami je ihned po ukoncˇenı´

procesu˚ ulozˇen pomocı´ metody StoreMessages, ktera´ ma´ jako parametr seznam zpra´v, vytvorˇı´ z nich objekt typuRecordingsa pomocı´ dalsˇı´ch metod jej ulozˇı´. Zpra´vy jsou ulozˇeny prˇesneˇ v porˇadı´, v jake´m se nacha´zejı´ v tomto seznamu a s jejich porˇadı´m aplikace jizˇ da´le nemanipuluje.

public voidStoreMessages(List<Message>messages) {

Recording rec =newRecording();

rec.Name = ”Output”;

rec.CmdLineArgs = CopyCmdLine(Current.Inputs.CommandLine);

rec.Messages.AddRange(messages);

StoreRecFile(rec);

}

Vy´pis 1: Ukla´da´nı´ zpra´v prˇi se´riove´m spousˇteˇnı´

4.4.1.2 Ulozˇenı´ prˇi paralelnı´m spusˇteˇnı´ Pro ulozˇenı´ je zde pouzˇita take´StoreMessages, ale v prˇetı´zˇene´ verzi, kde je jako parametr pouzˇit seznam se zpra´vami, seznam s pozicemi zpra´v a seznam s identifika´tory procesu˚ – jejich podrobneˇjsˇı´ specifikace jsou popsa´ny v podkapitole o prˇijı´ma´nı´ zpra´v. V tomto prˇı´padeˇ prˇetı´zˇena´ metoda vytvorˇı´ novy´ a pra´zdny´

(23)

seznam zpra´v, do neˇhozˇ vkla´da´ jizˇ serˇazene´. Vyuzˇı´va´ zde porovna´va´nı´ identifika´toru procesu s hodnotou ulozˇenou v seznamu s umı´steˇnı´m zpra´v.

public voidStoreMessages(List<Message>messages, Dictionary<int,int>messDictionary, List

<int>idp) {

Recording rec =newRecording();

rec.Name = ”Output”;

rec.CmdLineArgs = CopyCmdLine(Current.Inputs.CommandLine);

List<Message>mess =newList<Message>();

foreach(int id in idp) {

var items = from cin messDictionary where c.Value == id

select c.Key;

foreach(var minitems) mess.Add(messages[m]);

}

rec.Messages.AddRange(mess);

StoreRecFile(rec);

}

Vy´pis 2: Ukla´da´nı´ zpra´v prˇi paralelnı´m spousˇteˇnı´

4.4.2 Ulozˇenı´ po zavrˇenı´ aplikace

Druhou volbou je ulozˇenı´ vsˇech zpra´v azˇ po zavrˇenı´ samotne´ aplikace. Tohoto lze vyuzˇı´t prˇi spusˇteˇnı´ vı´ce procesu˚ s rozdı´lnou konfiguracı´. Aplikace prˇi tomto zpu˚sobu ulozˇenı´

vyuzˇı´va´ generickou kolekci typu StorredMessage, do ktere´ jsou po dokoncˇenı´ procesu ulozˇeny zpra´vy dane´ho procesu a jeho konfigurace. V prˇı´padeˇ paralelnı´ho spusˇteˇnı´ pro- cesu je pro serˇazenı´ zpra´v pouzˇit stejny´ algoritmus jako v prˇı´padeˇ prˇedchozı´ho ukla´da´nı´.

Po zavrˇenı´ aplikace jsou vsˇechny prvky z genericke´ kolekce cyklicky ulozˇeny do vy´stup- nı´ho souboru pomocı´ metodyStoreAll, ktera´ funguje na podobne´m principu jako metoda StoreMessage.

4.4.2.1 Manua´lnı´ ulozˇenı´ prˇed zavrˇenı´m Prˇi tomto nastavenı´ se mu˚zˇe vyskytnout potrˇeba ulozˇit vy´sledky jednoho procesu ihned po jeho dokoncˇenı´ jako samostatny´ sou- bor s podmı´nkou, zˇe soubor ulozˇeny´ po zavrˇenı´ aplikace se nijak nemodifikuje a bude obsahovat vsˇechny vy´sledky spusˇteˇny´ch procesu˚. Implementace te´to funkce vyuzˇı´va´ stej- nou verzi metodyStoreMessagejako prˇi se´riove´m ukla´da´nı´ jednoho procesu, avsˇak s tı´m rozdı´lem, zˇe parametrem je zde objekt z genericke´ kolekce, ve ktere´ jsou ulozˇeny vy´sledky a nastavenı´ potrˇebne´ho procesu.

(24)

4.4.3 Neulozˇenı´ vy´sledku˚

V tomto prˇı´padeˇ se vy´sledky automaticky neukla´dajı´ a po dokoncˇenı´ procesu je trˇeba je ulozˇit manua´lneˇ pomocı´ tlacˇı´tkaSave.

4.4.4 Nastavenı´ cesty pro ulozˇenı´ souboru

Jednou z nejdu˚lezˇiteˇjsˇı´ch funkcı´ je volba na´zvu souboru a vy´beˇr cesty, kam se ma´ tento soubor ulozˇit. Samotny´ vy´beˇr spocˇı´va´ v napsa´nı´ na´zvu souboru a cesty do komponent uzˇivatelske´ho rozhranı´. Podle zpu˚sobu ulozˇenı´ se jizˇ pod tı´mto na´zvem ulozˇı´ soubor na stanovene´ mı´sto. Aby byl tento syste´m co nejvı´ce uzˇivatelsky´ prˇı´veˇtivy´, byly implemen- tova´ny i dalsˇı´ vlastnosti:

Vy´beˇr cesty pomocı´ dialogove´ho okna – aby nemusela by´t cesta rucˇneˇ napsa´na, mu˚zˇe by´t jejı´ vy´beˇr uskutecˇneˇn pomocı´fileBrowserDialog. Stacˇı´ tedy jen vybrat prˇı´slu- sˇnou slozˇku, kam se ma´ dany´ soubor ulozˇit a cesta je doplneˇna automaticky.

Defaultnı´ na´zev a cesta– pomocı´ nastavenı´ je zvolena defaultnı´ cesta a na´zev, kam se vy´stupnı´ soubory ukla´dajı´.

Neprˇepisova´nı´ jizˇ vytvorˇene´ho souboru– pouzˇitı´ algoritmu pro cˇı´slova´nı´ souboru˚.

4.4.5 Cˇ ı´slova´nı´ souboru˚

Cˇasty´m proble´mem u aplikacı´ generujı´cı´ch vı´ce vy´stupnı´ch souboru˚ je prˇepsa´nı´ jizˇ vy- tvorˇene´ho souboru. V prˇı´padeˇ MRCV Tool by tento proble´m mohl zpu˚sobit (naprˇı´klad v prˇı´padeˇ nastavenı´ ukla´da´nı´ vy´sledku˚ po skoncˇenı´ procesu˚) nena´vratnou ztra´tu vy´sledku˚

testova´nı´ experimentu˚. Z tohoto du˚vodu byl naimplementova´n algoritmus, ktery´ kont- roluje, zda soubor s dany´m na´zvem jizˇ existuje – pokud ano, k na´zvu souboru prˇida´ cˇı´slo a pod tı´mto na´zvem ho ulozˇı´.

Prvnı´m vstupnı´m parametrem je cesta s na´zvem souboru k ulozˇenı´. Toto je ulozˇeno do pomocne´ promeˇnne´ newPath typu string. V prvnı´m kroku algoritmus zjistı´, zda jizˇ soubor s tı´mto na´zvem a touto cestou existuje.

Pokud ne– metoda vra´tı´ promeˇnnounewPatha soubor se ulozˇı´ pod zvolenou cestou a na´zvem.

Pokud ano– nejprve je za pomoci regula´rnı´ch vy´razu˚ zjisˇteˇno, zda dany´ na´zev jizˇ nenı´ ocˇı´slova´n. Jestlizˇe ne, je za jeho na´zev prˇida´no cˇı´slo 1. V opacˇne´m prˇı´padeˇ je cˇı´slo souboru nahrazeno promeˇnnoufileNumberktera´ je typuint. Tento novy´ na´zev je ulozˇeno donewPath, algoritmus vyuzˇije rekurze a opeˇt zjistı´, zda existuje soubor s tı´mto na´zvem a cˇı´slem. Promeˇnna´fileNumberse prˇi kazˇde´ z teˇchto rekurzı´ zveˇtsˇı´ o 1 a je pouzˇita jako cˇı´slo souboru. Jakmile je nalezen na´zev souboru, ktery´ se v dane´

cesteˇ nenacha´zı´, je hleda´nı´ ukoncˇeno a metoda vra´tı´ novy´ na´zev a cestu.

Druhy´ parametr urcˇuje typ vy´stupnı´ho parametru, jelikozˇ je tento algoritmus vyuzˇı´va´n pro ukla´da´nı´ vsˇech souboru˚ aplikace – vy´stupnı´ XML soubor, vstupnı´ XML vytvorˇeny´

genera´torem a oba forma´ty prˇi exportu sı´t’ove´ struktury.

(25)

public static string SearchFile(stringfileName,stringfileType ) {

newPath = fileName;

if ( File . Exists(newPath)) {

Regex reg1 =newRegex(@”[1][.” + fileType + ”]”);

Regex reg2 =newRegex(@”[0−9][.” + fileType + ”]”);

if (reg1.IsMatch(fileName) ==false&& reg2.IsMatch(fileName) ==false) {

newPath = fileName.Substring(0, fileName.LastIndexOf(”.”)) + 1 + ” . ” + fileType ; SearchFile(newPath, fileType);

}

else {

fileNumber++;

newPath = fileName.Substring(0, (fileName.LastIndexOf(”.”)1)) + fileNumber + ”. ” + fileType ;

SearchFile(newPath, fileType);

} }

fileNumber = 0;

returnnewPath;

}

Vy´pis 3: Algoritmus pro cˇı´slova´nı´ souboru˚

4.4.6 Ulozˇenı´ prˇi zastavenı´

Aplikace ma´ mozˇnost prˇerusˇit pra´veˇ vykona´vane´ procesy pomocı´ tlacˇı´tkaStop. Vyuzˇitı´

toho lze trˇeba v prˇı´padeˇ spusˇteˇnı´ experimentu generujı´cı´ho velke´ mnozˇstvı´ vy´stupnı´ch zpra´v, a jakmile aplikace obdrzˇı´ pro uzˇivatele dostatecˇne´ mnozˇstvı´ zpra´v, mu˚zˇe by´t zasta- vena. Pomocı´ volby v nastavenı´ mu˚zˇou by´t zpra´vy z takto prˇerusˇene´ho procesu ulozˇeny u´plneˇ stejneˇ, jako by tomu bylo u neprˇerusˇene´ho vykona´va´nı´ jen s tı´m rozdı´lem, zˇe nebudou prˇida´ny informacˇnı´ zpra´vy o vsˇech vykonany´ch procesech.

4.5 Informacˇnı´ zpra´vy

Prˇi vı´cena´sobne´m opakova´nı´ vykona´va´nı´ jednoho experimentu by vy´stupnı´ soubor sice obsahoval vsˇechny zpra´vy a konfiguraci, ale pro lepsˇı´ oddeˇlenı´ jednotlivy´ch iteracı´ byla implementova´na mozˇnost nastavit prˇida´nı´ informacˇnı´ zpra´v. Zpra´vy take´ umozˇnˇujı´ ulozˇit dodatecˇne´ informace o pru˚beˇhu vykona´va´nı´, celkove´m cˇasu a trˇeba i pocˇtu vykonany´ch procesu˚.

Tyto zpra´vy lze rozdeˇlit do 3 kategoriı´:

• zpra´vy pro jednotlivy´ proces,

• zpra´vy o vsˇech vykonany´ch procesech,

(26)

• zpra´vy o chyba´ch.

Zpra´vy jsou ukla´da´ny do vy´stupnı´ho souboru a majı´ tedy stejnou syntaxi jako zpra´vy generovane´ spusˇteˇny´m experimentem. Rozdı´l je jen v tom, zˇe se v nich nevyskytuje elementwatchnebolog, ale novy´ elementprocessInfo.

<message>

<processInfo name=”MessageName”>Value</processInfo>

</message>

Vy´pis 4: Informacˇnı´ zpra´vy

4.5.1 Zpra´vy pro jednotlivy´ proces

Pro jednotlive´ procesy lze vyuzˇı´t 3 druhy informacˇnı´ch zpra´v:

Process launch– generova´na na zacˇa´tku spusˇteˇnı´ procesu. Jejı´ hodnotou je porˇadı´

pra´veˇ spusˇteˇne´ho procesu.

Serial/Paraller - generova´na na zacˇa´tku spusˇteˇnı´ procesu. Jejı´ hodnotou je bool uda´vajı´ zpu˚sob spusˇteˇny´ch procesu˚ – prˇi se´riove´m je hodnotatrue, prˇi paralelnı´m false.

Process termination – generova´na po ukoncˇenı´ procesu. Jejı´ hodnotou je porˇadı´

pra´veˇ ukoncˇene´ho procesu.

Generova´nı´ vsˇech typu˚ zpra´v je plneˇ automaticke´ a funguje prˇı´mo v pru˚beˇhu vyko- na´va´nı´ procesu˚. Jejich pouzˇı´va´nı´ za´visı´ jen na nastavenı´ uzˇivatele. Zpra´vy nemajı´ vu˚cˇi sobeˇ zˇa´dnou za´vislost a je tedy mozˇne´ ukla´dat jen ty, ktere´ si uzˇivatel sa´m zvolı´.

4.5.2 Zpra´vy o vsˇech vykonany´ch procesech

Tyto zpra´vy jsou do vy´stupnı´ho souboru generova´ny azˇ po ukoncˇenı´ vsˇech procesu˚.

Amount of performed processes– hodnotou je pocˇet vsˇech vykonany´ch procesu˚.

Serial/Paraller- stejne´ jako u zpra´v pro jednotlive´ procesy.

Overall time of performed processes– hodnotou je celkovy´ cˇas vsˇech vykonany´ch procesu˚.

Average time of performed processes – hodnotou je pru˚meˇrny´ cˇas vykonany´ch procesu˚.

DateTime– hodnotou je datum a cˇas ukoncˇenı´ vykona´va´nı´ vsˇech procesu˚.

(27)

4.5.3 Zpra´vy o chyba´ch

Jakmile je v pru˚beˇhu vykona´va´nı´ procesu prˇijata chybova´ zpra´va, je jejı´ text vypsa´n do konzole a podle nastavenı´ uzˇivatele mu˚zˇe by´t ulozˇen i do vy´stupnı´ho XML souboru.

Na´zev elementu te´to zpra´vy je Errora hodnotou je text chybove´ho hla´sˇenı´ prˇijate´ho ze spusˇteˇne´ho procesu.

4.6 Replay

Po dokoncˇenı´ vykona´va´nı´ experimentu je mozˇnost spustit opakovane´ prˇehra´nı´ prˇijaty´ch zpra´v. Budou tedy zobrazeny do grafu˚ a tabulky jako prˇi norma´lnı´m spusˇteˇnı´ aplikace. Do konzolove´ cˇa´sti bude take´ produkova´n stejny´ vy´pis. Aby byl vyuzˇit potenciona´l tohoto zpeˇtne´ho spusˇteˇnı´ a mohla by´t provedena du˚kladneˇjsˇı´ analy´za dosazˇeny´ch vy´sledku˚, je zde mozˇnost nastavenı´ rychlosti prˇehra´vany´ch zpra´v pomocı´ ovla´dacı´ho prvkuTrackBar.

Aby mohly by´t vykonane´ procesy znovu spusˇteˇny, musejı´ by´t ulozˇeny a pote´ pomocı´

ovla´dacı´ho prvku comboBox je vybra´n konkre´tnı´ proces pro spusˇteˇnı´. Aby bylo mozˇno toto ukla´da´nı´ automatizovat a tı´m ho udeˇlat uzˇivatelsky co nejjednodusˇsˇı´, byly imple- mentova´ny dveˇ funkce – automaticke´ ukla´da´nı´ cele´ho procesu a automaticke´ ukla´da´nı´

jednotlivy´ch iteracı´. Tyto mozˇnosti jsou nastavitelne´ a lze si i zvolit pod jaky´m na´zvem se majı´ procesy ukla´dat.

4.6.1 Automaticke´ ukla´da´nı´ cele´ho procesu

Po vykona´nı´ procesu je do ovla´dacı´ho prvku automaticky prˇida´na polozˇka se zvoleny´m na´zvem a po spusˇteˇnı´ te´to polozˇky je cely´ proces znovu prˇehra´n.

4.6.2 Automaticke´ ukla´da´nı´ jednotlivy´ch iteracı´

Prˇedchozı´ mozˇnost ukla´da´nı´ nale´za´ sve´ vyuzˇitı´ hlavneˇ v prˇı´padeˇ, zˇe je nastaveno jen jedno spusˇteˇnı´ experimentu. Jestlizˇe je experiment automaticky opakova´n vı´cekra´t, je vhodne´

pouzˇı´t rozdeˇlenı´ cele´ho spusˇteˇnı´ na jednotlive´ iterace, ktere´ budou pote´ ulozˇeny, a bude je mozˇno tedy spustit jednotliveˇ. Zpu˚sob ukla´da´nı´ u obou typu˚ spusˇteˇnı´ je rozdı´lny´.

4.6.2.1 Ukla´da´nı´ iteracı´ prˇi se´riove´m spusˇteˇnı´ Aplikace v tomto prˇı´padeˇ vyuzˇı´va´

novy´ prvek .NET architektury – datovy´ typTuple, do ktere´ho po ukoncˇenı´ jedne´ iterace ulozˇı´ 3 hodnoty typuint:

1. Porˇadı´ vykona´vane´ iterace.

2. Pozici prvnı´ vygenerovane´ zpra´vy v seznamu vsˇech zpra´v.

3. Pozici poslednı´ vygenerovane´ zpra´vy v seznamu vsˇech zpra´v.

Po ukoncˇenı´ vsˇech iteracı´ je pouzˇita metodaSingleRecpro ulozˇenı´ jednotlivy´ch iteracı´

a v cyklu jsou do prvkucomboBoxprˇida´ny polozˇky pro mozˇnost prˇehra´nı´.

(28)

if (Settings.Setts [10]) {

int c = iterRec.Count;

if (c == 0)

iterRec.Add(newTuple<int,int,int>(0, 0, Program.watchHolder.Messages.Count1));

else

iterRec.Add(newTuple<int,int,int>(iterRec.Count, iterRec[c1].Item3 + 1, Program.

watchHolder.Messages.Count1));

}

Vy´pis 5: Ukla´da´nı´ iteracı´ prˇi pouzˇitı´ Tuple

4.6.2.2 Ukla´da´nı´ iteracı´ prˇi paralelnı´m spusˇteˇnı´ Podobneˇ jako prˇi ukla´da´nı´ zpra´v do vy´stupnı´ho souboru je i zde pouzˇito seznamu s pozicemi zpra´v a seznamu s identifi- ka´tory procesu˚. Po ukoncˇenı´ vsˇech iteracı´ je zavola´na prˇetı´zˇena´ verze metodySingleRec, ktera´ pouzˇije stejne´ho serˇazovacı´ho algoritmu jako v prˇedchozı´ch prˇı´padech prˇi pra´ci se zpra´vami paralelnı´ho spousˇteˇnı´ a tyto jednotlive´ iterace pote´ ulozˇı´. V cyklu jsou take´

prˇida´ny polozˇky docomboBox.

4.6.3 Ulozˇenı´ iterace do souboru

Pokud je pouzˇita mozˇnost rozdeˇlenı´ procesu na jednotlive´ iterace, lze vyuzˇı´t i ulozˇenı´

konkre´tnı´ iterace neza´visle na zvolene´m nastavenı´, jak se majı´ vy´sledky ukla´dat. Pokud tedy uzˇivatel bude po skoncˇenı´ procesu˚ analyzovat jednotlive´ iterace, a bude potrˇebovat neˇkterou ulozˇit, mu˚zˇe tedy vyuzˇı´t te´to volby a manua´lneˇ ji ulozˇit za pouzˇitı´ tlacˇı´tkaSave.

Iterace bude ulozˇena pod definovany´m na´zvem a cestou spolecˇneˇ s konfiguracı´ prˇi jake´

byla spusˇteˇna.

4.7 Nacˇtenı´ vy´stupnı´ho souboru

Prˇi analy´ze jizˇ vygenerovane´ho vy´stupnı´ho souboru se mu˚zˇe vyskytnout potrˇeba jeho opeˇtovne´ graficke´ vizualizace. Tento proble´m rˇesˇı´ mozˇnost zpeˇtne´ho nacˇtenı´ a na´sledne´ho spusˇteˇnı´ pomocı´ funkceReplay. Do aplikace jsou tedy nacˇtena vsˇechna data ze souboru a tedy i ulozˇena´ nastavenı´. Pokud se zˇa´dne´ nastavenı´ v dane´m souboru nenacha´zı´, aplikace jej vytvorˇı´ podle toho nastavenı´, prˇi jake´m byl experiment spusˇteˇn – to se nacha´zı´ na zacˇa´tku vy´stupnı´ho souboru.

4.7.1 Rozdeˇlenı´ na jednotlive´ iterace

Aby byla zpeˇtna´ pra´ce s vy´sledky jesˇteˇ vı´ce optimalizova´na pro potrˇeby uzˇivatele, nabı´zı´

se mozˇnost rozdeˇlenı´ vygenerovany´ch zpra´v na jednotlive´ iterace. Uzˇivatel si tedy pote´

mu˚zˇe spustit bud’ vsˇechny vykonane´ iterace postupneˇ, v ra´mci jednoho spusˇteˇnı´Replay nebo kazˇdou jednotliveˇ. Podmı´nkou je zde to, zˇe musel by´t jizˇ drˇı´ve vykonany´ proces

(29)

spusˇteˇn vı´cena´sobneˇ. Da´le je nutne´, aby se v tomto souboru nacha´zely informacˇnı´ zpra´vy, ktere´ byly vygenerova´ny aplikacı´. Jedna´ se o zpra´vu o tom, zˇe byl proces spusˇteˇn (Process launch) a zˇe byl proces ukoncˇen (Process termination). Pokud je tato podmı´nka splneˇna, aplikace pomocı´ cyklicke´ho algoritmu rozdeˇlı´ zpra´vy na jednotlive´ iterace a ulozˇı´ je do comboBox, pomocı´ ktere´ho si je posle´ze uzˇivatel mu˚zˇe vybrat a prˇehra´t.

4.8 Genera´tor

Neˇkolikra´t byl jizˇ zmı´neˇn vstupnı´ soubor, ktery´ je potrˇebny´ pro spusˇteˇnı´ experimentu pomocı´ MRCV Tool. Jeho podrobnou definicı´ se zaby´va´ cela´ samostatna´ kapitola, a tak lze zde ve zkratce rˇı´ci, zˇe tento soubor ma´ spousty omezenı´ a pravidel, ktere´ je bezpod- mı´necˇneˇ nutno dodrzˇet pro jeho korektnı´ vytvorˇenı´ a na´sledneˇ tedy pouzˇitı´. I mala´ chyba v jeho syntaxi by mohla zpu˚sobit nepozˇadovany´ cˇi vu˚bec zˇa´dny´ chod testovane´ho expe- rimentu. Z teˇchto du˚vodu˚ byl do aplikace implementova´n samostatny´ genera´tor, ktery´

tvorbu vy´stupnı´ho souboru velice usnadnˇuje. Uzˇivateli se tedy naskytuje mozˇnost, jak jednoduchy´m zpu˚sobem vytvorˇit korektnı´ vstupnı´ soubor a pro jeho tvorbu mu stacˇı´ by´t sezna´men se za´kladnı´mi omezenı´mi tohoto souboru. Genera´tor je rozdeˇlen na dveˇ cˇa´sti, ve ktery´ch lze zada´vat potrˇebne´ parametry pro experiment. Nacha´zı´ se zde i trˇetı´ cˇa´st pro specifikaci na´zvy a cesty vy´stupnı´ho souboru.

Popisem jednotlivy´ch ovla´dacı´ch prvku˚ se zaby´va´ sekce o uzˇivatelske´m rozhranı´ a nenı´ zde tedy specifikova´no, jak tyto prvky vypadajı´ a jake´ jsou jejich vlastnosti. Tato cˇa´st se tedy zameˇrˇuje na zpu˚sob implementace tvorby samotne´ho souboru a pra´ci s jeho funkcemi. V cˇa´stech popisujı´cı´ch jednotlive´ funkcˇnı´ vlastnosti se prˇedpokla´da´, zˇe zpracova´vana´ data jsou v korektnı´m forma´tu podle specifikace dokumentacˇnı´ho XML souboru. Da´le zde nenı´ rˇesˇena prˇesna´ definice a omezenı´ tohoto souboru. Vlastnı´mi omezenı´mi genera´toru se zaby´va´ samostatna´ cˇa´st te´to kapitoly.

4.8.1 Za´hlavı´ pro vy´stupnı´ soubor

V te´to cˇa´sti se vyplnˇujı´ informace o experimentu samotne´m, ktere´ jsou posle´ze ulozˇeny do vy´stupnı´ho souboru. Lze zde vyplnit informace o na´zvu, verzi, autorovi, popis expe- rimentu a na´zev spousˇteˇcı´ho souboru. Vyplneˇnı´ vsˇech polı´ nenı´ za´vazne´ pro dalsˇı´ pouzˇitı´

prˇi testova´nı´, ale je vyzˇadova´n alesponˇ na´zev experimentu a spousˇteˇcı´ho souboru.

4.8.2 Parametry

Cˇa´st pro specifikaci je prˇehledneˇ rozlozˇena do trˇı´ karet podle typu parametru –Parameters, Sockets a Output. Graficke´ rozhranı´ je pro jednotlive´ cˇa´sti v za´kladu stejne´, ale lisˇı´ se v neˇkolika vlastnostech podle potrˇeby, jak majı´ by´t konkre´tnı´ parametry specifikova´ny.

Podle te´to specifikace je i odlisˇna´ i implementace pro prˇida´va´nı´ parametru˚ a jejich editaci.

4.8.3 Prˇida´nı´ parametru

Po vyplneˇnı´ potrˇebny´ch u´daju˚ parametru je potrˇeba tato data uchovat aby mohla by´t na´sledneˇ ulozˇena do souboru. Aby bylo mozˇno tato data co nejefektivneˇji zpracovat prˇi

(30)

generova´nı´ XML souboru, byly pro jejich ulozˇenı´ naimplementovane´ trˇi genericke´ kolekce ve forma´tuList < string[]>. Vsˇechny u´daje parametru jsou tedy prˇevedeny na datovy´

typ stringa ulozˇeny do pole tohoto typu. Aby bylo mozˇno da´le s parametry pracovat, jsou hodnoty ukla´da´ny v prˇesneˇ definovane´m a nemeˇnne´m porˇadı´. Jestlizˇe nenı´ vyplneˇn neˇktery´ z nepovinny´ch u´daju˚, je mı´sto neˇho ulozˇen pra´zdny´string. V prˇı´padeˇ, zˇe je pro parametr zvolen typenuma mu˚zˇe tedy jesˇteˇ obsahovat dalsˇı´ hodnoty, je cely´ vy´cˇet teˇchto prvku˚ ulozˇen na na´sledujı´cı´ mı´sta v poli. Jakmile jsou vsˇechny hodnoty ulozˇeny v poli, je toto pole vlozˇeno do seznamu a do seznamu v graficke´m rozhranı´ je prˇida´na polozˇka s na´zvem parametru.

1. 2. 3. 4. 5.

Parameters Name Switch Type Deafult Description

Sockets ID Name Type - -

Output ID Type Name - -

Tabulka 1: Porˇadı´ parametru˚ v poli v jednotlivy´ch typech

4.8.4 Zobrazenı´ parametru

Po vlozˇenı´ lze da´le vkla´dat nove´ parametry nebo upravovat ty stare´. Jak bylo rˇecˇeno, seznam parametru˚ je zobrazova´n v komponenteˇ uzˇivatelske´ho rozhranı´ a prˇi zvolenı´

jednoho parametru pomocı´ kliknutı´ na polozˇku seznamu jsou atributy tohoto seznamu zobrazeny v te´ cˇa´sti rozhranı´, ve ktere´ byly parametry vyplnˇova´ny. Aby bylo zabra´neˇno i trˇeba neu´myslne´mu zmeˇneˇnı´ dat, nelze tyto zobrazene´ u´daje editovat – k tomu lze vyuzˇı´t dalsˇı´ funkce, ktera´ je popsa´na nı´zˇe.

Pro zobrazova´nı´ atributu˚ je vyuzˇito toho, zˇe jednotlive´ parametry majı´ svu˚j jedinecˇny´

identifika´tor, ktery´m je jejich na´zev cˇi ID. Prˇi vy´beˇru parametru je z kolekce parametru vybra´no to pole, ktere´ ma´ na sve´m prvnı´m indexu stejnou hodnotu, jaka´ je hodnota zvolene´ polozˇky vybrane´ uzˇivatelem. Jakmile je toto pole zı´ska´no, jsou vsˇechny jeho polozˇky prˇevedeny z typustringna sve´ pu˚vodnı´ typy a jsou zobrazeny v uzˇivatelske´m rozhranı´.

Jako prˇı´klad je uvedena ta cˇa´st ko´du, kdy aplikace zpracova´va´ polozˇku na trˇetı´m mı´steˇ v poli – datovy´ typ parametru. Je zde videˇt prˇı´padna´ konverze na datove´ typyint,double aenum. V prˇı´padeˇenumjsou nacˇteny i vsˇechny hodnoty vy´cˇtove´ho typu a zobrazeny jako polozˇky v jine´ komponenteˇ graficke´ho rozhranı´.

switch(s[2]) {

case”int ” :

defaultNumeric.Value = Convert.ToInt32(s[3]);

break;

case”double”:

s [3] = s [3]. Replace(”.”, ” , ” ) ;

defaultNumeric.Value = Convert.ToDecimal(s[3]);

break;

case”enum”:

(31)

if(addParamButton.Enabled) casePanel.Enabled =true;

for (int i = 5; i <s.Length; i++) caseListBox.Items.Add(s[i]) ; if (caseListBox.Items.Count != 0)

defaultNumeric.Value = caseListBox.Items.Count1;

else

defaultNumeric.Value = 0;

break;

}

Vy´pis 6: Zobrazenı´ parametru

4.8.5 Prˇesunutı´ parametru

Parametry jsou zobrazeny a ulozˇeny v seznamu prˇesneˇ v tom porˇadı´, v jake´m budou vygenerova´ny do vy´stupnı´ho souboru. Toto porˇadı´ musı´ by´t stejne´ s porˇadı´m parametru˚

pro prˇı´kazovou rˇa´dku, podle ktery´ch je pak aplikace spusˇteˇna. Pokud je tedy zjisˇteˇno, zˇe porˇadı´ nenı´ korektnı´, je mozˇno jednotlive´ parametry prˇesouvat pomocı´ tlacˇı´tek. Prˇesun lze prove´st o jednu pozici smeˇrem nahoru nebo dolu˚.

4.8.6 Smaza´nı´ parametru

Pokud je vlozˇen parametr, ktery´ nema´ odpovı´dajı´cı´ atributy nebo je nadbytecˇny´, lze ho pomocı´ tlacˇı´tkaDeleteodstranit ze seznamu a nebude tedy ulozˇen do vy´stupnı´ho souboru.

4.8.7 Editace parametru

V prˇı´padeˇ, zˇe parametr nema´ spra´vneˇ zvolene´ atributy, je ho mozˇno jednodusˇe editovat.

K tomu stacˇı´ pouzˇı´t tlacˇı´tko pro editova´nı´, cˇı´mzˇ se v uzˇivatelske´m rozhranı´ zprˇı´stupnı´

u´prava vsˇech atributu˚ vcˇetneˇ vsˇech prvku˚ v prˇı´padeˇ typu enum. Po potrˇebne´ u´praveˇ je nutno tyto zmeˇny ulozˇit pomocı´ tlacˇı´tkaSave.

4.8.8 Generova´nı´ souboru

Jakmile jsou zvoleny vsˇechny vyzˇadovane´ parametry, lze prˇistoupit k ulozˇenı´ do XML souboru. Ke generova´nı´ je pouzˇita metodaGenerate, ktera´ jako vstupnı´ parametry ma´ trˇi kolekce List < string[] >obsahujı´cı´ zvolene´ parametry a jedno pole typu string. Toto pole obsahuje celkem deveˇt hodnot:

• 1-8 – informace o experimentu do za´hlavı´ souboru

• 6 – na´zev souboru

• 7 – cesta souboru

(32)

• 8 – cˇı´slo portu (v prˇı´padeˇ vyuzˇitı´ parametru˚Sockets)

• 9 – typ vy´stupnı´ch zpra´v

Tato metoda pouzˇı´va´ k vygenerova´nı´ instanci trˇı´dyXmlDocument s na´zvemxmlDoc, ktera´ prˇedstavuje XML dokument. V dalsˇı´m kroku je tomuto dokumentu prˇideˇlena XML deklarace a pote´ korˇenovy´ element. Elementu jsou prˇirˇazeni potomci prˇedstavujı´cı´ za´hlavı´

souboru a take´ dva dalsˇı´ elementyInputaOutput, ktere´ obsahujı´ jizˇ samotne´ parametry.

Po vytvorˇenı´ vsˇech uzlu˚ je pouzˇit jizˇ drˇı´ve pouzˇı´vany´ rekurzivnı´ algoritmus pro vytvorˇenı´

na´zvu a cesty souboru a dokument je vygenerova´n metodouSave.

4.8.8.1 Input Vyuzˇity jsou zde polozˇky z kolekcı´ obsahujı´cı´ch typyParametersaSockets.

Pro kazˇdou polozˇku je vytvorˇen jeden element, ktere´mu jsou prˇirˇazeny atributy, nebo je rodicˇem pro dalsˇı´ uzly prˇesneˇ podle definice vy´stupnı´ho souboru. Vsˇechny tyto polozˇky majı´ rodicˇovsky´ element – u typuParametersje to< cmdline >a v opacˇne´m prˇı´padeˇ zase

< sockets >. Jestlizˇe je vyuzˇitoSockets, ma´ tento element jako atribut cˇı´slo portu.

4.8.8.2 Output Pomocı´ trˇetı´ kolekce obsahujı´cı´ vy´stupnı´ parametry jsou zde vytvorˇeny pro jednotlive´ polozˇky elementy s atributy stejny´m zpu˚sobem jako v sekciInput.

4.8.9 Nacˇtenı´ souboru

Implementova´na je funkce pro nacˇtenı´ drˇı´ve vytvorˇene´ho souboru, cˇı´mzˇ je mozˇno upra- vovat jizˇ drˇı´ve vytvorˇene´ vstupnı´ soubory. Funkce pouzˇı´va´ metoduParseXml, ktera´ opeˇt vytvorˇı´ instanci trˇı´dyXmlDocumenta nacˇte do nı´ pomocı´ metodyLoadsoubor. Da´le me- toda vytvorˇı´ trˇi kolekce pro ukla´da´nı´ parametru˚ a pole appInfo. Tyto cˇtyrˇi prvky jsou stejny´ch typu˚ jako v prˇı´padeˇ ukla´da´nı´.

Po nacˇtenı´ souboru je vybra´n z dokumentu korˇenovy´ uzel a seznam uzlu˚, pro ktere´ je rodicˇem. Na za´kladeˇ na´zvu˚ uzlu˚ v tomto seznamu jsou jejich hodnoty ulozˇeny doappInfo hodnoty uzlu˚. Jestlizˇe majı´ uzly na´zevInputneboOutput, jedna´ se o rodicˇovske´ elementy pro parametry aplikace a jsou proto pouzˇity dalsˇı´ metody pro rozparserova´nı´.

4.8.9.1 Metody pro rozparserova´nı´ parametru˚ Aplikace pouzˇı´va´ celkem trˇi metody, jejichzˇ funkcˇnost je podobna´ a lisˇı´ se v rozdeˇlova´nı´ jednotlivy´ch uzlu˚ podle definice dane´ho typu parametru. Za´kladnı´ princip spocˇı´va´ ve vytvorˇenı´ kolekce, do ktere´ budou parametry ulozˇeny, vytvorˇenı´ instanceXmlNodeList, do ktere´ jsou vlozˇeny pomocı´ Xpath dotazu vsˇechny uzly pro dany´ typ. V na´sledujı´cı´ch krocı´ch jsou atributy teˇchto uzlu˚

rozdeˇleny podle specifikace dane´ho typu a vlozˇeny do pole typustring, ktere´ je prˇida´no do kolekce. Kolekce je pote´ vra´cena metodou. Slozˇitost algoritmu˚ pro rozdeˇlova´nı´ atributu˚

jednotlivy´ch uzlu˚ je odlisˇna´ podle omezenı´ parametru˚.

Na´sledujı´cı´ prˇı´klad takove´ho algoritmu je pouzˇit v prˇı´padeˇ typuParametersurcˇene´ho pro vstupnı´ parametry experimentu. Porˇadı´ prvku˚ v poli je stejne´ jako v prˇı´padeˇ pole u prˇida´nı´ atributu, jenzˇ je zna´zorneˇno v tabulce.

(33)

1. Je vytvorˇena kolekce pro parametry. Do seznamu uzlu˚paramNodes jsou vybra´ny uzly pomocı´ Xpath dotazu. Jestlizˇe seznam nenı´ nulovy´, je pomocı´ cyklu postupneˇ zpracova´n kazˇdy´ uzel.

2. Pro uzel je vytvorˇena kolekce vsˇech jeho atributu˚attrCola seznam podrˇı´zeny´ch uzlu˚

childList.

3. Da´le je vytvorˇeno polestrings na´zvemparamdo ktere´ho jsou ukla´da´ny jednotlive´

atributy a hodnoty uzlu. Na prvnı´ mı´sto v poli je ulozˇena hodnota z prvnı´ho uzlu vchildList– jedna´ se o na´zev parametru.

4. Pomocı´ cyklu jsou z attrCol do pole ukla´da´ny hodnoty jednotlivy´ch atributu˚ na mı´sto podle sve´ho na´zvu.

5. Pote´ je zjisˇteˇno, zda obsahujechildListdalsˇı´ uzel, ktery´ ma´ na´zevdescription. Pokud ano, je jeho vnitrˇnı´ text prˇida´n do pole. Jedna´ se o nepovinny´ uzel, a proto je zjisˇteˇno, zda ma´ spra´vny´ na´zev a jedna´ se prˇı´mo o tento typ uzlu.

6. V poslednı´ cˇa´sti je pomocı´ while cyklu oveˇrˇova´no, zda se v childList nevyskytujı´

jesˇteˇ dalsˇı´ uzly. Pokud ano, jedna´ se o prvky vy´cˇtove´ho typuenuma jsou prˇida´ny postupneˇ do pole param. Nakonec je cele´ toto pole vlozˇeno do kolekce, ktera´ je vy´stupnı´m parametrem metody.

List<string[]>parList =newList<string[]>();

XmlNodeList paramNodes = xmlDoc.SelectNodes(”application/input/cmdline/param”);

if (paramNodes.Count != 0)

foreach(XmlNode xinparamNodes) {

XmlAttributeCollection attrCol = x. Attributes ; XmlNodeList childList = x.ChildNodes;

int count = 3 + childList .Count;

string[] param =new string[count];

param[0] = childList [0]. InnerText;

if ( attrCol .Count != 0)

foreach(XmlAttribute att in attrCol ) {

if ( att .Name == ”switch”) param[1] = att .Value;

else if ( att .Name == ”type”) param[2] = att .Value;

else

param[3] = att .Value;

}

int a = 1;

if ( childList .Count>1 && childList [1]. Name == ”description”)

(34)

{

param[4] = childList [1]. InnerText;

a++;

}

int i = 5;

while( i <count) {

param[i] = childList [a ]. InnerText;

i ++;

a++;

}

parList .Add(param);

}

Vy´pis 7: Rozdeˇlenı´ parametru

4.8.10 Omezenı´

Z definice vy´stupnı´ho souboru vyply´va´, zˇe v nı´ vyskytnuvsˇı´ se parametry majı´ neˇkolik omezenı´, ktere´ je trˇeba dodrzˇet pro dosazˇenı´ korektnı´ho souboru. Teˇmto definicı´m je veˇnova´na cela´ kapitola, a proto je trˇeba zmı´nit zpu˚sob jejich implementace v genera´toru.

4.8.10.1 Omezenı´ prˇi vkla´da´nı´ a editaci parametru˚

• U datovy´ch typu˚enum, filea voidje zablokova´n ovla´dacı´ prvek pro nastavenı´ de- faultnı´ hodnoty.

• Prˇi zvolenı´ enum je povoleno pouzˇitı´ dalsˇı´ cˇa´sti graficke´ho rozhranı´ pro vlozˇenı´

vy´cˇtovy´ch prvku˚. V prˇı´padeˇ jiny´ch datovy´ch typu˚ je toto zneprˇı´stupneˇno.

• Pro int lze pouzˇı´t jako defaultnı´ hodnotu cele´ cˇı´slo, v prˇı´padeˇ double je ovla´dacı´

prvek zmeˇneˇn na mozˇnost vyuzˇitı´ cˇı´sla s desetinnou cˇa´rkou.

• Nelze ulozˇit parametr bez na´zvu nebo s na´zvem, ktery´ se jizˇ nacha´zı´ v seznamu.

Genera´tor kontroluje pomocı´String.IsNullOrWhiteSpacenejenom pra´zdny´ na´zev ale i mezery.

• Prˇi vla´da´nı´ typuenum musı´ tento typ obsahovat minima´lneˇ jednu vy´cˇtovou hod- notu. Vy´cˇtova´ hodnota nesmı´ by´t opeˇt bez na´zvu nebo se skla´dat z mezer.

4.8.10.2 Omezenı´ prˇi generova´nı´ souboru

• Je povinne´ vyplnit na´zev experimentu, spousˇteˇcı´ soubor, na´zev vy´stupnı´ho souboru a cestu. Jestlizˇe se zde jedna cˇi vı´ce hodnot nevyskytujı´, je zobrazena varovna´ zpra´va a generova´nı´ se nespustı´.

• Chybova´ zpra´va je zobrazena i v prˇı´padeˇ, zˇe nejsou vlozˇeny zˇa´dne´ hodnoty v sekcı´chOutputneboParameters.

(35)

4.9 Vizualizace

Za´kladem testova´nı´ spusˇteˇny´ch procesu˚ je vyuzˇitı´ vizualizace jejich generovany´ch zpra´v.

Pro tuto funkci je uzˇito neˇkolik komponent graficke´ho rozhranı´. Samotna´ vizualizacˇnı´

cˇa´st graficke´ho rozhranı´ aplikace se deˇlı´ na 4 cˇa´sti:

• Graf

• Pla´tno

• Konzole

• Tabulky

Aby bylo mozˇno generovana´ data v jednotlivy´ch komponenta´ch zobrazit, musı´ by´t zasˇkrtnuta volbaPlotv seznamu vy´stupnı´ch definic, ktere´ jsou zobrazeny do graficke´ho prvkudataGridView. Pro usnadneˇnı´ lze nastavit automaticke´ zobrazova´nı´ vsˇech definic.

Zobrazova´nı´ ve vsˇech vizualizacˇnı´ch cˇa´stech probı´ha´ automaticky ihned po obdrzˇenı´

zpra´vy. Graficke´ rozmı´steˇnı´ teˇchto prvku˚ je popsa´no i s uka´zkami v kapitole o graficke´m rozhranı´ a v prˇı´loze aplikace. Zde se nacha´zı´ popis za´kladnı´ funkcˇnosti i teˇch prvku˚, ktere´

se nale´zaly i v pu˚vodnı´ verzi aplikace a nebylo s nimi manipulova´no.

4.9.1 Graf

Jestlizˇe je datovy´ typ prˇijate´ zpra´vyintnebo double, je jejı´ hodnota zobrazena do grafu.

Tento graf je XY bodovy´. Osa X prˇedstavuje cˇas a Y hodnotu dane´ zpra´vy. Pokud je generova´no vı´ce druhu˚ zpra´v, jsou tyto barevneˇ odlisˇeny.

4.9.2 Pla´tno

Prˇi prˇijetı´ zpra´vy typu network jsou jejı´ hodnoty barevneˇ vykresleny na pla´tno. Tyto vy´sledky je mozˇno exportovat do prˇedem zvolene´ho forma´tu. Popisem te´to mozˇnosti se zaby´va´ dalsˇı´ kapitola.

4.9.3 Konzole

Cˇa´st pro konzolovy´ vy´stup. Jednotlive´ typy zpra´v jsou zde barevneˇ odlisˇeny:

Modra´ a zelena´ barva– zpra´vy generovane´ MRCV Tool.

Cˇerna´ barva– zpra´vy generovane´ spusˇteˇny´m experimentem.

Cˇervena´ barva– chybove´ zpra´vy.

Odkazy

Související dokumenty

Celkoveˇ vsˇak cı´tı´m, zˇe mi vysoka´ sˇkola dala slusˇne´ znalosti, ktere´ jsem prˇi te´to praxi vyuzˇil. 4.4

Jak jsem jizˇ zmı´nil v zada´nı´ tohoto u´kolu, prˇi na´vrhu architektury syste´mu NEPS se jizˇ pocˇı´talo s tı´m, zˇe by bylo vhodne´ mı´t mozˇnost logovat data

Ukla´da´nı´ konfigurace na externı´ me´dium (USB flash disk), omezenı´ cˇaste´ho za´pisu na flash disk, automaticke´ nacˇı´ta´nı´ konfigurace po startu, zmeˇna

Bouzˇel se jedna´ o prohleda´va´nı´ naslepo a i kdyzˇ algoritmus najde nejkratsˇı´ cestu, tak mu˚zˇe jesˇteˇ prohleda´vat da´l, nebo i kdyzˇ je blı´zko konecˇne´ho

Da´le je nutne´ pojmenovat za´lozˇku stejneˇ, jako se jmenuje za´lozˇka spusˇteˇna v programu BotAdmin, protozˇe prˇi nacˇı´ta´nı´ dat se z te´to za´lozˇky nacˇı´ta´

Na zobrazenı´ spojeny´ch grafu˚ vybrany´ch prˇa´tel byl aplikova´n PageRank a je dobrˇe viditelne´, zˇe nejdu˚lezˇiteˇjsˇı´m prvkem sı´teˇ je uzˇivatel, ktery´

Tato cˇa´st je veˇnova´na hlavneˇ na´vrhu databa´ze potrˇebne´ pro ukla´da´nı´ dat poskytova- ny´ch prostrˇednictvı´m aplikace pro editaci obsazenosti parkovisˇteˇ a

Jak jizˇ bylo zmı´neˇno vy´sˇe, pouzˇitı´m frameworku MonoGame se vy´voja´rˇ vystavuje nebez- pecˇı´, zˇe mu˚zˇe prˇi vy´voji narazit naprˇı´klad na vy´jimku,