České vysoké učení technické v Praze Fakulta elektrotechnická Katedra počítačové grafiky a interakce
Bakalářská práce
Webová aplikace pro podporu personální agentury Martin Smák
Vedoucí práce: Mgr. Petr Matyáš
Studijní program: Softwarové technologie a management, Bakalářská Obor: Web a multimedia 25. května 2011
ii
iii
Poděkování Děkuji svému vedoucímu práce Mgr. Petru Matyášovi a kolegovi Mgr. Vítu Rambouskovi za ochotu, pomoc a rady, bez nichž by tato práce nemohla vzniknout. Dále také rodině a přátelům za jejich trpělivost a pevné nervy.
iv
v
Prohlášení Prohlašuji, že jsem práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu §60 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ů (autorský zákon).
V Praze dne 25. 5. 2011
.............................................................
vi
Abstract This work focuses on the creating a web application to support the recruitment agency. By analyzing the existing systems for the supply and demand of jobs evaluates their features, advantages and disadvantages. The implemented system has the best knowledge of the functions and features of this analysis.
Abstrakt Tato práce se zabývá tvorbou webové aplikace pro podporu personální agentury. Díky analýze existujících systémů pro nabídku a poptávku pracovních pozic zhodnotí jejich vlastnosti, výhody a nevýhody. Implementovaný systém obsahuje nejlepší poznatky, funkce a vlastnosti z této analýzy.
vii
viii
Obsah 1 Úvod
1
2 Metodika zpracování 2.1 Vývojové prostředí . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Použité technologie a jejich vývoj . . . . . . . . . . . . . . . . . . . . . . . . .
3 3 3
3 Popis systému 3.1 Uživatelské role . . . 3.2 Funkční požadavky . 3.3 Nefunkční požadavky 3.4 Přínos systému . . .
. . . .
7 7 8 9 9
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
4 Analýza a návrh systému 4.1 Rešerše spuštěných portálů 4.2 Shrnutí . . . . . . . . . . . 4.3 Diagram nasazení . . . . . . 4.4 Případy užití . . . . . . . . 4.5 Datový model . . . . . . . . 4.6 Diagram tříd . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
11 11 12 13 14 15 20
5 Implementace systému 5.1 Třída DB . . . . . . 5.2 Třída IO . . . . . . . 5.3 Třída Main . . . . . 5.4 Třída Vyhledavani . 5.5 Třída Login . . . . . 5.6 Třída Nabidka . . . 5.7 Třída Zivotopis . . . 5.8 Třída Registrace . . 5.9 Třída Editace . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
21 21 22 23 24 25 27 28 29 30
6 Návrh grafického designu a uživatelského rozhraní 6.1 Wireframe úvodní strany . . . . . . . . . . . . . . . . 6.2 Wireframe výpisu vyhledávání . . . . . . . . . . . . . 6.3 Wireframe vnitřní strany . . . . . . . . . . . . . . . . 6.4 Wireframe registrace . . . . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
31 31 32 33 34
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
ix
x
7 Testování 7.1 Uživatelské rozhraní . . . 7.2 Kognitivní průchod . . . . 7.3 Test použitelnosti . . . . . 7.4 Kompatibility prohlížečů . 7.5 Validita zdrojových kódů .
OBSAH
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
35 35 35 37 38 39
8 Závěr
41
A Seznam použitých zkratek
45
B Obsah přiloženého CD
47
Seznam obrázků 4.1 4.2 4.3 4.4
Diagram nasazení . . Model případů užití Datový model . . . . Diagram tříd . . . .
6.1 6.2 6.3 6.4
Wireframe Wireframe Wireframe Wireframe
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
13 14 19 20
úvodní strany . . . výpisu vyhledávání vnitřní strany . . . registrace . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
31 32 33 34
xi
xii
SEZNAM OBRÁZKŮ
Kapitola 1
Úvod Jelikož v dnešním světě je pro většinu lidí důležité vést kvalitní a spokojený život, na který si sami vydělají, je zapotřebí mít stálou práci a být adekvátně ohodnocen. Na trhu práce je dnes velké množství pracovních nabídek, které jsou k dispozici přímo od zaměstnavatelů či pracovních agentur. Pro nového potenciálního zaměstnance je ovšem dnes příjemnější vyhledávat a reagovat na nabídky práce přímo z domova, kdy je možné nalézt vytouženou práci pomocí několika kliknutí než docházet několikrát měsíčně na úřad práce bez viditelného pokroku. Tento systém je na základě důkladné analýzy podobných systémů vytvořen pro ulehčení a zkrácení ne vždy příjemného stavu nezaměstnanosti. Pomáhá při hledání nového zaměstnání i menšího přivýdělku formou brigády. Spojuje všechny výborné a prověřené vlastnosti ostatních portálů s pracovními nabídkami a je připraven Vám je nabídnout „pod jednou střechou“. Díky tomuto portálu, který Vám umožňuje vést historii reakcí na více pracovních nabídek, ušetříte spoustu času a starostí.
1
2
KAPITOLA 1. ÚVOD
Kapitola 2
Metodika zpracování 2.1
Vývojové prostředí
Enterprise Architect Enterprise Architect je nástroj pro vytváření vývojových diagramů a schémat aplikace. Pro tvorbu jednotlivých diagramů využívá grafické prvky jazyka UML. Nejedná se o freeware, ale lze jej zdarma využít pod časově omezenou licencí.
WampServer Version 2.0 WampServer [1] je freeware vývojový nástroj, v jehož jednom instalačním balíku je obsažen server Apache 2.2.11 s podporou jazyka PHP 5.2.9-2, aplikace PhpMyAdmin pro správu databází přes webové rozhraní a databáze MySQL 5.1.33.
2.2
Použité technologie a jejich vývoj
JavaScript – Mootools Framework V dnešní době dynamických webů obsahujících velké množství obrázků, videí, formulářů a vůbec interaktivních nástrojů je Javascript v klasické formě již téměř nepouživaným nástrojem, neboť není již tak snadným a univerzálním. Proto vzniklo několik pomocných frameworků na bázi Javascriptu, které využívají nezávislost Javascriptu a navíc přidávají pružnost, přehlednost a obrovský potenciál kreativity. Mezi zřejmě nejrozšířenější z nich patří Mootools framework a jQuery framework, které fungují velice podobně, ale s různou syntaxí. Frameworky všeobecně vznikly jako nástroje pro ulehčení psaní zdrojového kódu, kdy nejčastěji používaným nástrojům či funkcím velmi zkrátily syntaxi a tím zpřehlednily výsledný kód. Jako příklad lze použít nástroj pro označení prvku, se kterým je možné pomocí Javascriptu pracovat: window.document.getElementByID(’pouzivanyElement’). Pomocí frameworku Mootools je možné celou funkci zkrátit do řetězce: $(’pouzivanyElement’).
3
4
KAPITOLA 2. METODIKA ZPRACOVÁNÍ
Velice snadnými zásahy lze zprovoznit jednoduchou animaci pro schovávání či znovuzobrazování (Fade out a Fade in) textu, obrázku či celých složitých elementů. Další možností je za použití jedné třídy „targetblank“ přikázat všem na stránce vyskytujícím se odkazům, aby se otevíraly v novém okně, a přesto zdrojový kód zůstane čistý a validní. Stejně jako CSS styly, tak i Javascript prochází optimalizacemi a různými módními trendy, kde jako nejzásadnější se může jevit naprosté odstranění Javascriptu ze samotného HTML kódu. Vše se dnes řeší pomocí ideálně dvou externích souborů, kde první obsahuje samotné jádro používaného frameworku a druhý obsahuje funkční část Javascriptu. Je potřeba ji ovšem vložit do těla funkce, která se spustí až po samotném načtení kompletní stránky:
window.addEvent("domready", function(){ // tělo funkčního Javascriptu - fuknce pro univerzální otevírání odkazů // do nového okna $$("a.targetblank").addEvent("click", function(event){ if(typeof window.open(this.href)=="object"){ event.stop(); } }); // konec těla Javascriptu }); Funkčnost a využití Javascriptu se také výrazně rozšířila s příchodem AJAXu (Asynchronous JavaScript and XML). Jedná se o technologii pracující na principu načítání pouze potřebného či měnícího se obsahu bez zbytečného načítání celého obsahu webových stránek. Toto řešení je uživatelsky velice příjemné a také vizuálně přitažlivé. Při propojení této technologie například s frameworkem Mootools je možné vytvářet skutečně dynamický obsah, který se příjemně mění v reálném čase. Na rozdíl od samotného Javascriptu Ajax umožňuje komunikaci se serverem na pozadí. Zřejmě největší nevýhody této nové technologie spočívají v nemožnosti využívání tlačítek Zpět a Vpřed, neboť samotná stránka se celá nenačítá a mění se pouze její obsah a také v nutnosti kvalitního internetového připojení a výkonného hardwaru, kdy v době rozmachu mobilního internetu je tento požadavek velmi těžké zakomponovat. Stejně jako i ostatní trendy a novinky jsou i tyto speciality v programování webových stránek závislé na používání moderních webových prohlížečů. Tato aplikace využívá framework MooTools [3] včetně některých jeho rozšíření. Na bázi tohoto frameworku je využito freeware tříd TinyMCE [6] pro jednoduchý WYSIWYG editor, freeware třídy CUFON [2], která dokáže definovaný text přegenerovat do křivek ve zvoleném fontu a také freeware třídy DatePicker [5], která je využita pro vytvoření dialogového okna umožňujícího výběr datumu ve správném formátu používaném pro ukládání do databáze. V této aplikaci je také se svolením autora Martina Ježka [4] využita třída Xbox, třída Ring a třída FormValidator. [7][8][9]
2.2. POUŽITÉ TECHNOLOGIE A JEJICH VÝVOJ
5
Smarty V této aplikaci je také využit šablonovací systém Smarty vytvořený programovacím jazykem PHP. Toto řešení dovoluje za použití několika šablon čistě oddělit prezentační vrstvu od aplikační vrstvy a tím zjednodušit úpravy do budoucna.
6
KAPITOLA 2. METODIKA ZPRACOVÁNÍ
Kapitola 3
Popis systému Jedná se o webovou aplikaci umožňující uživatelům zadávat, vyhledávat a odpovídat na nabídky práce. Pro přehlednost je na úvodní straně aplikace výrazný vyhledávací formulář, díky němuž mohou uživatelé filtrovat nabídky podle lokality. Nachází se zde i výpis nejnovějších nabídek s možností zobrazení posledních 20 nabídek bez ohledu na lokalitu. V horní části stránky se vyskytuje rotátor představující všechny kategorie členění nabídek práce s možností přesměrování na výpis příslušných podkategorií i s informací o počtu nabídek.
3.1
Uživatelské role
Z důvodu rozličných cílových potřeb příslušných uživatelů je obsluhování aplikace rozděleno do tří uživatelských rolí. Uživatele zadávajícího nabídky práce (dále je „zaměstnavatel“), uživatele vyhledajícího nabídky a vytvářejícího životopisy (dále jen „zaměstnanec“) a anonyma, který nemá jiný cíl, než nalézt pracovní nabídku a reagovat na ni.
Anonym Uživatelé nepatřící do předchozích dvou uživatelských rolí spadají do role „anonym“. Jim je umožněno se registrovat jako zaměstnavatel či zaměstnanec, vyhledávat nabídky, vypisovat jejich seznam, detail, tisknout je a také na ně reagovat.
Zaměstnanec Zaměstnanci je umožněno editovat své údaje, vytvořit životopis, editovat vytvořený životopis a zobrazit historii reakcí na nabídky. Ostatní funkce a možnosti jsou totožné s anonymem. Rozdíl mezi anonymem a zaměstnancem ovšem ještě nastává v případě reakce na nabídku, kdy zaměstnanec má již předvyplněné příslušné údaje, zadal-li je do systému.
7
8
KAPITOLA 3. POPIS SYSTÉMU
Zaměstnavatel Primární činností zaměstnavatele je zadávání nabídek práce. Další jeho možnosti jsou editovat svůj účet, vypisovat zaměstnanecké životopisy a zobrazovat zadané nabídky spolu s příslušnými reakcemi. Ostatní funkce a možnosti jsou totožné s anonymem.
3.2
Funkční požadavky
Tyto vlastnosti vyplývají z požadavků a očekávání cílových uživatelů. Jejich množství je nyní omezené a do budoucna se významně rozšíří. V rámci této práce budou realizovány tyto funkční požadavky: • registrace zaměstnavatele + validace vstupů, • editace osobních údajů zaměstnavatele + validace vstupů, • výpis všech životopisů zaměstnanců + řazení výpisů, • tvorba nabídky práce + validace vstupů, • výpis vlastních nabídek zaměstnavatele + seznam reakcí na ně s možným proklikem na detail příslušného životopisu v případě jeho existence, • odhlášení zaměstnavatele ze systému, • registrace zaměstnance + validace vstupů, • přihlášení zaměstnance do systému + validace vstupů, • editace osobních údajů zaměstnance + validace vstupů, • tvorba životopisu + validace vstupů, • editace vytvořeného životopisu + validace vstupů, • historie vlastních reakcí zaměstnance, • odhlášení zaměstnance ze systému, • výpis kategorií a podkategorií s možností zobrazení příslušných nabídek a jejich detaily, • výpis nejnovějších nabídek, • vyhledávání v názvech nabídek dle lokality, • reakce na příslušnou nabídku, • dynamické tlačítko zpět.
3.3. NEFUNKČNÍ POŽADAVKY
3.3
9
Nefunkční požadavky
Tyto požadavky se zakládají na vlastním spuštění systému. Bez splnění těchto kritérií není tedy možné aplikaci řádně zprovoznit ani využívat: • na systémovém serveru musí být nainstalována podpora PHP v5.2.1 nebo vyšší, • na systémovém serveru musí být nainstalována databáze MySQL v5.1.1 nebo vyšší, • na systémovém serveru musí být nainstalován HTTP server Apache v2.2 nebo vyšší, • koncový uživatel musí používat libovolný moderní webový prohlížeč.
3.4
Přínos systému
Tento systém je vytvořený na základě analýzy konkurenčních systémů a zhodnocení jejich vlastností a funkcí. Proto jeho přínos spočívá ve zpřehlednění výpisu nabídek zobrazující příslušný popis po přejetí přes název nabídky bez nutnosti zobrazení detailu nabídky a v zobrazování historie reakcí a předvyplněných informací v případě přihlášení zaměstnance. Přínos systému také spočívá v rozšíření znalostí autora, zakomponování jeho zkušeností s tvorbou webových portálů a firemních prezentací.
10
KAPITOLA 3. POPIS SYSTÉMU
Kapitola 4
Analýza a návrh systému 4.1
Rešerše spuštěných portálů
www.prace.cz Jde o zřejmě nejznámější portál pracovních nabídek s rozsáhlou a často aktualizovanou databází, přehlednou strukturou a podrobným filtrováním. Obsahuje velké množství nadstandardních funkcí jako je „Porovnání platů“, „Poradna“, „Agent“ a tvorba a správa vlastních životopisů. Dále nabízí pro firmy kompletní správu vkládání vlastních inzerátů, možnost manuálního či automatického filtrování uživatelských životopisů či prezentace reklamního banneru. Výhody: • přehlednost při první návštěvě, • historie návštěv. Nevýhody: • mohutnost.
www.hotjobs.cz Graficky nevýrazný personální portál, jehož předností je shromažďování nabídek z několika ostatních portálů jako jsou www.prace.cz, www.jobs.cz apod. Nadstandardní funkce tento portál nenabízí. Výhody: • využívá databáze třetích stran, • detailnější popisy v přehledu. Nevýhody: • strohá a až agresivní grafika, • neobsahuje detailnější filtr, • převážně nabídky třetích stran.
11
12
KAPITOLA 4. ANALÝZA A NÁVRH SYSTÉMU
www.jobs.cz Jde o personální portál od stejné společnosti jako portál www.prace.cz, z toho plyne i příjemný grafický vzhled, velmi podobné pracovní nabídky a nabízené funkce. Výhody: • rozsáhlá databáze. Nevýhody: • složitý filtr, • nepřehlednost, • zasílání nabídek e-mailem obsahuje nepožadované výsledky.
www.sprace.cz Pracovní portál od společnosti seznam.cz, a.s., který klade důraz na množství zobrazovaných informací na jednom místě, ale tím velice znesnadňuje přehlednost při vyhledávání. Spíše působí dojmem textových webových stránek, než moderním webem. Jako nadstandardní funkci nabízí vytvoření on-line životopisu a ze strany zaměstnavatelů i jejich procházení. Výhody: • rozšířený filtr, • rychlost. Nevýhody: • nepřehlednost, • strohá grafika, • málo nabídek.
4.2
Shrnutí
Z analýzy funkcí, vzhledu a obsahu stávajících webových systémů vyplynuly nejčastější výhody a nevýhody jednotlivých řešení, ze kterých by v této práci vytvářená webová aplikace měla obsahovat to nejlepší. Důležité tedy je dobře viditelné vyhledávání, přehledný výpis vyhledávání včetně zobrazení popisů bez nutnosti prokliku na detail nabídky a v neposlední řadě jednoduchá správa uživatelských účtů a jejich možností. Proto si tato tvořená aplikace klade za hlavní cíl přehlednost a jednoduchost ovládání s několika ulehčujícími funkcemi.
13
4.3. DIAGRAM NASAZENÍ
4.3
Diagram nasazení
Obrázek 4.1: Diagram nasazení
14
4.4
KAPITOLA 4. ANALÝZA A NÁVRH SYSTÉMU
Případy užití
Model případů užití je diagram obsahující všechny uživatelské role – aktéry a všechny funkce, které jim navrhovaný systém nabízí. Jsou zde definovány vztahy mezi aktéry a vztahy mezi funkcemi. Definuje chování navrhovaného systému. Pomáhá při návrhu uživatelského rozhraní.
Obrázek 4.2: Model případů užití
4.5. DATOVÝ MODEL
4.5
Datový model
Entita category Entita category obsahuje seznam všech v systému možných kategorií nabídek práce. Struktura entity: • id – jedinečný identifikátor kategorie, • parent_id – identifikátor určující zařazení v rámci stromové struktury kategorií, • name – hodnota vyjadřující název kategorie.
Entita cv Entita cv popisuje informace týkající se vytvořených životopisů. Struktura entity: • id – jedinečný identifikátor životopisu, • user_id – identifikátor uživatele, který životopis vytvořil, • education_id – identifikátor typu vzdělání, • name – hodnota vyjadřující název životopisu, • nationality – hodnota vyjadřující národnost zaměstnance, • date_of_birth – hodnota vyjadřující datum narození zaměstnance, • sex – hodnota „Muž“ nebo „Žena“, • hobby – hodnota vyjadřující koníčky, • create_date – hodnota vyjadřující datum vytvoření životopisu.
Entita education Entita education popisuje všechny v systém používané typy dosaženého vzdělání. Struktura entity: • id – jedinečný identifikátor vzdělání, • name – hodnota vyjadřující název vzdělání.
15
16
KAPITOLA 4. ANALÝZA A NÁVRH SYSTÉMU
Entita location Entita location popisuje všechny v systém používané kraje a okresy. Struktura entity: • id – jedinečný identifikátor lokality, • parent_id – identifikátor určující zařazení v rámci stromové struktury lokalit, • name – hodnota vyjadřující název lokality.
Entita offer Entita offer popisuje všechny informace týkající se vytvoření pracovní nabídky. Struktura entity: • id – jedinečný identifikátor nabídky, • user_id – identifikátor uživatele, který nabídku vytvořil, • id_type_currency – identifikátor typu odměny, • name – hodnota vyjadřující název pozice, • date_insert – hodnota vyjadřující datum vložení nabídky, • date_to – hodnota vyjadřující datum ukončení zobrazování nabídky, • description – hodnota vyjadřující popis nabídky, • we_require – hodnota vyjadřující požadavky zaměstnavatele, • we_offer – hodnota vyjadřující nabídky zaměstnavatele, • other_info – hodnota vyjadřující ostatní informace zaměstnavatele, • pay – hodnota vyjadřující výši odměny.
Entita offer_in_category Entita offer_in_category popisuje jedinečné propojení mezi entitou offer a entitou category. Struktura entity: • offer_id – identifikátor nabídky, • category_id – identifikátor kategorie.
4.5. DATOVÝ MODEL
17
Entita offer_in_location Entita offer_in_category popisuje jedinečné propojení mezi entitou offer a entitou location. Struktura entity: • offer_id – identifikátor nabídky, • location_id – identifikátor lokality.
Entita reaction Entita reaction popisuje všechny informace získané z reakcí na příslušné nabídky práce. Struktura entity: • id – jedinečný identifikátor reakce, • user_id – identifikátor zaměstnavatele, který nabídku vytvořil, • reply_user_id – identifikátor uživatele, který reakci vytvořil, v případě reakce od anonyma vyplněno „0“, • offer_id – identifikátor nabídky, na kterou byla reakce vytvořena, • date – hodnota vyjadřující datum vytvoření reakce, • name – hodnota vyjadřující jméno reagujícího uživatele, • surname – hodnota vyjadřující příjmení reagujícího uživatele, • mail – hodnota vyjadřující e-mail reagujícího, • phone – hodnota vyjadřující telefon reagujícího, • message – hodnota vyjadřující zprávu reagujícího.
Entita type_currency Entita type_currency popisuje všechny v systém používané typy odměňování (Kč/h, Kč/měsíc, atd.). Struktura entity: • id – jedinečný identifikátor typu odměňování, • name – hodnota vyjadřující název typu odměňování.
18
KAPITOLA 4. ANALÝZA A NÁVRH SYSTÉMU
Entita type_offer Entita type_offer popisuje všechny v systému používané typy nabídek (plný úvazek, brigáda, atd.). Struktura entity: • id – jedinečný identifikátor typu nabídky, • name – hodnota vyjadřující název typu nabídky.
Entita type_offer_offer Entita type_offer_offer popisuje jedinečné propojení mezi entitou offer a entitou type_offer. Struktura entity: • offer_id – identifikátor nabídky, • type_offer_id – identifikátor typu nabídky.
Entita user Entita user popisuje všechny informace týkající se vytvořených uživatelských účtů zaměstnanců a zaměstnavatelů. Struktura entity: • id – jedinečný identifikátor uživatele, • name – hodnota vyjadřující jméno uživatele, • surname – hodnota vyjadřující příjmení uživatele, • pass – hodnota vyjadřující heslo uživatele (pomocí algoritmu MD5), • mail – hodnota vyjadřující e-mail uživatele, • last_login – hodnota vyjadřující datum posledního přihlášení uživatele, • phone – hodnota vyjadřující telefon uživatele, • city – hodnota vyjadřující název města bydliště uživatele, • street – hodnota vyjadřující název ulice bydliště uživatele, • zip_code – hodnota vyjadřující PSČ bydliště uživatele, • type – hodnota „Ano“ a „Ne“ pro odlišení, zda se jedná o zaměstnavatele či zaměstnance, • ico – hodnota vyjadřující IČ zaměstanavatele, • company_name – hodnota vyjadřující název společnosti zaměstnavatele.
19
4.5. DATOVÝ MODEL
Obrázek 4.3: Datový model
20
4.6
KAPITOLA 4. ANALÝZA A NÁVRH SYSTÉMU
Diagram tříd
Diagram tříd je základním strukturálním diagramem, jehož smyslem je popis základních prvků systému, kterými jsou třídy objektů, atributy, metody a vztahy mezi nimi.
Obrázek 4.4: Diagram tříd
Kapitola 5
Implementace systému 5.1
Třída DB
Tato třída zajišťuje vlastní komunikaci s databází. Jedná se především o metodu DB(), která se stará o připojení do zvolené databáze pomocí čtyř parametrů – host, username, passwd a dbname. Nedílnou součástí je komunikace ve správném kódování pro české znaky. V aplikaci je zvoleno kódování UTF-8. Tento požadavek je proveden pomocí příkazu: mysql_query("SET NAMES ’utf8’"); Dále tato třída obsahuje tři základní metody pro zajištění výpisu požadovaných dat. Všechny tyto metody obsahují jen jeden parametr – sql. První metodou je select_list(), která jako výsledek SQL příkazu vrací výpis polí. function select_list($sql) { $return = array(); $helper = mysql_query($sql); while($row = mysql_fetch_assoc($helper)){ $return[] = $row; } return $return; } Druhou metodou je select_detail(), která jako výsledek vrací pouze první nalezený záznam. function select_detail($sql) { $helper = mysql_query($sql); return mysql_fetch_assoc($helper); }
21
22
KAPITOLA 5. IMPLEMENTACE SYSTÉMU
Metoda select_list() i select_detail() se používají při spouštění SQL dotazů pro výpis dat. Třetí metoda execute() na rozdíl od předchozích dvou metod zajišťuje zpracování SQL dotazů zajišťujících INSERT, UPDATE a DELETE. Jako výsledek nevrací nic, jen požadovaný příkaz provede. function execute($sql) { mysql_query($sql); }
5.2
Třída IO
Tato třída především zajišťuje kompletní práci se vstupy do aplikace a jejich výpis do SMARTY za pomoci třídy Smarty, ze které dědí její vlastnosti a také kompletní práci se session. Také obsahuje metodu vrat_hodnotu(), která obsluhuje všechny vstupy do aplikace a vrací jejich hodnotu. Za pomoci dvou parametrů – jmeno a default – obsluhuje jak možnosti zasílání informací pomocí metody GET i POST. V případě nenalezení požadované proměnné tuto proměnnou vytvoří a nastaví ji defaultní hodnotu. function vrat_hodnotu($jmeno,$default) { if (isset($_POST[$jmeno])) { return $_POST[$jmeno]; } if (isset($_GET[$jmeno])) { return $_GET[$jmeno]; } return $default; } Za pomoci metody escape() je možné aplikaci ochránit proti špatným vstupům ze strany uživatele. Tato metoda jednoduše odstraňuje všechny špatné vstupy. function escape($string) { return mysql_real_escape_string($string); } Následující tři metody zajišťují práci se session. Metoda nastav_session() požadovanou session pomocí dvou parametrů – jmeno a hodnota – vytvoří a naplní hodnotou.
5.3. TŘÍDA MAIN
23
function nastav_session($jmeno,$hodnota) { $_SESSION[$jmeno] = $hodnota; } Metoda vrat_session() v případě, že požadovaná session již existuje, vrátí její hodnotu. V opačném případě vrátí defaultní hodnotu. function vrat_session($jmeno,$default) { if(isset($_SESSION[$jmeno])) { return $_SESSION[$jmeno]; } else { return $default; } } A v neposlední řade metoda zrus_session() požadovanou session zruší. function zrus_session($jmeno) { unset($_SESSION[$jmeno]); }
5.3
Třída Main
Účel třídy Main je v propojení tříd DB a IO s ostatními obsluhujícími třídami aplikace pomocí proměnné DB a IO. Nastavení připojení s databází je konfigurovatelné v souboru config.php. Dále zajišťuje zasílání informace za pomoci metody je_vytvoren_zivotopis(), zda přihlášený uživatel má vytvořený životopis. public function je_vytvoren_zivotopis() { if(isset($_SESSION[’vytvoreny_zivotopis_id’])) { return $this->IO->vrat_session("vytvoreny_zivotopis_id","0"); } }
24
5.4
KAPITOLA 5. IMPLEMENTACE SYSTÉMU
Třída Vyhledavani
Třída Vyhledavani za pomoci jedné metody zobraz_hledani() kompletně obstarává logiku hlavního a rozšířeného vyhledávání. Metoda nejprve načte očekávané vstupy, kterými jsou vlastní vyhledávaný výraz, lokalita a další parametry. Nejdůležitější hodnotou pro metodu vyhledávání je lokalita. Podle ní je možné zjistit všechny ostatní důležité údaje. Nejprve se na základě ID lokality do pomocného pole lokalita_list uloží všechny lokality, kterým je zvolená lokalita rodičem (jejich parent_id je shodné s ID lokality). $lokalita_list = array(); foreach($id_lokalit as $lokalita) { $lokalita_list[] = $lokalita[’id’]; } Dále se zjistí aktuální čas, který bude použit pro omezení výpisu výsledků, jelikož při vytváření nabídky práce se volí i termín, dokdy má tato nabídka svou platnost. $actual_date = Date("Y-m-j H:i:s"); S výsledným výpisem také souvisí i možnost výsledky zobrazovat postupně za pomoci stránkování. To je tvořeno výpisem omezeného návratu hodnot za pomoci zvoleného limitu přímo v SQL. Množství zobrazených výsledků na jedné stránce lze omezit za pomocí změny hodnoty proměnné limit. $limit = 10; $limit_min = $limit*($position-1); $limit_max = $limit*$position; Ve výsledné SQL je zapotřebí zajistit provázanost přes osm samostatných tabulek, ze kterých je poté možné zobrazit požadované a užitečné informace. FROM JOIN JOIN JOIN JOIN JOIN JOIN JOIN
offer as o offer_in_location as oil on o.id=oil.offer_id user as u ON o.user_id = u.id location loc on loc.id = oil.location_id offer_in_category oic on oic.offer_id = o.id category cat on cat.id = oic.category_id type_offer_offer too on too.offer_id = o.id type_offer tof on tof.id = too.type_offer_id
5.5. TŘÍDA LOGIN
25
Výsledkem celého obsahu metody je tedy, na základě požadovaných parametrů, zobrazení výsledeku vyhledávání obsahujícího název pozice, jméno společnosti, která nabídku zadala, ukázku požadavku z detailu nabídky, lokalitu dané nabídky a termín, ve kterém byla daná nabídka přidána do systému. Na základě rozšiřujících parametrů – kategorie a typ nabídky – lze výsledek dále upřesňovat. if($category != "0") { $category_insert = "AND (cat.id = ’$category’ OR cat.parent_id = ’$category’)"; $this->IO->assign(’category_insert’, $category); } else { $category_insert = NULL; } if($type_offer != "0"){ $type_offer_insert = "AND tof.id = ’$type_offer’"; $this->IO->assign(’type_offer_insert’, $type_offer); } else { $type_offer_insert = NULL; }
5.5
Třída Login
Třída Login zpracovává údaje zaslané uživatelem při přihlášení. Je tvořena třemi metodami, kde první metoda prihlas_se() na základě pouze dvou údajů je schopna ověřit oprávněnost uživatele pro přístup do aplikace a také automaticky rozlišit, zda se jedná o Zaměstnance či Zaměstnavatele. Tento proces rozlišení oprávnění uživatele je proveden pomocí dvou regulárních výrazů, kde se nejdříve přijatý vstup zkontroluje, zda se jedná o e-mailovou adresu. Pokud ne, pokračuje se ověřením pomocí druhého regulárního výrazu, zda se jedná o IČO. Pokud zadaný vstup neodpovídá ani jednomu vzoru, uživatel zadal špatné údaje a je na tuto situaci upozorněn. if (preg_match ("/[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/i", $login_name)) { $zamestnanec = true; $ok = true; } else { if (preg_match ("/^[0-9]{8}$/i", $login_name)) { $zamestnavatel = true;
26
KAPITOLA 5. IMPLEMENTACE SYSTÉMU
$ok = true; } else { $this->IO->assign(’ERROR_PRIHLASEN’, 1); return false; } } V opačném případě dochází již na základě rozlišení práv uživatele na ověření správnosti hesla. Nastaví se příslušná session s ID uživatele, podle kterého lze dále jednoduše vypsat jeho osobní údaje a zaktualizuje se údaj v databázi informující o posledním přihlášení. $this->DB->execute("UPDATE user SET last_login = CURRENT_TIMESTAMP WHERE ico = ’$login_name’"); V případě, že přihlášeným uživatelem je Zaměstnanec, ověří se také, zda již má vytvořený životopis a podle této podmínky se také, v kladném případě, vytvoří další session s ID životopisu. $this->IO->nastav_session("vytvoreny_zivotopis_id", $hodnota_vytvoreny_zivotopis_id); Také tato metoda zachovává informaci, ze které stránky se uživatel přihlásil, a po provedení všech aplikačních kroků jej na ní zpětně přesměruje. $string = "http://" . $_SERVER[’HTTP_HOST’]; $lenght = strlen($string); if (isset ($_SERVER[’HTTP_REFERER’])) { $presmeruj = $_SERVER[’HTTP_REFERER’]; $presmeruj = substr($presmeruj, $lenght); } else { $presmeruj = "http://" . $_SERVER[’SERVER_NAME’]; } Další metoda odhlas_se_zamestnanec() a odhlas_se_zamestnavatel() jen ruší vytvořenou session, podle které je prováděno oveření přihlášeného uživatele a také přesměrovává uživatele na úvodní stranu webového portálu. $this->IO->zrus_session("prihlaseny_zamestnanec_id"); $this->IO->zrus_session("vytvoreny_zivotopis_id"); $presmeruj = "http://" . $_SERVER[’SERVER_NAME’]; header("location: $presmeruj");
5.6. TŘÍDA NABIDKA
5.6
27
Třída Nabidka
Tato třída se stará o kompletní funkčnost nabídek. Nejdříve je potřeba pomocí několika metod načíst všechna potřebná data, která se využívají v případě vytváření nabídky i jejich výpisu. Těmito metodami jsou: • vypis_hlavni_kategorie(), • vypis_podkategorie(), • vypis_detail_kategorie(), • vypis_typy_nabidky(), • vypis_typy_platu(), • vypis_hlavni_lokality(), • vypis_podlokality(). Dále v případě detailu nabídky existuje možnost využít tlačítko „zpět“, které směřuje na stránku a které je výstupem metody vrat_predchozi_stranku(). $string = "http://" . $_SERVER[’HTTP_HOST’]; $lenght = strlen($string); if (isset ($_SERVER[’HTTP_REFERER’])) { $redirect = $_SERVER[’HTTP_REFERER’]; $redirect = substr($redirect, $lenght); } else { $redirect = "/"; } $this->IO->assign(’url_predchozi_stranky’, $redirect); return $redirect; Požadovaný výsledný výpis nabídek z jednotlivých kategorií na základě kritérií se používá metoda vypis_nabidek_z_kategorie(). Podobným způsobem také funguje metoda vypis_vlastnich_nabidek(), která vrátí pole se seznamem všech vytvořených nabídek přihlášeného Zaměstnavatele a ten si dále může zvolit výpis aktuálních či již neplatných nabídek. Pro výpis všech nabídek z úvodní strany existuje metoda vypis_nabidek(), která pouze na základě aktuálního data vypíše posledních 200 aktivních nabídek seřazených od nejnovější. Zřejmě nejdůležitější motodou této třídy je metoda vytvor_nabidku(), která nejdříve načte všechna potřebná data díky pomocným metodám a dále ověřuje vstupy uživatele pomocí regulárních výrazů.
28
KAPITOLA 5. IMPLEMENTACE SYSTÉMU
Dále metoda vypis_detail_nabidky() na základě lokality, ID nabídky a ID uživatele vypíše informace potřebné pro zobrazení detailu příslušné nabídky. V této třídě jsou také metody pracující s možností reakce na zvolenou nabídku. Pro toto je zde metoda vytvor_reakci(), která na základě ID nabídky a vyplněných údajů vytvoří reakci na nabídku. Ta se následně objeví, v případě reakce přihlášeného Zaměstnance pomocí metody vypis_vlastnich_reakci(), v jeho seznamu reakcí. To samé může provést i Zaměstnavatel, který pomocí metody vypis_reakci() může vypsat seznam všech reakcí na jím vytvořené nabídky práce.
5.7
Třída Zivotopis
Třída Zivotopis se stará o kompletní správu životopisů. Jedná se tedy o vytváření, editaci i výpis seznamu životopisů a jednotlivého detailu. Při vytváření nového životopisu je nutné nejdříve připravit si všechna potřebná data. Pro tuto podmínku je vytvořena metoda nacti_data_pro_zivotopis(), která vrací seznam možných typů vzdělání. $vzdelani = $this->DB->select_list("SELECT * FROM education"); $this->IO->assign(’VZDELANI’, $vzdelani) Hlavní metodou této třídy je metoda vytvorit_zivotopis(), která nejdříve načte data pomocí metody nacti_data_pro_zivotopis(). Dále vypíše ID uživatele uložené v session. Poté ověří pomocí regulárních výrazů a všechny vstupy. Metoda editovat_zivotopis() vypíše nejdříve všechny uložené údaje a dále povolí jejich editaci. Další metodou použitou pro výpis všech vytvořených životopisů je vypis_zivotopisy(). Tato metoda také obsahuje výpis na základě filtrování a zadání parametrů. if($parametr == "cv_name_asc") { $zivotopisy = $this->DB->select_list("SELECT c.user_id AS ’id’, c.name AS ’nazev_zivotopisu’, u.name AS ’jmeno’, u.surname AS ’prijmeni’, c.sex AS ’pohlavi’, c.create_date AS ’datum’, e.name AS ’vzdelani’, l.name AS ’lokalita’ FROM cv AS c JOIN user as u ON c.user_id = u.id JOIN education as e ON e.id = c.education_id JOIN location as l ON l.id = u.location_id WHERE c.user_id = u.id $education_insert $sex_insert $location_insert ORDER BY c.name ASC"); $this->IO->assign(’CVS’, $zivotopisy); $this->IO->assign(’cv_name_asc’, 1); } elseif($parametr == "cv_name_desc") {
5.8. TŘÍDA REGISTRACE
29
$zivotopisy = $this->DB->select_list("SELECT c.user_id AS ’id’, c.name AS ’nazev_zivotopisu’, u.name AS ’jmeno’, u.surname AS ’prijmeni’, c.sex AS ’pohlavi’, c.create_date AS ’datum’, e.name AS ’vzdelani’, l.name AS ’lokalita’ FROM cv AS c JOIN user as u ON c.user_id = u.id JOIN education as e ON e.id = c.education_id JOIN location as l ON l.id = u.location_id WHERE c.user_id = u.id $education_insert $sex_insert $location_insert ORDER BY c.name DESC"); $this->IO->assign(’CVS’, $zivotopisy); $this->IO->assign(’cv_name_desc’, 1); } elseif($parametr == "name_asc") { $zivotopisy = $this->DB->select_list("SELECT c.user_id AS ’id’, c.name AS ’nazev_zivotopisu’, u.name AS ’jmeno’, u.surname AS ’prijmeni’, c.sex AS ’pohlavi’, c.create_date AS ’datum’, e.name AS ’vzdelani’, l.name AS ’lokalita’ FROM cv AS c JOIN user as u ON c.user_id = u.id JOIN education as e ON e.id = c.education_id JOIN location as l ON l.id = u.location_id WHERE c.user_id = u.id $education_insert $sex_insert $location_insert ORDER BY u.name ASC"); $this->IO->assign(’CVS’, $zivotopisy); $this->IO->assign(’name_asc’, 1);...... Poslední metodou této třídy je metoda detail_zivotopisu(), která jen na základě ID zaměstnance vypíše detail vytvořeného životopisu.
5.8
Třída Registrace
Třída Registrace provádí zaregistrování nového uživatele do systému. Obsahuje dvě metody, které vytvářejí uživatele s právy Zaměstnance nebo Zaměstnavatele. Metoda registrovat_zamestnanec() vytváří tedy nového uživatele s právy Zaměstnance, jak bylo zmíněno výše. Nejdříve na základě regulárního výrazu ověří, zda zadaný údaj byl e-mailovou adresou a dále se ověří, zda zadané heslo a jeho kopie se shodují. Pokud tyto kontroly proběhnou v pořádku, dojde k dalšímu ověření, zda zadaná e-mailová adresa se již v systému nevyskytuje. if ($mail_ok = true) { $test = $this->DB->select_detail("SELECT * FROM user WHERE mail =’$mail’"); if (!empty($test)) { $this->IO->assign("err_mail_exist",1); $ok = false; }
30
KAPITOLA 5. IMPLEMENTACE SYSTÉMU
} Po úspěšném vykonání všech potřebných ověřovacích procedur již dojde k samotnému vytvoření nového uživatele, vytvoření session s ID uživatele a následnému přesměrování na stranu s profilem uživatele. Pro registraci s právy Zaměstnavatele se využívá metoda registrovat_zamestnavatel(), která pracuje stejným způsobem jako metoda registrovat_zamestnanec(), jen pracuje s více vstupními daty.
5.9
Třída Editace
Třída Editace zpracovává situace v aplikaci přístupné po přihlášení. Metody predvypln_zamestnanec() a predvypln_zamestnavatel() ověřují přihlášeného uživatele a vracejí jeho údaje. Metody editovat_zamestnanec() a editovat_zamestnavatel() vracejí údaje přihlášeného uživatele a ověřují změněné informace pomocí metody preg_match(). Také ověřují, zda určité údaje, jako jsou IČO či e-mail již v databázi nejsou uvedeny a vracejí příslušné návratové hodnoty. if (preg_match ("/[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/i", $mail)) { $mail_ok = true; $mail_insert = $mail; $this->IO->assign("mail_insert",$mail_insert); } else { if ($mail != ’’) { $this->IO->assign("err_mail_format",1); $this->IO->assign("mail_insert",$mail); $ok = false; } }
Kapitola 6
Návrh grafického designu a uživatelského rozhraní 6.1
Wireframe úvodní strany
Úvodní strana obsahuje základní vyhledávací formulář, kterému je věnována velká plocha stránky, aby byl uživatel upoután a nasměrován k ideálnímu použití. Dále obsahuje výpis posledních přidaných nabídek práce, rotátor kategorií pracovních nabídek a informační boxy například pro pomoc s vytvářením životopisu či připravením se na pohovor.
Obrázek 6.1: Wireframe úvodní strany
31
32KAPITOLA 6. NÁVRH GRAFICKÉHO DESIGNU A UŽIVATELSKÉHO ROZHRANÍ
6.2
Wireframe výpisu vyhledávání
Strana s vyhledáváním umožní uživateli přehledný výpis výsledků hledání díky tabulkovému vzhledu. Specialitou tohoto typu výpisu je, že po najetí na název nabídky práce se zobrazí box v nové vrstvě obsahující přímo popis nabídky bez nutnosti prokliku na detail nabídky. Základní vyhledávací formulář se přesunul výše do prostoru po rotátoru kategorií.
Obrázek 6.2: Wireframe výpisu vyhledávání
6.3. WIREFRAME VNITŘNÍ STRANY
6.3
33
Wireframe vnitřní strany
Ukázka vnitřní strany zobrazuje výpis detailu nabídky včetně servisních odkazů v dolní části stránky. Nejdůležitějším prvkem se stalo tlačítko „odpovědět“. Další prvky „zpět“ a „nahoru“ jsou zde jen pro orientaci v aplikaci.
Obrázek 6.3: Wireframe vnitřní strany
34KAPITOLA 6. NÁVRH GRAFICKÉHO DESIGNU A UŽIVATELSKÉHO ROZHRANÍ
6.4
Wireframe registrace
Wireframe stránky registrace zaměstnance zobrazuje především rozložení formulářových polí.
Obrázek 6.4: Wireframe registrace
Kapitola 7
Testování Tato kapitola se zaobírá testováním výsledné aplikace. Testována byla jak klasická uživatelská část zobrazovaná pro anonyma, tak speciální administrační část pro zaměstnavatele a zaměstnance. Dále probíhal test kompatibility aplikace s nejrozšířenějšími webovými prohlížeči a test validity zdrojových kódů.
7.1
Uživatelské rozhraní
Test použitelnosti uživatelského rozhraní byl proveden metodou kognitivního průchodu a následného usability testu.
7.2
Kognitivní průchod
Pro ověření a zajištění hladkého průběhu testu použitelnosti bylo před jeho zahájením provedeno vlastní testování autorem pomocí sady kognitivních průchodů aplikací. Jednalo se o ty samé úkoly, které byly připraveny pro testovací uživatele během testu použitelnosti.
35
36
KAPITOLA 7. TESTOVÁNÍ
Aplikace z pohledu Anonyma Seznam testovacích scénářů: • zobrazení detailu nejnovější nabídky práce, • výpis nabídek určité kategorie, • vyhledání nabídky práce dle požadovaného názvu a lokality, • odeslání reakce na nalezenou nabídku práce, • registrace nového zaměstnance do aplikace. Všechny výše zmíněné průchody se podařilo dokončit bez problému. Hodnocení úspěšnosti testu je 100%.
7.3. TEST POUŽITELNOSTI
37
Aplikace z pohledu Zaměstnance Seznam testovacích scénářů: • registrace nového zaměstnance, • přihlášení do aplikace, • doplnění vlastních údajů, • vytvoření vlastního životopisu, • úprava typu vzdělání v životopisu, • vyhledání nabídky práce dle požadovaného názvu a lokality, • odeslání reakce na nalezenou nabídku práce. Všechny výše zmíněné průchody se podařilo dokončit bez problému. Hodnocení úspěšnosti testu je 100%. Aplikace z pohledu Zaměstnavatele Seznam testovacích scénářů: • registrace nového zaměstnavatele, • přihlášení do aplikace, • doplnění vlastních údajů, • vytvoření nové nabídky práce s určitými parametry, • vyhledání právě vytvořené nabídky, • zobrazení reakcí na nabídku, • zobrazení detailu životopisu konkrétního zaměstnance. Všechny výše zmíněné průchody se podařilo dokončit bez problému. Hodnocení úspěšnosti testu je 100%.
7.3
Test použitelnosti
Test byl proveden na sedmi personách. Jednalo se o čtyři uživatele s nadprůměrnou znalostí a tři uživatele se základní znalostí v oblasti počítačové gramotnosti. Uživatelé před samotným průběhem testování podstoupili krátké seznámení se systémem a s připravenými úkoly. Během testu na všechny osobně dohlížel autor aplikace. Testovací úkoly byly shodné s úkoly z kognitivního průchodu. Aplikace z pohledu Anonyma
38
KAPITOLA 7. TESTOVÁNÍ
Při testování nebylo znatelné zaváhaní u žádného z testovaných. Test dopadl velmi dobře. I přes absenci potíží bylo přijato několik připomínek ke grafickému vzhledu výsledné aplikace. Aplikace z pohledu Zaměstnance Při testování bylo již znatelné zaváhaní u tří méně zkušených testerů. Vzhledem ke zvýšení požadavků na testery test trval delší dobu, než bylo očekáváno. Z tohoto testu vyplynula první chyba v systému, kdy při zadání špatných přihlašovacích údajů není dotyčný přesměrován na původní stranu, ale zůstane na straně login.php, která obstarává kontrolu přihlašování. Test tedy dopadl dobře, neboť touto chybou nebyla omezena základní funkčnost systému. Tato chybná vlastnost systému ovšem nakonec nebyla opravena. Aplikace z pohledu Zaměstnavatele Vzhledem k získání více zkušeností s prací se systémem během předchozích dvou testování tento test již nedělal testovaným tolik potíží jako předchozí test. Výsledkem tohoto testu nebyla žádná chyba, proto tento test dopadl výborně.
7.4
Kompatibility prohlížečů
Test byl proveden mini počítači ZOTAC ZBOX SD-ID11 se 32bitovým operačním systémem Windows 7 Home Premium. Testované prohlížeče: • MS Internet Explorer 7 (jako kompatibilní mód MS Internet Explorer 8), • MS Internet Explorer 8, • MS Internet Explorer 9, • Mozilla Firefox 3.6.17, • Mozilla Firefox 4, • Google Chrome 11.0.696.65, • Opera 11.00. Testována byla optimalizace designu a funkčnost systému. Výsledky jsou zpracovány do následující tabulky: Prohlížeč MS Internet Explorer 7
MS Internet Explorer 8 MS Internet Explorer 9 Mozilla Firefox 3.6.17 Google Chrome 11.0.696.65 Opera 11.00
Design 95% (špatné vertikální centrování vyhledávacího inputu na úvodní straně) 100% 100% 100% 100% 100%
Funkčnost 100%
Prošel ANO
100% 100% 100% 100% 100%
ANO ANO ANO ANO ANO
7.5. VALIDITA ZDROJOVÝCH KÓDŮ
7.5
39
Validita zdrojových kódů
Testování validity zdrojových kódů bylo provedeno prostřednictvím plug-inu pro prohlížeč Mozilla FireFox HTML Validator v.0.8.5.9 Všechny stránky jsou plně validní dle standardu xHTML 1.0 Strict i přes omezení výpisu popisu nabídek na určitý počet znaků a odstranění koncového tagu přidaného WYSIWYG editoru Tiny MCE.
40
KAPITOLA 7. TESTOVÁNÍ
Kapitola 8
Závěr Cílem této bakalářské práce byl návrh a realizace webové aplikace pro podporu personální agentury. Tento systém se podařilo vytvořit a na základě důkladného testování také prověřit, že je v poslední fázi před samotným spuštěním beta testování. Tato aplikace byla navržena a vytvořena na základě porovnání již realizovaných podobných systémů, zhodnocení jejich vlastností, výhod, nevýhod a jejich využitelnosti v reálném provozu. Na základě této analýzy byl vybudován systém, který v tomto okamžiku stále ještě nedosahuje kvalit ostatních systémů, ale z hlediska budoucího vývoje se jedná o systém mající obrovský potenciál růstu a možného úspěchu v reálném konkurenčním boji. Jelikož při vývoji byly odděleny aplikační a prezentační vrstvy aplikace, není problém jednoduše změnit výsledný design celého systému. Stejně jednoduše bude také možné zasáhnout do aplikační části a dále pokračovat ve vývoji a implementaci neaplikovaných vlastností a funkcí pro zkvalitnění uživatelského komfortu. Na tomto realizovaném projektu bylo prozatím odvedeno 320 hodin programování včetně testování, 80 hodin analýzy a 40 hodin konzultací. z pohledu plánovaného harmonogramu se přesto vývoj tohoto systému nalézá ve druhé třetině finální podoby. Očekávané finální spuštění do ostrého provozu lze nyní předpokládat na přelomu roku 2011 a 2012.
41
42
KAPITOLA 8. ZÁVĚR
Literatura [1] Aplikace wamp server, citováno dne 2011-01-03. http://www.wampserver.com. [2] Cufón - fonts for the people, citováno dne 2011-01-03. http://cufon.shoqolate.com. [3] Javascript framework mootools, citováno dne 2011-01-03. http://mootools.net/. [4] Martin ježek, citováno dne 2011-01-03. http://www.martin-jezek.cz/. [5] Mootools datepicker calendar, citováno dne http://www.monkeyphysics.com/mootools/script/2/datepicker.
2011-01-03.
[6] Tinymce javascript wysiwyg http://tinymce.moxiecode.com.
2011-01-03.
editor,
citováno
dne
[7] S. Písek. JavaScript : efektní nástroj oživení www stránek. 1. vyd.. Praha : Grada Publishing, 2001. ISBN 80-247-0014-X. [8] J. Resig. JavaScript a Ajax : moderní programování webových aplikací. Překlad Ondřej Baše, Ondřej Žižka. 1. vyd.. Brno : Computer Press, 2007. ISBN 978-80-251-1824-5. [9] N. C. Zakas. JavaScript pro webové vývojáře : programujeme profesionálně. Překlad Lukáš Krejčí. 1. vyd.. Brno : Computer Press, 2009. ISBN 978-80-251-2509-0.
43
44
LITERATURA
Příloha A
Seznam použitých zkratek COBOL – COmmon Business-Oriented Language CODASYL – Conference on Data Systems Languages CSS – Cascading Style Sheets DBTG – Data Base Task Group HTML – HyperText Markup Language HTTP – Hypertext Transfer Protocol IČ – Identifikační číslo Kč/h – Korun českých za hodinu Kč/měsíc – Korun českých za měsíc MD5 – Message-Digest algorithm 5 MS – MicroSoft MySQL – My Structured Query Language PHP – PHP: Hypertext Preprocessor PSČ – Poštovní směrovací číslo SEO – Search engine optimization SQL – Structured Query Language UML – Unified Modeling Language W3C – World Wide Web Consortium WYSIWYG – What You See Is What You Get xHTML – eXtensible Hypertext Markup Language XML – Extensible Markup Language
45
46
PŘÍLOHA A. SEZNAM POUŽITÝCH ZKRATEK
Příloha B
Obsah přiloženého CD /BP – zdrojové texty bakalářské práce /APLICATION – zdrojové kódy aplikace /SOLUTION – softwarové zázemí pro nasazení aplikace README.txt – soubor s popisem CD
47