• No results found

Diplomov´ a pr´ ace

N/A
N/A
Protected

Academic year: 2022

Share "Diplomov´ a pr´ ace"

Copied!
46
0
0

Loading.... (view fulltext now)

Full text

(1)

Adaptaˇ cn´ı mechanismus pro datamining a QA testov´ an´ı

Diplomov´ a pr´ ace

Studijn´ı program: N2612 – Elektrotechnika a informatika Studijn´ı obor: 1802T007 – Informaˇcn´ı technologie Autor pr´ace: Bc. Miroslav Nˇemec

Vedouc´ı pr´ace: Ing. Jiˇr´ı Jen´ıˇcek, Ph.D.

(2)

Adaptation mechanism for datamining and QA testing

Master thesis

Study programme: N2612 – Electrical Engineering and Informatics Study branch: 1802T007 – Information Technology

Author: Bc. Miroslav Nˇemec

Supervisor: Ing. Jiˇr´ı Jen´ıˇcek, Ph.D.

(3)
(4)
(5)

Prohl´ aˇ sen´ı

Byl jsem sezn´amen s t´ım, ˇze na mou diplomovou pr´aci se plnˇe vzta- huje z´akon ˇc. 121/2000 Sb., o pr´avu autorsk´em, zejm´ena § 60 – ˇskoln´ı d´ılo.

Beru na vˇedom´ı, ˇze Technick´a univerzita v Liberci (TUL) neza- sahuje do m´ych autorsk´ych pr´av uˇzit´ım m´e diplomov´e pr´ace pro vnitˇrn´ı potˇrebu TUL.

Uˇziji-li diplomovou pr´aci nebo poskytnu-li licenci k jej´ımu vyuˇzit´ı, jsem si vˇedom povinnosti informovat o t´eto skuteˇcnosti TUL;

v tomto pˇr´ıpadˇe m´a TUL pr´avo ode mne poˇzadovat ´uhradu n´aklad˚u, kter´e vynaloˇzila na vytvoˇren´ı d´ıla, aˇz do jejich skuteˇcn´e v´yˇse.

Diplomovou pr´aci jsem vypracoval samostatnˇe s pouˇzit´ım uveden´e literatury a na z´akladˇe konzultac´ı s vedouc´ım m´e diplomov´e pr´ace a konzultantem.

Souˇcasnˇe ˇcestnˇe prohlaˇsuji, ˇze tiˇstˇen´a verze pr´ace se shoduje s elek- tronickou verz´ı, vloˇzenou do IS STAG.

Datum:

Podpis:

1.6.2020

Bc. Miroslav Němec

(6)

Abstrakt

Tato diplomov´a pr´ace se zamˇeˇruje na problematiku editace, trans- formace, adaptace a verifikace velk´ych datov´ych sad z velk´eho poˇctu r˚uzn´ych zdroj˚u za ´uˇcelem automatizace proces˚u zpra- cov´avaj´ıc´ıch data z a pro data mining. Nastiˇnuje vyuˇzit´ı vlastn´ıch v´ypoˇctov´ych funkc´ı pro transformaˇcn´ı procesy a jednotliv´ych ˇreˇsen´ı pro adaptaˇcn´ı procesy. V´ystupem z pr´ace je funkˇcn´ı .NET aplikace.

Kl´ıˇcov´a slova: .NET, automatizace, verifikace, adaptace, trans- formace

Abstract

This diploma thesis is focused on editation, tranformation, adap- tation and verification problems of big data collected from nume- rous sources with the purpose of data processing automatization for and from data mining.It drafts the usage of self-implemented calcu- lation functions for transformation process and particular solutions for adaptation process. The result of the thesis is a functional .NET application.

Keywords: .NET, automatization, verification, adaptation, trans- formation

(7)

Podˇ ekov´ an´ı

M´e d´ıky patˇr´ı zadavatelsk´e firmˇe, jeˇz mi umoˇznila vstup do svˇeta anal´yzy webov´ych dat a re´aln´eho svˇeta programov´an´ı. Takt´eˇz patˇr´ı vedouc´ımu t´eto pr´ace doktoru Jiˇr´ımu Jen´ıˇckovi za neobvykl´y pohled na svˇet dospˇel´ych a jeho ˇcas a cenn´e rady.

(8)

Obsah

Seznam obr´azk˚u. . . 9

Seznam zkratek . . . 10

Uvod´ 11 1 Sezn´amen´ı s ekosyst´emem 12 1.1 Zad´an´ı aplikace . . . 12

1.2 Vstupn´ı data . . . 14

1.2.1 Zdroje, port´aly a pojiˇst’ovny . . . 14

1.2.2 Datab´azov´a tabulka dialog option . . . 15

1.2.3 Grupov´an´ı . . . 16

1.2.4 Datab´azov´a tabulka task . . . 16

1.2.5 HTML input . . . 16

1.2.6 Skuteˇcn´e hodnoty . . . 17

1.3 Softwarov´e ˇreˇsen´ı a moˇznosti . . . 18

1.3.1 Datab´azov´a ˇreˇsen´ı . . . 18

1.3.2 Naˇc´ıt´an´ı a ukl´ad´an´ı dat - Microsoft Excel. . . 19

1.3.3 Interakce s ostatn´ımi aplikace . . . 19

2 Funkcionalita aplikace 21 2.1 GUI . . . 21

2.1.1 Import a Export . . . 24

2.1.2 Sloˇzen´y identifik´ator . . . 26

2.1.3 Z´akladn´ı tok dat v aplikaci . . . 26

2.2 V´ypoˇcetn´ı funkce . . . 27

2.2.1 Podm´ınky . . . 28

2.2.2 Spr´ava funkc´ı . . . 29

2.2.3 Konvertovac´ı pravidla . . . 29

2.2.4 Presety. . . 31

2.2.5 Abstraktn´ı tˇr´ıda AMapping . . . 33

(9)

2.2.6 Interface IMapping . . . 33

2.2.7 Object FunctionsVariables . . . 34

2.2.8 FunctionController . . . 35

2.3 Adaptaˇcn´ı pravidla . . . 37

2.3.1 DateShift . . . 37

2.3.2 CheckDate . . . 39

2.3.3 VerifyCars . . . 39

2.3.4 Randomize . . . 40

2.4 Ostatn´ı funkcionalita aplikace . . . 40

3 Dokumentace 42

4 Z´avˇer 43

Pouˇzit´a literatura 45

(10)

Seznam obr´ azk˚ u

1.1 Porovn´an´ı webov´ych formul´aˇr˚u . . . 13

1.2 tabulka dialog option . . . 15

1.3 tabulka a variable types . . . 17

1.4 Vyplnˇen´y formul´aˇr . . . 17

1.5 Master dialog v DB . . . 17

1.6 Konkr´etn´ı dialog v DB . . . 18

1.7 Datov´y tok veˇsker´ych dat aplikacemi . . . 20

2.1 GUI aplikace EditTool . . . 23

2.2 Exportovan´a data . . . 24

2.3 Excel dropdown . . . 25

2.4 Tok dat aplikac´ı Edittool . . . 26

2.5 Zjednoduˇsen´y UML diagram funkc´ı a jejich tabulek . . . 27

2.6 Uk´azka importov´an´ı funkc´ı. . . 29

2.7 tabulka dialog option convertor . . . 30

2.8 Digram rekurzivn´ıho vol´an´ı v´ypoˇctu z´avisl´ych group . . . 36

2.9 Nekonzistentnost dat pˇri posunut´ı datumu sjedn´an´ı pojiˇstˇen´ı . . . 37

2.10 Rovnost datumov´eho rozd´ılu vstupn´ıch a v´ystupn´ıch dat pˇri dodrˇzen´ı adaptaˇcn´ıch pravidel . . . 38

(11)

Seznam zkratek

DB Datab´aze

Group Dialog question group Option Dialog option

GUI Graphical user interfaces

(12)

Uvod ´

Tato diplomov´a pr´ace vznikala ve firmˇe zamˇeˇruj´ıc´ı se na zpracov´an´ı a anal´yzu webov´ych dat, konkr´etnˇe na anal´yzu pojiˇstˇen´ı automobil˚u a motocykl˚u, napˇr´ıklad pro novinov´e ˇcl´anky ˇci internetov´e porovn´avaˇce. Firma posledn´ıch nˇekolik let in- vestuje velk´e ´usil´ı do automatizace veˇsker´ych proces˚u. Vzhledem k rozs´ahlosti dat a jejich struktur je vˇsak v prvn´ı ˇradˇe d˚uleˇzit´e pochopit jednotliv´e souvislosti a z´akonitosti, kter´ymi se tato data ˇr´ıd´ı. I pˇres snahu unifikovat vstupn´ı data, jeˇz poch´azej´ı z des´ıtek r˚uzn´ych zdroj˚u a slouˇz´ı k mnoha r˚uzn´ym ´uˇcel˚um, jsou datab´azov´e struktury rozs´ahl´e a kv˚uli nest´alosti dat je tˇreba co moˇzn´a nejv´ıce autonomn´ıho zpracov´an´ı. Veˇsker´y v´yvoj automatizaˇcn´ıch softwar˚u prob´ıh´a v pln´em nasazen´ı pˇri vykon´av´an´ı bˇeˇzn´e ˇcinnosti firmy. V´yvoj aplikac´ı proto postupuje minoritn´ımi kroky vpˇred tak, aby integrace nov´ych souˇc´ast´ı neohrozila analytick´y v´ystup.

Existuj´ıc´ı aplikace v zadavatelsk´e spoleˇcnosti se staraj´ı o automatizaci z´ısk´av´an´ı webov´ych dat, jejich katalogizaci, analytickou ˇcinnost, popˇr´ıpadˇe o vzd´alen´e ˇr´ızen´ı tˇechto ˇcinnost´ı. V rozsahu dat, se kter´ymi firma pracuje, je velice n´aroˇcn´a jak´akoli editace, popˇr´ıpadˇe transformace dat a jejich verifikov´an´ı. Z toho vypl´yv´a mal´a v´ykonnost cel´eho syst´emu, jelikoˇz v´ykon je omezov´an mnoˇzstv´ım vstupn´ıch dat.

Viz´ı t´eto pr´ace je vytvoˇren´ı aplikace, jeˇz zrychl´ı proces editace velk´eho mnoˇzstv´ı nesourod´ych a chaotick´ych dat. Toho by mˇelo b´yt doc´ıleno implementac´ı excel-like ˇreˇsen´ı, popˇr´ıpadˇe exportu a importu zpracovan´ych dat pr´avˇe do aplikace Excel. Ke zrychlen´ı a pˇredevˇs´ım zjednoduˇsen´ı procesu doposavad ruˇcnˇe tvoˇren´ych a edito- van´ych dat by tak´e mˇely pomoci transformaˇcn´ı funkce, kter´e umoˇzn´ı ze z´akladn´ıch dat z´ıskat obt´ıˇznˇe zjistiteln´e informace. K tomu by mˇely slouˇzit nadefinovan´e para- metrick´e v´ypoˇcetn´ı funkce uloˇzen´e v datab´azi, kter´e vzniknou jako souˇc´ast aplikace.

Zajiˇstˇen´ı aktu´alnosti by mˇela dopomoci adaptaˇcn´ı ˇc´ast aplikace, jeˇz by mˇela umoˇznit verifikovan´e posouv´an´ı datum˚u a dalˇs´ıch dat s nimi souvisej´ıc´ıch.

(13)

1 Sezn´ amen´ı s ekosyst´ emem

