VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky Obor Aplikovaná informatika
Te s t o v a c í a p l i k a c e bakalářská práce
Autor: Petr Velíšek Vedoucí práce: PaedDr. František Smrčka, Ph.D. Jihlava 2015
Abstrakt Práce popisuje návrh a vývoj webové aplikace, která se zabývá testováním a hodnocením uživatelů. Je rozdělena na část pro samotné testování a část, která provádí hodnocení. Aplikace pokládá otázky uživateli z databáze a jeho odpovědi do ní ukládá. Po odpovědění na všechny otázky, provede druhá část vyhodnocení a vygenerování vysvědčení v PDF. Aplikace je realizována v ASP.NET s využitím jazyka C# a MSSQL.
Klíčová slova webová aplikace, ASP, C#, testování, databáze, návrh softwaru, webforms
Abstract The thesis describes design and development of a web application, which is used for the testing and evaluation of users. The application has two main sections. The first section controls the exact testing. The second one performs the evaluation. The application provides questions from the database and stores answers of users. When all the questions are replied, the second section accomplish the evaluation and generate certificates in PDF.
The application is implemented in ASP.NET using C # and
MSSQL.
Key words web application, ASP, C#, testing, database, software design, webforms
Prohlašuji, že předložená bakalářská práce je původní a zpracoval/a jsem ji samostatně. Prohlašuji, že citace použitých pramenů je úplná, že jsem v práci neporušil/a autorská práva (ve smyslu zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů, v platném znění, dále též „AZ“). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím užitím k výuce nebo k vlastní vnitřní potřebě VŠPJ. Byl/a jsem seznámen s tím, že na mou bakalářskou práci se plně vztahuje AZ, zejména § 60 (školní dílo). Beru na vědomí, že VŠPJ má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom/a toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem VŠPJ, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených vysokou školou na vytvoření díla (až do jejich skutečné výše), z výdělku dosaženého v souvislosti s užitím díla či poskytnutí licence. V Jihlavě dne
............................................... Podpis
Poděkování Na tomto místě bych rád poděkoval svému vedoucímu práce PaedDr. Františku Smrčkovi, Ph.D. za možnost vytvářet práci pod jeho vedením. Dále bych rád poděkoval PhDr. Vladimíru Širokému z firmy Republikové centrum vzdělávání, s. r. o. za téma této práce a podporu při jejím zpracování.
Obsah 1
Úvod........................................................................................................................ 10
2
Popis řešeného problému ........................................................................................ 11 2.1
3
2.1.1
Testovací část ............................................................................................ 11
2.1.2
Výpočtový modul ..................................................................................... 12
Analýza a návrh implementace ............................................................................... 13 3.1
Porovnání existujících řešení ........................................................................... 13
3.1.1
Starší verze programu ............................................................................... 13
3.1.2
Moodle ...................................................................................................... 13
3.1.3
Fronter ....................................................................................................... 14
3.2
Využité technologie ......................................................................................... 14
3.2.1
C# .............................................................................................................. 14
3.2.2
ASP.NET WebForms................................................................................ 14
3.2.3
SQL ........................................................................................................... 15
3.3
Vývojová prostředí ........................................................................................... 15
3.3.1
MS Visual Studio Express 2012 ............................................................... 15
3.3.2
GIMP ........................................................................................................ 16
3.3.3
Microsoft SQL Server 2012 Express ........................................................ 16
3.3.4
yEd Graph Editor ...................................................................................... 16
3.4
Návrh implementace ........................................................................................ 16
3.4.1
Testovací část ............................................................................................ 17
3.4.2
Výpočtový modul ..................................................................................... 18
3.5
4
Požadavky na implementovaný systém ........................................................... 11
Analýza a návrh datového modelu ................................................................... 19
3.5.1
Normální tabulky ...................................................................................... 20
3.5.2
Logovací tabulky ...................................................................................... 21
3.5.3
Konfigurační tabulky ................................................................................ 21
Popis implementace ................................................................................................ 22 4.1
Zahájení testování ............................................................................................ 22
4.2
Samotné testování ............................................................................................ 24
4.2.1
Obnovení testu .......................................................................................... 25
4.2.2
Druhy testů ................................................................................................ 26
4.2.3
Druhy otázek ............................................................................................. 27
4.3
Ukončení testování ........................................................................................... 31
4.4
Zpracování výsledků ........................................................................................ 32
4.4.1
Faktory ...................................................................................................... 32
4.4.2
Výpočet ..................................................................................................... 33
4.4.3
Generování vysvědčení ............................................................................. 34
4.5
5
6
Zajímavé části řešení ........................................................................................ 35
4.5.1
Výpočet funkce na průměr faktorů ........................................................... 35
4.5.2
Lokalizace ................................................................................................. 36
4.5.3
Zobrazování časového limitu .................................................................... 37
Výsledky testování .................................................................................................. 38 5.1
Vzájemné testování .......................................................................................... 38
5.2
Interní testování ................................................................................................ 38
5.3
Externí testování............................................................................................... 39
5.4
Poznatky z testování ......................................................................................... 39
Závěr ....................................................................................................................... 40 6.1
Zhodnocení cílů a další pokračování................................................................ 40
Seznam použité literatury ............................................................................................... 41 Seznam obrázků .............................................................................................................. 42 Seznam použitých zkratek .............................................................................................. 43 Přílohy............................................................................................................................. 44 1
Obsah přiloženého CD ............................................................................................ 44
2
Datový model .......................................................................................................... 45
1 Úvod Cílem této bakalářské práce je nastínění návrhu a vývoje webové aplikace pro testování klientů a také konzolové aplikace sloužící pro výpočty, která bude schopna odpovědi klienta zpracovat a vyhodnotit. Po vyhodnocení vygenerovat PDF s grafickým znázorněním výsledků testu. Aplikace pro testování bude sloužit pro samotné otestování klienta. Bude možné časově omezovat určité části testování, pokládat různé druhy otázek a spouštět animované testy. Odpovědi klienta budou průběžně ukládány do databáze, tudíž při případném opuštění testovacího procesu v průběhu klient neztratí svoje odpovědi a bude moci navázat na testování později. K realizaci problému tvorby webové aplikace jsem se dostal již při hledání místa pro provedení praxe. Praxi jsem vykonával v Republikovém centru vzdělávání, s.r.o. (dále jen RCV), které již dlouhou dobu využívá programy pro testování a správu testů. Avšak se současnou verzí programu nejsou zcela spokojeni, jelikož nesplňuje požadavky jak na rychlost, tak také některé její části jsou zbytečně složité, nebo ne zcela funkční. Náplní mojí praxe bylo navržení zadávací dokumentace k nové verzi testovací aplikace, která již bude splňovat potřebné požadavky. Po skončení praxe se mě a mému kolegovi Janu Jindrovi naskytla příležitost realizovat tuto novou verzi programu dle zadávací dokumentace. Jelikož RCV má velice specifické požadavky na průběh testování i samotnou aplikaci, není možné využít žádných již zavedených aplikací na podobný problém např.: Moodle. Po diskuzi jsme společně došli k závěru, že realizace celého problému při studiu je nad naše síly, proto jsme se rozhodli jako téma bakalářské práce realizovat pouze zjednodušenou testovací aplikaci, na které si budeme moci otestovat principy aplikace, získat vetší přehled a pochopení požadované testovací aplikace. Předpokládáme, že tvorba této zjednodušené verze nás dostatečně připraví na následný vývoj kompletní aplikace pro firmu. RCV nám pro potřeby vývoje dalo k dispozici část testovací serveru a následně i doménu pro vývoj a testování naší aplikace.
10
2 Popis řešeného problému Kompletní testovací aplikace se bude skládat z několika částí. Bude se jednat o části administrační, testovací, výpočtovou a samotnou databázi. Administrační část bude sloužit pro tvorbu klientů, zakládání jednotlivých testování, správu uživatelů, hodnocení testů a další funkce týkající se administrace. Testovací část bude umožňovat provádět samotné otestování klientů v založených testovacích skupinách. Výpočtová část se stará o zpracování odpovědí z testování a na jejich základě vygenerování výsledků pro klienta. Databáze slouží pro uchovávání dat a zároveň i pro propojení administrační a testovací části, pomocí které si předávají data. S kolegou Janem Jindrou jsme se rozhodli si tyto části rozdělit a každý se soustředit na práci především na svém segmentu. V této bakalářské práci se tedy zaměřím na testovací část a výpočtový modul, které budu navrhovat a vyvíjet. Zbylé části zpracuje ve své bakalářské práci kolega.
2.1 Požadavky na implementovaný systém 2.1.1 Testovací část Aplikace pro testování by měla být schopna pokládat otázky různých typů. Základní typy potřebné pro testování jsou: otázka s jednou možnou odpovědí a otázka s více možnými odpověďmi. Oba tyto základní druhy otázek mohou být doplněny o obrázek. Ten se může vyskytovat u samotné otázky nebo přímo u odpovědí, možné jsou i různé kombinace. Speciálním typem otázek jsou animované, které po klientovi budou vyžadovat nějakou specifickou činnost jako například dohrát jednoduché pexeso pro otestování paměti klienta. Celé testování se skládá z projití jednoho modulu, který byl danému klientovi přidělen při zakládání testování. Každý modul se může skládat z několika testů, kde každý test má specifický okruh, který testuje, například matematické dovednosti. Každému testu předchází jedna stránka s pokyny k danému testu, kde je klientovi přiblíženo, co ho v následujícím testu čeká. Testu může předcházet i zácvik, který bude výrazně graficky odlišen od klasických otázek a bude simulovat druhy otázek v nadcházejícím testu
11
a donutí klienta na ně odpovědět správně, v opačném případě ho nepustí na další otázku a bude čekat na správnou odpověď. Každý test může být omezen časem, po jehož vypršení již klientovi nebude povoleno odpovídat na další otázky a aplikace přejde na další test v pořadí. V žádném testu nebudou otázky, které bude možné přejít bez odpovědi. V případě nezodpovězení otázky a pokusu přejít dále bude aplikace vyžadovat odpověď a nepustí klienta na další otázku. Pokud bude klient procházet nazpátek již zodpovězené otázky, bude již zaškrtnuta vybraná odpověď nebo odpovědi, které klient vybral. Pokud klient z jakéhokoliv důvodu opustí testování předčasně, při návratu do testování bude navrácen na pokyny k testu, u kterého skončil a po započetí testu nebude začínat od začátku testu, ale od poslední zodpovězené otázky.
2.1.2 Výpočtový modul Výpočtový modul bude konzolová aplikace, která při spuštění projde databázi a u všech proběhlých testování, které zatím nebyly vyhodnoceny, provede výpočet hodnocení. Modul obsahuje jednotlivá výpočtová shrnutí zvaná faktory. Faktor je výpočtem vázán na jednotlivé testy, může být přímo vázán i na jednotlivé otázky, nebo obsahovat odkaz i na jiný faktor v tomto modulu. Úkolem výpočtového modulu je spočítat všechny tyto faktory podle souvisejících vzorců pro výpočet. Vzorce budou udávané ve formátu řetězce, tudíž je bude potřeba rozložit a provést jednotlivé matematické operace nebo vlastní procedury pro přístup do databáze k jednotlivým odpovědím a podobně. Po provedení všech výpočtů proběhne naplnění dat do souboru MS Excel, který již bude šablonou pro výsledné vysvědčení. A následně proběhne vygenerování PDF1 vysvědčení podle zmíněné šablony.
12
3 Analýza a návrh implementace 3.1 Porovnání existujících řešení Je potřeba zmínit, že RCV se touto problematikou zabývá již poměrně dlouhou dobu, a proto existuje několik verzí testovací aplikace. Momentálně je využívaná především verze číslo 7 a několik testování je stále realizováno ve staré verzi číslo 6.
3.1.1 Starší verze programu Verze 7 se funkčností velmi podobá požadované funkčnosti této aplikace, jelikož se jedná o poslední verzi a je žádoucí, aby nová verze byla podobná té stávající. Ovšem tato verze obsahuje spousty chyb a díky automaticky generované databázi jsou některé akce nepřehledné a celá aplikace je pomalá. Vyskytují se také případy, kdy na slabších sestavách nebo pomalejších internetových připojeních dochází k přeskočení některých testů z důsledku dlouhého načítání. Proto je tato verze již nedostačující a vznikla potřeba verze nové.
3.1.2 Moodle Moodle je modulové objektově orientované dynamické vzdělávací prostředí, které umožňuje výuku prostřednictvím internetových online kurzů. Pod pojmem online si můžeme představit např. možnost studentů samostatně si volit, kdy a v jakém množství se budou učit a plnit své povinnosti zadané učitelem. Učení se v prostředí Moodle spočívá v aktivní účasti studentů na zadaných úkolech, přispívání do diskusních fór, účasti na hlasování, vyplnění online testů, vypracování písemné práce, studium přednášek apod. Téměř všechny úkoly lze obodovat a tím motivovat studenta k aktivní činnosti v kurzu. [1F] Tento software je šířen zdarma pod obecnou veřejnou licencí GNU2, jeho nasazení by tedy vyšlo mnohem levněji ve srovnání s vývojem vlastní aplikace. RCV má ovšem velmi specifické požadavky ohledně testovací aplikace, pro které by Moodle nedostačoval, nebo by muselo docházet k velkým kompromisům. Proto o tomto prostředí nebudeme uvažovat jako o plnohodnotné alternativě.
13
3.1.3 Fronter Vzdělávací platforma Fronter byla navržena tak, aby splňovala náročné požadavky svých uživatelů, a aby poskytovala jednotné, uživatelsky příjemné a bezpečné prostředí pro vzdělávání, spolupráci a komunikaci, doplněné o další služby, zákaznickou péči a podporu v rozvoji školy nebo organizace. Nabídka platformy Fronter se opírá o mnohaleté zkušenosti práce s uživateli ve Skandinávii, Spojeném království či zemích střední Evropy, a také o profesionální podporu partnerů u nás i ve světě. [2G] Jeho využití je především na školách a díky tomu se nejedná o příliš flexibilní a modifikovatelný systém, jelikož většina škol si vystačí s obdobným řešením. Z tohoto důvodu se v tomto případě jedná ještě o méně vyhovující alternativu než předchozí Moodle.
3.2 Využité technologie 3.2.1 C# Jedná se o elegantní a typově bezpečný objektově orientovaný jazyk, který umožňuje vývojářům vytvářet bezpečné a robustní aplikace, které pracují na .NET Framework. Jazyk C# můžeme použít pro tvorbu aplikací klienta systému Windows, webové služby XML3, distribuované součásti, aplikace typu klient-server, databázové aplikace a další. Syntaxe C# je vysoce výrazová, ale je také jednoduchá a snadno zapamatovatelná. Syntaxi využívající složenou závorku v jazyce C# pozná okamžitě každý, kdo zná jazyk C4, C++5 nebo Java6. Vývojáři, kteří znají některý z těchto jazyků, jsou obvykle schopni začít produktivně pracovat v jazyce C# ve velmi krátké době. Syntaxe C# zjednodušuje mnoho složitostí jazyka C++ a obsahuje silné funkce, jako jsou typy s možnou hodnotou null, výčty, delegáti, lambda výrazy a přímý přístup do paměti, což není k dispozici v jazyce Java. [3H]
3.2.2 ASP.NET WebForms Jedná se o webový framework, stručně řečeno se jedná o sadu knihoven, které umožňují tvorbu webových aplikací v jazyce C#. Knihovny obsahují hotová řešení mnoha základních problémů, které ve webových technologiích vyvstávají. Například
14
bezpečnost, autentifikace uživatele, práce s databází, správa formulářů a podobně. ASP tedy není programovací jazyk, programování probíhá v C# a je tedy potřeba základní znalost tohoto jazyka. Programovat lze teoreticky i ve VB7, ale jedná se o neoblíbenou možnost, jelikož je tento jazyk značně zastaralý. Dále je potřeba alespoň základní znalost HTML8 z důvodu, že se jedná o webové aplikace. [4I]
3.2.3 SQL SQL je anglická zkratka pro System Query Languague. Jedná se o programovací jazyk, jímž se pomocí klienta ptáme SQL serveru, a ten následně při správně položeném dotazu odpoví. Odpověď je formulována většinou do tabulky o jednom, více či dokonce žádném řádku. Historie jazyka SQL sahá do roku 1974, kdy Dr. Codd prezentoval svou práci o relačních databázových modelech. Zde se jednalo ale o práci teoretickou. První skutečně využitelnou verzi databázového jazyka vytvořila firma IBM9 a pojmenovala ji SEQEL, později se vžil název SQL. Implementace jazyka SQL by se měla řídit mezinárodními standardy, ovšem různé databázové platformy využívají odlišnou syntax, což činí problémy zejména při převodu databáze na jinou platformu. [5J][6K]
3.3 Vývojová prostředí 3.3.1 MS Visual Studio Express 2012 Microsoft Visual Studio je vývojové prostředí od Microsoftu. Může být použito pro vývoj konzolových aplikací a aplikací s grafickým rozhraním spolu s aplikacemi Windows Forms, webovými stránkami, webovými aplikacemi a webovými službami jak ve strojovém kódu, tak v řízeném kódu na platformách Microsoft Windows, Windows Mobile, Windows CE, .NET, .NET Compact Framework a Microsoft Silverlight. [7A] Visual Studio je jedním z nejpopulárnějších vývojových prostředí pro programování. Do Visual studia jsou přímo zabudovány šablony pro jazyky C/C++, Visual Basic .NET a C#. Dále jsou zde podporovány i další programovací jazyky pro programování desktopových, ale i webových aplikací (Oxygene, F#, Python, Ruby, XML/XSLT, HTML/XHTML, JavaScript, CSS atd.). Edice Express, která je distribuována jako freeware, je k dispozici jak ve verzi pro vývojáře desktopových aplikací, tak i ve verzi pro vývojáře aplikací webových. [8B] 15
3.3.2 GIMP Gimp je bitmapový grafický editor s částečnou podporou vektorové grafiky distribuovaný pod GPL10. Lze s ním vytvářet grafiku pro web, upravovat fotografie a samozřejmostí je také podpora práce s vrstvami. Jeho název je zkratkou spojení „GNU Image Manipulation Program“. Jednalo se o první program s otevřeným zdrojovým kódem, který nebyl určen pro programátory, ale pro běžné uživatele. Díky jeho úspěšnosti začaly vznikat další projekty s otevřeným kódem pro běžné uživatele. [9C]
3.3.3 Microsoft SQL Server 2012 Express Microsoft SQL Server označovaný také jako MSSQL nebo jen SQL Server je databázový systém od společnosti Microsoft. Nabízí celou řadu funkcí, které od moderní databáze požadujeme. Verze Express je vstřícný krok směrem k uživatelům. Jedná se o edici SQL serveru, kterou je možné využít zdarma také pro komerční účely. Edice má název po vzoru obdobného způsobu licenční politiky u jiných produktů Microsoftu jako například Visual Studio. Velikost databáze je omezena na 10 GB a nabízí snadné zálohování, obnovování a kompatibilitu s ostatními edicemi SQL serveru. [10D]
3.3.4 yEd Graph Editor yED Graph Editor je program, s jehož pomocí je možné snadno vytvářet diagramy, UML diagramy, myšlenkové mapy a mnoho dalších druhů schémat. Nabízí širokou škálu sofistikovaných algoritmů, které slouží k přehlednému uspořádání vytvořených diagramů. Po vytvoření diagramu nebo schématu je možné jej uložit v mnoha rozšířených formátech schémat nebo obrázků. [11E]
3.4 Návrh implementace Celá aplikace je rozdělena na několik funkčních celků. Součástí této práce jsou tyto celky dva, proto se budu každým z nich zabývat zvlášť.
16
3.4.1 Testovací část Jedná se o webovou aplikaci, která bude sloužit k testování několika klientů současně, kteří budou v jeden čas procházet každý svůj test, a aplikace bude ukládat jejich odpovědi do databáze. Na úvodní stránce aplikace se bude nacházet okno a žádost o zadání kódu, který získá klient při založení testování v administrační části, nebo ho dostane od testera, který takto testování založil pro jeho skupinu. Po zadání správného kódu se klient dostane na stránku sloužící pro výběr klienta, kde je vyzván ke zvolení svého jména ze seznamu. Může se zde nacházet i více jmen klientů, protože ve vybrané testovací skupině podle kódu může být více klientů pro jednodušší správu a testování většího množství klientů při určité události jedním testerem. Seznam bude navíc rozdělen do dvou částí. První část bude sloužit pro běžné zahájení testu, ale druhá část bude obnovení testů a bude určena pro uživatele, kteří již testování započali, ale z nějakého důvodu ho nedokončili. Dalším krokem už je samotné testování, kde jsou klientovi pokládány jednotlivé otázky podle modulu, ve kterém je testován. Tyto otázky budou vytahovány přímo z databáze a po zodpovězení bude odpověď také uložena do databáze. Pokud se klient rozhodne se k určité otázce vrátit a změnit svoji odpověď, bude záznam v databázi přemazán, aby se zde nevyskytovaly duplicitní záznamy. Testy mohou být několika druhů, proto je třeba podle typu otázky se rozhodnout, zda je potřeba vykreslit na stránku výběr pouze s jednou možnou odpovědí, nebo takové povolující i více odpovědí. Další variantou je rozhodnutí, zda je potřeba vypsat text otázky a odpovědí, nebo je třeba vykreslit obrázek prezentující tyto věci. Aplikace navíc musí rozlišovat, zda se jedná o otázku ostrou, nebo o součást zácviku a dle toho změnit barvu pozadí celé aplikace. Navíc u zácviků je třeba kontrolovat, jestli klient odpovídá správně a případně mu naznačit správnou odpověď, pokud odpoví špatně a nepustit ho dále, dokud neodpoví správně. Speciálním typem otázky jsou animované testy. Tyto testy mají vždy dvě části. První je zácvik, který klienta seznámí s ovládáním testu na krátké ukázce. Následuje ostrý test, který již spustí plnohodnotnou aplikaci. Po ukončení, například časovým limitem,
17
jsou klientovi spočteny správné a špatné pokusy a jsou uloženy do databáze pro výpočtový modul. Navíc by aplikace měla být schopna poznat jazyk klienta podle například jazyka prohlížeče a zobrazit mu celou aplikaci v tomto jazyce, pokud bude k dispozici. Když jazyk klienta nebude mezi možnými jazyky, tak proběhne zobrazení v základní češtině. Tato aplikace musí být velice jednoduchá, co se týče spojení k databázi. Je zde výrazný požadavek na aplikaci, která bude schopna v jeden okamžik obsloužit větší počty uživatelů, kde je předpokládáno, že tento počet stráví v aplikaci více jak 2 hodiny zároveň a každý uživatel bude vykazovat aktivitu (odpoví na otázku) přibližně každých 20 vteřin. Odezva aplikace při tomto počtu přihlášených uživatelů musí být menší než 1 sekunda. Navíc u testů, které jsou časové, zátěž nesmí nijak ovlivnit čas, který má uživatel na test vyhrazený.
3.4.2 Výpočtový modul Vše, o co se stará výpočtový modul, probíhá automaticky. K jeho práci není potřeba žádné uživatelské rozhraní, z tohoto důvodu se bude jednat o jednoduchou konzolovou aplikaci, která je schopna po spuštění provést potřebné operace bez zásahu uživatele a následně se sama ukončit. Výpočtový modul má k dispozici data k vyhodnocování ve dvou případech. V prvním případě se jedná o úspěšné ukončení testu klientem, kdy klient projde všechny testy v modulu a ukončí testování, následně je potřeba zpracovat klientovi odpovědi a vygenerovat vysvědčení. Druhý případ nastává, když v administraci uživatel použije volby na přepočítání výsledků určitého klienta. V tomto případě jsou všechny klientovi odpovědi znovu zpracovány a dojde k vygenerování nového vysvědčení. Podle předběžných předpokladů bude většina generování probíhat v rámci prvního případu, proto by bylo vhodné zařadit spouštění výpočtového modulu na konec testovací aplikace, aby klientovi výsledky byly přepočítány v co nejrychlejším možném čase od ukončení testování. Hlavní částí výpočtového modulu je samotné provádění výpočtů jednotlivých faktorů. Aby byl program použitelný i pro testy realizované ve starších verzích, musí být schopen zpracovávat vzorce používané v již existujících testech. Zároveň je také nutné,
18
aby bylo možné tuto již existující strukturu vzorců rozšiřovat o další funkce bez velkého zásahu do funkčnosti stávajících funkcí. Ve vzorcích se používá základních matematických operací, které je poměrně jednoduché vyhodnotit. Dále se ve vzorcích vyskytují klíčová slova, která jsou psána velkými písmeny. Klíčová slova mohou provádět dotazy na databázi, které vracejí číselnou hodnotu, nebo provádět složitější matematické operace, které není možné zapsat pomocí základních operací. Jedná se například o interpolaci. Po provedení všech výpočtů výpočtový modul vygeneruje podle šablony nové PDF, které bude vysvědčením pro klienta. Vysvědčení bude generováno podle šablony uložené v Excelu, do které výpočtový modul naplní vypočtená data a poté ji převede právě do formátu PDF.
3.5 Analýza a návrh datového modelu Před začátkem návrhu datového modelu celé aplikace bylo potřeba se důkladně seznámit s datovou strukturou starších verzí programu. Jednak bylo potřeba zjistit, jakým způsobem jsou uchovávána data ve staré databázi. Dalším důležitým úkolem bylo se na starou databázi objektivně podívat a vytknout jí všechny chyby, které ztěžovaly chod programu. Důležitým požadavkem na nový datový model bylo, aby bylo možné použít některá důležitá data ze starších verzí programu. Z tohoto důvodu zde byla snaha se co nejvíce držet struktury těchto databází. Při bližším prohlédnutí datového modelu verze 7 bylo jasné, že aplikace se postupně násilně rozšiřovala o několik nových funkcí, které bylo potřeba nějak zadat do databáze. Vyskytovalo se zde několik tabulek, které byly na první pohled generovány automaticky a neobsahovaly žádný cizí klíče, byly pouze přidány do existující databáze a obsahovaly každá desítky sloupců, které na první pohled neměly žádný význam, jelikož se v nich nevyskytovaly žádné hodnoty. Datový model se už dostal do takového stavu, že tyto tabulky tvořily přibližně třetinu všech tabulek v databázi. Hlavním úkolem návrhu databáze bylo odstranit všechny nepotřebné tabulky a zároveň zachovat co nejvyšší počet těch důležitých. Výsledkem návrhu je datový model obsahující 43 tabulek. Tento kompletní model se nachází v příloze č. 1 této práce. Jedná 19
se o velkou redukci počtu tabulek, jelikož datový model starší verze obsahoval více než 150 tabulek. Ale i přes tento výrazný pokles v počtu tabulek se stále jedná o velký počet, proto jsme se rozhodli tabulky rozdělit do tří funkčních typů a odlišit je. Prvním způsobem odlišení je rozdílná barva v návrhu datového modelu následovaná ještě přidáním prefixů před název tabulky, který také odlišuje jejich typ.
Obrázek 1: Rozdělení tabulek v datovém modelu [Zdroj: vlastní]
Tabulky jsou rozděleny do tří typů: •
Normální – označeny zelenou barvou a bez prefixu,
•
Logovací – označeny fialovou barvou s prefixem LOG,
•
Konfigurační – označeny modrou barvou s prefixem CFG.
3.5.1 Normální tabulky Tyto tabulky se budou používat pro data, která budou často měněna nebo budou přímo vstupy od uživatelů. Mezi tyto tabulky patří například odpovědi klientů nebo informace o uživatelích aplikace. U těchto tabulek se předpokládá velký počet záznamů a zároveň i častá manipulace s jejich daty. Často se do nich bude zapisovat, ale bude potřeba v nich i často vyhledávat určité informace. Jako základní příklad by se dalo uvést, v souvislosti s testováním klienta, právě ukládání odpovědí do databáze, kde je potřeba ukládat odpověď na každou otázku, která je klientovi položena. Navíc bude následně potřeba se na tyto odpovědi dotazovat, při návratu klienta na již zodpovězenou otázku, nebo po skočení testu bude výpočtový modul potřebovat odpovědi na zjištění úspěšnosti klienta.
20
3.5.2 Logovací tabulky Tyto tabulky mají za účel uchovávat pouze zápisy o činnostech uživatelů v aplikaci, případně logovat chyby, které nastanou při běhu aplikace. Všechna logovaná data musí obsahovat dostatečné množství informací, aby z nich bylo možné určit co nejvíce příčin vzniklé chyby. Chybu je možné analyzovat i z více logovacích tabulek najednou. Například, pokud se vyskytne chyba, tak zápis o ní budeme mít v tabulce logující chyby, kde zjistíme informace ohledně stránky, funkce a hodnot proměnných, při kterých k chybě došlo, a v tabulce logující data o uživatelích budeme schopni dohledat ještě upřesňující informace o uživateli, kterého chyba postihla. Tohoto druhu tabulek bude v datovém modelu nejmenší množství.
3.5.3 Konfigurační tabulky Těchto tabulek bude v datovém modelu nejvíce. Jak již z názvu vyplívá, bude se jednat o tabulky, které obsahují data použitá pro konfiguraci aplikace. Mimo nastavení aplikace se v těchto tabulkách nachází také konfigurace balíků testů, otázek a faktorů. Převážně se jedná o data, u kterých se očekává pouze malá, nebo dokonce žádná úprava a přidávání záznamů. Do některých se bude zasahovat pouze při zvláštních případech, jakými jsou úprava stávajících testů nebo přidávání nových testovacích balíků. Ale tyto operace se dají považovat za natolik ojedinělé, že hlavní náplň práce s těmito tabulkami bude zahrnovat především čtení informací a vyhledávání dat.
21
4 Popis implementace Předchozí kapitoly se věnovaly především teoretické části celého problému a základní specifikaci celé aplikace. Proto je již potřeba nahlédnout na samotný vývoj aplikace. V době začátku samotného vývoje testovací aplikace již byla k dispozici kompletní zadávací dokumentace, která vznikla jako jeden z výstupů mojí vysokoškolské praxe. Již ze zadávací dokumentace bylo zřejmé, co se od celé aplikace očekává a co by měla splňovat, proto již při samotném vývoji aplikace docházelo jen k relativně malým změnám oproti původnímu návrhu. Následující kapitola popíše podrobně funkčnost testovací části i výpočtového modulu, stejně jako se zaměří na určité zajímavé části zdrojového kódu a ty budou probrány důkladněji. Začneme testovací částí, jak již bylo řečeno. Hlavním úkolem testovací části aplikace je otestování klienta z určitého modulu postupným pokládáním otázek různých druhů a očekávání odezvy od klienta. Proto se zde zaměřím na celý proces otestování jako na celek a postupně proberu všechny jeho části od vybrání testovací skupiny a určitého klienta, až po dokončení testování, kde přijde na řadu další část aplikace, kterou je výpočtový modul, který se postará o vyhodnocení. Hlavní důraz při implementaci testovací části byl kladen na její jednoduchost a intuitivní ovládání. V žádné části testování by nemělo dojít k situaci, kdy klient nebude vědět, co má dělat, nebo kam má kliknout. Z tohoto důvodu je vzhled této části aplikace velmi zjednodušený, jsou zde velká a jednoduchá tlačítka, neobsahuje zbytečné grafické prvky, které by mohly klienta rozptýlit nebo rušit při testování. Aplikace navíc umožnuje lokalizace do více jazyků. Zatím se jedná pouze o češtinu a slovenštinu, ale je možné přidat v budoucnosti více jazyků. Při vstupu do aplikace je zjištěno, jaký jazyk má uživatel nastaven v prohlížeči a podle toho je nastaven jazyk aplikace, pokud je dostupný. Pokud není jazyk dostupný, je použita čeština.
4.1 Zahájení testování Naprosté zahájení testování proběhne v administrační části aplikace, kde tester založí testovací skupinu, do této skupiny přidá klienty a každému klientovi vybere modul, ve kterém má být testován. Následně dojde k zahájení testování a skupině je přidělen unikátní pětimístný kód. Tento kód je pak použit k přístupu do testovací části pro 22
jednotlivé klienty. Ve starších verzích aplikace byl používán kód čtyřmístný, ale z jednoduchého důvodu předejití kolizím se starší verzí, byla délka v nové verzi o jeden znak navýšena. Úvodní stránka testovací části je velmi jednoduchá. Obsahuje pouze uvítání, žádost o zadání kódu, textové políčko na tento kód a poslední je tlačítko pro přihlášení. Po vyplnění kódu a stisknutí tlačítka je proveden dotaz na databázi, zda je kód pravý. Pokud se jedná o kód, který neexistuje u žádné testovací skupiny, která je připravena k testování, je uživateli oznámeno, že zadal špatný kód a zůstává na úvodní stránce s možností zadat nový a platný. Klient může použít také odkaz v administrační části, při jehož použití je na této stránce kód již vyplněn a je možné ihned přejít na další krok bez potřeby opisování kódu. Pokud se jedná o platný kód testovací skupiny, je uživatel odeslán na následující stránku s výběrem klienta. Na tuto stránku jsou dotazem z databáze vytaženi všichni klienti z dané testovací skupiny určené zadaným kódem. S tímto seznamem je z databáze také získána informace, zda klient již zodpověděl nějaké otázky v testu, nebo se k němu žádné odpovědi nevztahují. Podle této informace jsou klienti rozděleni do dvou tabulek nacházejících se na stránce, aby bylo jasné, zda klient začíná od začátku celého testování, nebo proběhne jeho připojení do již zahájeného testování. Tyto dvě tabulky mají vypovídající nadpisy Start testu a Obnovení testu. Pokud některá z těchto dvou tabulek neobsahuje žádné klienty, je celá i s nadpisem schována, aby nedocházelo ke zbytečnému matení klienta, a je zobrazena pouze ta potřebná. V těchto tabulkách je vyobrazeno celé jméno klienta spolu s jeho datem narození. Ten se zde nachází pro případ větších testovacích skupin, kde by mohlo dojít k případům se shodným jménem a příjmením. Tato možnost nejasností se s přidáním i data narození dostává do pouze teoretických mezí, tudíž je možno ji zanedbat. Klient je po vybrání jména ze seznamu ještě dotázán modulárním oknem, kde je znovu vypsáno jeho jméno, zda si opravdu přeje pokračovat s tímto jménem. Při vybrání položky Zpět, nebo kliknutí kdekoliv mimo zobrazené okno, dané okno zmizí a klient má možnost nového výběru jména. Při kliknutí na tlačítko Pokračovat je zahájeno už samotné testování a končí proces zahájení testování.
23
4.2 Samotné testování Do této části se můžeme dostat pouze dvěma způsoby. První způsob je zahájení nového testování, při kterém začínáme celý proces od začátku a druhý způsob, při kterém dojde k obnově testu a klient může být poslán například do poloviny testování, jelikož již má předchozí části vyplněny. Na začátku je třeba vysvětlit první způsob, který ukáže tento proces kompletní a až poté přijde na řadu způsob druhý, který je vlastně pouze jakousi nástavbou toho prvního. Zpravidla na začátku každého modulu je zařazen „předzácvik“, který má klienta seznámit s testovacím prostředím, jak se odpovídá na otázky a jak celé prostředí vypadá. To má také zajistit, aby klient při začátku testování nebyl například zmaten z rozmístění prvků na stránce a nemusel zjišťovat celé ovládání až při ostrém testu. Základní „předzácvik“ je složen pouze ze dvou otázek, kde je v zadání uživateli jasně vysvětleno, co má dělat. Každý modul je rozdělen na několik testů, které jsou pokládány postupně podle priority, kterou mají nastavenou v konfiguraci modulu. Základní rozlišení testů je na ostré a zácvikové. Zácvikové testy slouží k naučení klienta pracovat s prostředím nebo ho mají seznámit s informacemi potřebnými pro složení následujícího testu. Tyto testy jsou výrazně odlišeny změnou barvy pozadí na oranžovou, odpovědi v těchto testech se nikam neukládají a klient je donucen odpovídat správně. Ostré testy mají již klasické modré pozadí. Slouží pro otestování klienta v různých oborech, které vybraný modul poskytuje, a mohou být několika druhů. Klientovi odpovědi jsou ukládány a samozřejmě není kontrolována správnost odpovědí a klient může odpovídat i špatně. Před začátkem každého testu jsou zobrazeny pokyny k následujícímu testu. Tyto pokyny si může klient v klidu pročíst, protože zde není časový limit. Ze stránky s pokyny se klient dostane kliknutím na tlačítko Start testu, které zahájí daný test. Dole na stránce se vyskytuje lišta, která ukazuje stav klienta v daném testu. Nachází se zde progress bar, který ukazuje, jak daleko je uživatel v současném testu. Navíc, pokud se jedná o test s časovým omezením, je pod ním umístěn druhý bar, na kterém
24
ubíhá čas do konce testu. Pod nimi se nachází základní informace o klientovi, jeho celé jméno a datum narození. Dále se na této liště nacházejí dvě tlačítka, která se používají pro pohyb mezi otázkami, tlačítko Další, které přesune klienta na další otázku, nebo ukončí test, pokud se jedná o otázku poslední a tlačítko Zpět, které vrací na otázku předchozí, kde už je vyplněna uživatelem zvolená odpověď dříve.
Obrázek 2: Navigační panel testování [Zdroj: vlastní]
4.2.1 Obnovení testu Druhým způsobem, jak zahájit testování je pomocí obnovení. Tato volba se nabízí pouze pro klienty, kteří již mají za sebou určitou část testování a budou tedy pokračovat v započatém testování od místa, kde minule skončili. Celý proces zahájení testování probíhá stejně jako v případě nového testování. Jediný rozdíl je, že klient vybere své jméno z jiné tabulky při výběru klienta. V tomto kontextu je potřeba zmínit, že pokud se klient právě testuje, tak při každé jeho odpovědi na ostrou otázku, je ukládán jeho postup testováním do speciální tabulky v databázi. Tato tabulka je pak využívána v administrační části, kde je využívá tester, aby měl přehled, jak si vedou klienti z jeho testovací skupiny v reálném čase. Do této tabulky se ukládají základní data o testování, jedná se o informace ukazující, v kterém testu z kolika se klient nachází, kolikátou otázku v daném testu odpověděl jako poslední a pokud se jedná o test s časovým omezením, tak také kolik času z limitu již využil. Výše zmíněná tabulka se dá využít i pro účely obnovení testu, jelikož nám ukazuje přesně na místo, kde uživatel minule skončil. Pokud by byl klient rovnou přenesen na poslední zodpovězenou otázku, mohlo by dojít k nejasnostem obzvlášť, pokud původní testování a obnova neprobíhají ve stejný den. Z tohoto důvodu je klient přenesen na počáteční pokyny k testu, u kterého skončil, pokud tento test má zácvik, je klient nucen vykonat tento zácvik znovu. Po přečtení pokynů, případně projití zácviku, by klient měl být obeznámen s tím, co ho čeká, stejně jako při původním průchodu. Po zahájení testu nezačíná na první otázce, ale na poslední zodpovězené otázce a může 25
pokračovat dále v testování. Jestliže tento test je časový, dojde k načtení času, který má uživatel v dané tabulce uložen.
4.2.2 Druhy testů Testy jsou několika druhů, liší se především zaměřením otázek, zda po klientovi chceme prokázat nějaké znalosti v určitém oboru, nebo zjišťujeme například, co ho zajímá. Také se mohou lišit typem otázek, které může daný druh testu obsahovat a další drobnosti s tím spojené. Výkonové testy •
slouží k měření výkonu klienta v určitém oboru,
•
mohou být zácvikové i ostré,
•
mají možnost nastavení časového limitu,
•
umožňují otázky typu jedna možná i více možných odpovědí,
•
umožňují, že úkol, podúkol i každá odpověď může obsahovat obrázek,
•
mají speciální možnost připojit k nim aplikaci.
Osobnostní testy •
slouží k určení osobnosti klienta a jeho chování v určitých situacích,
•
jsou pouze ostré testy, nemají zácvik,
•
nelze nastavit časové omezení,
•
umožňují pouze otázky typu jedna možná odpověď.
Předzácvikové testy •
slouží k seznámení klienta s prostředím testování,
•
nutí klienta odpovědět správně,
•
jsou pouze zácvikové testy,
•
nelze časově omezit, 26
•
umožňují otázky typu jedna možná i více možných odpovědí.
Zájmové testy •
slouží k určení věcí a oborů, o které má klient zájem,
•
jsou pouze ostré testy, nemají zácvik,
•
nelze u nich nastavit časové omezení,
•
umožňují pouze otázky typu jedna možná odpověď.
Dotazníkové testy •
slouží ke zjištění upřesňujících informací o klientovi,
•
výstupy se většinou pouze propisují k hodnotiteli, nebo na vysvědčení,
•
nelze časově omezit,
•
jsou pouze ostré testy, nemají zácvik,
•
umožňují otázky typu jedna možná i více možných odpovědí.
4.2.3 Druhy otázek Jak již bylo zmíněno, stejně jako je několik druhů testů, je zde i několik druhů otázek, které je potřeba odlišovat. Zde je základní rozdělení obsahující také ilustrační obrázky. Jedna možná odpověď Jak je již z názvu patrné, jedná se o otázky, na které lze vybrat pouze jednu odpověď z nabízených. Tyto otázky jsou nejčastější a všechny osobnostní a zájmové testy, které mají zpravidla nejvíce otázek, se skládají výlučně z tohoto typu otázek. Odpovědi u tohoto typu otázek jsou realizovány jednou komponentou typu RadioButtonList. Jedná se o komponentu z frameworku ASP.NET a umožňuje jednoduché naplnění otázkami, stejně jako atributy potřebné k zjištění, zda klient na otázku odpověděl, popřípadě zjistit, kterou možnost vybral, aby informace o ní bylo možné uložit do databáze. Skutečnost, že může být vybrána pouze jedna možnost, si hlídá komponenta sama, jelikož se jedná o jeden z jejích poznávacích prvků. Zaškrtávací políčka u těchto otázek jsou kulatá, jak je zvykem i v jiných aplikacích. 27
Obrázek 3:: Ukázka otázky jedna možná odpověď odpov [Zdroj: vlastní]
Více možných odpovědí ědí Jedná se o obdobu předchozího ředchozího edchozího druhu, ale jak je patrné, je zde možno vybrat více možností z nabídky, ale vždy musí být vybrána aspoň aspo jedna.. Otázky tohoto typu nejsou tak časté jako předchozí, edchozí, ale mají také své zastoupení. Odpovědi di jsou realizovány obdobně obdobn jako u jedné možné odpovědi, ědi, ale je zde použita komponenta CheckBoxList. Tato komponenta má obdobné vlastnosti jako komponenta předchozí, edchozí, tudíž umožňuje umožň stejně jednoduchou obsluhu. luhu. Rozdílem je, že jedním ze základů této komponenty je právě možnost označit více odpovědí, tudíž je vhodná pro náš případ. Mírněě složitější složit oproti předchozímu případu ípadu je zjišťování zjiš odpovědi, kterou uživatel označil, čil, jelikož jel může označit více odpovědí. Užž se nestačí zeptat na index vybrané odpovědi, odpově ale je potřeba je všechny procházet v cyklu a kontrolovat, jestli je zrovna kontrolovaná odpověď odpov označena a případně jí uložit do databáze. Zaškrtávací políčka ka u tohoto druhu jsou, jak je obvyklé, obvyklé čtvercová.
Obrázek 4:: Ukázka otázky více možných odpovědí odpov [Zdroj: vlastní]
28
Obrázkové otázky Oba předchozí edchozí druhy mohou být také obrázkové, ale jelikož se jedná o otázku dostatečně rozdílnou od normální textové, je potřeba, pot aby byly zařazen řazené jako nový druh. Každá otázka se skládá z úkolu, podúkolu a odpovědí. Každá z těchto ěchto částí může být vyjádřena ena obrázkem. Obrázek má uloženou v databázi cestu ve speciálním sloupci, sloupci a pokud sloupec obsahuje nějakou n jakou hodnotu, tak je místo textu načten nač právě obrázek a zobrazen klientovi. Pokud se jedná o obrázek u odpovědi, odpov jsou použity opětt dané komponenty na vyznačení vyzna možností, které poskytují variantu přidat p idat jim jako parametr obrázek, který pak celý c funguje jako odkaz. Tudíž i při kliknutí na obrázek se označíí vybraná odpověď. odpov
Obrázek 5:: Ukázka otázky s obrázky [Zdroj: vlastní]
Zácvikové otázky Tyto otázky jsou speciální variantou všech předchozích p druhů.. Na první pohled pohle jsou shodné s předchozími,, jsou zde však důležité ležité rozdíly. Jsou zde označeny ozna správné odpovědi di a uživatel musí odpovědět odpov správně,, jinak mu není povoleno pokračovat pokra dále v dalších otázkách. Pokud klient alespoňň jednou odpoví špatně, špatn je správná odpověď ěď nebo odpovědi odpov podle typu otázky zvýrazněna ěna modře, mod aby klient nezůstal zaseknutý knutý u jedné otázky a pouze si uvědomil, domil, která odpověď měla být správně. 29
Obrázek 6:: Ukázka otázky zácviku 1 [Zdroj: vlastní]
Obrázek 7:: Ukázka otázky zácviku 2 [Zdroj: vlastní] vla
Animované otázky Jedná se o otázky naprosto odlišné od všech ostatních. ostatních Neobsahují eobsahují žádné odpovědi odpov a jedná se spíše o takovou menší hru než otázku. Mohou testovat klientovu přesnost, paměť nebo reakce.. Na tyto úkoly by klasické otázky nestačily, ily, proto jsou použity tyto speciální. Před ed každým animovaným testem je zařazen za azen zácvik, který je kratší variantou ostré otázky a klienta má naučit nau it specifické ovládání této otázky, které by nemuselo být na první pohled jasné. Tyto otázky jsou napsané v jazyce JavaScript11 a do ASP stránky vloženy pomocí iframu. Toto zvláštní řešení bylo zvoleno z důvodu, vodu, že animované testy si musejí zachovat stejnou obtížnost a ovládání, tudíž by bylo velmi náročné náro nároč chování těchto aplikací napodobit v jiném jazyce, než v kterém jsou již iž zavedené. Proto byla zvolena 30
možnost, ponechat otázky stávající a pouze je přenést do novější verze aplikace nezměněné. Na následujícím obrázku je vidět jedna z těchto otázek, ve které musí uživatel mačkat šipky na klávesnici podle toho, která se rozsvítí na monitoru. Pokud zmáčkne správně je mu přičten kladný bod, pokud nesprávně je mu přičten bod záporný. Po uplynutí časového limitu je bilance těchto bodů uložena do databáze, odkud jsou přístupné výpočtovému modulu pro výpočet dané schopnosti klienta.
Obrázek 8: Ukázka otázky aplikační [Zdroj: vlastní]
4.3 Ukončení testování Po samotném testování, kdy klient odpoví na všechny otázky v testovacím modulu, je testování ukončeno. Klientovi je zobrazena konečná stránka s poděkováním a informací, že testování bylo ukončeno a klient může ze stránky odejít. Pokud klient dokončí testování, jeho jméno je odstraněno ze seznamu při výběru klienta na začátku testování. Klientovi je také v databázi přepnut stav jeho testování, který značí, že byl již dotestován a čeká na hodnocení. 31
Při ukončení testování je také spuštěn výpočtový modul, který má na starosti právě vyhodnocení dotestovaných klientů.
4.4 Zpracování výsledků O zpracování výsledků se stará výpočtový modul, který prochází klienty a provádí vyhodnocení u těch, kteří byli dotestováni. V podstatě dochází k počítání faktorů, které jsou vázány na testy a shrnují určitou vlastnost nebo dovednost klienta. Co to jsou faktory a jak se počítají, se pokusím shrnout v následující kapitole.
4.4.1 Faktory V aplikaci je několik druhů faktorů, většina odpovídá druhům testů. •
Osobnostní – test nebo výpočet.
•
Výkonové – mohou mít navázané až dva testy, výpočet, nebo aplikační otázku.
•
Zájmové – test nebo výpočet.
•
Profese – výpočet.
•
Dotazník – test.
•
Předzácvik – nemají výstupní hodnotu.
•
Výpočtové – výpočet.
•
Zástupné – speciální faktory navázané pouze výpočtem.
Všechny faktory k sobě přímo nebo nepřímo vážou jeden nebo více testů a jakoby obalují a doplňují testy. Některé faktory mají vstupní hodnoty dané testem, ke kterému jsou přiřazeny, ostatní mají vstupní hodnoty nulové, jelikož je neurčuje přímo jeden test, ale výpočet, který se může odkazovat na více testů. Každý faktor má definované ohraničení pro výstupní hodnoty, základní hodnota ohraničení je 0 – 100, ale může se jednat o jakékoliv hranice, které musí poté výpočtový modul dodržet a výsledek do těchto hranic přizpůsobit. Nevýpočtové faktory jsou počítány jednoduchým výpočtem, který se používá pro procentuální úspěšnost. Výsledek klienta je vydělen maximální možnou dosažitelnou 32
hodnotou a toto číslo je vynásobeno stem. Další úprava je nutná pouze v případě, že výstupní hranice nejsou stanoveny na základní a je tedy potřeba výsledek ještě převést do požadovaných hranic. Výpočtové faktory mají vazbu s výpočtem a nejsou vázány na žádný test. Jejich výstupní hodnota je dána právě uvedeným výpočtem a výsledek se již nepřevádí do výstupních hranic, ale je pouze oříznut, aby se vešel do požadovaného výstupu.
4.4.2 Výpočet Řetězec, který určuje výpočet, je v podstatě matematický vzorec. Obsahuje základní matematické operace jako je sčítání, násobení a podobné. Dále také obsahuje operace složitější, kde se již většinou jedná o dotazy na databázi. Dotaz může obsahovat jednoduché vytažení jednoho záznamu a jeho zapojení do výpočtu. Ale dotazy mohou být i složitější, například spočítání průměru u určité hodnoty v daných záznamech u určité tabulky. Tyto složitější operace uvozují klíčová slova. Klíčová slova v řetězci musí dodržovat jednotný formát, kdy je klíčové slovo napsáno velkými písmeny, místo mezer je použito podtržítko a následuje jednoduchá závorka, ve které je jeden nebo více číselných údajů upřesňujících dotaz. Je možné klíčová slova vnořovat, z toho důvodu jsou důležité priority, aby nedošlo k chybě překladu, kdy by docházelo k dotazu na databázi zatím nespočítaným klíčovým slovem a tudíž nenajití požadovaných výsledků a provedení chybného výpočtu. Přeložení výpočtu probíhá tak, že se vyhledají v řetězci klíčová slova a začne se s těmi slovy, co mají největší prioritu na překlad. Největší priorita se určuje podle toho, že dané klíčové slovo musí být přeloženo, aby mohlo být přeloženo jiné, které data z toho předchozího používá pro vlastní výpočty. Překlad bude probíhat tak, že pomocí metody String.search a větvení switch najdeme v řetězci klíčové slovo s nejnižší prioritou, provedeme dotaz na databázi a v řetězci dané klíčové slovo a závorku i její obsah nahradíme nalezenou hodnotou. Dále prohledáme řetězec na stejné klíčové slovo a případně provedeme další náhradu. Pokud již dané klíčové slovo nenalezneme, přesuneme se na klíčové slovo s nižší prioritou. Tento proces provádíme, dokud neprojdeme všechny priority čili do té doby, než se zbavíme všech klíčových slov a nezůstanou nám v řetězci pouze jednoduché matematické operace, které jsme již schopni jednoduše spočítat. 33
Dále bych chtěl ukázat některá klíčová slova, která se v řetězcích výpočtu vyskytují. Zjištění hodnoty otázky v určitém testu Dotazem na databázi zjistí hodnotu odpovědi, kterou klient označil u vybrané otázky. Syntaxe: TEST_HODNOTA_OTAZKY(id_testu, poradi_otazky) Zjištění hodnoty odpovědi u aplikací Využívá se u aplikačních otázek, kde je potřeba zjistit přesný počet správných a špatných odpovědí, které klient získal u aplikační otázky. Jako parametr je použit výstupní proměnná aplikace. Syntaxe: HODNOTA_ODPOVEDI(hodnota) Zjištění hodnoty jiného faktoru Jednoduchý dotaz vrátí hodnotu dříve vypočteného faktoru u počítaného klienta. Syntaxe: FAKTOR(kod_faktoru) Vypočítání průměru několika různých faktorů Vrátí průměrnou výstupní hodnotu několika zadaných faktorů pomocí kódu. Syntaxe: PRUMER_FAKTORU(kod_faktoru, kod_faktoru, …) Interpolace Se vstupní hodnotou je provedena lineární interpolace, kdy je hodnota z původního intervalu přenesena úměrně do nového. Syntaxe: TRANS(hodnota, min_puvodni, max_puvodni, min_novy, max_novy)
4.4.3 Generování vysvědčení Po vypočtení všech faktorů, které se k danému modulu vztahují, již nic nebrání vytvoření vysvědčení, které bude klienta informovat o jeho výsledcích v daném testování. Pouze pokud se jedná o modul s hodnocením, kde je potřebný ještě zásah specializovaného uživatele, jsou pouze vypočteny faktory a čeká se, až uživatel zadá dodatečné informace a až při dalším spuštění výpočtového modulu dojde k vygenerování vysvědčení s již potřebnými informacemi. 34
Generování vysvědčení probíhá naplněním dat do šablony vytvořené v programu MS Excel, která je přiřazena unikátní ke každému modulu, jelikož se každý modul liší informacemi, které jsou potřeba na vysvědčení propsat. Následně po vepsání výstupních dat do prvního listu šablony je v šabloně druhý list, který obsahuje grafický vzhled vysvědčení a grafy výsledků a je převeden na formát PDF, který představuje výsledné vysvědčení pro klienta. Toto vysvědčení je možné stáhnout v administrační části aplikace.
4.5 Zajímavé části řešení V této části zvýrazním některé části řešení, které jsou zajímavé a navíc snadno pochopitelné pro takto jednoduché předvedení. Vždy ukážu zdrojový kód určitého problému a krátce ho vysvětlím.
4.5.1 Výpočet funkce na průměr faktorů Tento úryvek ze zdrojového kódu se týká výpočtového modulu, konkrétně jedné části, která převádí řetězec klíčových slov na čísla. Ukazuji pouze rozložení jednoho klíčového slova, konkrétně výrazu na spočítání průměru faktorů. Obdobné rozložení je použito i pro všechna ostatní slova.
Obrázek 9: Ukázka řešení – Výpočet průměru [Zdroj: vlastní]
Můžeme vidět, že průměr faktorů můžeme dělat z neurčitého počtu hodnot, tudíž prvním úkolem je dané hodnoty získat do pole pomocí funkce Split. Když je již máme v poli je možné toto pole procházet a provádět dotazy na databázi, které ukládají do nového řetězce postupně hodnoty faktorů. Nýbrž bylo za každou hodnotu přidáváno 35
také znaménko plus, také je potřeba po dokončení oříznout poslední znaménko, aby nevznikla syntaktická chyba při výpočtu. Poté, když již máme potřebné číselné hodnoty všech faktorů, je možné jednoduše spočítat průměr a následně nahradit klíčové slovo v původním řetězci vypočtenou hodnotou. Tento proces se provádí, dokud řetězec obsahuje vybrané klíčové slovo, poté se přechází na slovo s nižší prioritou.
4.5.2 Lokalizace Jak již bylo řečeno, je potřeba, aby program byl schopen zobrazovat uživatelské rozhraní ve více jazycích, ale u některých prvků, jako jsou například modální okna, je potřeba speciální ošetření tohoto problému. Lokalizace celé stránky je prováděna podle jazyka prohlížeče. K dispozici jsou pouze slovenský a český jazyk.
Obrázek 10: Ukázka řešení – Lokalizace [Zdroj: vlastní]
Tato část řešení představuje vypsání chybové hlášky v modulárním okně. Je vypsána hláška pro případ, že uživatel neodpoví vůbec, nebo pro případ špatné odpovědi. Toto rozhodování nás v rámci této ukázky natolik nezajímá. Aplikace obsahuje pouze dva jazyky a jako základní je považována čeština. Z tohoto důvodu nám stačí zjistit nastavení jazykové kultury stránky a zkontrolovat, zda se jedná o slovenštinu, pokud se o ní nejedná, nastavujeme jako jazyk češtinu. Pro zobrazení modulárních oken ve správném jazyce musíme nastavit správnou jazykovou kulturu do současného vlákna, což je provedeno na začátku. Poté již dochází ke správnému zobrazení i v rámci speciálních prvků aplikace. 36
4.5.3 Zobrazování časového limitu U testů, které jsou omezeny časovým limitem, je potřeba zobrazovat klientovi čas který mu zbývá do konce testu. Tento čas je potřeba zobrazovat číselnou hodnotou, ale také indikátorem průběhu, který bude grafický. Pro tento účel je následující úryvek z kódu.
Obrázek 11: Ukázka řešení – Časovač [Zdroj: vlastní]
Čas je na pozadí aplikace uchováván jako celé číslo znázorňující sekundy, ovšem pro uživatele by takovéto zobrazení bylo těžko čitelné, proto je potřeba zobrazit čas v lepším formátu, kde jsou minuty a dvojtečkou oddělené sekundy. Prvně je zjištěn celkový čas na test, pokud se jedná o nulu, znamená to, že test není časově omezen a odpočítávání nezobrazujeme. Pokud je potřeba zobrazit odpočet času, prvně dojde k převedení času do lepšího formátu pro účel popisků, které se provádí různým dělením šedesáti. Následně jsou hodnoty zavedeny do progress baru, který vizuálně klientovi ukazuje odpočet času. Jelikož navíc potřebujeme, aby probíhaly změny těchto čísel, nejjednodušší řešení je pomocí Javascriptu, proto je zde na konci, ještě pravidelné volání, které zajišťuje odpočítávání i když nedojde k přechodu na jinou stránku.
37
5 Výsledky testování Vyvíjená aplikace byla testována průběžně v několika fázích, zde se pokusím shrnout jednotlivé fáze testování.
5.1 Vzájemné testování Jako první fáze testování se dají označit počátky vývoje aplikace, kdy jsme s kolegou každý programovali svoji část celé aplikace. Zároveň při tomto vývoji jsme každý prováděli testování druhé části, při kterém došlo k odstranění několika závažných nedostatků a mírných nelogičností, kterých si ten, kdo aplikaci přímo programuje, nemusí všimnout.
5.2 Interní testování Další testování již proběhlo osobou, která nebyla nijak spojena s procesem vývoje aplikace. Jednalo se o stážistu, který měl vyhrazeno několik hodin na procházení aplikace a hledání chyb a celkově nejasných částí. Velkou výhodou z pohledu testování se ukázal fakt, že daný stážista se s danou problematikou nikdy nesetkal, tudíž procházel aplikaci stejným způsobem, kterým bude aplikaci procházet uživatel seznamující se s programem. Z tohoto důvodu se nám podařilo odstranit některé nejasnosti a zbytečné dotazy na uživatele v základních procesech, které nastávají nejvíce. Například informační okno, které oznamovalo, že otázka nebyla zodpovězena. Bylo objeveno také několik chyb, které způsobily pád aplikace, nebo špatné ukládání dat do databáze, většinou zapříčiněné chováním uživatele, které jsem neočekával a nepočítal s ním. Všechny tyto chyby musely být opraveny, anebo bylo třeba zabránit způsobům, kterými k nim došlo, aby se mohly opakovat. Mimo testování stážistky si program prošel i ředitel Kariérového oddělení, který je velmi dobře seznámen s problematikou testování a aplikací na toto téma. Jeho zpětná vazba na některé funkce a nedostatky aplikace byla velkým přínosem pro budoucí vývoj a další pokračování v práci na této aplikaci.
38
5.3 Externí testování Dále nám bylo nabídnuto provést poslední testování aplikace, které se mělo konat externě a mělo se jednat o zapojení žáků gymnázia, kteří by se nechali otestovat v modulu používaném pro tuto příležitost ve starších verzích aplikace. Bylo nutné tedy tento modul sestavit v naší verzi a po jeho úspěšném sestavení jsme souhlasili s tímto externím testováním. Na prvním gymnáziu byla k dispozici skupina okolo 20 žáků, kteří dostali přístupové kódy na jméno ve škole, a každý měl možnost si projít testování zdarma doma. Většina žáků z vybrané třídy možnosti využila a pokusila si projít aplikaci. Bohužel bylo objeveno několik závažných nedostatků aplikace, které znemožňovaly některým studentům dokončit testování. Jednalo se o nekompatibilitu některých částí se všemi používanými prohlížeči a několika vedlejších chyb, které zatím nebyly objeveny. Díky zpětné vazbě studentů a již zavedenému logování chyb v aplikaci, bylo toto testování velmi přínosné a chyby se podařilo v krátké době opravit. Nedlouho po prvním testování proběhlo i testování na druhém gymnáziu. Zde již testování probíhalo jiným způsobem. Testování všech 18 studentů proběhlo v jedné učebně v rámci výuky. Jednalo se o první hromadné testování, kdy aplikaci procházelo větší množství lidí najednou. Toto testování odhalilo jednu zásadní chybu. Jednalo se o špatné připojení aplikace k databázi, které po určité době většímu počtu uživatelů znemožňovalo práci s aplikací. Tento problém se podařilo rychle vyřešit a všichni studenti mohli dokončit testování.
5.4 Poznatky z testování Každé testování, které proběhlo, odhalilo nějaké nedostatky aplikace, ale všechny tyto nalezené nedostatky byly odhaleny a opraveny, než proběhlo další testování. U posledních testování, která probíhala externě, se hledělo hlavně na stabilitu a rychlou odezvu testovací části aplikace, což jsou stěžejní vlastnosti, které by měla mít. Při programování jsem si na těchto částech dal velice záležet, přesto testování odhalilo některé nedostatky, ale všechny byly opraveny a na konci posledního testování, již vše probíhalo podle plánu a nebyl problém s žádnou částí testovacího procesu.
39
6 Závěr Cílem této bakalářské práce bylo vytvoření dvou částí webové aplikace pro testování uživatelů online. Jednalo se o rozsáhlou aplikaci, která se skládala z několika částí, které jsme měli úměrně rozděleny s kolegou Janem Jindrou. Přesto u některých částí byla potřeba spolupráce, nebo alespoň vzájemná konzultace určitých řešení. V této práci popisuji především témata, která spadala do mé části vývoje, a sám jsem je vyvíjel a případně i navrhoval. Spojení této části aplikace s ostatními je proto zmíněno jen okrajově a stručně. Díky rozsáhlosti projektu a nutnosti spolupráce tuto práci považuji za velice přínosnou, jelikož mě naučila pracovat v týmu, dodržovat stanovené termíny a měl jsem možnost základní poznatky z vývoje větších aplikací, ke kterým jsem měl ze studia pouze teoretické informace, využít v praxi. Dále také považuji za přínos prohloubení znalostí v programování webových aplikací.
6.1 Zhodnocení cílů a další pokračování Cíle stanovené na začátku projektu byly, myslím, splněny. Hlavním cílem bylo přiblížit si problematiku testovacích aplikací a vytvořit webovou aplikaci, která bude splňovat základní požadavky stanovené Republikovým centrem vzdělávání, s.r.o. V aplikaci proběhlo několik testů, které jsou zde popsány a jejich výsledky byly uspokojující. S kolegou plánujeme se dané problematice věnovat i nadále a pojmout tento projekt jako odrazový můstek, poučit se z jeho implementace a problémů při ní a pracovat na mnohem rozsáhlejším projektu na podobné téma, který již bude obsahovat přehledné sestavy, statistiky, tvorbu vlastních modulů a další nástroje usnadňující práci a rozšiřující základní funkčnost testování.
40
Seznam použité literatury [1] NAVRÁTIL, Martin a Milan DVOŘÁK. UNIVERZITA KARLOVA V PRAZE. Moodle Manuál [online]. 2003, 19 s. [cit. 2015-05-16]. [2] FRONTER. Fronter: Learning Together [online]. 2005 [cit. 2015-05-16]. Dostupné z: http://www.fronter.cz [3] Úvod do jazyka C# a rozhraní .NET Framework. MSDN: Microsoft Developer Network [online]. 2013 [cit. 2015-05-16]. Dostupné z: https://msdn.microsoft.com/cs-cz/library/z1zx9t92.aspx [4] 1. díl - Úvod do ASP.NET. ČÁPKA, David. ITnetwork [online]. 2013 [cit. 201505-16]. Dostupné z: http://www.itnetwork.cz/tutorial-uvod-do-asp-dot-net [5] HODAN, Petr. Úvod do SQL. Root [online]. 2000, (1) [cit. 2015-05-17]. Dostupné z: http://www.root.cz/clanky/uvod-do-sql/ [6] PROCHÁZKA, David. Úvod do SQL pro samouky. DSL.cz [online]. 2006, (1) [cit. 2015-05-17]. Dostupné z: http://www.dsl.cz/clanek/563-uvod-do-sql-prosamouky [7] Microsoft Visual Studio. Wikipedia: the free encyclopedia [online]. San Francisco (CA): Wikimedia Foundation, 2015 [cit. 2015-05-16]. Dostupné z: http://cs.wikipedia.org/wiki/Microsoft_Visual_Studio [8] Visual Studio Express. Svět sofware: Stahuj.cz [online]. 2012 [cit. 2015-05-16]. Dostupné z: http://www.stahuj.centrum.cz/vyvojove_nastroje/multifunkcnieditory/visualstudio-express/ [9] Gimp - ÚVOD (1.). Linuxsoft [online]. 2004, (1) [cit. 2015-05-16]. Dostupné z: http://www.linuxsoft.cz/article.php?id_article=195 [10] JECHA, Tomáš. Seznámení a instalace Microsoft SQL Serveru. DotNETportal [online]. 2009, (2) [cit. 2015-05-16]. Dostupné z: http://www.dotnetportal.cz/clanek/140/Seznameni-a-instalace-Microsoft-SQLServeru
41
[11] YEd Graph Editor. Svět sofware: Stahuj.cz [online]. 2013 [cit. 2015-05-16]. Dostupné z: http://www.stahuj.centrum.cz/grafika_a_design/ostatni/yed-grapheditor/
Seznam obrázků Obrázek 1: Rozdělení tabulek v datovém modelu [Zdroj: vlastní] ................................. 20 Obrázek 2: Navigační panel testování [Zdroj: vlastní] ................................................... 25 Obrázek 3: Ukázka otázky jedna možná odpověď [Zdroj: vlastní] ................................ 28 Obrázek 4: Ukázka otázky více možných odpovědí [Zdroj: vlastní] ............................. 28 Obrázek 5: Ukázka otázky s obrázky [Zdroj: vlastní] .................................................... 29 Obrázek 6: Ukázka otázky zácviku 1 [Zdroj: vlastní] .................................................... 30 Obrázek 7: Ukázka otázky zácviku 2 [Zdroj: vlastní] .................................................... 30 Obrázek 8: Ukázka otázky aplikační [Zdroj: vlastní] ..................................................... 31 Obrázek 9: Ukázka řešení – Výpočet průměru [Zdroj: vlastní]...................................... 35 Obrázek 10: Ukázka řešení – Lokalizace [Zdroj: vlastní] .............................................. 36 Obrázek 11: Ukázka řešení – Časovač [Zdroj: vlastní] .................................................. 37
42
Seznam použitých zkratek 1. PDF – Portable Document Format, souborový systém pro přenos dokumentů. 2. GNU – GNU Not Unix, počítačový svobodný operační systém projektu GNU. 3. XML – Extensible Markup Language, obecný značkovací jazyk. 4. Jazyk C – základní programovací jazyk pro nízko úrovňové aplikace. 5. C++ – rozšíření jazyka C o funkcionalitu vyšších programovacích jazyků. 6. Java – objektově orientovaný programovací jazyk od firmy SUN Microsystems. 7. VB – Visual Basic, událostmi řízený programovací jazyk od společnosti Microsoft. 8. HTML – HyperText Markup Language, značkovací jazyk používaný pro tvorbu webových stránek. 9. IBM – International Business Machines Corporation, přední světová společnost v oboru informačních technologií. 10. GPL – General Public License, licence pro svobodný software. 11. Javascript – objektově orientovaný skriptovací jazyk.
43
Přílohy 1 Obsah přiloženého CD Na přiloženém CD se v kořenovém adresáři nachází tato bakalářská práce ve formátu bakalarska_prace.pdf s jednoduchým manuálem manual.pdf pro obsluhu programu a zdrojové kódy aplikace ve formátu zdrojove_kody.zip a datový model v plné velikosti ve formátu datovy_model.png.
44
2 Datový model
45