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.
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.
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
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
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.
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
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
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
Seznam zkratek
DB Datab´aze
Group Dialog question group Option Dialog option
GUI Graphical user interfaces
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.
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
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
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.
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´ı
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
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
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/
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
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
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´ı
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´ı.
Obr´azek2.1:GUIaplikaceEditTool
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
• 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
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
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
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
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.
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
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
• 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 }
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 }
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´ı
• 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.
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.
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
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
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
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.
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