Veˇsker´a data, kter´a jsou pouˇzita v t´eto pr´aci, jsou fiktivn´ı nebo jsou to data vlastn´ı, popˇr´ıpadˇe pouze ilustrativn´ı. ˇZ´adn´y z uveden´ych pˇr´ıklad˚u nen´ı konkr´etn´ı a veˇsker´a podobnost je n´ahodn´a. Vzhledem k bezpeˇcnostn´ı politice firmy a know-how uˇzit´eho pˇri v´yvoji aplikace Edittool jsou z pr´ace vˇedomˇe vyjmuty nˇekter´e konkr´etn´ı infor- mace, kter´e jsou vˇsak v dostateˇcn´e m´ıˇre pops´any nebo nahrazeny ilustrativn´ımi pˇr´ıklady tak, aby nedoˇslo k poˇskozen´ı ˇz´adn´e ze z´uˇcastnˇen´ych stran.

S ohledem na multin´arodnost firmy, poˇc´ınaje cel´ym t´ymem a konˇce zpracov´avan´ymi daty, je mnohdy n´azvoslov´ı datab´azov´ych tabulek i tˇr´ıd a metod, popˇr´ıpadˇe promˇenn´ych, shlukem ˇcesk´ych, anglick´ych a nˇemeck´ych n´azv˚u. Vzhledem k zabˇehlosti tˇechto n´azv˚u si dovoluji ponechat je v tˇechto podivn´ych form´ach. Ze stejn´eho d˚uvodu bu- dou v n´asleduj´ıc´ım textu uˇz´ıv´any n´azvy a spojen´ı, kter´a mohou odporovat bˇeˇzn´emu smyslu uˇzit´ı, veˇsker´e tyto v´yjimky vˇsak budou dostateˇcnˇe pops´any a definov´any.

Vzhledem ke ˇspatn´e rozliˇsitelnosti dat (poˇc´ıtaˇcov´a data) a dat (ˇcasov´y ´udaj) v ˇcesk´em jazyce (na rozd´ıl od angliˇctiny) je pro vˇetˇs´ı pˇrehlednost cel´eho dokumentu vˇedomˇe uˇz´ıv´ano nespr´avn´eho tvaru ”datumy”a ostatn´ıch pˇr´ısluˇsn´ych tvar˚u. Pros´ım t´ımto ˇcten´aˇre o pochopen´ı a shov´ıvavost pˇri ˇcten´ı n´asleduj´ıc´ıch ˇr´adk˚u.

1.1 Zad´ an´ı aplikace

Zad´an´ı aplikace nen´ı jednotn´e, ucelen´e a mnohdy ani zcela jasn´e. Nejvˇetˇs´ı d˚uraz byl kladen na konzistentnost v´ysledk˚u, rychlost v´ypoˇct˚u a modul´arnost v tom ohledu, aby aplikace byla funkˇcn´ı v co nejbliˇzˇs´ım term´ınu, pˇrestoˇze s minimem funkc´ı, kter´e jsou pˇrid´av´any v pr˚ubˇehu cel´eho procesu.

Tato aplikace vznik´a od roku 2015 a je ps´ana v jazyce C#. Byla ˇc´asteˇcnˇe vy- stavˇena na jiˇz existuj´ıc´ıch datab´azov´ych tabulk´ach a integrov´ana do cel´eho eko- syst´emu. Veˇsker´a ˇreˇsen´ı jsou v´ysledkem m´e pr´ace. Zad´an´ı a integrace cel´e aplikace pak prob´ıhalo ve spolupr´aci s hlavn´ım program´atorem, kter´y dohl´ıˇz´ı na kompati- bilitu jednotliv´ych aplikac´ı a poskytuje znalosti ohlednˇe datab´aze, a managerem

(14)

firmy, jehoˇz pˇredstavy a know-how byly implementov´any v aplikaci. V pr˚ubˇehu let byla aplikace tˇrikr´at majoritnˇe pˇreps´ana a v budoucnu se nevyhne dalˇs´ı obmˇenˇe.

V prvn´ı vlnˇe se jednalo o jakoukoli automatizaci, kterou dok´aˇzeme implementovat.

O automatizaci se ve firmˇe pokouˇseli nˇekolik pˇredchoz´ıch let za pomoc´ı r˚uzn´ych n´astroj˚u a programovac´ıch jazyk˚u, pokaˇzd´e vˇsak ne´uspˇeˇsnˇe. Aˇz do zaˇc´atku v´yvoje t´eto aplikace tedy veˇsker´a ˇcinnost t´ykaj´ıc´ı se vzniku nov´ych dat prob´ıhala ruˇcnˇe s dopomoc´ı n´astroj˚u jako je Microsoft Excel. V tomto reˇzimu byla firma schopna zpracovat jednotky menˇs´ıch datov´ych sad dennˇe.

Stˇeˇzejn´ım bodem zad´an´ı bylo vytvoˇrit aplikaci, kter´a bude umˇet data typu A z kolekce subjektu Y pˇrev´est na data typu A pro kolekci subjektu Z.

Budeme-li se bavit napˇr´ıklad o pojiˇstˇen´ı automobil˚u, pˇredstavme si tyto kolekce jako vstupn´ı data webov´ych formul´aˇr˚u A a B pojiˇst’oven Y a Z. Veˇsker´a data jsou pak uloˇzena v datab´azi v tabulce D. Tato datab´azov´a tabulka sdruˇzuje vˇsechna vstupn´ı data rozˇrazen´a pomoc´ı vazebn´ıch tabulek a ciz´ıch kl´ıˇc˚u. Kaˇzd´y subjekt pak pro vstupn´ı data ot´azky O1 pouˇz´ıv´a r˚uzn´e n´azvy ˇci oznaˇcen´ı a tak´e jej´ı vstupn´ı data se mohou liˇsit, jak je vidˇet na obr´azku 1.1, kde vid´ıme ´uvodn´ı str´anky dvou pojiˇst’oven s prvn´ımi str´ankami jejich formul´aˇr˚u. Datab´azov´a entita pro nalezen´ı ˇci vyplnˇen´ı SPZ bude m´ıt zajist´e jin´e koordin´aty, jeˇz se pˇrinejmenˇs´ım budou liˇsit textem ot´azek, str´ankou, na kter´e se vyskytuj´ı, hlaviˇckou ˇci typem dan´eho prvku.

Pr´avˇe tyto datab´azov´e entity je potˇreba nav´azat takov´ym zp˚usobem, kter´y bude korespondovat s jiˇz vytvoˇren´ymi a uˇz´ıvan´ymi tabulkami, a umoˇzn´ı tak pˇreveden´ı dat subjektu Y na subjekt Z.

(a) Webov´y formul´aˇr A

(b) Webov´y formul´aˇr B Obr´azek 1.1: Porovn´an´ı webov´ych formul´aˇr˚u

(15)

Subjekty se dˇel´ı na hlavn´ı subjekt, tzv. master, a subjekty generovan´e, tzv.

klony. Master pak vznik´a pouˇzit´ım formul´aˇre hlavn´ıho zdroje, kter´y je rozˇs´ıˇren o dalˇs´ı informace, kter´e aplikace dopoˇc´ıt´av´a tak, aby pˇrevod mezi subjektem masteru a jednotliv´ymi klony byl co nejrychlejˇs´ı a nepouˇz´ıval rozs´ahl´e a sloˇzit´e v´ypoˇcty.

Vzhledem k poˇctu klon˚u, kter´e se pohybuj´ı v ˇr´adu des´ıtek, je toto ˇz´adouc´ı.

C´ılem t´eto aplikace nen´ı mapov´an´ı jednotliv´ych formul´aˇr˚u, pouze uˇzit´ı jejich dat. Je proto d˚uleˇzit´e pouˇz´ıvat v co nejvˇetˇs´ı m´ıˇre data z datab´aze a vyhnout se uˇzit´ı napevno zak´odovan´ych (hard-coded) specifikac´ı. Valn´a vˇetˇsina k´odu proto mus´ı b´yt psan´a parametricky, tak, aby aplikace dok´azala reagovat na zmˇeny proveden´e v datab´azi, nebo v ide´aln´ım pˇr´ıpadˇe, aby takov´e informace v˚ubec nepotˇrebovala.

1.2 Vstupn´ı data

Vstupn´ı data jsou smˇesic´ı dat, jejichˇz pˇresn´y form´at ani struktura nejsou definov´any.

Veˇsker´e zaˇrazen´ı dat prob´ıh´a za pomoci ostatn´ıch intern´ıch n´astroj˚u firmy. Vstupn´ı data jsou ˇc´asteˇcnˇe unifikov´ana pomoc´ı n´ıˇze popsan´ych datab´azov´ych tabulek (viz 1.2), nad jejich vstupn´ım form´atem a strukturou dat vˇsak nem´ame ˇz´adnou kontrolu.

Z toho vypl´yv´a rozmanitost a do jist´e m´ıry chaotiˇcnost nˇekter´ych n´ıˇze popsan´ych postup˚u, vˇse ve snaze doc´ılit co nejpˇresnˇejˇs´ıch v´ysledk˚u v glob´aln´ım mˇeˇr´ıtku.

Samotn´a data jsou strukturov´ana do nˇekolika tabulek, z nichˇz nejd˚uleˇzitˇejˇs´ımi jsou tabulky dialog option, dialog question group a jejich vazebn´ı tabulka dialog question group ma dialog option, kde se nach´azej´ı samotn´a vstupn´ı data, a n´aslednˇe tabulky dialog, task a vstupni zdroj ma dialog default, kter´e sdruˇzuj´ı kolekce, zde naz´yvan´e dialogy, jednotliv´ych dialog option pro dan´y formul´aˇr, potaˇzmo dan´e konkr´etn´ı pojiˇstˇen´ı.

1.2.1 Zdroje, port´ aly a pojiˇ st’ovny

Subjekty, nebo-li zdroje, port´aly ˇci pojiˇst’ovny, maj´ı v cel´em ekosyst´emu v´yznamnou roli. Ke kaˇzd´emu subjektu, kter´y je zpracov´av´an, je pˇristupov´ano pr´avˇe dle jeho zaˇrazen´ı. Pro zdroje a port´aly je ˇz´adouc´ı jin´e chov´an´ı neˇzli pro pojiˇst’ovny. Proto i kaˇzd´y z tˇechto typ˚u subjekt˚u m´a svou vlastn´ı tabulku. Pro naˇs´ı aplikaci vˇsak postaˇc´ı jednotn´e pojmenov´an´ı, a to pr´avˇe subjekty.

(16)

1.2.2 Datab´ azov´ a tabulka dialog option

Tabulka dialog option na obr´azku 1.2 uchov´av´a data jednotliv´ych ot´azek jednot- liv´ych formul´aˇr˚u. Toto se dˇel´ı na dvˇe ˇc´asti, prvn´ı jsou kolekce dat, kter´e se vyznaˇcuj´ı nastaven´ım parametru used na 0 a z´aroveˇn totoˇzn´ymi hodnotami ve sloupeˇcc´ıch id dialog option a id dialog option base. Id dialog option base je vazbou na tuto samou tabulku, v tomto pˇr´ıpadˇe na tyto stejn´e entity, kter´e jsou tzv. hlavn´ım dialogem dan´eho zdroje. Jsou to data, ve kter´ych nalezneme pouze to, co vid´ıme pˇri naˇcten´ı webov´eho formul´aˇre, bez toho, aniˇz by do nich bylo zasaˇzeno ˇclovˇekem, tud´ıˇz zde nejsou ˇz´adn´e vstupn´ı hodnoty. Tyto dialogy jsou alfou omegou a obsahuj´ı vˇsechny moˇznosti, kter´e dan´y webov´y formul´aˇr sk´yt´a.

Obr´azek 1.2: tabulka dialog option

Druhou ˇc´ast´ı funkce t´eto tabulky je uchov´av´an´ı jiˇz konkr´etn´ıch dialog˚u. Kaˇzd´a entita je pak pomoc´ı id dialog option base sv´az´ana se svou mateˇrskou entitou. Je v pl´anu pˇrepracovat tyto vazby tak, aby konkr´etn´ı entity dialog˚u mˇely svou vlastn´ı

(17)

tabulku, kter´a bude zahrnovat pouze vazbu na mateˇrskou entitu, svou vlastn´ı re´alnou hodnotu, id dialog, popˇr´ıpadˇe nˇekolik dalˇs´ıch parametr˚u, kter´e jsou potˇreba pro chod cel´eho ekosyst´emu. Bohuˇzel v ˇcase vytv´aˇren´ı aplikace nebylo moˇzn´e prov´est tento pˇrepis, tud´ıˇz je cel´a konstrukce ponˇekud kostrbat´a.

Vazby mezi entitami a jejich mateˇrsk´ymi entitami jsou jak´ymsi prvn´ım krokem k pˇreps´an´ı t´eto datab´azov´e ˇc´asti a vˇetˇsina dat potˇrebn´ych v aplikaci je pomoc´ı vazby pˇreb´ır´ana z mateˇrsk´e entity tak, jak by tomu mˇelo b´yt po pˇreps´an´ı.

1.2.3 Grupov´ an´ı

Tabulky obsahuj´ıc´ı informace o group´ach pro n´as nejsou aˇz tak zaj´ımav´e, podstatn´e vˇsak je pochopit smysl grupov´an´ı. Groupou nazvˇeme jeden webov´y prvek se vˇsemi jeho moˇznostmi. Textov´y prvek obsahuje pr´avˇe jednu dialog option. Radia obsahuj´ı nejˇcastˇeji dvˇe aˇz tˇri moˇznosti. Select-one obsahuje jednu a v´ıce moˇznost´ı. Dalˇs´ı prvky, jako napˇr´ıklad number, tel, info a button, jsou pro n´as zaj´ımav´e pouze v tom ohledu, ˇze jsou povaˇzov´any za textov´e. V´ıce se doˇcteme v kapitole 1.2.5.

Vazby jednotliv´ych dialog option na jejich groupy nalezneme ve vazebn´ı tabulce dialog question group ma dialog option.

Kaˇzd´y jeden dialog m˚uˇze obsahovat pouze jednu aktivn´ı (used = 1) dialog option v jedn´e groupˇe. S variantou multi-select jsme se do souˇcasn´e doby nesetkali, proto nach´az´ı-li se v jedn´e groupˇe v´ıce used prvk˚u, nˇekter´y z mechanism˚u v pr˚ubˇehu cel´eho procesu nepracoval spr´avnˇe.

1.2.4 Datab´ azov´ a tabulka task

Tabulka task obsahuje veˇsker´e nastaven´ı potˇrebn´e k bˇehu dalˇs´ıch aplikac´ı v eko- syst´emu. Smyslem task˚u je udrˇzet st´alou informaci o kolekci dialog option pomoc´ı dialogu, kter´y tabulka task obsahuje jako ciz´ı kl´ıˇc. Dialogy se v ˇcase mohou mˇenit spoleˇcnˇe s jejich kolekcemi, avˇsak task konkr´etn´ıho nastaven´ı a sdruˇzen´eho identi- fik´atoru z˚ust´av´a (viz 2.1.2).

1.2.5 HTML input

Chov´an´ı kaˇzd´e groupy je ovlivnˇeno jej´ım typem. Tento typ je pˇr´ımo odvozen od typ˚u HTML input˚u. K uchov´an´ı tˇechto pravidel slouˇz´ı tabulka a variable types na obr´azku 1.3. D˚uleˇzit´ymi sloupeˇcky jsou sloupeˇcky type, is handled as text, type of return, popˇr´ıpadˇe convert ja nein. Hodnota sloupeˇcku type urˇcuje typ

(18)

prvku (groupy a dialog option), hodnota is handled as text urˇcuje, je-li prvek povaˇzov´an za textov´y, a hotnota sloupeˇcku type of return urˇcuje, kter´a hodnota se m´a pˇri zob- razen´ı dan´e dialog option uk´azat. Jedn´a se o hodnoty z tabulky dialog option, a to bud’ radio text nebo value.

Obr´azek 1.3: tabulka a variable types

1.2.6 Skuteˇ cn´ e hodnoty

Na obr´azku1.4 vid´ıme vyplnˇen´e prvn´ı dva prvky formul´aˇre. Prvn´ım je zvolen´ı typu zad´av´an´ı vozidla pomoc´ı SPZ. Druh´ym prvkem je zadan´a SPZ.

Obr´azek 1.4: Vyplnˇen´y formul´aˇr

Na obr´azku 1.5 vid´ıme, jak by zjednoduˇsenˇe vypadal master dialog pro tento port´al. Na obr´azku 1.6 lze vidˇet, jak by vypadal re´aln´y dialog tohoto konkr´etn´ıho zadan´eho formul´aˇre.

Obr´azek 1.5: Master dialog v DB

(19)

Obr´azek 1.6: Konkr´etn´ı dialog v DB

1.3 Softwarov´ e ˇ reˇ sen´ı a moˇ znosti

Vzhledem k zaˇcleˇnov´an´ı aplikace do jiˇz bˇeˇz´ıc´ıho procesu a zabˇehl´ych ˇreˇsen´ı firmy bylo ˇz´adouc´ı uˇzit´ı stejn´ych softwarov´ych ˇreˇsen´ı, kter´a jiˇz byla pouˇz´ıv´ana v ostatn´ıch aplikac´ıch firmy.

1.3.1 Datab´ azov´ a ˇ reˇ sen´ı

Firma ke katalogizaci sv´ych dat uˇz´ıv´a relaˇcn´ı datab´aze MySQL z bal´ıˇckuXAMPP1. Vzhledem k licenˇcn´ı politice tohoto ˇreˇsen´ı, jej´ımu v´ykonu a jiˇz implementovan´ym ˇreˇsen´ım bylo v t´eto pr´aci nav´az´ano na tot´eˇz.

Nejˇcastˇeji uˇz´ıvan´ym ˇreˇsen´ım z pohledu pˇr´ıstup˚u k datab´azi je vyuˇzit´ı ˇcist´ych SQL dotaz˚u a insert˚u (MySQL Connector2) ve spojen´ı s Entity Frameworkem verze 6 (d´ale EF6, viz n´ıˇze). Toto spojen´ı se uk´azalo b´yti vhodn´ym z hlediska rychlosti ˇcist´eho SQL (napˇr´ıklad pˇri parametrizovan´ych SQL insertech ˇci naˇc´ıt´an´ı velk´eho mnoˇzstv´ı dat) a jednoduch´e implementace a snadnosti ladˇen´ı EF6, vˇcetnˇe objektovˇe relaˇcn´ıho zobrazen´ı datab´azov´ych entit pro pohodlnˇejˇs´ı zpracov´an´ı veˇsker´ych dat.

Okrajov´ym ˇreˇsen´ım je Telerik Open Acces (viz n´ıˇze), kter´y byl vyuˇzit pro v´yvoj pouze jedn´e aplikace a kter´y d´ıky sv´ym licenˇcn´ım podm´ınk´am nepˇripad´a nad´ale v

´ uvahu.

1. MySQL

”MySQL je relaˇcn´ı datab´azov´y syst´em s otevˇren´ym zdrojov´ym k´odem zaloˇzen´y na SQL. Byl navrˇzen a optimalizov´an pro webov´e aplikace a m˚uˇze bˇeˇzet na libovoln´e platformˇe. Jak se v souvislosti s rozvojem internetu objevily nov´e a odliˇsn´e poˇzadavky na datab´azi, MySQL se stala obl´ıbenou platformou pro webov´e v´yvoj´aˇre a webov´e aplikace. Protoˇze je navrˇzena tak, aby zpracov´avala miliony dotaz˚u a tis´ıce transakc´ı, je datab´aze MySQL obl´ıbenou volbou pro elektronick´e obchody, kter´e potˇrebuj´ı zajiˇst’ovat hromadn´e penˇeˇzn´ı transakce.

Prim´arn´ım rysem MySQL je flexibilita na vyˇz´ad´an´ı.”[1]

1Dostupn´e z: https://www.apachefriends.org/index.html

2Dostupn´e z: https://www.mysql.com/products/connector/

(20)

2. Enity Framework 6

”Enity Framework 6 (EF6) je vyzkouˇsen´y a testovan´y objektovˇe-relaˇcn´ı Ma- povaˇc (O/RM) pro .NET s mnoha roky v´yvoje a stabilizac´ı funkc´ı. EF6 v/RM sniˇzuje nesoulad mezi relaˇcn´ımi a objektovˇe orientovan´ymi svˇety a umoˇzˇnuje v´yvoj´aˇr˚um ps´at aplikace, kter´e pracuj´ı s daty uloˇzen´ymi v relaˇcn´ıch datab´az´ıch pomoc´ı objekt˚u .NET se siln´ymi typy, kter´e pˇredstavuj´ı dom´enu aplikace, a eliminuj´ı nutnost velk´e ˇc´asti k´odu nutn´e k pˇr´ıstupu k dat˚um, kter´e obvykle potˇrebuj´ı zapisovat.”[2]

3. Telerik Data Access

”Telerik Open Access, respektive Telerik Data Access je n´astroj, kter´y podporuje v´yvoj softwarovˇe orientovan´ych softwarov´ych aplikac´ı. N´astroj Telerik Data Access je zamˇeˇren na ˇreˇsen´ı nesouladu objektovˇe-relaˇcn´ıch impedanc´ı.”[3]

1.3.2 Naˇ c´ıt´ an´ı a ukl´ ad´ an´ı dat - Microsoft Excel

Valn´a ˇc´ast dat zpracov´avan´a aplikac´ı je exportov´ana do Excelu, pˇresnˇeji do form´atu .xlsx. .xlsx je form´at dat spoleˇcnosti Microsoft vyuˇz´ıvan´y v Microsoft Excel 2007 a novˇejˇs´ıch. Byl zvolen pro jeho aktu´alnost. Je bˇeˇzn´ym v´ystupn´ı form´atem pro data z Microsoft Excel. Pro import i export dat je vyuˇz´ıv´ano doplˇnkov´eho bal´ıˇcku EPPlus, jenˇz umoˇzˇnuje rychlou a efektivn´ı pr´aci s daty a je rovnˇeˇz zabˇehl´ym ˇreˇsen´ım ve firmˇe.

Tento doplnˇek je vhodn´y pˇredevˇs´ım pro importov´an´ı dat, kde je lepˇs´ım ˇreˇsen´ım neˇz ofici´aln´ı knihovna Microsoft Interop Excel. Ta se ovˇsem uk´azala jako lepˇs´ı moˇznost pro exportov´an´ı dat. Ani jedno ˇreˇsen´ı nen´ı optim´aln´ı, jejich spojen´ım vˇsak vnik´a uspokojiv´e ˇreˇsen´ı pro import a export dat. Tento postup je ve firmˇe bˇeˇzn´ym ˇreˇsen´ım a alternativy k tˇemto ˇreˇsen´ım se hledaj´ı jen velmi tˇeˇzko.

1.3.3 Interakce s ostatn´ımi aplikace

Vzhledem k prov´azanosti cel´eho ekosyst´emu bylo nutn´e ˇc´asteˇcn´e ˇci ´upln´e propo- jen´ı aplikace Edittool a ostatn´ıch aplikac´ı. Aˇckoli se nejedn´a o hlavn´ı probl´em t´eto pr´ace, je dobr´e zm´ınit, jak toho bylo doc´ıleno. Aplikace Edittool implementuje nˇekolik dalˇs´ıch projekt˚u. Prvn´ı projektem je projekt zajiˇst’uj´ıc´ı komunikaci s tzv.

TaskManagerem. To umoˇzˇnuje spouˇstˇet aplikaci Edittool ve stavu klienta, coˇz umoˇzˇnuje vzd´alen´e vyuˇz´ıv´an´ı hlavn´ı funkcionality aplikace. Implementace probˇehla pro hlavn´ı ˇc´ast, tedy pro generov´an´ı dat. Dalˇs´ım implementovan´ym projektem je projekt ovˇeˇruj´ıc´ı aktu´alnost datab´azov´ych dat pro automobily. Tento projekt v sobˇe

(21)

zahrnuje strojov´e ovl´ad´an´ı prohl´ıˇzeˇce Firefox pomoc´ı automatizaˇcn´ıho softwaru Se- lenium. Bylo tedy nutn´e sezn´amit se a pochopit vˇsechny v´yˇse zm´ınˇen´e softwary tak, aby jejich implementace probˇehla spr´avnˇe. Vˇse dle dokumnecace k aplikaci WinfoBot [4]. Pro pochopen´ı vˇsech souvislost´ı aplikac´ı bylo mimo jin´e zapotˇreb´ı sezn´amit se s data miningem [5]. Pro lepˇs´ı pochopen´ı propojen´ı aplikac´ı a jejich ˇcinnost´ı poslouˇz´ı obr´azek1.7.

Obr´azek 1.7: Datov´y tok veˇsker´ych dat aplikacemi

(22)

2 Funkcionalita aplikace

2.1 GUI

Prvn´ım hlavn´ım ´ukolem, kter´y musela aplikace splˇnovat, bylo importov´an´ı a expor- tov´an´ı dat, potaˇzmo zobrazov´an´ı dat. Toto bylo ˇreˇseno pomoc´ı grafick´eho rozhran´ı (na obr´azku 2.1), kter´e umoˇzn´ı importovat a exportovat zvolen´a data do excelu a z´aˇroveˇn data zobraz´ı v excel-like komponentˇe.

V horn´ı ˇc´asti aplikace vˇcervenˇe oznaˇcen´e sekci 1 se nach´azej´ı jednotliv´e z´aloˇzky aplikace. Aktu´alnˇe zobrazen´a je z´aloˇzka Control. Funkce nˇekter´ych dalˇs´ıch z´aloˇzek bude pops´ana v jednotliv´ych kapitol´ach d´ale. Na aktu´aln´ı z´aloˇzce Control se nach´az´ı hlavn´ı nastaven´ı aplikace. V zelenˇe oznaˇcen´e sekci 2 se nach´az´ı skupina radio but- ton˚u, kter´e rozhoduj´ı o vyhled´avac´ım algoritmu exportovan´ych dat. V tomto pˇr´ıpadˇe je aplikace nastavena nejbˇeˇznˇejˇs´ım zp˚usobem, tedy zad´av´an´ım task˚u. Ty samotn´e se zad´avaj´ı to textov´eho okna v modr´e sekci 3, kde vid´ıme kolekci pr´avˇe zadan´ych task˚u. Jejich separ´atorem je ’,’. N´ıˇze, v ˇcern´e sekci 4, se nach´az´ı nastaven´ı m´odu exportu, v tomto pˇr´ıpadˇe Do all clonning proces, ˇcili generov´an´ı master˚u a ge- nerov´an´ı klon˚u z masteru. Nejbˇeˇznˇejˇs´ı volbou m´odu je pak Base Dialogs, kter´y dohled´a aktu´aln´ı dialog pro dan´y task. Datumy n´ıˇze urˇcuj´ı datumov´e rozpˇet´ı vzniku task˚u, kter´e jsou vyhled´av´any v datab´azi. Sources to select a Selected sour- ces jsou listy, pomoc´ı kter´ych se ˇr´ıd´ı samotn´e generov´an´ı, popˇr´ıpadˇe jsou to fil- try urˇcuj´ıc´ı, kter´e subjekty se maj´ı exportovat. V t´eto sekci se tak´e nach´az´ı pole pro pˇrejmenov´an´ı exportovan´eho souboru a pole se syst´emovou adresou. To slouˇz´ı k nastaven´ı syst´emov´e sloˇzky pro export, nebo pro importov´an´ı souboru pomoc´ı drag&drop. Datum a ˇc´ısla n´ıˇze ve ˇzlut´e sekci 5 jsou nastaven´ım DateShiftu, o jehoˇz fungov´an´ı se doˇcteme v kapitole 2.3.1. V prav´e ˇc´asti t´eto sekce se nach´az´ı nˇekolik textov´ych pol´ı vyuˇz´ıvan´ych pro debuggov´an´ı. Ve spodn´ı ˇc´asti v oranˇzov´e sekci 6 se nach´az´ı nastaven´ı ˇci donastaven´ı jednotliv´ych m´od˚u aplikace. Toto nasta- ven´ı je ˇc´asteˇcnˇe urˇceno v´ybˇerem m´odu aplikace a m˚uˇze b´yt donastaveno uˇzivatelem.

Nastaven´ı je rozdˇeleno do jednotliv´ych podsekc´ı tak, aby se zpˇrehlednilo nastavov´an´ı

(23)

a vyjasnil v´yznam jednotliv´ych moˇznost´ı. ˇCerven´e tlaˇc´ıtko Cancel slouˇz´ı v bˇeˇz´ıc´ım stavu k pˇreruˇsen´ı operac´ı a zastaven´ı aplikace. V nebeˇz´ıc´ım stavu je pak spouˇstˇeˇcem veˇsker´ych proces˚u. Prav´a strana aplikace (fialov´a sekce 7) slouˇz´ı jako informaˇcn´ı panel, kde jsou zobrazov´any vˇsechny d˚uleˇzit´e zpr´avy, kontroln´ı hl´aˇsky ˇci chyby a tak´e veˇsker´y pokrok v dan´em procesu. Pro rychl´y pˇrehled slouˇz´ı tak´e dva ukazatele pr˚ubˇehu um´ıstˇen´e ve spodn´ı ˇc´asti aplikace ve svˇetle modr´esekci 8.

Vzhled cel´e aplikace nen´ı nikterak oslniv´y, je vˇsak funkˇcn´ı a dostaˇcuj´ıc´ı. Aplikace nen´ı grafick´ym produktem. Jedn´a se o intern´ı n´astroj, proto vzhledu nen´ı pˇrikl´ad´an t´emˇeˇr ˇz´adn´y d˚uraz. Barevn´e sekce na obr´azku 2.1 byly doplnˇeny pro ´uˇcel lepˇs´ı popisnosti uˇzivatelsk´eho rozhran´ı a v bˇeˇzn´em provozu se nevyskytuj´ı.

(24)

Obr´azek2.1:GUIaplikaceEditTool

(25)

2.1.1 Import a Export

Import a export dat pro samotn´e tasky, respektive jejich dialogy, byl implemen- tov´an pomoc´ı doplˇnkov´eho bal´ıˇcku EPPlus a interop excel. Vzhled ilustrativn´ıho exportovan´eho dokumentu si m˚uˇzete prohl´ednout na obr´azku2.2.

Obr´azek 2.2: Exportovan´a data

Sloupce1 B aˇz J obsahuj´ı informacemi o dan´e groupˇe. V hlaviˇcce (HEAD ve sloupci A, ˇr´adky 1 aˇz 9) se pak nach´azej´ı informace o jednotliv´ych sloˇzen´ych identifik´atorech. Sloupce K a dalˇs´ı obsahuj´ı zvolen´e dialog option, respektive je- jich radio texty ˇci hodnoty (value). Jednotliv´e subjekty, respektive jejich dialogy, se nach´azej´ı vˇzdy pod jejich sloˇzen´ym identifik´atorem. To umoˇzˇnuje pˇrehledn´e zobra- zen´ı sv´azan´ych dialog˚u, stejnˇe jako zobrazen´ı velk´eho mnoˇzstv´ı r˚uzn´ych sloˇzen´ych identifik´ator˚u.

Hlavn´ı v´yhodou vyuˇzit´ı excelu je:

• Snadn´e a pˇr´ım´e z´alohov´an´ı dat

Vzhledem k ˇcetnosti zmˇen, kter´e prob´ıhaj´ı v datab´azi na ´urovni dat a je- jich informac´ı, je toto z´alohov´an´ı ide´aln´ım ˇreˇsen´ım. Data uloˇzen´a v excelu obsahuj´ı krom samotn´ych hodnot jednotliv´ych dialog˚u z´aroveˇn informaci o tom, jak vypadal mateˇrsk´y dialog dan´eho subjektu v dobˇe exportu. Samotn´e hodnoty pak umoˇzˇnuj´ı kontrolu funkˇcn´ıch group a spr´avnosti jejich v´ypoˇctu vzhledem k novˇejˇs´ım funkc´ım. D´ıky verzov´an´ı aplikace, kter´e je ve form´atu yy.MM.dd.publikovan´a verze toho dne, pak lze snadno dohledat pˇr´ısluˇsnou verzi a zmˇeny v k´odu.

1Skryt´e sloupce pro n´as neobsahuj´ı d˚uleˇzit´e informace a pro vˇetˇs´ı pˇrehlednost byly vynech´any

(26)

• Moˇznost rozs´ahl´e editace bez vytv´aˇren´ı sloˇzit´eho excel-like ˇreˇsen´ı Aplikace samotn´a obsahuje excel-like komponentu, kter´a se zobraz´ı vˇzdy po zpracov´an´ı dan´e datov´e sady. Data zde nejsou zobrazena ve sloupci, kter´emu n´aleˇz´ı sdruˇzen´y identifik´ator, pod sebou, n´ybrˇz jsou rozdˇelena do vlastn´ıch z´aloˇzek. Tato moˇznost slouˇz´ı pro rychlou kontrolu, obsahuje nˇekolik kontex- tov´ych voleb, ale v pr˚ubˇehu pouˇz´ıv´an´ı aplikace byla tato moˇznost odsunuta do pozad´ı a upˇrednostnˇena editace v aplikaci Excel.

• Vyuˇzit´ı jiˇz zabˇehl´eho softwaru, jehoˇz funkce jsou rozs´ahl´e

Jak jiˇz bylo pops´ano v´yˇse, aplikace Excel je siln´ym n´astrojem. Umoˇzˇnuje napˇr´ıklad jednoduch´e a rychl´e filtrov´an´ı hodnot, uzamˇcen´ı (freeze) sloupc˚u i ˇr´adk˚u (vyuˇzito u hlaviˇcky a informac´ıch o group´ach), vytv´aˇren´ı drop-down bunˇek a mnoh´e dalˇs´ı. Ve firmˇe je t´eˇz vyuˇz´ıv´ano vlastn´ıch doplˇnk˚u do excelu a analyzaˇcn´ıch funkc´ı excelu.

Velkou v´yhodou je v´yˇse zm´ınˇen´a moˇznost vytv´aˇren´ı dropdown2 bunˇek, kter´e vid´ıme na obr´azku 2.3. To je ˇreˇseno pomoc´ı skryt´eho sheetu, kde jsou ve sloupc´ıch vedle sebe um´ıstˇena ˇc´ısla group a pod nimi se nach´az´ı jejich hodnoty. Pomoc´ı Data validation jsou pak tyto hodnoty um´ıstˇeny do vlastn´ıch bunˇek jednotliv´ych group.

Toto ˇreˇsen´ı zabraˇnuje copy-paste chyb´am a pˇreklep˚um pˇri editaci dialogu.

Obr´azek 2.3: Excel dropdown

Kaˇzd´e nastaven´ı exportu m´a sv˚uj specifick´y n´azev, kter´y je pˇrid´an i do n´azvu vytvoˇren´eho souboru. To v prvn´ı ˇradˇe zvyˇsuje pˇrehled v exportovan´ych souborech a v druh´e ˇradˇe se j´ım ˇr´ıd´ı nˇekter´e importovac´ı funkce, kter´e tak jednoduˇse rozeznaj´ı, o jak´y druh importu se jedn´a.

2https://support.office.com/en-us/article/create-a-drop-down-list-7693307a-59ef-400a-b769- c5402dce407b

(27)

2.1.2 Sloˇ zen´ y identifik´ ator

Sloˇzen´y identifik´ator je spojen´ım nˇekolika hodnot z tabulky task, kter´e jsou vazbou mezi jednotliv´ymi subjekty. Pˇri generov´an´ı nov´ych task˚u (klon˚u) je d´ıky t´eto vazbˇe zachov´ana souvislost task˚u, potaˇzmo dialog˚u. Kaˇzd´y subjekt m˚uˇze ob- sahovat pr´avˇe jeden task dan´eho sloˇzen´eho identifik´atoru. Tento identifik´ator d´av´a zasvˇecen´emu jasn´y pˇrehled o tom, jak´y typ dat dan´y task, potaˇzmo dialog, obsahuje.

Jak vid´ıme na obr´azku 2.2, skl´ad´a se ze tˇr´ı ˇc´ıseln´ych hodnot (Id navigacni test, Id navigacni base a Id navigacni) a d´ale z pˇeti textov´ych hodnot (Tag. Test, UID, Description a report).

2.1.3 Z´ akladn´ı tok dat v aplikaci

Aplikace dˇel´ı tok dat na dvˇe z´akladn´ı vˇetve, jak m˚uˇzeme vidˇet na obr´azku 2.4, na Import a Export. Pˇri exportu dat jsou dle zvolen´eho m´odu vyuˇzity metody Generov´an´ı masteru, potaˇzmo master˚u, a Generov´an´ı klon˚u. Tento v´ybˇer ˇc´asteˇcnˇe z´avis´ı i na vstupn´ıch datech. Samotn´y export dat obsahuje dalˇs´ı pokroˇcil´e funkce pro transformaci dat, jak bude pops´ano n´ıˇze.

Obr´azek 2.4: Tok dat aplikac´ı Edittool

(28)

2.2 V´ ypoˇ cetn´ı funkce

Dosavadn´ı informace o datech n´am d´avaj´ı dostateˇcn´y pˇrehled o tom, s ˇc´ım aplikace pracuje. Aplikace k v´ypoˇct˚um pouˇz´ıv´a funkce, kter´e by se daly nazvat jako excel- like funkce. Tyto funkce jsou spoleˇcnˇe s jejich parametry a podm´ınkami uloˇzeny v nˇekolika datab´azov´ych tabulk´ach. Jejich smyslem je urˇcit, jak se vypoˇc´ıt´a hodnota konkr´etn´ı groupy. Ta se zpravidla vypoˇc´ıt´a z jedn´e a v´ıce group, at’ jiˇz re´aln´ych nebo vypoˇc´ıtan´ych pomoc´ı jin´e funkce (funkˇcn´ı groupa).

Rychl´y pˇrehled o funkc´ıch si m˚uˇzeme udˇelat z obr´azku2.5, kde vid´ıme datab´azov´e tabulky t´ykaj´ıc´ı se funkc´ı. Jak vid´ıme, funkce (dialog question group function) m˚uˇze m´ıt n podm´ınek a m parametr˚u. Samotnou funkci pak tvoˇr´ı groupa, jej´ıˇz hodnotu funkce vypoˇc´ıt´av´a, popisn´e pojmenov´an´ı funkce, identifikaˇcn´ı pojmenov´an´ı (napˇr. SUMA v excelu), popis (ten m˚uˇze obsahovat doplˇnuj´ıc´ı informace pro sa- motn´y v´ypoˇcet funkˇcn´ı groupy. Vyhodnocen´ı popisu prob´ıh´a pomoc´ı regul´arn´ıch v´yraz˚u [6]) a typ vyhodnocov´an´ı podm´ınek.

Podm´ınky (dialog question group function conditions) jsou pak nav´az´any na danou funkci a obsahuj´ı informaci o dialog option, kter´a tvoˇr´ı onu podm´ınku, a o dialog question group, ze kter´e dialog option poch´az´ı.

Parametry (dialog question group function param) jsou opˇet nav´az´any na danou funkci a obsahuj´ı informaci o dialog question group, kter´a poskytuje zdrojov´a data pro v´ypoˇcet, a variable name, coˇz je pojmenov´an´ı zdrojov´e groupy pro lepˇs´ı pˇrehlednost.

Obr´azek 2.5: Zjednoduˇsen´y UML diagram funkc´ı a jejich tabulek

(29)

Dvˇe doplˇnuj´ıc´ı tabulky dialog question group function implemented a di- alog question group function log jsou informaˇcn´ımi tabulkami. Prvn´ı z nich (dialog question group function implemented) pouze uchov´av´a informace o jiˇz implementovan´ych funkc´ıch, zat´ımco druh´a (dialog question group function log) slouˇz´ı k logov´an´ı v´ypoˇctu jednotliv´ych funkc´ı. Tato tabulka poskytuje cenn´e infor- mace o trv´an´ı jednotliv´ych v´ypoˇct˚u a lze zde porovn´avat i vypoˇcten´e hodnoty.

V aplikaci je moment´alnˇe implementov´ano v´ıce neˇz 50 funkc´ı s v´ıce neˇz 80 rozd´ıln´ymi vol´an´ımi a datab´aze obsahuje v´ıce neˇz 3700 datab´azov´ych z´aznam˚u jed- notliv´ych funkc´ı.

2.2.1 Podm´ınky

V´yˇse zm´ınˇen´y typ vyhodnocov´an´ı podm´ınek plat´ı vˇzdy pro celou kolekci podm´ınek nav´azan´ych na danou funkci. V n´asleduj´ıc´ım bloku k´odu je patrn´e vyhodnocov´an´ı podm´ınek. Celkem se jedn´a o 4 pˇr´ıpady (pops´ano n´ıˇze v k´odu) rozˇs´ıˇren´e o defaultn´ı moˇznosti.

1 s w i t c h ( a l l _ c o n d i t i o n s )

2 {

3 c a s e 0: // a l e s p o n j e d n a s p l n e n a

4 c a s e 1 0:

5 c o n d i t i o n = c o n d i t i o n s . I n t e r s e c t (t h i s. t a s k I n f o . D i a l o g O p t i o n s C o n d i t i o n s ) . Any ()

6 || ! c o n d i t i o n s . Any () ;

7 b r e a k;

8 c a s e 1: // v s e c h n y s p l n e n e

9 c a s e 1 1:

10 c o n d i t i o n = ! c o n d i t i o n s . E x c e p t (t h i s. t a s k I n f o . D i a l o g O p t i o n s C o n d i t i o n s ) . Any () ;

11 b r e a k;

12 c a s e 2: // n e o b s a h u j e v s e c h n y t y t o d i a l o g _ o p t i o n

13 c a s e 1 2:

14 c o n d i t i o n = c o n d i t i o n s . E x c e p t (t h i s. t a s k I n f o . D i a l o g O p t i o n s C o n d i t i o n s ) . Any () ;

15 b r e a k;

16 c a s e 3: // n e o b s a h u j e a l e s p o n j e d n u d i a l o g _ o p t i o n

17 c a s e 1 3:

18 c o n d i t i o n = ! c o n d i t i o n s . I n t e r s e c t (t h i s. t a s k I n f o . D i a l o g O p t i o n s C o n d i t i o n s ) . Any () ;

19 b r e a k;

20 }

21

22 if (! c o n d i t i o n && a l l _ c o n d i t i o n s >= 1 0) // d e f a u l t

23 {

24 F u n c t i o n s V a r i a b l e s . Add (t h i s. i d _ d i a l o g _ q u e s t i o n _ g r o u p , t a s k I n f o , t h i s. D e f a u l V a l u e () ) ;

25 }

26 r e t u r n ! c o n d i t i o n ; // is not hit

(30)

Pro textov´e groupy je defaultn´ı hodnotou text, kter´y se nach´az´ı ve sloupeˇcku value default z tabulky dialog option, jenˇz n´aleˇz´ı jedin´e dialog option z dan´e groupy, jej´ıˇz hodnota used default je nastavena na 1.

Pro netextov´e groupy je defaultn´ı hodnotou nikoli text t´eto dialog option, jako v pˇredch´azej´ıc´ım pˇr´ıpadˇe, ale cel´a tato mateˇrsk´a dialog option.

D´ıky t´eto hodnotˇe se zjednoduˇsuje pr´ace s pravidly i samotn´ymi funkcemi, je- likoˇz nevyhodnocen´ı groupy je mnohdy jasn´ym indik´atorem toho, ˇze hodnota groupy m´a b´yt pr´avˇe defaultn´ı hodnota, potaˇzmo defaultn´ı dialog option. V nˇekter´ych pˇr´ıpadech je tato moˇznost zneuˇzita jako jak´asi podm´ınka v podm´ınce, nen´ı pak tˇreba vytv´aˇret speci´aln´ı podm´ınˇenou funkci.

2.2.2 Spr´ ava funkc´ı

Ze zad´an´ı aplikace tak´e vypl´yv´a, ˇze aplikace mus´ı b´yt schopna veˇsker´a data impor- tovat a exportovat do excelu. Nejinak tomu je pr´avˇe u funkc´ı, kter´e jsou pomoc´ı tabu iFxEdit (na obr´azku 2.6) nahr´av´any ve form´atu tsv (Tab-Separated Va- lues). Nejedn´a se o nahr´av´an´ı naˇcten´eho souboru, pouze o copy-paste zvolen´ych funkc´ı pˇr´ımo z excelu. Jakkoli se toto m˚uˇze zd´at jako nepraktick´e, umoˇzˇnuje to jednoduch´e a rychl´e nahr´an´ı jedn´e funkce, stejnˇe tak jako nahr´an´ı cel´eho souboru.

Samotn´e nahr´av´an´ı se pak star´a o spr´avn´e zaˇrazen´ı funkc´ı do tabulek. Posledn´ım krokem nahr´av´an´ı, kter´e vzniklo jako posledn´ı v´yznamn´a ˇc´ast aplikace, je konverze funkc´ı do konvertovac´ıch pravidel.

Obr´azek 2.6: Uk´azka importov´an´ı funkc´ı

2.2.3 Konvertovac´ı pravidla

Tato pravidla jsou jakousi zjednoduˇsenou verz´ı funkc´ı. Vzhledem k podobnosti nˇekter´ych subjekt˚u se mapov´an´ı dialog option d´a prov´adˇet pˇr´ımou vazbou

dialog option 1:1. V takov´em pˇr´ıpadˇe pˇrich´azej´ı na ˇradu konvertovac´ı pravidla. V datab´azov´e tabulce, jej´ıˇz strukturu vid´ıme na obr´azku 2.7, jsou jednotliv´e vazby dialog option na dialog option. I tato tabulka umoˇzˇnuje pouˇzit´ı podm´ınek.

(31)

Obr´azek 2.7: tabulka dialog option convertor

Vzhledem k tomu, ˇze konvertovac´ı pravidla vznikala nejprve jako samostatn´a ˇc´ast, kter´a mˇela umˇet pˇrev´adˇet data z PDF form´atu na hlavn´ı subjekt, je jej´ı im- plementace v k´odu oproti funkc´ım odliˇsn´a a jednoduˇsˇs´ı. Bohuˇzel vˇsak neumoˇzˇnuje pˇr´ım´y v´ypoˇcet jedn´e funkce. Tato moˇznost se vˇsak pro vybran´e funkce nahradila sloˇzitˇejˇs´ım k´odem konverze a je prov´adˇena pouze pro pravidla, jejichˇz hodnota sloupeˇcku fx nen´ı pr´azdn´a. Tato pravidla jsou pr´avˇe v´yˇse zmiˇnovanou konverz´ı do konvertovac´ıch pravidel. Jedn´a se o pˇreveden´ı funkce, jeˇz je zad´ana jako group-group vazba, na vazbu dialog option-dialog option. Tato konverze prob´ıh´a dle zadan´ych pravidel pro jednotliv´e typy group, rozˇrazen´ych do tˇr´ı funkˇcn´ıch blok˚u.

• use DEFAULT - pouˇzije defaultn´ı hodnotu z tabulky dialog question group

• use USED, use PRESET, single dialog option - nastav´ı zdrojovou dialog option

(32)

jako 0 pro use PRESET a use USED, pro single dialog option pouˇzije jej´ı hodnotu

(id dialog option 0 je placeholder pr´avˇe pro pˇr´ıpady, kdy v´ystupn´ı dialog option nen´ı pˇr´ımo z´avisl´a na zdrojov´e dialog option. V podstatˇe se jedn´a o podm´ınˇen´e um´ıstˇen´ı dan´e v´ystupn´ı dialog option, kter´e je z´avisl´e nikoli na vstupn´ı kolekci, ale na podm´ınce vztaˇzen´e k v´ystupn´ı kolekci)

• use TXT, multiple dialog options - nalezne p´arovou schodu value A = value B Nulov´a zdrojov´a dialog option je v procesu konverze zpracov´av´ana jako defaultn´ı hodnota z mateˇrsk´e dialog option, nebo jako preset. O fungov´an´ı preset˚u se doˇcteme n´ıˇze.

2.2.4 Presety

Sloˇzitˇejˇs´ı funkce, respektive hodnoty, kter´e z´avisej´ı na vˇetˇs´ım mnoˇzstv´ı group, byly implementov´any jako tzv. presety. Jejich smyslem je nastaven´ı selektov´e groupy s obvykle vˇetˇs´ım poˇctem moˇznost´ı v z´avislosti na hodnot´ach obsaˇzen´y ˇci neobsaˇzen´ych v jin´ych group´ach, bez nutnosti vytv´aˇret dalˇs´ı specializovan´e funkce. Tyto presety jsou vytv´aˇreny v excelu, z kter´eho jsou n´aslednˇe importov´any do datab´aze. V´ıce o importu a exportu do excelu se doˇcteme v kapitole 2.1.1.

Na obr´azku2.2 vid´ıme, jak by mohl vypadat jednoduch´y preset mapuj´ıc´ı n´ajezd kilometr˚u master u na jednotliv´e subjekty. Tento zp˚usob umoˇzˇnuje rychlou zmˇenu velk´eho mnoˇzstv´ı dat bez specifikov´an´ı zbyteˇcnˇe sloˇzit´ych funkc´ı a bez z´asahu do k´odu ˇci funkc´ı.

Na pˇr´ıkladu preset˚u si uk´aˇzeme, jak funguj´ı samotn´e funkce.

• N´azvy funkc´ı jsou ve form´atu iFx n´azev funkce

• Funkce implementuje interface IMapping a jej´ı b´az´ı je abstaktn´ı tˇr´ıda AMap- ping

• Pokud nen´ı splnˇena podm´ınka v´ypoˇctu (viz kapitola2.2.1) [this.IsConditionNotHit ]

• nebo pokud jiˇz funkce byla vol´ana se stejn´ymi parametry nebo jej´ı hodnotu aktu´aln´ı dialog obsahuje (z´avis´ı na nastaven´ı bˇehu aplikace) [IsNotInOrNull()]

−→ v´ypoˇcet neprob´ıh´a

• n´asleduje samotn´a logika funkce

(33)

• metoda zpravidla konˇc´ı vol´an´ım metody

FunctionsVariables.Add(this.id dialog question group , this.taskInfo , Object);

1 p u b l i c c l a s s i F x _ P r e s e t : A M a p p i n g, I M a p p i n g

2 {

3 p u b l i c i F x _ P r e s e t ( F u n c t i o n s V a r i a b l e s F u n c t i o n s V a r i a b l e s , T a s k I n f o t a s k I n f o , l o n g i d _ d i a l o g _ q u e s t i o n _ g r o u p )

4 : b a s e( F u n c t i o n s V a r i a b l e s , t a s k I n f o , i d _ d i a l o g _ q u e s t i o n _ g r o u p , false , t r u e)

5 {

6 }

7

8 p u b l i c v o i d C a l c u l a t e ()

9 {

10 if (t h i s. I s C o n d i t i o n N o t H i t || I s N o t I n O r N u l l () )

11 {

12 f o r e a c h (l o n g i t e m _ a f f e c t e d in H e l p e r P r e s e t . F i n d A l l A f f e c t e d R o w s ( t h i s. i d _ d i a l o g _ q u e s t i o n _ g r o u p ) . W h e r e ( x = > x != t h i s.

i d _ d i a l o g _ q u e s t i o n _ g r o u p ) )

13 {

14 new F u n c t i o n C o n t r o l l e r () . R e t u r n C a l c u l a t i o n ( F u n c t i o n s V a r i a b l e s , i t e m _ a f f e c t e d , t a s k I n f o , i d _ d i a l o g _ q u e s t i o n _ g r o u p ) ;

15 }

16

17 // if g r o u p is info , l e a v e it

18 var p r e s e t = H e l p e r P r e s e t . F i n d P r e s e t F r o m P r e s e t G r o u p ( t a s k I n f o , t h i s. Options , t h i s. i d _ d i a l o g _ q u e s t i o n _ g r o u p ) ;

19 F u n c t i o n s V a r i a b l e s . Add (t h i s. i d _ d i a l o g _ q u e s t i o n _ g r o u p , t h i s. t a s k I n f o , p r e s e t ) ;

20 }

21 }

22 }

(34)

2.2.5 Abstraktn´ı tˇ r´ıda AMapping

Tato abstraktn´ı tˇr´ıda sdruˇzuje veˇsker´e potˇrebn´e informace pro vˇsechny funkce, re- spektive pro kaˇzdou z nich zvl´aˇst’. Jej´ım c´ılem je unifikovat proces vyhodnocov´an´ı funkc´ı tak, aby se k´od funkce dobˇre psal a pˇredevˇs´ım byl pˇrehledn´y pro dalˇs´ı ´upravy.

1 p u b l i c a b s t r a c t c l a s s A M a p p i n g

2 {

3 // / < summary > l o a d groups , if ! o p t i o n s . Any () - > l o a d o p t i o n s .

4 p r o t e c t e d A M a p p i n g( F u n c t i o n s V a r i a b l e s F u n c t i o n s V a r i a b l e s , T a s k I n f o t a s k I n f o , l o n g i d _ d i a l o g _ q u e s t i o n _ g r o u p , b o o l i s D e f a u l t = false, b o o l i s P r e s e t = f a l s e) ...

5 p u b l i c b o o l i s P r e s e t { get ; set ; }

6 p u b l i c b o o l i s D e f a u l t { get ; set ; }

7 p u b l i c l o n g i d _ d i a l o g _ q u e s t i o n _ g r o u p { get ; set ; }

8 p u b l i c l o n g i d _ d i a l o g { get ; set ; }

9 p u b l i c l o n g[] P a r a m s { get ; set ; } // all p a r a m g r o u p s

10 p u b l i c l o n g[] G r o u p s { get ; set ; } // all r e a l g r o u p s f r o m p a r a m s

11 p u b l i c l o n g[] F u n c t i o n s { get ; set ; } // all f u n c t i o n g r o u p s f r o m p a r a m s

12 p u b l i c F u n c t i o n s V a r i a b l e s F u n c t i o n s V a r i a b l e s ;

13 p u b l i c T a s k I n f o t a s k I n f o ;

14 p u b l i c List < m y _ d i a l o g _ o p t i o n > O p t i o n s ... // r e c a l c u l a t e all g r o u p s

15 p u b l i c b o o l I s C o n d i t i o n N o t H i t ... // g e t s i s C o n d i t i o n N o t H i t () v a l u e ( j u s t for s i m p l y w r i t i n g . . . )

16 p r i v a t e b o o l i s C o n d i t i o n N o t H i t () ...

17 p u b l i c b o o l i s C o n d i t i o n N o t H i t (l o n g g r o u p ) ... // r e c a l c u l a t e all g r o u p for c o n d i t i o n s and r e t u r n n e g a t i v e c o n d i t i o n r e s u l t

18 p u b l i c b o o l I s N o t I n O r N u l l (b o o l D o N o t R e c o u n t A n y w a y = f a l s e) ... //

a c c o r i n g to the s e t t i n g r e t u r n s p e r m i t i o n to r e c a l c u l a t e t h i s fx

19 p u b l i c v o i d L o a d D i a l o g O p t i o n s () ... // r e l o a d o p t i o n s for d i a l o g

20 p u b l i c b o o l L o a d G r o u p s () ... // r e l o a d and r e g r o u p g r o u p s for t h i s fx

21 p u b l i c m y _ d i a l o g _ o p t i o n G e t O p t i o n (l o n g g r o u p ) ... // r e t u r n o p t i o n for g r o u p f r o m t a s k I n f o

22 p u b l i c m y _ d i a l o g _ o p t i o n G e t O p t i o n F o r A g e C o u n t (l o n g g r o u p ) ... // r e t u r n u s e d o p t i o n f r o m D i a l o g O p t i o n s for s e l e c t e d g r o u p

23 p u b l i c D e f a u l t V a l u e D e f a u l V a l u e () ... // r e t u r n d e f a u l t v a l u e for t h i s fx

24 }

2.2.6 Interface IMapping

Jedn´a se o jednoduch´y interface zajiˇst’uj´ıc´ı stejnou strukturu vˇsech funkc´ı dle d´ıla Clean C# [7].

1 p u b l i c i n t e r f a c e I M a p p i n g

2 {

3 v o i d C a l c u l a t e () ;

4 }

(35)

2.2.7 Object FunctionsVariables

Jak bylo pops´ano v´yˇse a jak je vidˇet v k´odu abstraktn´ı tˇr´ıdy, dalˇs´ım d˚uleˇzit´ym prvkem je objekt FunctionalVariables. Kromˇe ostatn´ıch informac´ı d˚uleˇzit´ych k jeho spr´avn´emu fungov´an´ı obsahuje pˇredevˇs´ım rozs´ahlou metodu Add(long group, TaskInfo taskInfo, object o, bool result = true)). Ta se star´a o vyhled´an´ı a uloˇzen´ı spr´avn´e dialog option do kolekce. T´ım je opˇet unifikov´ano pˇrid´av´an´ı dia- log option na z´akladˇe d´ıla Dokonal´y k´od [8]. Funkce t´eto metody bude pops´ana na uk´azce metody v n´asleduj´ıc´ım bloku.

1 e l s e if ( o is D e f a u l t V a l u e )

2 {

3 if ((( D e f a u l t V a l u e ) o ) . i d _ d i a l o g _ o p t i o n _ d e f a u l t . H a s V a l u e )

4 {

5 u s i n g ( D B M o d e l db = new D B M o d e l () )

6 {

7 s t r i n g q u e r y = " S E L E C T ’{ g r o u p } ’ as ... ";

8

9 o p t i o n = db . D a t a b a s e . S q l Q u e r y < d i a l o g _ p t i o n >( q u e r y ) . F i r s t () ;

10 if (s t r i n g. I s N u l l O r W h i t e S p a c e ( o p t i o n . v a l u e ) )

11 {

12 o p t i o n . v a l u e = (( D e f a u l t V a l u e ) o ) . v a l u e _ d e f a u l t ;

13 o p t i o n . O b j e c t = ( D e f a u l t V a l u e ) o ;

14 }

15 }

16 }

17 e l s e if (!s t r i n g. I s N u l l O r W h i t e S p a c e ((( D e f a u l t V a l u e ) o ) . v a l u e _ d e f a u l t ) )

18 {

19 u s i n g ( D B M o d e l db = new D B M o d e l () )

20 {

21 s t r i n g q u e r y = " S E L E C T ’{ g r o u p } ’ ... ";

22

23 o p t i o n = db . D a t a b a s e . S q l Q u e r y < d i a l o g _ o p t i o n >( q u e r y ) . F i r s t () ;

24 o p t i o n . v a l u e = (( D e f a u l t V a l u e ) o ) . v a l u e _ d e f a u l t ;

25 }

26 }

27 }

Metoda nejprve otestuje, jak´eho typu je vstupn´ı parametr o.

• dialog option - jiˇz zn´am´a dialog option

• DefaultValue - Objekt DefaultValue, kter´y obsahuje informace o defaultn´ı di- alog option

• DateTime? - datumov´e groupy, vˇcetnˇe group s neplatn´ym vstupem

• int, long, string, double, bool - veˇsker´e textov´e hodnoty bez bliˇzˇs´ıch specifikac´ı

(36)

• GDV - komplexn´ı informace o pouˇzit´e adrese

• PresetValue - objekt PresetValue, jeˇz specifikuje bliˇzˇs´ı uˇzit´ı

• UsedPresetObject - podobnˇe jako PresetValue

• UsedPresetUIDObject - pomocn´y objekt uˇz´ıvan´y pro doplnˇen´ı vypisovan´ych informac´ı

• Range - objekt slouˇz´ıc´ı k dohled´an´ı pˇr´ısluˇsn´e dialog option, kter´a odpov´ıd´a rozsahu, kam patˇr´ı dan´a hodnota

N´aslednˇe dle typu metoda vyhled´a odpov´ıdaj´ıc´ı dialog option, v tomto pˇr´ıpadˇe na z´akladˇe DefaultValue bud’ vyhled´a konkr´etn´ı dialog option pomoc´ı jej´ıho id, nebo pomoc´ı textov´e hodnoty. Po vyhodnocen´ı dan´eho typu je dialog option nastavena na used = 1 a je pˇriˇrazena dan´emu dialogu.

2.2.8 FunctionController

Tˇr´ıda FunctionController je rozcestn´ıkem pro vˇsechny funkce. Jej´ım hlavn´ım

´

ukolem je zjednoduˇsit a centralizovat veˇskerou spr´avu funkc´ı na jednom m´ıstˇe. Jej´ı hlavn´ı metodou je metoda ReturnCalculation(FunctionsVariables Function- sVariables, long iFxCalling, TaskInfo taskInfo, long? iFxCalled). Vstupn´ı parametry jsou jiˇz v´yˇse zm´ınˇen´y objekt FunctionVariables (2.2.7), hodnota groupy, kter´a se m´a vypoˇc´ıtat, taskInfo, coˇz je rozˇs´ıˇren´y objekt tasku, a groupa, kter´a si vyˇz´adala pˇrepoˇcet t´eto funkce. V samotn´em k´odu se pak nach´azej´ı dvˇe hlavn´ı vol´an´ı vedlejˇs´ıch metod, kde obˇe metody obsahuj´ı rozs´ahl´y switch-case. Prvn´ı metoda zjiˇst’uje, je-li jm´eno funkce pro poˇc´ıtanou groupu zn´am´e, v tom pˇr´ıpadˇe hodnotu groupy vypoˇc´ıt´a a zpracuje jej´ı v´ysledek. V opaˇcn´em pˇr´ıpadˇe je vol´ana druh´a me- toda, ve kter´e je k´odovˇe specifikov´ano chov´an´ı nˇekolika vyznamn´ych group dle jejich id. Cel´y proces rekurzivn´ıho vol´an´ı group je nast´ınˇen na obr´azku2.8.

(37)
(38)

2.3 Adaptaˇ cn´ı pravidla

V kapitol´ach v´yˇse bylo pops´ano, jak funguje proces generov´an´ı master˚u a klon˚u.

Vrat’me se proto zpˇet k webov´ym formul´aˇr˚um. Jak bylo pops´ano v kapitole1.2.6, ty obsahuj´ı data o vozidle. Je zˇrejm´e, ˇze mus´ı tak´e obsahovat data o vlastn´ıkovi vozidla, potaˇzmo o pojistiteli. Zad´avan´e informace jsou leckdy velice obs´ahl´e a obsahuj´ı informace tak´e o ˇclenech rodiny, jejich vˇeku ˇci vˇeku, kdy z´ıskali ˇridiˇcsk´y pr˚ukaz. V neposledn´ı ˇradˇe tak´e obsahuj´ı informaci o dni uzavˇren´ı pojiˇstˇen´ı.

Budeme-li cht´ıt tato naˇse vygenerovan´a data jakkoli pouˇz´ıt, mus´ıme zaruˇcit jejich aktu´alnost, popˇr´ıpadˇe jejich anonymitu. K tomu slouˇz´ı metody DateShift(2.3.1), Randomize(2.3.4) a VerifyCars(2.3.3).

2.3.1 DateShift

DateShift je pravdˇepodobnˇe nejsloˇzitˇejˇs´ım algoritmem cel´e aplikace. Jeho c´ılem je tzv. posunut´ı dialog˚u v datumov´e rovinˇe. Budeme-li m´ıt dialog, kter´y jsme vytvoˇrili napˇr´ıklad minul´y mˇes´ıc, zaˇc´atek pojiˇstˇen´ı bude pravdˇepodobnˇe nˇekdy v uplynul´em mˇes´ıci. Budeme-li vˇsak cht´ıt data vyuˇz´ıt dnes, ˇz´adn´y webov´y formul´aˇr n´am to nedo- vol´ı, jelikoˇz zaˇc´atek pojiˇstˇen´ı mus´ı vˇzdy b´yt v budoucnosti (v´yjimkou jsou nˇekter´e subjekty, kter´e umoˇzˇnuj´ı pojistit jiˇz v den uzavˇren´ı smlouvy). Pokud vˇsak posu- neme pouze datum vzniku pojiˇstˇen´ı, a udˇel´ame-li to v´ıcekr´at v pr˚ubˇehu roku, nebo udˇel´ame-li to aˇz pˇr´ıˇst´ı rok, dost´av´ame se do situace, kdy data, kter´a jsme vytvoˇrili a kter´a povaˇzujeme za nˇejak´y dialog ABC s vozem XYZ a st´aˇr´ım jezdce Q rovn´ym 18 let (vˇetˇsina datum˚u je vˇsak poˇc´ıt´ana s pˇresnost´ı na mˇes´ıce), jiˇz nejsou pravdiv´a, jak vid´ıme na obr´azku2.9.

Obr´azek 2.9: Nekonzistentnost dat pˇri posunut´ı datumu sjedn´an´ı pojiˇstˇen´ı Naˇs´ım c´ılem je tedy posunout vˇsechny datumy. Zde vˇsak nar´aˇz´ıme na ˇradu pra- videl, kter´a mus´ıme dodrˇzet. Datumy jsou rozdˇeleny do ˇctyˇr skupin.

(39)

1. Datum uzavˇren´ı pojiˇstˇen´ı

Datum uzavˇren´ı pojiˇstˇen´ı je specifick´y datum, pro kter´y jedin´y plat´ı, ˇze mus´ı b´yt v budoucnosti a je vod´ıc´ı hodnotou pro cel´y DateShift. Plat´ı pro nˇej n´asleduj´ıc´ı:

• Mus´ı b´yt v budoucnosti

• Pokud vstupn´ı datum je 1.1., pak v´ystupn´ı datum mus´ı b´yt tak´e 1.1.

• v z´avislosti na typu dialogu je prov´adˇen CheckDate (viz kapitola2.3.2).

2. Datumy voln´e (narozeniny,...)

Datumy voln´e jsou datumy, u kter´ych nen´ı prov´adˇen CheckDate, jako jsou napˇr´ıklad narozeniny, kter´e se neˇr´ıd´ı ˇz´adn´ymi pravidly.

3. Datumy v´azan´e (Prvn´ı registrace vozu, Datum vystaven´ı ˇridiˇcsk´eho pr˚ukazu,...)

Datumy v´azan´e jsou vˇsechny datumy, kter´e jsou nˇejak´ym zp˚usobem spjaty s jin´ym datumem, nebo se ˇr´ıd´ı napˇr´ıklad pracovn´ımi dny v t´ydnu. U tˇechto datum˚u je vˇzdy prov´adˇen CheckDate.

4. Speci´aln´ı pravidla

Mezi speci´aln´ı pravidla patˇr´ı napˇr´ıklad st´aˇr´ı vozu, kter´e se odv´ıj´ı od jeho prvn´ı registrace. V´ıce v kapitole 2.3.3.

Pokud dodrˇz´ıme vˇsechna pravidla, kter´a jsou ve zjednoduˇsen´e formˇe popsan´a v´yˇse, dost´av´ame konzistentn´ı data, kter´a vid´ıme na obr´azku 2.10.

Obr´azek 2.10: Rovnost datumov´eho rozd´ılu vstupn´ıch a v´ystupn´ıch dat pˇri dodrˇzen´ı adaptaˇcn´ıch pravidel

(40)

2.3.2 CheckDate

Jak vid´ıme na obr´azku2.10, posun datumu prvn´ı registrace vozu je 30 dn´ı, oproti ostatn´ım posun˚um, jejichˇz hodnota je 31 dn´ı. Za pomoc´ı kalend´aˇre lze snadno do- hledat, ˇze 5.11.2005 byla sobota. V tento den nen´ı moˇzn´e pojistit v˚uz. Nejbliˇzˇs´ı den, kdy je moˇzn´e pojistit v˚uz, je tak p´atek, tedy 4.11.2005. Pokud by na tento den vych´azel nˇejak´y sv´atek, musel by se datum posunout jeˇstˇe d´ale, a to bud’ na 3.11.2005, nebo naopak na 7.11.2005. Vˇse za dodrˇzen´ı podm´ınky zachov´an´ı da- tumov´eho rozd´ılu (vˇzdy ke dni sjedn´an´ı pojiˇstˇen´ı) v mˇes´ıc´ıch. Pokud by st´ale datum nebyl platn´ym datumem (v tomto pˇr´ıpadˇe pracovn´ım dnem), algoritmus by stejn´ym zp˚usobem pokraˇcoval d´ale aˇz k prvn´ımu platn´emu dni.

Pevn´e sv´atky, ˇcili sv´atky s pˇresnˇe dan´ym datumem, jsou v k´odu jako kolekce mˇes´ıce a dne, ke kter´ym se dopoˇc´ıt´av´a aktu´aln´ı rok. Pro v´ypoˇcet pohybliv´ych da- tum˚u jsou pouˇzity funkce v bloku k´odu n´ıˇze.

1 p r i v a t e s t a t i c D a t e T i m e f e i e r t a g ( D a t e T i m e d a t e )

2 {

3 w h i l e ( F e s t F r e i t a g ( d a t e . Y e a r ) . C o n t a i n s ( d a t e ) || F r e i F r e i t a g ( d a t e . Y e a r ) . C o n t a i n s ( d a t e ) )

4 if ( d a t e . D a y O f W e e k == D a y O f W e e k . S a t u r d a y )

5 d a t e = d a t e . A d d D a y s (2) ;

6 e l s e

7 d a t e = d a t e . A d d D a y s (1) ;

8 r e t u r n d a t e ;

9 }

10 p r i v a t e s t a t i c List < D a t e T i m e > F r e i F r e i t a g (int y e a r )

11 {

12 var F r e i F r e i t a g L i s t = new List < D a t e T i m e >() ;

13 var E a s t e r S u n d a y = E a s t e r S u n d a y C o u n t ( y e a r ) ;

14 F r e i F r e i t a g L i s t . Add ( E a s t e r S u n d a y . A d d D a y s ( -4 8) ) ;

15 F r e i F r e i t a g L i s t . Add ( E a s t e r S u n d a y . A d d D a y s ( -4 7) ) ;

16 F r e i F r e i t a g L i s t . Add ( E a s t e r S u n d a y . A d d D a y s ( -4 6) ) ;

17 F r e i F r e i t a g L i s t . Add ( E a s t e r S u n d a y . A d d D a y s ( -2) ) ;

18 F r e i F r e i t a g L i s t . Add ( E a s t e r S u n d a y . A d d D a y s (+1) ) ;

19 F r e i F r e i t a g L i s t . Add ( E a s t e r S u n d a y . A d d D a y s (+3 9) ) ;

20 F r e i F r e i t a g L i s t . Add ( E a s t e r S u n d a y . A d d D a y s (+5 0) ) ;

21 F r e i F r e i t a g L i s t . Add ( E a s t e r S u n d a y . A d d D a y s (+6 0) ) ;

22 r e t u r n F r e i F r e i t a g L i s t ;

23 }

2.3.3 VerifyCars

V´yˇse zm´ınˇen´a prvn´ı registrace vozu n´am zde poslouˇzila jako pˇr´ıklad datumu, kter´y by bez pouˇzit´ı CheckDate nebyl validn´ım. V re´aln´ych datech ovˇsem nese jeˇstˇe jednu z´asadn´ı informaci. Naˇs´ım vozem pro tuto uk´azkovou situaci m˚uˇze b´yt napˇr´ıklad v˚uz VOLVO S60 R 2.5 AWD z roku 2004. Tento v˚uz sice nebyl vyroben

(41)

v roce 2005, nicm´enˇe je moˇzn´e koupit v˚uz, kter´y byl vyroben v loˇnsk´em roce, a pojistit ho letos. Pokud bychom ale takov´y v˚uz, tedy v˚uz zakoupen´y v roce 2020, vyroben´y v roce 2019, kdy byla ukonˇcena jeho v´yroba, chtˇeli pojistit v roce 2021, vˇetˇsina subjekt˚u n´am to jiˇz neumoˇzn´ı. Stejn´y pˇr´ıpad by nastal i u naˇseho vozu Volvo, kdybychom n´aˇs uk´azkov´y dialog chtˇeli pouˇz´ıt za dva mˇes´ıce. Prvn´ı registrace vozu by tak byla v lednu roku 2006, coˇz je 2 roky od ukonˇcen´ı v´yroby naˇseho vozu.

Metoda VerifyCars se star´a o dohled´an´ı a nahrazen´ı jiˇz nevalidn´ıho vozu vozem validn´ım. Vyhled´avac´ı algoritmus se snaˇz´ı dohledat co nejpodobnˇejˇs´ı v˚uz, a to na z´akladˇe cenov´eho rozpˇet´ı, stejn´eho typu pohonn´e jednotky (benz´ın, diesel, hybrid,...) a podobnostn´ıho faktoru, kter´y vznik´a multiplikac´ı tˇr´ı parametr˚u, kter´e by se daly popsat jako rizikov´e tˇr´ıdy vozu pro pojiˇstˇen´ı.

2.3.4 Randomize

Metoda Randomize, jak jiˇz jej´ı n´azev napov´ıd´a, umoˇzˇnuje randomizaci dat. Ta je troj´ıho zp˚usobu:

1. Randomizace datum˚u

Umoˇzˇnuje pˇri prov´adˇen´ı DateShiftu, kter´y prob´ıh´a nastaven´ım v´ystupn´ıho da- tumu zaˇc´atku pojistˇen´ı, vˇsechny posouvan´e datumy zaˇc´atku pojiˇstˇen´ı rando- mizovat v urˇcit´em rozsahu, kter´y lze nastavit v GUI. Stejnˇe tak je moˇzn´e na- stavit rozsah randomizace pro ostatn´ı datumy. Tato randomizace vˇzdy prob´ıh´a aˇz po posunu dat.

2. Randomizace adres

Podobnˇe jako je tomu u nahrazov´an´ı voz˚u popsan´em v kapitole2.3.3, prob´ıh´a randomizace adres na z´akladˇe nˇekolika parametr˚u urˇcuj´ıc´ıch podobnost dan´e adresy.

3. Randomizace aut

Prob´ıh´a stejn´ym zp˚usobem jako pˇri nahrazov´an´ı nevalidn´ıch aut.

2.4 Ostatn´ı funkcionalita aplikace

Aplikace je ucelen´ym n´astrojem pro pr´aci s daty popsan´ymi v kapitole1.2, pˇredevˇs´ım pro data z datab´azov´ych tabulek dialog option a dialog. Z toho d˚uvodu bylo do aplikace implementov´ano nˇekolik dalˇs´ıch funkc´ı, kter´e usnadˇnuj´ı pˇredevˇs´ım verifikaci

(42)

1. Dialog Comparer

Dialog comparer nalezneme mezi z´aloˇzkami aplikace a umoˇzˇnuje n´am po- rovn´an´ı dvou dialog˚u. Data se vypisuj´ı ve form´atu ot´azka - dialog A - hodnota A - dialog B - hodnota B. Pro lepˇs´ı pˇrehlednost je zde moˇznost specifikovat poprovn´avan´e groupy.

2. Soft clone

Stejnˇe jako dialog comparer nalezneme i Soft clone mezi z´aloˇzkami aplikace.

Tato moˇznost umoˇzˇnuje vytvoˇrit kopie zadan´ych dialog˚u se specifikovanou zmˇenou, tedy z´amˇenou dialog option za jinou dialog option.

(43)

3 Dokumentace

Dokumentace t´eto aplikace je troj´ıho zp˚usobu, tak jak bylo dohodnuto se zadava- telskou firmou.

1. Samopopisn´y k´od

Jak je zˇrejm´e z uk´azek k´odu v´yˇse, aplikace byla psan´a s co moˇzn´a nejvˇetˇs´ım d˚urazem na uˇzit´ı popisn´ych n´azv˚u, at’ jiˇz tˇr´ıd, metod ˇci promˇenn´ych. V k´odu samotn´em se pak nach´azej´ı drobn´e koment´aˇre, kter´e dovysvˇetluj´ı nˇekter´e moˇzn´e nesrovnalosti.

2. Samotn´y text diplomov´e pr´ace

V pˇr´ıpadˇe zaˇcleˇnov´an´ı nov´eho program´atora do oblasti dialog - groupy - dia- log option bude velmi pˇr´ınosn´y samotn´y text diplomov´e pr´ace, kter´y vysvˇetluje jednotliv´e datab´azov´e souvislosti t´ykaj´ıc´ı pr´ace s tˇemito daty. Stejnˇe tak je tomu v pˇr´ıpadˇe pˇred´an´ı k´odu aplikace Edittool dalˇs´ı osobˇe pro pozdˇejˇs´ı ´upravy.

3. Dropbox paper

Podrobnˇejˇs´ı dokumentace nˇekter´ych ˇc´ast´ı, jako jsou hlavn´ı helpery aplikace, vˇsechny v´ypoˇcetn´ı funkce, kter´e byly implementov´any, a nˇekter´e hlavn´ı tˇr´ıdy, je zpracov´av´ana v online podobˇe v aplikaci Dropbox paper. Vzhledem k cit- livosti dat zde popsan´ych je vˇsak tato dokumentace neveˇrejn´ym dokumentem.

Pˇri hled´an´ı moˇznost´ı, jak jednoduˇse a efektivnˇe ps´at dokumentaci se jako nejlepˇs´ı volba uk´azala pr´avˇe aplikace Dropbox paper. Uˇzivatelsk´e prostˇred´ı aplikace p˚usob´ı velice dobˇre. D´ıky pˇrednastaven´ym zkratk´am, at’ jiˇz kl´avesov´ym ˇci k´odov´ym, je moˇzn´e psan´ı zefektivnit a zpˇrehlednit. Moˇznosti editace nejsou rozs´ahl´e, pˇresto jsem je shledal jako dostateˇcn´e. Moˇznost sbalen´ı jednotliv´ych kapitol v´ıt´am, simuluje pr´aci s k´odem stejnˇe jako moˇznost vkl´ad´an´ı uk´azek k´odu. Barevn´e oznaˇcov´an´ı se pˇri systematick´em uˇzit´ı uk´azalo jako velice pˇrehledn´e. Hlavn´ı v´yhodou je moˇznost exportovat data ve tˇrech form´atech, a to .pdf, .docx a .md, coˇz je bˇeˇznˇe uˇz´ıvan´y

References

Related documents

Polisario, som anklagar Marocko för våldsamt förtryck efter oroligheterna med kraftig närvaro av polis och militär i de västs- ahariska städerna, har vänt sig till FN och

PETTER LARSSON REAGERAR i Arbetaren Zenit (13/2009) på en ledare jag publicerat på Dagens Arena (20/3 2009) där jag argumen- terade för att vänstern bör etablera en tydlig

Landets koloniala historia gör det svårt för studenterna att se religionsdialogen som något enkelt när man möter människor från hinduiska och buddhistiska miljöer – eftersom

Vybral jsem technologii Adobe Flash pˇredevˇs´ım kv˚ uli vysok´ e penetraci mezi uˇ zivatelskou z´ akladnou v r´ amci pluginu do webov´ ych prohl´ıˇ zeˇ c˚ u a datab´ azov´

Vår undersökning visar hur pass komplext det är att få till en förändring och vilka krafter som måste till för att få till stånd en hållbar förändring som går ned på

Vad är det egentligen som står på spel? I vår studie har vi ju valt att se på bemötandefrågor ur ett ledarskapsperspektiv men vi har även hört, och fått ta del av hur man

P˚uvodn´ı prototyp levn´e bionick´e n´ahrady HACKberry, jehoˇz funkˇcn´ı z´aklad vznikl v r´amci semestr´aln´ıho projektu [19], je v r´amci diplomov´e pr´ace doplnˇen

Personal DGH: Ja, precis, och det Šr det som jag tror att det kommer att kanske smŒningom bli nŒn annorlunda lšsning pŒ det, fšr det hŠr, det Šr jobbigt fšr dom stora, och det