České vysoké učení technické v Praze Fakulta elektrotechnická Katedra počítačů
Bakalářská práce
Generátor testovacích dat Gabriela Polanská
Vedoucí práce: Ing. Božena Mannová, Ph.D.
Studijní program: Softwarové technologie a management, Bakalářský Obor: Softwarové inženýrství
9. července 2009
[ii]
.
Poděkování Na tomto místě bych ráda poděkovala Ing. Boženě Mannové, Ph.D za vedení mé bakalářské práce. Rovněž patří můj dík mému muži Liborovi za podporu při studiu a tvorbu potřebného zázemí, bez kterého bych tuto práci ani studium při zaměstnání nemohla uskutečnit.
[iii]
[iv]
Prohlášení Prohlašuji, že jsem práci vypracovala samostatně a použila 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 9. 7. 2009
[v]
[vi]
Abstract Baccalaureate work deals with problems of testing data creation and with methods which are during testing data creation used. Goal of the work is to design and implement functional prototype of testing data generator application, which will be usable for both manual and automated functional tests, performance tests and unit tests. The system is designed for use in Czech environment with implementation of national specific data elements.
Abstrakt Bakalářská práce se zabývá problematikou tvorby testovacích dat a metodami, které se při jejich tvorbě využívají. Cílem práce je navrhnout a implementovat funkční prototyp generátoru testovacích dat, který bude využitelný pro funkční manuální a automatizované testy, zátěžové testy a unit testy. Systém je navržen pro použití v českém prostředí s implementací specifických datových prvků.
[vii]
[viii]
Obsah 1 Úvod
................................................................................................................................. 1
2 Popis problému, specifikace cílů a požadavků implementace 3 Analýza a návrh řešení
...................................... 3
..................................................................................................... 7
3.1 Úvod ................................................................................................................................ 7 3.2 Zákadní pojmy .................................................................................................................... 7 3.3 Funkcionalita generování testovacích dat pro zátěžové testy ........................................... 8 3.4 Funkcionalita generování testovacích dat pro funkční testy ............................................. 9 3.5. Funkcionalita správa Projektů a Šablon ......................................................................... 10 3.6. Funkcionalita generování dat ........................................................................................ 11 3.7. Funkcionalita správa číselníků ...................................................................................... 11 3.8. Funkcionalita ukládání dat a metadat ........................................................................... 11 3.9. Funkcionalita GUI ........................................................................................................ 11 4 Realizace
....................................................................................................................... 13
4.1 Úvod .............................................................................................................................. 13 4.2 Použité nástroje ................................................................................................................ 13 4.3 Jádro aplikace GenDat ................................................................................................... 14 4.4 Popis tříd implementovaných v jádru ............................................................................ 15 4.5 Databázové objekty aplikace GenDat ............................................................................ 19 4.6 GUI aplikace GenDat .................................................................................................... 20 4.7 Popis tříd implementovaných v GUI ............................................................................. 21 5 Testování
....................................................................................................................... 25
5.1 Testovací plán ................................................................................................................ 25 5.2 Test analýza ...................................................................................................................... 26 6 Závěr Literatura
............................................................................................................................... 31 ............................................................................................................................. 33
A Metody tvorby testovacích dat
...................................................................................... 35
A.1 Partition testing ............................................................................................................. 35 A.2 Kombinační metody ..................................................................................................... 36
[ix]
B Formáty jednoduchých datových prvků ....................................................................... 39 B.1 Rodné číslo občana ....................................................................................................... 39 B.2 Bankovní spojení
......................................................................................................... 40
B.3 Identifikační číslo ......................................................................................................... 41 B.4 Daňové identifikační číslo ............................................................................................. 42 C Existující implementace
............................................................................................... 45
C.1 Generátory testovacích dat pro stress testy ................................................................... 45 C.2 Generátory testovacích dat na základě Partition testing a kombinačních metod .......... 47 D Seznam použitých zkratek
.......................................................................................... 51
E Instalační a uživatelská příručka
............................................................................... 53
E.1 Instalace (OS WIndows) ............................................................................................... 53 E.2 Uživatelská příručka ...................................................................................................... 53 F Obsah přiloženého CD
.................................................................................................. 55
[x]
Seznam obrázků Obrázek 4.1: Ukázka GUI – strom číselníku se zobrazenými hodnotami v tabulce ....... 21 Obrázek 4.2: Ukázka GUI – strom šablon se zobrazenou položkou typu celé číslo ........ 21 Obrázek A.1: Klasifikační schéma kombinačních metod .................................................. 37 Obrázek A.2: Stanovení (odhad) velikosti výsledné množiny TC .................................... 38
[xi]
[xii]
Seznam tabulek Tabulka 5.1 : Testovací případy pro oblast PROJEKT ................................................... 26 Tabulka 5.2 : Testovací případy pro oblast ŠABLONA ................................................... 27 Tabulka 5.3 : Testovací případy pro oblast GENEROVÁNÍ DAT .................................. 28 Tabulka 5.4 : Testovací případy pro oblast PŘIPOJENÍ K DATABÁZI ....................... 28 Tabulka B.1 : Algoritmus kontroly čísla účtu na modulo 11 ............................................ 41 Tabulka C.1 : Systémy pro generování testovacích dat na základě pairwise metody ....... 48
[xiii]
[xiv]
Kapitola 1
ÚVOD
Kapitola 1
Úvod Jako téma své bakalářské práce jsem si vybrala návrh a implementaci systému pro generování testovacích dat. Již několik let pracuji v IT v oblasti testování. Na projektech obvykle působím v roli test analytika. Test analýzu připravuji pro manuální i automatické testy a příprava testovacích dat patří k mým častým úkolům. Již delší dobu uvažuji o realizaci systému pro generování testovacích dat a při výběru tématu své bakalářské práce jsem se rozhodla, že tento záměr v rámci této práce začnu naplňovat. V dnešní době existuje mnoho utilit a aplikací, které se generováním testovacích dat zabývají. Každá z těchto aplikací se zaměřuje na určitou oblast. Některé generátory vytváří velké množiny validních dat pro zátěžové testy na různých úrovních systému (uživatelské rozhraní, databáze atd.). Další generátory na základě jednotlivých testovacích metod jako např. Boundary Value Analysis, Equivalence Partitioning, Category Partition a kombinačních metod vytváří optimalizovanou množinu testovacích dat, která je dostačující pro ověření funkčnosti systému z hlediska testování vstupů a výstupů aplikace vůči zadání požadovaného chování. Ve své praxi pracuji na projektech u klientů, kteří komerční generátory nemají k dispozici a proto jsem nucena využívat pouze freewarové utility, které nesplňují všechny požadavky a úzce se zaměřují na jednu oblast. Příprava testovacích dat tímto způsobem pak bývá pracná a málo efektivní. Současně tyto nástroje nepodporují českou lokalizaci s ohledem na generování typů dat jako je rodné číslo, IČ nebo např. číslo bankovního účtu. Zároveň je téma efektivní přípravy testovacích dat pro mě velmi zajímavé a v rámci tohoto projektu bych si chtěla rozšířit své znalosti v této oblasti. Generátor testovacích dat podle mých požadavků jako test analytika přesahuje rozsah této bakalářské práce. Z tohoto důvodu byly v mé práci specifikovány požadavky na systém, který bude vyvíjen i mimo tuto bakalářskou práci a bude dále rozšiřován. Návrh a realizace práce byly omezeny pouze na prototyp aplikace s omezenými funkcionalitami, ale s ohledem na další možné rozšíření.
[1]
Kapitola 1
ÚVOD
[2]
Kapitola 2
POPIS PROBLÉMU, SPECIFIKACE CÍLE A POŽADAVKÚ
Kapitola 2
Popis problému, specifikace cílů a požadavků na implementovaný systém Specifikace cílů (Deklarace záměru) Cílem je navrhnout a vytvořit systém, který bude umožňovat generování testovacích dat použitelných pro funkční manuální a automatizované testování, zátěžové testování a případně unit testy. Vygenerovaná data pro funkční testy budou vytvořena na základě známých a efektivních testovacích metod. Systém umožní generovat variabilní data různých datových typů, generování hodnot z číselníku a generování speciálních datových prvků předem dané struktury. Výběr hodnot jednotlivých datových typů bude dále nastavitelný a modifikovatelný. Systém umožní vytvářet data s českou lokalizací. Výstup generování bude probíhat do databáze. Aplikace umožní export vygenerovaných dat do dalších formátu, tak aby vygenerovaná data byla propojitelná s dalšími testovacími nástroji.
Aplikace bude určena pro: a) Test analytiky, kterým by měla zefektivnit přípravu testovacích dat v rámci test analýzy, b) Test exekutory pokud budou provádět testování bez přípravy dat od test analytika nebo v případech free testů, c) Programátory, kterým usnadní přípravu dat pro unit testy, d) Vývojáře zátěžových testů
Funkční testy Systém musí být navržen tak, aby umožnil zredukovat množství testovacích dat na optimální velikost s ohledem na to, zda testování bude probíhat manuálně nebo automaticky. Tato redukce dat by měla proběhnout na základě známých testovacích a kombinatorických metod a umožnit uživateli výběr této metody. Charakteristikou testovacích metod pro optimalizaci testovací sady se zabývá Dodatek A.
[3]
Kapitola 2
POPIS PROBLÉMU, SPECIFIKACE CÍLE A POŽADAVKÚ
Zátěžové testy Systém musí umožnit generovat velké množství validních dat, které odpovídají požadované struktuře. Bude u nich zajištěna např. maximální a minimální mez, maska, správnost formátu. Data bude možné generovat náhodným výběrem nebo inkrementálně. Bude možné generovat datové prvky s českou lokalizací ve správném formátu dle platných znění zákonů ČR. Formáty těchto datových prvků se zabývá Dodatek B.
Srovnání s existujícími implementacemi Systém by měl v porovnání s jinými existujícími implementacemi, které se zaměřují buď na funkční nebo zátěžové generování přinést obě funkčnosti a mít implementovánu českou lokalizaci: 1. možnost generování specifických datových prvků (rodné číslo, číslo účtu apod.) 2. napojení generátoru na číselníky s daty (číselník měst, ulic, PSČ, jmen apod.) Vzhledem k tomu, že existuje velké množství aplikací, které se zabývají generováním dat se specializací na určitý typ testování nebo testovací metodu nebylo možné vybrat jejich hlavní zástupce jako např. HP Load Runner v oblasti zátěžového testování. V Dodatku C je vybráno několik zástupců a provedena jejich charakteristika.
Požadavky na systém (Katalog požadavků) Systém umožní: 1. Generovat testovací data pro zátěžové testy 1.1. Na základě nastavení šablony vygenerovat požadovaný počet záznamů testovacích dat, kdy jednotlivé položky budou odpovídat nastavení datového typu a jeho parametrizaci. Generovány jsou pouze validní data, tzn. taková data, která následně testovaný systém zpracuje očekávaným způsobem a nevyvolá vyjímku nebo chybovou hlášku 1.2. Generovat data náhodně 1.3. Generovat data inkrementálně 2. Generovat testovací data pro funkční manuální, automatizované testy a unit testy na základě testovacích metod jako Partition testing a kombinačních metod Na základě nastavení šablony vygenerovat ke každé položce množinu 2.1. hodnot na základě jedné z Partition metod a použitím kombinační metody vytvořit optimalizovanou množinu testovacích dat pro ověření funkčnosti testovaného systému. Generovány jsou jak validní, tak i nevalidní data. 2.2. 2.3.
Vybrat z několika kombinačních metod – např. pairwise, IPO Připravit data ke kombinování dle BVA (případně Equivalence partitioning) [4]
Kapitola 2
3.
4.
POPIS PROBLÉMU, SPECIFIKACE CÍLE A POŽADAVKÚ
2.4. Zadat vlastní vstupní hodnoty z číselníku Šablony 3.1. Evidovat požadavky na generování v podobě předloh – šablon 3.2. Vytvořit novou šablonu 3.3. Uložit šablonu 3.4. Zobrazit uloženou šablonu 3.5. Editovat šablonu, upravit její položky a toto nastavení uložit 3.6. Smazat šablonu Typ a obsah šablon 4.1. Rozlišovat šablony dvou typů. Šablonu pro generování testovacích dat pro zátěžové testy (Šablona STRESS) a šablonu pro funkční testy (Šablona FUNC) 4.2. V šabloně evidovat údaje o názvu tabulky, ve které budou data uložena, o jednotlivých položkách, jejich datových typech a o jejich nastavení 4.3. 4.4.
5.
6.
V šabloně evidovat více položek různých datových typů Do obou typů šablon přidat položky všech implementovaných datových typů 4.5. Podporovat základní datové typy položky šablony: a. Celé číslo b. Reálné číslo c. Řetězec d. Datum 4.6. Podporovat položku šablony napojenou na číselník 4.7. Podporovat speciální datové typy položky šablony: a. Rodné číslo b. Bankovní spojení c. IČ d. DIČ 4.8. Rozšíření množiny datových typů v budoucnosti Projekt 5.1. Evidovat šablony v rámci projektů 5.2. V jednom projektu lze evidovat více šablon obou druhů viz. bod 4.1. 5.3. Založit nový projekt 5.4. Otevřít existující projekt 5.5. Uložit projekt 5.6. Nastavit vlastnosti projektu – adresář, kde bude uložen, nastavení připojení k databázi Generování dat 6.1. Nad vybranou šablonou provést generování dat 6.2. Pro generování dat nad STRESS Šablonou definovat počet záznamů, které budou generovány
[5]
Kapitola 2
6.3.
7.
POPIS PROBLÉMU, SPECIFIKACE CÍLE A POŽADAVKÚ
V průběhu generování dat přerušit generování
6.4. Generování dat nad šablonou provést opakovaně Vygenerovaná data 7.1. Zobrazit vygenerovaná data pro projekt 7.2. Editovat vygenerovaná data 7.3. Smazat vygenerovaná data 7.4. Zobrazit datum generování, počet vygenerovaných záznamů, vazbu na šablonu podle které bylo generováno
7.5. Vyexportovat vygenerovaná data z databáze do jiných formátů: a. Textový soubor b. MS Excel c. XML 8. Číselník 8.1. Rozlišovat číselníky dvou typů. Číselníky obecné pro celou aplikaci a číselníky vázané na určitou šablonu a datovou položku 8.2. Zobrazit číselník 8.3. Vytvořit nový číselník 8.4. Editovat číselník 8.5. Zrušit číselník 8.6. Importovat číselník z externího formátu: a. Textový soubor b. MS Excel c. XML 9. Připojení k databázi 9.1. Nastavit připojení k databázi 9.2. Ověřit stav připojení k databázi 9.3. Kompatibilita s různými databázemi Oracle MySQL MS SQL Server PostgreSQL 10. GUI 10.1. Jednoduché intuitivní ovládání 11. Offline verze 11.1. Generovat data bez napojení na databázi do textového souboru 11.2. Omezená základní funčnost
[6]
ANALÝZA A NÁVRH ŘEŠENÍ
Kapitola 3
Kapitola 3
Analýza a návrh řešení 3.1. Úvod V této kapitole popíšeme cílovou podobu aplikace pro automatizované generování testovacích dat. Součástí práce je však pouze funkční prototyp, který nemá implementovány všechny funkčnosti pospané v této kapitole.
3.2. Základní pojmy Šablona Úkolem aplikace je generování dat podle požadavků uživatele. Data jsou ukládána do databázových tabulek nebo do textových souborů. V případě použití textových souborů je funkcionalita aplikace výrazně zjednodušena. Šablona je datová struktura, s jejíž pomocí uživatel aplikaci specifikuje fyzické jméno tabulky resp. textového souboru, jména sloupečků tabulky, typ hodnoty, která je uložena do daného sloupečku a pravidla pro generování hodnot pro daný sloupeček. Šablona rovněž určuje, zda data budou do tabulky generovány pro účely zátěžového nebo funkčního testování. Fyzický datový typ všech sloupečků tabulky je znakový, a to i v případě, že generované hodnoty jsou číselné, datumové apod. Projekt Aplikace umožňuje generovat několik různě definovaných datových tabulek současně. Protože každá tabulka vznikne pouze pomocí Šablony, aplikace musí umožňovat práci s několika Šablonami současně. Kontejnerem Šablon a tabulek z nich vygenerovaných je datová struktura Projekt. Vygenerované tabulky a Šablony jsou navázány na Projekt. Datové tabulky jsou navázány na Šablony pouze volnou formou, tzn. pokud tabulka vygenerována z dané Šablony, je povoleno následně a nezávisle na sobě měnit jak Šablonu, tak i datovou tabulku. [7]
ANALÝZA A NÁVRH ŘEŠENÍ
Kapitola 3
3.3. Funkcionalita generování testovacích dat pro zátěžové testy Aplikace podporuje generování hodnot těchto datových typů: - celé číslo - reálné číslo - datum s volitelným formátem s možností zahrnutí/vyloučení pracovních dnů nebo Sobot a Nedělí - řetězec, jehož obsah je volitelný pomocí masky a délka je volitelně pevná nebo náhodná - rodné číslo podle pravidel viz Dodatek B.1, bude možné zvolit generování pouze mužských nebo pouze ženských nebo libovolných (náhodný) rodných čísel - číslo bankovního účtu podle pravidel viz Dodatek B.2 - identifikační číslo (ekonomického subjektu) podle pravidel viz Dodatek B.3 - daňové identifikační číslo (daňového poplatníka) podle pravidel viz Dodatek B.4 - číselníková hodnota (hodnota z podmnožiny hodnot nějakého standardního nebo uživatelem definovaného číselníku) Generování je možné provádět náhodně, tj. náhodným výběrem hodnoty z diskrétního nebo spojitého intervalu hodnot. Interval definuje uživatel zadáním dolní a horní meze intervalu do Šablony. Vygenerováno je tolik hodnot, kolik je zadáno uživatelem v Šabloně. Uživatel může zvolit, zda se generované hodnoty smí nebo nesmí opakovat. Uživatel může na generovaný datový typ navázat uživatelem definovaný číselník zakázaných hodnot (např. svátky pro datový typ datum) – tyto hodnoty jsou z generování vyloučeny. Generování je možné provádět inkrementálně, tj. uživatel zadá počáteční hodnotu daného datového typu, inkrement a aplikace vygeneruje posloupnost {počáteční hodnota, počáteční hodnota + inkrement, počáteční hodnota + 2 * inkrement, ... }. Vygenerováno je tolik hodnot, kolik je zadáno uživatelem v Šabloně. Uživatel může zvolit, zda se generované hodnoty smí nebo nesmí opakovat. Uživatel může na generovaný datový typ navázat uživatelem definovaný číselník zakázaných hodnot (např. svátky pro datový typ datum) – tyto hodnoty jsou z generování vyloučeny. Počet generovaných hodnot je pro celou šablonu pouze jeden, tedy je platný pro všechny generované datové typy v rámci dané Šablony.
[8]
ANALÝZA A NÁVRH ŘEŠENÍ
Kapitola 3
3.4. Funkcionalita generování testovacích dat pro funkční testy Aplikace podporuje generování hodnot těchto datových typů: - celé číslo - reálné číslo - datum s volitelným formátem s možností zahrnutí/vyloučení pracovních dnů nebo Sobot a Nedělí - řetězec, jehož obsah je volitelný pomocí masky - číselníková hodnota (hodnota z podmnožiny hodnot nějakého standardního nebo uživatelem definovaného číselníku) Aplikace nejprve vygeneruje jednosloupečkové tabulky, generování probíhá v závislosti na datovém typu takto: celé číslo nebo reálné číslo: - uživatel zadá pomocí šablony pro daný sloupec datové tabulky minimální a maximální hodnotu (dále min a max) - aplikace automaticky vygeneruje do jednosloupečkové tabulky hodnoty {min-1, min, min+1, max-1, max, max+1, 0, prázdné číslo, abcd, prostřední hodnota z intervalu <min;max>, prostřední hodnota s vloženou mezerou}1 - aplikace na konec jednosloupečkové tabulky připojí zakázané hodnoty z uživatelem definovaného číselníku datum: - uživatel zadá pomocí Šablony pro daný sloupec datové tabulky minimální a maximální hodnotu (dále min a max) - aplikace automaticky vygeneruje do jednosloupečkové tabulky hodnoty {min-1, min, min+1, max-1, max, max+1, prázdné datum, abcd, 32.13.2999 (chybné datum ve správném formátu), 32132999 (chybné datum v chybném formátu), 1 4.12.2009 (správné datum v chybném formátu), prostřední hodnota z intervalu <min;max>, datum pracovního náhodného dne z intervalu <min;max>, datum náhodné Soboty nebo Neděle z intervalu <min;max> pokud existuje, datum náhodného svátku z intervalu <min;max> pokud existuje}2 - aplikace na konec jednosloupečkové tabulky připojí zakázané hodnoty z uživatelem definovaného číselníku
1
vzhledem k tomu, že bylo řečeno, že na úrovni databáze jsou všechny generované datové typy reprezentovány jako znakový datový typ, jsou "číselné" hodnoty korektní z hlediska jejich ukládání do databáze 2
vzhledem k tomu, že bylo řečeno, že na úrovni databáze jsou všechny generované datové typy reprezentovány jako znakový datový typ, jsou všechny "datumové" hodnoty korektní z hlediska jejich ukládání do databáze
[9]
ANALÝZA A NÁVRH ŘEŠENÍ
Kapitola 3
řetezec: - uživatel zadá pomocí Šablony pro daný sloupec datové tabulky minimální a maximální délku řetězce (dále min a max) a masku, která bude řídit typ obsahu řetězce - aplikace automaticky vygeneruje do jednosloupečkové tabulky hodnoty {min-1, min, min+1, max-1, max, max+1, prázdný řetezec} - aplikace na konec jednosloupečkové tabulky připojí zakázané hodnoty z uživatelem definovaného číselníku číselníková hodnota: - aplikace do jednosloupečkové tabulky připojí hodnoty z uživatelem definovaného číselníku (všechny hodnoty z číselníku nebo náhodný výběr nebo všechny hodnoty z nějakého intervalu, s opakováním nebo bez opakování) - aplikace na konec jednosloupečkové tabulky připojí zakázané hodnoty z uživatelem definovaného číselníku Aplikace podporuje partition a kombinační metody uvedené v Dodatku A, detailnější analýza je mimo rozsah této práce. Pomocí kombinačních metod se jednotlivé jednosloupečkové tabulky spojí do vysledné tabulky.
3.5. Funkcionalita správa Projektů a Šablon Aplikace umožňuje zobrazit, vyvářet, modifikovat, mazat, ukládat do, načítat z databáze nebo textového souboru Projekty. Aplikace v daném okamžiku pracuje s jedním Projektem. Projekt je kontejner libovolného počtu Šablon. Aplikace umožňuje zobrazit, vyvářet, modifikovat, mazat, ukládat do, načítat z databáze nebo textového souboru Šablony. Aplikace v daném okamžiku pracuje s několika Šablonami. Aplikace umožňuje pomocí šablony vygenerovat tabulku, změnit šablonu a opět vygenerovat tabulku (jinak pojmenovanou). Šablona obsahuje: - atribut, zda mají být generována testovacích dat pro zátěžové testy (Šablona typu STRESS) nebo pro funkční testy (Šablona typu FUNC), šablony obou typů mohou koexistovat v jednom projektu - eviduje fyzické jméno datové tabulky, do které budou data generována - eviduje názvy a datové typy sloupečků datové tabulky - eviduje pro každou svoji položku (sloupeček tabulky s vygenerovanými daty) pravidla pro generování hodnot (viz. Kapitola 3.4. o jednotlivých datových typech) - Šablony typu STRESS obsahují informaci o počtu generovaných řádků
[10]
ANALÝZA A NÁVRH ŘEŠENÍ
Kapitola 3
Aplikace umožňuje pro načítání a ukládání dat nastavit připojení do databáze nebo podadresář v souborovém systému.
3.6. Funkcionalita generování dat Aplikace provádí generování dat nad Projektem, tzn. projde všechny Šablony Projektu a podle každé z nich vygeneruje datovou tabulku. V libovolném okamžiku je možné proces generování přerušit. Aplikace umožňuje vygenerovaná data zobrazit, modifikovat, smazat, ukládá datum a čas zahájení generování, jak dlouho generování trvalo. Aplikace umožňuje vygenerovaná data vyexportovat z databáze do textového souboru s oddělovačem, do MS Excelu a do XML.
3.7. Funkcionalita správa číselníků Aplikace rozlišuje číselníky: - obecné - platné v každém projektu - projektové - jsou navázány na konkrétní trojici Projekt/Šablona/Položka Šablony, protože se z nich odvozují generované hodnoty datového typu LIST Aplikace umožňuje číselník zobrazit, vytvořit, modifikovat, smazat, importovat z textového souboru, MS Excelu nebo z XML.
3.8. Funkcionalita ukládání dat a metadat Aplikaci je možné při instalaci nastavit pro ukládání dat a metadat pomocí připojení k následujím databázím: - Oracle - MySQL - MS SQL Server - PostgreSQL Aplikace pomocí GUI umožňuje přihlásit se do databáze, ověřit stav spojení a odhlásit se z databáze.
3.9. Funkcionalita GUI Aplikace komunikuje s uživatelem pomocí GUI.
[11]
ANALÝZA A NÁVRH ŘEŠENÍ
Kapitola 3
[12]
Kapitola 4
REALIZACE
Kapitola 4
Realizace 4.1. Úvod Součástí této práce bylo vytvoření funkčního prototypu aplikace, která by automatizovaně generovala testovací data, použitelná pro stresové a funkční testování aplikací. Vytvořená aplikace "Generátor dat" (dále GenDat) proto nepokrývá v plné šíři návrh řešení. V budoucnu předpokládáme další vývoj jak jádra, tak i GUI, aby bylo možné plnohodnotné použítí aplikace GenDat v praxi. Jádro je možné např. rozšířit o: 1. generování dalších datových typů (číslo účtu, IČ, DIČ, e-mail, telefonní číslo apod.), 2. BVA, 3. doplnění kombinačních metod pro BVA, 4. implementaci spolupráce s více databázovými systémy, 5. importy číselníků 6. exporty generovaných dat apod. GUI má zatím jen nejzákladnější volby umožňující jednoduchou demonstraci chodu jádra programu (generování dat).
4.2. Použité nástroje Aplikace GenDat je navržena v architektuře klient-server. Napsána je v jazyce Java2 SE (JDK 1.6), vývojové prostředí NetBeans IDE 6.5. Jako DBMS byla použita databáze Oracle 11.1.0.6 (dabázové ovladače ojbdc5.jar a ojdbc6.jar jsou součástí instalace databáze Oracle), ovšem nejsou používány žádné specifické funkce, které by v budoucnu bránily spolupráci s jinými databázemi (MySQL, MS SQL Server). Vývoj proběhl na platformě MS Windows XP.
[13]
Kapitola 4
REALIZACE
4.3. Jádro aplikace GenDat Jádro se zabývá základním cílem aplikace GenDat, tj. vygenerovat data do databázové tabulky s daným počtem řádků, daným počtem sloupců, které jsou určitých datových typů a to vše dle uživatelem zadaných pravidel. Jádro aplikace GenDat proto implementuje algoritmy pro generování hodnot jednotlivých datových typů: -
číslo / NUMBER (long nebo double) znak / CHAR (pouze pro interní účely programu) řetězec / STRING datum / DATE rodné číslo / PIN číselník / LIST
Množiny hodnot datových typů je možné generovat v těchto režimech: - INCREMENTAL – generování hodnot ve stylu aritmetické řady: je dáno minimum a maximum pro generovanou hodnotu a inkrement (krok), s pomocí kterého se vypočítá následník posledně vygenerované hodnoty, přičemž jako první je vygenerována hodnota minimum a nikdy nesmí být překročena hodnota maximum - RANDOM – generování náhodných hodnot daného typu z určitého interval - CONSTANT – generování náhodných hodnot pevné délky (jen pro typ STRING) Pro jednotlivé datové typy jsou přípustné následující módy generování hodnot: - NUMBER - INCREMENTAL, RANDOM - CHAR - RANDOM - STRING - CONSTANT, RANDOM - DATE - INCREMENTAL, RANDOM - PIN - INCREMENTAL, RANDOM - LIST - INCREMENTAL, RANDOM Množiny vygenerovaných hodnot daného typu jsou ukládány do dílčích tabulek v databázi. Dílčí tabulky mají datový sloupec s vygenerovanými hodnotami daného datového typu a pomocný sloupec s jednoznačným číselným identifikátorem řádku. Pomocný sloupec slouží pro propojení několika dílčích tabulek pomocí příkazu jazyka SQL do výsledné tabulky. Dílčí tabulky jsou nakonec automaticky smazány. Informace o struktuře výsledné tabulky a o pravidlech pro generování dat do jejích sloupců jsou do jádra předávány z GUI pomocí instance třídy Sablona.
[14]
Kapitola 4
REALIZACE
4. 4. Popis tříd implementovaných v jádru aplikace GenDat MyFunctionsClass.java Třída implementuje několik obecných pomocných funkcí, některé z nich jsou připraveny pro budoucí využití. MyTypesClass.java Třída implementuje několik uživatelem definovaných výčtových datových typů (enum). GenNumberClass.java Třída implementuje generátor jedné hodnoty typu NUMBER. Konstruktor je přetížen, takže podle typu a počtu vstupních parametrů v jednom případě instance třídy generuje hodnotu typu long a ve druhém hodnotu typu double. Hodnotu je možné generovat v jednom ze dvou možných módů: INCREMENTAL nebo RANDOM, což je řízeno vstupním parametrem konstruktoru. Volání metody generující hodnotu (getLongNumber() nebo getDoubleNumber()) předpokládáme typicky v cyklu. V módu INCREMENTAL je jako vygenerovaná hodnota vráceno minimum (vstupní parametr konstruktoru) a při každém dalším volání je vrácena hodnota získaná jako předchozí hodnota + inkrement. V módu RANDOM je vrácena náhodná hodnota z intervalu <minimum;maximum>. Pro generování náhodných čísel je použita metoda Math.random(). GenCharClass.java Třída implementuje generátor jedné hodnoty typu CHAR. Generátor slouží pouze pro interní účely programu a pracuje pouze v módu RANDOM. Vstupním parametrem konstruktoru je formátovací značka (jeden ze znaků '?', '9', 'A', 'a', '.', '+', '*'), pomocí které se vybírá jedno z předdefinovaných znakových polí pro generování náhodného znaku. Významy formátovacích značek jsou tyto: '?' – pro generování bude vybráno pole znaků obsahující všechny nečeské znaky a tisknutelné speciální znaky '9' – pro generování bude vybráno pole znaků obsahující číslice 'A' – pro generování bude vybráno pole znaků obsahující velká česká písmena (včetně písmen s diakritikou) 'a' – pro generování bude vybráno pole znaků obsahující malá česká písmena (včetně písmen s diakritikou) '.' – odpovídá sjednocení 'A' + 'a' '+' – odpovídá sjednocení 'A' + 'a' + '9' '*' – odpovídá sjednocení 'A' + 'a' + '9'+'?' Třída GenCharClass používá pro generování náhodného indexu do vybraného pole znaků instanci třídy GenNumberClass pracující v módu RANDOM, která generuje číslo typu long z vhodného intervalu. Vhodným intervalem je interval odpovídající intervalu indexů zvoleného pole. Znak, který je na pozici odpovídající vygenerovanému indexu je vrácen jako výsledek činnosti generátoru znaku. [15]
Kapitola 4
REALIZACE
GenStringClass.java Třída implementuje generátor jedné hodnoty typu STRING. Konstruktor je přetížen, takže podle typu a počtu vstupních parametrů v jednom případě instance třídy generuje hodnotu typu STRING v módu CONSTANT a ve druhém případě generuje hodnoty v módu RANDOM. V módu CONSTANT jsou generovány řetězce pevné délky, která je dána vstupním parametrem konstruktoru.V módu RANDOM jsou generovány řetezce náhodné délky, přičemž délka je z intervalu <minimum;maximum>, hranice intervalu jsou parametry konstruktoru. Obsah řetězce v obou případech řídí maska, která je parametrem konstruktoru. Maska je řetězec složený z formátovacích značek (viz významy formátovacích značek u popisu třídy GenCharClass). Hodnota typu STRING je generována znak po znaku pomocí volání metody instance třídy GenCharClass, přičemž pro generování znaku na dané pozici je vybrána podmožina znaků určená formátovací značkou, která je v masce na stejné pozici. Pokud má maska délku, která je v nesouladu s minimální, maximální nebo požadovanou pevnou délkou generovaného řetězce, je maska ořezána nebo na konci doplněna na patřičnou délku pomocí formátovací značky '*'. GenDateClass.java Třída implementuje generátor jedné hodnoty typu DATE. Hodnoty typu DATE je možné generovat v módu INCREMENTAL nebo RANDOM, což je řízeno vstupním parametrem konstruktoru. V módu INCREMENTAL je jako vygenerovaná hodnota vráceno minimální datum (vstupní parametr konstruktoru) a při každém dalším volání je vrácena hodnota získaná jako předchozí hodnota+inkrement, kde inkrement je počet dnů (inkrement je vstupní paramentr konstruktoru). V módu RANDOM je vrácena nahodná datumová hodnota z intervalu <minimum;maximum>. Datumové hodnoty na vstupu a výstupu třídy jsou reprezentovány jako řetězec a k němu příslušný formátovací řetězec. Interně je datumová hodnota reprezentována standardní třídou java.util.Calendar. Při generování v módu INCREMENTAL je k naposledy vygenerovanému datumu reprezentovanému instancí třídy Calendar přičten počet dnů uložený v inkrementu (vstupní parametr konstruktoru), a to pomocí metody Calendar.add(). Při generování v módu RANDOM je používán principiálně stejný postup, pouze jako inkrement není použit vstupní parametr konstruktoru, ale náhodně vygenerovaná hodnota určující počet dnů, který bude přičten k minimálnímu datumu (parametr konstruktoru). Pro generování náhodného inkrementu je použita třída GenNumberClass pracující v módu RANDOM, která generuje číslo typu long z vhodného intervalu. Vhodným intervalem je interval odpovídající minimálnímu a maximálnímu datumu (vstupní paramtery konstruktoru). Číslo vygenerované třídou GenNumberClass z intervalu ohraničeného nulou a počtem dnů mezi minimálním a maximálním datumem. Počet dnů mezi minimálním a maximálním datumem zjistíme tak, že datumové hodnoty převedeme na milisekundový formát (metoda getTimeInMillis() třídy Calendar) a rozdíl [16]
Kapitola 4
REALIZACE
těchto čísel podělíme počtem milisekund v jednom dni. Zanedbáváme sistuaci, kdy mezi minimálním a maximálním datumem leží přechod mezi zimním a letním časem, tj. situace, kdy den může mít 23 resp. 25 hodin. GenPinClass.java Třída implementuje generátor jedné hodnoty typu PIN (rodné číslo). Hodnoty typu PIN je možné generovat v módu INCREMENTAL nebo RANDOM, což je řízeno vstupním parametrem konstruktoru. Generátor se řídí pravidly pro tvorbu rodných čísel, která jsou popsána v Dodatku B.1. Základem pro generování rodného čísla je generování jeho datumové části. K tomu je využívána instance třída GenDateClass. Tato instance je zkonstruována s formátovacím řetězcem datumu nastaveným do tvaru, který odpovídá datumové části rodného čísla a dále je nastavena do stejného módu generování, jako třída GenPinClass. Vstupním parametrem konstruktoru je řídící znak, který rozhoduje, má-li být generováno mužské rodné číslo ('M'), ženské rodné číslo ('W') nebo má-li to být určeno náhodně ('*'). K náhodnému určení je používána instance třídy GenNumberClass, generující 0 nebo 1. Po stanovení pohlaví rodného čísla provede generátor modifikaci datumové části rodného čísla podle pravidel pro muže nebo pro ženu (pravidla modifikace viz Dodatek B.1). Nakonec je vygenerováno číslo za lomítkem (pravidla pro číslo za lomítkem viz Dodatek B.1). Modifikovaná datumová část je spojena s číslem za lomítkem, přičemž je možné zvolit, jaký znak bude v rodném čísle použit jako oddělovač čísla za lomítkem. GenListClass.java Třída implementuje generátor datového typu LIST . Hodnota datového typu list je tvořena podmnožinou hodnot z jednoho sloupce existujícího číselníku. V tomto smyslu rozumíme číselníkem libovolnou tabulku v databázi, která má sloupeček, kde je uloženo pořadové číslo řádku a dále jeden nebo více sloupečků naplněných daty. Vstupem konstruktoru je databázové jméno zdrojové tabulky (číselníku) a jednoho jejího sloupečku, ze kterého jsou vybírána data. Třída GenListClass pro generování využívá některých metod třídy GenDataTableClass. Hodnotu typu LIST je možné generovat v módu INCREMENTAL nebo RANDOM, což je řízeno vstupním parametrem konstruktoru. Při generování v módu INCREMENTAL vzniká pomocná tabulka, do které generátor uloží číselnou posloupnost začínající číslem minimum, kde každý další člen posloupnosti je součet předchozí hodnota + inkrement. Při generování v módu RANDOM vzniká pomocná tabulka, do které generátor uloží náhodná čísla z intervalu <minimum;maximum> , počet čísel odpovídá počtu hodnot datového typu LIST (vstupní parametry konstruktoru). Následně generátor pro oba módy generování pomocí příkazu SQL propojí pomocnou tabulku a zdrojový číselník. Do výstupní tabulky jsou uloženy hodnoty ze zdrojového [17]
Kapitola 4
REALIZACE
sloupce zdrojové tabulky, které v propojení odpovídají vygenerovaným pořadovým číslům v pomocné tabulce. Výstupní tabulka obsahuje sloupec s pořadovým číslem řádku a sloupec s hodnotou vybranou ze zdrojového číselníku. Pomocná tabulka je automaticky smazána. DbClass.java Třída implementuje obecné metody pro práci s databází: - přihlášení do databáze - dotazování do databáze SQL příkazem SELECT - implementace vybraných DDL a DML příkazů (CREATE TABLE, INSERT INTO, DROP TABLE) - odhlášení se z databáze GenDataTableClass.java Třída implementuje metody, které se používají při výrobě výsledné tabulky z dílčích tabulek. Vždy musí být vytvořeno tolik dílčích tabulek, kolik má výsledná tabulka datových sloupečků. Dílčí tabulky jsou plněny pomocí jednotlivých generátorů hodnot datových typů NUMBER (long, double), CHAR, STRING, DATE, PIN, LIST. Hlavním vstupním parametrem konstruktoru je počet řádků výsledné tabulky. Třída sama zpočátku nemá informace o struktuře výsledné tabulky, je pouze nositelem obecných metod pro konstrukci dílčích tabulek a vytvoření výsledné tabulky z dílčích tabulek. Tak, jak jsou postupně volány metody instance třídy GenDataTableClass pro tvorbu jednotlivých dílčích tabulek, tak jsou postupně získávány informace pro závěrečný SQL příkaz, který z dílčích tabulek sestaví výslednou tabulku. Dílčí tabulky mají datový sloupec s vygenerovanými hodnotami daného datového typu a pomocný sloupec s jednoznačným číselným identifikátorem řádku. Pomocný sloupec slouží pro propojení několika dílčích tabulek pomocí příkazu jazyka SQL do výsledné tabulky. Dílčí tabulky jsou nakonec automaticky smazány. GenFromTemplateClass.java Třída implementuje rozhraní mezi GUI a jádrem. GUI prostřednictvím instance této třídy předává jádru (instanci třídy GenDataTableClass) infomace o tom, jakým způsobem mají být volány metody instance třídy GenDataTableClass. Vstupními parametry konstruktoru instance třídy GenFromTemplateClass jsou připojení k databázi (instance třídy DbClass), šablona pro generování tabulky a počet řádků tabulky generované tabulky. Šablona je instance třídy Sablona (je deklarována v GUI) a nese všechny potřebné informace o struktuře generované tabulky a pravidla pro generování hodnot jednotlivých datových typů do sloupečků generované tabulky.
[18]
Kapitola 4
REALIZACE
4. 5. Databázové objekty aplikace GenDat Aplikace GenDat ukládá do databáze systémové tabulky, tabulky s obecnými číselníky, tabulky s číselníky specifickými pro jednotlivé projekty generování dat a tabulky s vygenerovanými daty. Z důvodu co nejmenší zavislosti na konkrétní databázi nejsou používány databázové systémové pohledy, ani referenční integrita apod. Systémové tabulky Slouží pro uložení metadat používaných aplikací GenDat. PROJEKT – tabulka slouží pro ukládání jednotlivých projektů generování dat v aplikaci GenDat. Je to vlastně triviální tabulka pro uložení názvu projektu a identifikátoru, který v systémové tabulce SABLONA má stejnou hodnotu pro řádky reprezentující šablony téhož projektu. SABLONA – tabulka slouží pro ukládání šablon vytvořených v daném projektu. Jedna šablona je nositelem informací o jedné generované tabulce. Udržujeme informace o názvu generované tabulky, typu šablony (STRESS nebo BVA) a o vazbě na projekt. Typ šablony určuje, mají-li být generována data pro stresové testování nebo pro BVA. POLOZKA_SABLONA – tabulka udržuje informace položkách šablony, tj. o názvech a datových typech sloupečků generované tabulky, dále pak o vazbě na projekt a o vazbě na šablonu. DESKRIPTOR – jeden řádek tabulky nese informace o jednom datovém sloupečku jedné generované tabulky z hlediska pravidel pro generování hodnot (např. mód generování hodnot, minimum, maximum, inkrement,...). Tabulka je společná pro všechny datové typy, i když každý z aplikací GenDat podporovaných datových typů NUMBER (long, double), CHAR, STRING, DATE, PIN, LIST je popsán jinou množnou atributů. CISELNIK – tabulka udržuje seznam všech číselníků, obecných i projektových, přičemž pro projektové číselníky je evidována vazba na položku šablony (tabulka POLOZKA_SABLONA), šablonu a projekt POLOZKA_CISELNIK – tabulka udržuje názvy sloupečků číselníků a vazby sloupečků na tabulku CISELNIK DATA – do tabulky jsou ukládány názvy datových tabulek, které byly vygenerovány aplikací GenDat, dále vazba na šablonu, která byla při generování použita a vazba na projekt. Uvedené vazby však jsou pouze informativní, protože např. není vyžadováno, aby po vzniku datové tabulky byla použitá šablona neměnná nebo aby při změně obsahu šablony byly automaticky přegenerovány i na ni navázané datové tabulky.
[19]
Kapitola 4
REALIZACE
POLOZKA_DATA – tabulka udržuje názvy sloupečků vygenerovaných datových tabulek a vazbu na tabulku DATA. Číselníky obecné Tabulky obecných číselníků jsou datovým zdrojem pro generování datového typu LIST a jsou dostupné každému projektu. Typicky jsou obsahují standardní číselnková data, jako např. číselník akademických titulů, číselník PSČ, číselník kódů bank, číselník měst a obcí ČR. Součástí prototypu aplikace GenDat jsou reálné číselníky XXX a dále "cvičné" (neúplné) číselníky ULICE (číselník ulic ČR), JMENO (číselník křestních jmen), MESTO (číselník měst a obcí ČR). Číselníky projektové (zakázané hodnoty pro BVA, pro LIST), Tabulky projektových číselníků jsou datovým zdrojem pro generování datového typu LIST a jsou zavázané na konkrétní položku šablony konkrétního projektu. Typicky obsahují standardní číselníková data, jako např. číselník akademických titulů, číselník PSČ, číselník kódů bank, číselník měst a obcí ČR. Součástí prototypu aplikace GenDat jsou reálné číselníky XXX a dále "cvičné" (neúplné) číselníky ULICE (číselník ulic ČR), JMENO (číselník křestních jmen), MESTO (číselník měst a obcí ČR). Do kategorie projektových číselníků spadají i uživatelem definované číselníky, které mohou obsahovat např. seznamy zakázaných hodnot pro BVA (číselník SPECIALNI). Datové tabulky Tabulky obsahující data vygenerovaná aplikací GenDat v rámci uživatelských projektů.
4.6. GUI aplikace GenDat GUI slouží pro správu databázového připojení, projektů, šablon, číselníků a datových tabulek vygenerovaných jádrem aplikace GenDat na základě uživatelských projektů a v nich obsažených šablon. V rámci daného projektu je struktura šablon, číselníků a datových tabulek reprezentována pomocí stromu.
[20]
Kapitola 4
REALIZACE
Obrázek 4.1: Ukázka GUI – strom číselníku se zobrazenými hodnotami v tabulce
Obrázek 4.2: Ukázka GUI – strom šablon se zobrazenou položkou šablony typu celé číslo
4.7. Popis tříd implementovaných v GUI PolozkaCiselnik.java Třída implementuje řádek systémové tabulky CISELNIK_DETAIL, tzn. udržuje informace o jednom sloupečku číselníku (neobsahuje vlastní číselníkové hodnoty číselníkového sloupečku). Instance třídy se ukládají do instance standardní třídy java.util.Vector a ta je komponentou instance třídy Ciselnik. Třída se využívá pro [21]
Kapitola 4
REALIZACE
zobrazení informací o sloupečku číselníku (obecného nebo projektového) v rámci zobrazení struktury číselníku ve stromu GUI. Ciselnik.java Třída implementuje informace o struktuře číselníku aplikace GenDat, tzn. jeden řádek systémové tabulky CISELNIK a jemu odpovídající řádky ze systémové tabulky CISELNIK_DETAIL (neobsahuje vlastní hodnoty číselníku). Instance třídy má jako komponentu instanci standardní třídy java.util.Vector, ve které jsou uloženy instance třídy PolozkaCiselnik. Třída Ciselnik se využívá se pro zobrazení informací o struktuře číselníku (obecného nebo projektového) ve stromu GUI a pro předávání informací o struktuře číselníku do jádra aplikace GenDat. PolozkaData.java Třída implementuje řádek systémové tabulky DATA_DETAIL, tzn. udržuje informace o jednom sloupečku datové tabulky (tabulky s daty vygenerovanými aplikací GenDat; neobsahuje vlastní hodnoty sloupečku datové tabulky). Instance třídy se ukládájí do instance standardní třídy java.util.Vector a ta je komponentou instance třídy Data. Třída se využívá pro zobrazení informací o sloupečku datové tabulky v rámci zobrazení struktury číselníku ve stromu GUI. Data.java Třída implementuje informace o struktuře datové tabulky vygenerované aplikací GenDat, tzn. jeden řádek systémové tabulky DATA a jemu odpovídající řádky ze systémové tabulky DATA_DETAIL (neobsahuje vlastní hodnoty datové tabulky). Instance třídy má jako komponentu instanci standardní třídy java.util.Vector, ve které jsou uloženy instance třídy PolozkaData. Třída se využívá se pro zobrazení informací o struktuře datové tabulky ve stromu GUI a jádro ji využívá pro předávání informací o struktuře vygenerované datové tabulky do GUI aplikace GenDat. PolozkaDeskriptor.java Třída PolozkaDeskriptor je základním stavebním kamenem šablony pro generování dat. Implementuje pravidla pro generování hodnot jednoho sloupečku konkrétní datové tabulky. Pravidla reprezentují atributy, které jsou před zahájením generování dat daného datového typu (NUMBER (long, double), CHAR, STRING, DATE, PIN, LIST) předány do jádra – jsou to základní parametry jednotlivých metod tříd jádra. Instance třídy je komponentou instance třídy PolozkaSablona. PolozkaSablona.java Třída implementuje řádek systémové tabulky SABLONA_DETAIL, tzn. udržuje informace o jedné položce šablony pro generování datové tabulky. Komponentou instance třídy je jedna instance třídy PolozkaDeskriptor. Instance třídy PolozkaSablona se ukládají do instance standardní třídy java.util.Vector a ta je komponentou instance třídy Sablona. Třída PolozkaSablona se využívá pro zobrazení informací o sloupečku datové tabulky v rámci zobrazení struktury číselníku ve stromu GUI a pro předávání těchto informací do jádra. Sablona.java [22]
Kapitola 4
REALIZACE
Třída implementuje řádek systémové tabulky SABLONA a zároveň udržuje kompletní infomace o jedné šabloně pro generování datové tabulky. Komponentou instance třídy je instance standarní třídy java.util.Vector, ve které jsou uloženy instance třídy PolozkaSablona.Třída Sablona se využívá pro zobrazení informací o šabloně pro generování datové tabulky ve stromu GUI a pro předávání těchto informací do jádra před zahájením generování datové tabulky. Projekt.java Třída implementuje řádek systémové tabulky PROJEKT . MyTree.java Třída implementuje strom (ovládací prvek GUI), který je základem pro správu šablon, číselníků a datových tabulek. Instance třídy jsou komponentami třídy MainFrame. MainFrame.java Třída implementuje formulář hlavního okna aplikace GenDat. Obsahuje metodu main() a slouží k ovládání celého GUI. Slouží pro práci pouze s jedním projektem. Umožňuje správu šablon, číselníků a vygenerovaných datových tabulek, slouží ke spouštění generování dat.
[23]
Kapitola 4
REALIZACE
[24]
Kapitola 5
TESTOVÁNÍ
Kapitola 5
Testování Vzhledem k tomu, že návrh, realizace a testování bylo prováděno stejnou osobou a projekt měl omezené časové možnosti byla test analýza tohoto projektu v tétto fázi redukována pouze na vytipování testovacích případů. Jednotlivé TC nebyly dále rozpracovány do testovacích skriptů s uvedením jednotlivým kroků. Vzhledem k rozsahu navrženého a implementovaného prototypu byly provedeny pouze funkční manuální testy a v průběhu vývoje unit testy. Ostatní typy testů nebyly provedeny.
5.1. Testovací plán Cíl testování Cílem testování tohoto projektu je ověření, zda byly korektně implementovány funkcionality realizovaného systému - Generátor testovacích dat, který je popsán v kapitolách 2,3,4 Podklady pro přípravu testů [1] Katalog požadavků (kapitola 2) [2] Analýza a návrh (kapitola 3) Testovací strategie Testy jsou prováděny podle testovací dokumentace uvedené v kapitole 5. Test analýza byla vytvořena podle dokumentace [1],[2] Test analýza a testy pokryjí tyto funkčnosti: 1. Projekt - Založení nového projektu - Otevření existujícího projektu 2. Šablona - Vytvoření nové šablony Načtení existující šablony 3. Generování dat - Typ LONG - Typ DOUBLE [25]
Kapitola 5
TESTOVÁNÍ
- Typ DATE - Typ STRING - Typ LIST - Typ PIN 4. Nastavení připojení k databázi Test analýza nebude obsahovat a testy nebudou pokrývat: Performance testy Testy selhání DB testy Bezpečnostní testy Testovací prostředí Oracle 11g, prototyp GENDAT 2009 Výstupy Testovací plán Test analýza Záznam o vykonání testů Report chyb Rizika Testování provádí autor návrhu a implementace. Vzhledem k jednostrannému pohledu může dojít k opomenutí některých problémů.
5.2. Test analýza Pro jednotlivé oblasti definované v test plánu byly identifikovány jednotlivé testovací případy, které jsou uvedeny v následujících tabulkách : OL1
OL2
OL3
ID_TC TC_NAME
Projekt
Nový projekt
1
Editační pole
Projekt
Nový projekt
2
Uložení projektu
Projekt
Otevření projektu
3
Naplnění Comboboxu
Projekt
Otevření projektu
4
Projekt
Otevření projektu
5
Otevření projektu Otevření nově založeného projektu
Projekt
6
Ukončení aplikace
Projekt
7
Zobrazení názvu projektu
Tabulka 5.1: Testovací případy pro oblast PROJEKT
[26]
Kapitola 5
TESTOVÁNÍ
OL1
OL2
Šablona
Nová šablona
8
Otevření formuláře
Šablona
Nová šablona
9
Editační pole
Šablona
Nová šablona
10
Uložení formuláře
Šablona
Nová šablona
11
Návrat zpět bez uložení šablony
Šablona
Nová šablona
12
Zobrazení uložené šablony ve stromu šablon
Šablona
Nová šablona
Nový prvek
13
Typ LONG
Šablona
Nová šablona
Nový prvek
14
Editační pole Typ LONG
Nová šablona
Nový prvek
15
Typ DOUBLE
Nová šablona
Nový prvek
16
Editační pole Typ DOUBLE
Nová šablona
Nový prvek
17
Typ STRING
Nová šablona
Nový prvek
18
Editační pole Typ STRING
Nová šablona
Nový prvek
19
Typ LIST
Nová šablona
Nový prvek
20
Editační pole Typ LIST
Šablona
Nová šablona
Nový prvek
21
Typ PIN
Šablona
Nová šablona
Nový prvek
22
Editační pole Typ PIN
Šablona
Nová šablona
Nový prvek
23
Typ DATE
Nová šablona
Nový prvek
24
27
Editační pole Typ DATE Přidání jednoho prvku, uložení šablony Přidání více prvků, uložení šablony Bez přidání prvků, uložení šablony
28
Načtení existující šablony
Šablona Šablona Šablona Šablona Šablona Šablona
Šablona
OL3
ID_TC TC_NAME
Nový prvek Šablona
Nová šablona
25 Nový prvek
Šablona
Nová šablona
26 Nový prvek
Šablona Šablona Šablona Šablona Šablona Šablona Šablona Šablona Šablona Šablona Šablona Šablona
Nová šablona Zobrazení šablony Zobrazení šablony Zobrazení šablony Zobrazení šablony Zobrazení šablony Zobrazení šablony Zobrazení šablony Zobrazení šablony Zobrazení šablony Zobrazení šablony Zobrazení šablony
29
Editační pole
30
Zobrazení exisrující šablony ve stromu šablon
31
Typ LONG
32
Typ DOUBLE
33
Typ STRING
34
Typ LIST
35
Typ PIN
36
Typ DATE
37
Zobrazení jedné šablony
38
Zobrazení více šablon
Tabulka 5.2: Testovací případy pro oblast ŠABLONA
[27]
Kapitola 5
OL1
TESTOVÁNÍ
OL2
OL3
ID_TC TC_NAME
Generování dat
39
Nastavení počtu záznamu
Generování dat
40
Výběr šablony
Generování dat
41
Název generované tabulky
Generování dat
42
Počet sloupců v tabulce
Generování dat
43
Počet záznamů v tabulce
Generování dat
44
Zápis dat do DB
Generování dat
45
Zobrazení ve stromu dat
Generování dat
46
Generování jednoho prvku
Generování dat
47
Generování více prvků
Generování dat
48
Opakované generování
Generování dat
LONG
49
Min
Generování dat
LONG
50
Max
Generování dat
LONG
51
Inkrement
Generování dat
LONG
52
Náhodně
Generování dat
LONG
53
Inkrementálně
Generování dat
DOUBLE
54
Min
Generování dat
DOUBLE
55
Max
Generování dat
DOUBLE
56
Inkrement
Generování dat
DOUBLE
57
Náhodně
Generování dat
DOUBLE
58
Inkrementálně
Generování dat
DATE
59
Min
Generování dat
DATE
60
Max
Generování dat
DATE
61
Inkrement
Generování dat
DATE
62
Formát
Generování dat
DATE
63
Náhodně
Generování dat
DATE
64
Inkrementálně
Generování dat
STRING
65
Pevná délka
Generování dat
STRING
66
Min
Generování dat
STRING
67
Max
Generování dat
STRING
Maska
Generování dat
LIST
68 69
Generování dat
LIST
70
Jméno sloupce
Generování dat
LIST
71
Náhodně
Generování dat
LIST
72
Inkrementálně
Generování dat
PIN
73
Min
Generování dat
PIN
74
Max
PIN
75
Náhodně
PIN
76
Inkrement
Generování dat
PIN
77
Inkremetálně
Generování dat
PIN
78
Formát
Generování dat
PIN
79
Muž
Generování dat
PIN
80
Žena
Generování dat Generování dat
Jméno tabulky
Tabulka 5.3: Testovací případy pro oblast GENEROVÁNÍ DAT
[28]
Kapitola 5
TESTOVÁNÍ
OL1
OL2
OL3
ID_TC TC_NAME
Nastavení připojení k databázi
81
Uživatel
Nastavení připojení k databázi
82
Heslo
Tabulka 5.4: Testovací případy pro oblast NASTAVENÍ PŘIPOJENÍ
[29]
Kapitola 5
TESTOVÁNÍ
[30]
Kapitola 6
ZÁVĚR
Kapitola 6
Závěr Cílem této bakalářské práce bylo : 1. seznámit se s problematikou tvorby testovacích dat a používaných technik pro jejich generování 2. promyslet a navrhnout systém pro generování testovacích dat využitelný pro funkční manuální a automatizované testy, zátěžové testy a unit testy 3. implementace prototypu navrženého systému Seznámila jsem se s teorií metod optimální tvorby testovacích dat pro funkční testování, jako jsou metody Equivalence partitioning, Boundary value analysis, Category partition a kombinační metody. Zabývala jsem se formáty českých datových prvků jako jsou rodné číslo, číslo bankovního účtu, IČ a DIČ. Našla jsem náměty pro další studium a prohlubování znalostí v oblasti testování. Shromáždila jsem požadavky a navrhla systém, který by mohl být vhodnou praktickou implementací výše uvedených metod. Při návrhu systému jsem vycházela z vlastností některých existujících systémů, ze své praxe test analytika a z výše uvedeného teoretického základu. Při seznamování se s existujícími generátory testovacích dat se ukázalo, že ani jeden z nich studovanou problematiku nepokrýval v optimální šíři. Výraznou nevýhodou těchto všech studovaných systému bylo, že se nezabývají specificky českými datovými typy jako např. rodné číslo a číslo bankovního účtu. Praktickým výsledkem této práce je funkční prototyp aplikace (více než 7000 řádků zdrojového kódu) pro generování testovacích dat pro zátěžové testy. Podařilo se implementovat generátor celých čísel, reálných čísel, řetězců, datumů, rodných čísel a generování hodnot z číselníku. Práce s těmito generátory byla dotažena až na úroveň vytvoření tabulky používající tyto datové typy a ve struktuře definované uživatelem jako jsou min, max meze, náhodné generování nebo generování posloupností hodnot apod. Během práce se ukázalo, že tvorba uživatelského rozhraní v tom rozsahu v jakém bylo vytvořeno jádro systému přesahuje rozsah této práce, proto jsem se omezila pouze na naznačení designu a zprovoznila jsem zobrazení šablony, číselníku a dat a [31]
Kapitola 6
ZÁVĚR
implementovala jsem jednoduchý průchod aplikací za účelem demonstrace základní funkčnosti jádra. Další vlastností, které jsem se nemohla věnovat dostatečně je spolupráce generátoru s databázovými systémy, které jsou v praxi běžné. Prototyp spolupracuje pouze jen s jednou databází. Vzhledem k tomu, že jsem do tohoto projektu vložila hodně času a energie chtěla bych se jeho dalšímu vývoji věnovat i nadále, postupně jej implementovat v šíři popsané v kapitole 2 a 3.
[32]
LITERATURA
Literatura
[1] Glenford J. Myers. The Art of Software Testing. Word Association, Inc. 2nd Edition. 2004 [2] Boris Beizer. Software Testing Techniques. The Coriolis Group. 2nd Edition. 2006 [3] Generating data to DB2 database tables. Generating test data to IB/FB tables. http://test-data-generator.qarchive.org/software.html, stav z 4.5.2009 [4] Automated Combinatorial Testing for Software - beyond pairwise testing. http://csrc.nist.gov/groups/SNS/acts/index.html. Stav z 5.6.2009 [5] M. Grindal, J. Offutt, S. Andler, "Combination Testing Strategies: a Survey", Software Testing, Verification and Reliability, Vol. 15, No. 3, pp. 167-199, 2005 - a survey of combinatorial testing methods and results. [6] Pairwise Testing. Combinatorial Test Case Generation http://www.pairwise.org/. Stav z 5.7.2009 [7] Informační systém o datových prvcích. https://www.sluzby-isvs.cz/ISDP/. Stav z 5.7.2009 [8] Wikipedie. http://cs.wikipedia.org/wiki. Stav z 3.7.2009 [9] Algoritmus kontroly pro účely zajištění jednotlivých částí čísla účtu v bankovním spojení v tuzemském platebním styku. http://www.cnb.cz/m2export/sites/www.cnb.cz/cs/legislativa/predpisy_CNB/platebni_st yk/download/vyhl_62_2004_p1.pdf. Stav z 5.7.2009
[33]
LITERATURA
[34]
Dodatek A
METODY TVORBY TESTOVACÍCH DAT
Dodatek A
Metody tvorby testovacích dat Provádění jednotlivých testovacích případů (test case, dále jen TC) zabírá hodně času a nemalé zdroje v rámci projektu a proto je užitečné hledat cesty, jak zvýšit účinnost a efektivitu testování a proto se stále hledají nové metody, jak tohoto dosáhnout.
A.1 Partition Testing Několik existujících testovacích metod jako Equivalence Partitioning, Category Partition , and Domain Testing jsou založeny na představě, že množina všech vstupních hodnot testů může být rozdělena na podmnožiny, které jsou založeny na předpokladu, že všechny prvky dané podmnožiny působí podobné chování testovaného objektu. Tento přístup je nazýván Partition testing. I když jsou předpoklady, na jejichž základě vytváříme jednotlivé podmnožiny, zjednodušené, má tato metoda dvě důležité vlastnosti: 1. Umožňuje vytvářet testerům množiny testovacích případů rozumné velikosti tím, že za každou podmnožinu vstupních hodnot zvolíme pouze několik málo ze všech možných TC. 2. Umožňuje měřit efektivitu testování pomocí míry pokrytí zvoleného Partition testing modelu. (alternativou k Partition testing metodě je Random testing metoda, kdy se množina prováděných TC zvolí náhodně, nicméně ukazuje se, že Partition testing je efektivnější). Základním problémem každého testování metodou „partitioningu“ je identifikace jednotlivých oddílů (partitions) a volba způsobu jak vybírat hodnoty pro testování. K metodám Partition testingu patří: 1. Equivalence partitioning 2. Boundary value analysis 3. Category partition [35]
Dodatek A
METODY TVORBY TESTOVACÍCH DAT
Category partition Metoda se skládá z určitého množství manuálních kroků, kdy specifikace popsaná přirozeným jazykem je převedena do tříd ekvivalence podle parametru testovaného objektu. 1. Identifikace funkčních jednotek, které mohou být testovány jednotlivě (odděleně). Pro každou funkční jednotku identifikujeme parametry a proměnné prostředí, které ovlivňují chování testované jednotky. 2. Identifikace možných hodnot jednotlivých parametrů a proměnných prostředí. 3. Určení vzájemných omezení hodnot vybraných v kroku 2, 4. Vygenerování všech kombinací (tzv. testovacích rámců) možných hodnot parametrů dle kroku 2, která splňují omezení určená v kroku 3. 5. Testovací rámce převedeme na TC vhodnou volbou parametrů.
A.2 Kombinační metody Kombinační metody definují způsoby jak vhodně vybrat hodnoty pro individuální vstupní parametry testovacích případů a jak je kombinovat do jednotlivých TC. V posledních 20 letech bylo navrženo cca 15 různých kombinačních metod pro přípravu dat. Kombinační metody[5] lze dělit (viz. Obrázek A.1) na: 1. Nedeterministické kombinační metody (Non-deterministic Combination Strategies) Tyto metody mají společné, že náhoda hraje určitou roli ve stanovení, které testy budou prováděny. Tento přístup počítá s tím, že dvě různá spuštění téhož algoritmu za stejných počátečních podmínek může vracet různé výsledky. - Heuristické (Heuristic Combination Strategies) Tyto metody generují TC na základě heuristického algoritmu, který může být nastaven tak, aby splňoval t-wise pokrytí. Příklad: Heuristic t-wise (nástroje CATS, AETG) - Náhodné (Random Combination Strategies) Množina prováděných TC je zkonstruovaná náhodným výběrem z množiny všech TC 2. Deterministické (Deterministic Combination Strategies) Jejím výsledkem je vždy ta samá množina vybraných testů při každém použití algoritmu. - Přímé (Instant Combination Strategies) Aplikuje vždy úplnou množinu možných kombinací testů. [36]
Dodatek A
METODY TVORBY TESTOVACÍCH DAT
Příklad: Orthogonal Arrays (OA), Covering Arrays (CA)
-
-
Iterativní (Iterative Combination Strategies) Přidává do množiny testů vždy jeden další test na základě toho, co už je nebo není testováním pokryto. Příklad: Each Choice (EC), Partly Pair-Wise (PPW), Base Choice (BC), All Combinations (AC), Antirandom (AR), k-boundary (k-bound), k-perimeter (k-perim) Parametr-Based (Parameter-Based Combination Strategies) Vytváří množinu testů tím, že přidává hodnoty do TC vždy pro jeden parametr Příklad: In Parameter Order (IPO)
3. Složené (Compound Combination Strategies) Jsou kombinací dvou nebo více výše uvedených metod. Příklad: All or Random (ACoRand), Base Choice and AETG (BCAETG)
Obrázek A.1: Klasifikační schéma kombinačních metod
Členění kombinačních metod z hlediska velikosti pokrytí: 1-wise (each use) – tento typ pokrytí zajišťuje, že každá důležitá hodnota každého testovaného parametru je aspoň jednou zahrnuta nejméně do jednoho TC z množiny všech TC. 2-wise (100% pair wise) – tento typ pokrytí zajistí, že každá možná kombinace zajímavých hodnot 2 parametrů je zahrnuta do nějakého TC [37]
Dodatek A
METODY TVORBY TESTOVACÍCH DAT
t-wise – pokrytí vyžaduje, aby všechny možné kombinace zajímavých hodnot t parametrů byly začleněny aspoň v jednom TC Zmíněné wise metody jsou čistě kombinatorické a neobsahují žádnou sémantickou informaci. Sémantickou informaci do těchto metod vneseme tím, že budeme uvažovat pouze validní hodnoty parametrů.
Obrázek A.2 : Stanovení nebo odhad (~) velikosti výsledné množiny TC pro řešení kombinačních algoritmů s N parametry a Vi hodnotami i-tého parametru. Vmax je největší Vi
[38]
Dodatek B
FORMÁTY JEDNODUCHÝCH DATOVÝCH PRVKÚ
Dodatek B
Formáty jednoduchých datových prvků Pro realizaci systému GENDAT byla navržena implementace generování jednoduchých datových prvků s ohledem na českou lokalizaci. V tomto dodatku bude proveden rozbor formátu jednotlivých datových prvků, které jsou v návrhu a implementaci uvažovány: rodné číslo, číslo bankovního účtu, IČ, DIČ.
B.1 Rodné číslo občana (RČ) Rodné číslo se v mnoha kontextech používá jako jednoznačný identifikátor fyzické osoby. Je uvedeno např. v občanském průkazu, vyžadují ho banky při založení účtu apod. Rodné číslo je však považováno za osobní údaj a na nakládání s ním se vztahují omezení daná zákonem na ochranu osobních údajů. Rodné číslo se používá také ve funkci čísla pojištěnce pro zdravotní pojištění a sociální pojištění. Zákon o rodných číslech dovoluje užití rodného čísla pouze pro účely správních úřadů, ministerstev atd. nebo se souhlasem nositele rodného čísla
Formát datového prvku [7]: RČ vychází z data narození a udává se ve tvaru: nnnnnn/nnnn (zarovnáno vlevo) nn -- -- / --- rok narození (poslední dvojčíslí) -- nn -- / --- měsíc narození (01–12) u žen plus 50 -- -- nn / --- den narození (01–31) -- -- -- / nnn trojmístná koncovka -- -- -- / --- n kontrolní číslice Popis datového prvku: Prvních šest číslic popisuje datum narození ve formátu rrmmdd (např. 730430 označuje datum narození 30. dubna 1973), přičemž ženy mají k měsíci připočteno 50 (tzn. 735430 označuje ženu narozenou 30.dubna 1973). Od roku 2004 (zákonem č. 53/2004 Sb.) je zavedena možnost v případě, že jsou v nějaký den vyčerpána všechna
[39]
Dodatek B
FORMÁTY JEDNODUCHÝCH DATOVÝCH PRVKÚ
platná čtyřčíslí, použít alternativní rodné číslo, u kterého mají muži k číslu měsíce přičteno 20 a ženy 70. Zbytek rodného čísla odlišuje lidi narozené ve stejný den a zpravidla se odděluje lomítkem. Trojmístná koncovka byla přidělována do data narození 1. 1. 1954. Byly přidělovány i koncovky „000“. Kontrolní číslice je přidávána k RČ občanů narozených od 1. 1. 1954. Devítimístné číslo vytvořené z datové části před lomítkem a trojmístné koncovky dělíme 11 a celočíselný zbytek tohoto podílu je kontrolní číslice. Je-li zbytek nula, pak kontrolní číslice je nula. Je-li zbytek 10, pak kontrolní číslice je také 0 (podle interního předpisu FSÚ ČVK 2898/1985 byly tyto nulové koncovky přidělovány pouze do roku 1985 v počtu cca 1000. Není vyloučeno, že se v minimálním počtu vyskytly i po tomto roce). Pozn.: Při zápisu na technických nosičích se lomítko vynechává. Přípustné hodnoty: 1. dvojčíslí: 00–99 2. dvojčíslí: 01–12, 51–62 3. dvojčíslí – měsíce leden, březen, květen, červenec, srpen, říjen a prosinec 01–31, měsíce duben, červen, září, listopad 01–30 a měsíc únor 01–29. Koncovka: 000–9999 s tím, že je-li koncovka čtyřmístná, pak čtvrtá číslice je rovna zbytku po dělení předcházejícího devítimístného čísla číslem 11 a je-li tento zbytek 10, je čtvrtá číslice koncovky rovna 0. Související právní předpisy: Zákon č. 133/2000 Sb., o evidenci obyvatel a rodných číslech Zákon č. 301/2000 Sb., o matrikách, jménu a příjmení a o změně některých souvisejících zákonů vyhláška č. 543/2002 Sb., Ministerstva vnitra, kterou se mění vyhl. č. 177/2000 Sb., kterou se provádí zákon o evidenci obyvatel, zákon o občanských průkazech a zákon o cestovních dokladech, ve znění pozdějších předpisů
B.2 Bankovní spojení Bankovní spojení v tuzemském platebním styku jednoznačně identifikuje účet klienta a je tvořeno číslem účtu klienta (dále jen „číslo účtu“) a identifikačním kódem banky. Číslo účtu a identifikační kód banky jsou v písemné podobě vždy zřetelně odděleny. Formát datového prvku: PPPPPP-CCCCCCCCCC / KKKK PPPPPP předčíslí CCCCCCCCCC vlastní číslo KKKK kód banky [40]
Dodatek B
FORMÁTY JEDNODUCHÝCH DATOVÝCH PRVKÚ
Číslo účtu, na kterém se provádí mezibankovní platební styk, stanoví banka tak, aby obsahovalo nejvíce 16 číselných znaků a bylo členěno na: 1. Předčíslí, které obsahuje nejvíce 6 číselných znaků s tím, že předčíslí nemusí být v čísle účtu obsaženo. 2. Základní část čísla účtu, která obsahuje nejméně 2 a nejvíce 10 číselných znaků s tím, že alespoň dva z nich nesmějí být nulové. Úvodní nuly předčíslí a základní části čísla účtu jsou bez významu. 3. Identifikační kód banky obsahuje 4 číselné znaky. Identifikační kódy bank stanovíČeská národní banka v Číselníku identifikačních kódů bank.
Algoritmus kontroly správnosti [9]: První část čísla účtu a základní část čísla účtu musí být samostatně zajištěny pomocí modulo 11 s váhami uvedenými v následující tabulce:
Číslice A Váhy 6 n 10
Algoritmus kontroly čísla ABCDEFGHIJ na modulo 11 B C D E F G H I 3 7 9 10 5 8 4 2 9 8 7 6 5 4 3 2
J 1 1
Tabulka B.1 : Algoritmus kontroly čísla účtu na modulo 11
kde n je pozice číslice v čísle účtu (počítáno zprava) Váhy jsou získány jako rozdíl n-té mocniny 2 a nejbližšího nižšího násobku 11. Váhy se k číslicím na jednotlivých pozicích čísla účtu přiřazují zprava. Číslo ABCDEFGHIJ je zajištěno pomocí modulo 11, pokud je součet S beze zbytku dělitelný 11, přičemž S = J *1 + I *2 + H *4 + G *8 + F*5 + E*10 + D*9 + C*7 + B*3 + A*6
Související právní předpisy: Vyhláška č. 62/2004 Sb., kterou se stanoví způsob provádění platebního styku mezi bankami, zúčtování na účtech u bank a technické postupy bank při opravném zúčtování
B.3 Identifikační číslo (IČ) Identifikační číslo ekonomického subjektu (IČ nebo IČO) je v České republice unikátní osmimístné identifikační číslo právnické osoby, podnikající fyzické osoby nebo organizační složky státu (starší čísla s méně číslicemi jsou odpředu doplněna nulami). Český statistický úřad jako hlavní autorita v oblasti statistické evidence ekonomických subjektů používá na základě vnitřní normy stále původní zkratku IČO, v
[41]
Dodatek B
FORMÁTY JEDNODUCHÝCH DATOVÝCH PRVKÚ
mnoha formulářích jiných úřadů však byla tato zkratka nahrazena zkratkou IČ. Zákon žádnou oficiální zkratku nestanoví. Formát datového prvku [7]: nnnnnnnk nnnnnnn pořadové číslo -------k kontrolní číslice Výpočet kontrolního čísla: jednotlivé číslice pořadového čísla se násobí zprava čísly 2, 3, 4, 5, 6, 7, 8 a součiny se sečtou. Výsledek součtu dělíme číslem 11 a celočíselný zbytek odečteme od čísla 11. Rozdíl tvoří kontrolní číslici. Je-li zbytkem nula, pak kontrolní číslice je 1. Je-li zbytkem číslo 10, pak kontrolní číslice je 1, je-li zbytek po dělení 1, pak kontrolní číslice je 0. Přípustné hodnoty: 00000001–99999994 Související právní předpisy: Zákon č. 455/1991 Sb., o živnostenském podnikání (živnostenský zákon), ve znění pozdějších předpisů Zákon č. 513/1991 Sb., obchodní zákoník, ve znění pozdějších předpisů Zákon č. 89/1995 Sb., o státní statistické službě, ve znění pozdějších předpisů
B.4 Daňové identifikační číslo (DIČ) Daňové identifikační číslo (DIČ) [8] je jednoznačná identifikace plátce daně (daňového poplatníka). Každý daňový subjekt má své daňové identifikační číslo, které mu přidělí správce daně (finanční úřad) po té, co se daňový subjekt zaregistroval. Daňové identifikační číslo je charakterizováno dvěma písmeny, která znamenají kód země, a za nimi následuje rodné číslo plátce daně. DIČ identifikuje poplatníky v rámci celé Evropské unie (v rámci EU je anglicky nazýváno VAT ID). DIČ obsahuje kód CZ a kmenovou část, kterou tvoří obecný identifikátor. U fyzické osoby rodné číslo, popř. jiný obecný identifikátor, stanoví-li tak zvl. zákon. U právnické osoby identifikační číslo. Není-li obecný identifikátor daňovému subjektu přidělen, přidělí správce daně vlastní identifikátor.
Formát datového prvku: CZnnnnnnnnnn - - nnnnnnnnnn
obecný identifikátor
DIČ obsahuje kód CZ a kmenovou část, kterou tvoří obecný identifikátor. U fyzické osoby rodné číslo, popř. jiný obecný identifikátor, stanoví-li tak zvl. zákon. U [42]
Dodatek B
FORMÁTY JEDNODUCHÝCH DATOVÝCH PRVKÚ
právnické osoby identifikační číslo. Není-li obecný identifikátor daňovému subjektu přidělen, přidělí správce daně vlastní identifikátor. Od 1. 5. 2004 se proběhlo nahrazení trojciferného kódu správce daně a pomlčky dvojmístným kódem země CZ, zbytek čísla zůstal beze změny. Pokud mělo dosavadní DIČ podobu např. 123-12345678, je nová podoba DIČ CZ12345678. Související právní předpisy: Zákon ČNR č. 337/1992 Sb., o správě daní a poplatků, ve znění pozdějších předpisů
[43]
Dodatek B
FORMÁTY JEDNODUCHÝCH DATOVÝCH PRVKÚ
[44]
Dodatek C IMPLEMENTACE
EXISTUJÍCÍ
Dodatek C
Existující implementace generátoru dat Testování je stále se rozvíjející obor IT. Stále vzniká velké množství aplikací, které se snaží tento proces zefektivnit a usnadnit. Aplikací, které se zabývají generováním testováních dat, existuje mnoho, od drobných utilit konzolového typu až po velké komerční systémy. V této kapitole je uvedeno několik zástupců ze dvou kategorií generátorů – generátorů testovacích dat pro stress testy (na různých úrovních systému – aplikační rozhraní, databáze atd.) a generátorů založených na kombinačních metodách zabývajících se optimalizací množství testovacích případů. U každého popisovaného nástroje je uvedena krátká charakteristika, v kapitole C.2 je pro ilustraci uveden přehled nástrojů založených na pairwise kombinačních metodách viz. Tabulka C.1.
C.1 Generátory testovacích dat pro stress testy [3] Test data generator TDG 1.2c TDG umožňuje hromadné generování dat do databází podporujících rozhraní ODBC za účelem testování aplikačních databázových uložených procedur. TDG dokáže automaticky načíst strukturu databázových tabulek. Úkolem uživatele je pouze zadat charakteristiky dat, která mají být vygenerována a počet generovaných záznamů. TDG respektuje relace mezi databázovými tabulkami. Výsledky generování je možné prohlížet v GUI aplikace. Licence: $345.00 Výrobce: IGS EDV-Systeme Jazyk: Angličtina, Němčina Platforma: Windows Instalace: instalace a odinstalace WWW: http://test-data-generator-tdg.igs-edv-systeme.qarchive.org/
[45]
Dodatek C IMPLEMENTACE
EXISTUJÍCÍ
DTM Data Generator 1.23.01 DTM Data Generator je nástroj pro generování dat za účelem testování databází. Klade si za cíl usnadnit práci databázovým vývojářům a DBA, kteří často tráví dlouhé hodiny přípravou testovacích dat, než mohou otestovat výkonnost databáze. DTM Data Generátor práci usnadňuje, protože umožňuje vytvořit testovací data automaticky – vytvoří databázové tabulky i skripty s SQL příkazy Insert/Update pro jejich naplnění. Nástroj dokáže plnit databázové tabulky automaticky a ve správném pořadí z hlediska respektování databázové referenční integrity. Je podporována práce s více typy databází. Licence: $149.00 Výrobce: DTM soft Jazyk: Angličtina Platforma: Windows Požadavky: ODBC, OLE DB, IDAPI , Oracle Call Interface Instalace: instalace a odinstalace WWW: http://dtm-data-generator.dtm-soft.qarchive.org/
EMS Data Generator for MySQL 3.0 EMS Data Generator for MySQL je nástroj pro generování testovacích dat do několika tabulek databáze MySQL současně. Aplikační rozhraní má formu průvodce (wizard). Uživatel může definovat tabulky, které mají být generovány, definovat povolené rozsahy generovaných hodnot apod. Podporuej i generování řetězců a databázových objektů typu BLOB. Kromě GUI aplikačního rozhraní poskytuje i rozhraní příkazové řádky, kdy je možné generovat testovací data na základě dříve uložených šablon. Podporuje 6 jazyků. Licence: $95.00 Výrobce: EMS Database Management Solutions, Inc Jazyk: Angličtina, Francouzština, Němčina, Italština, Ruština, Španělština Platformy: Windows Instalace: instalace a odinstalace WWW: http://ems-data-generator-for-mysql.ems-database-management-solutionsinc.qarchive.org/
[46]
Dodatek C IMPLEMENTACE
EXISTUJÍCÍ
DTM DB Stress 1.08.01 DTM DB Stress je nástroj pro stresové testování serverových částí informačních systémů a databázových aplikací, ale i stresové testování samotných DBMS a serverů. Nástroj umožňuje vytvořit, konfigurovat a odesílat nepřetržitý proud požadavků na OLAP servery (zpracování SQL dotazů) nebo OLTP servery (přidání, modikace a mazání dat). Program je určen pro vývojáře a QA pracovníky. Licence: $179.00 Výrobce: DTM soft Jazyk: Angličtina Platforma: Windows Požadavky: ODBC32, IDAPI, OLE DB, Oracle Call Interface Instalace: instalace a odinstalce WWW: http://dtm-db-stress.dtm-soft.qarchive.org/
DTM Data Generation SDK 1.00.00 DTM Data Generation SDK je knihovna a komponenta pro generování testovací dat. Umožňuje tedy programátorům, webmasterům a zkušeným uživatelům začlenit komponentu pro generování testovacích dat přímo do jejich vlastních aplikací, skriptů a webových aplikací. Jsou podporovány jazyky C, C++, C#, ASP a skriptovací jazyky VBS a JS. Komponenta podporuje nízkoúrovňové funkce, metody, pravidla a práci s projekty. Licence: $149.00 Výrobce: DTM soft Jazyk: Angličtina Platforma: Vista, Windows, Mobile Požadavky: ODBC subsystem and driver(s) Instalace: instalace a odinstalace WWW: http://dtm-data-generation-sdk.dtm-soft.qarchive.org/
C.2 Generátory testovacích dat na základě Partition testing a kombinačních metod Test Case Generator Test Case Generátor umožňuje generovat data pro test case na základě analýzy tříd ekvivalence a na základě stavových kombinací. Nástroj obsahuje software Microsoft PICT-Tool (Pairwise Independent Combinatorial Testing), umožňuje tvorbu test case systematickým a reprodukovatelným způsobem, umožňuje vytvářet tzv. vyčerpávající test case. [47]
Dodatek C IMPLEMENTACE
EXISTUJÍCÍ
Licence: GNU General Public License version 2 Výrobce: M.Bulmahn Jazyk: Angličtina Platforma: Windows Instalace: instalace a odinstalace WWW: http://testcasegenerator.codeplex.com/
SmartTest SmartTest používá patentovaný algoritmus pro generování optimální množiny testovacích případů. Dokáže maximalizovat pokrytí funkcí testované aplikace pomocí testů a přitom minimalizovat počet testů. Licence: GNU Lesser General Public License Výrobce: Smartware Technologies Jazyk: Angličtina Platforma: Windows Instalace: instalace a odinstalace WWW: http://www.smartwaretechnologies.com/smarttestprod.htm
CTE XL CTE XL je aplikace pro podporu navrhování a provádění testů. Používá klasifikační stromy, automatické generování testovacích případů a poskytuje uživateli rozhraní pro interakci s mnoha dalšími softwarovými nástroji. Výrobce: Jazyk: Angličtina Platforma: Windows Instalace: instalace a odinstalace WWW: http://www.systematic-testing.com/
Název aplikace
WWW adresa s informacemi
Výrobce
CATS (Constrained Array Test System)
http://home.att.net/~gsherwood/ cover.htm
[Sherwood] Bell Labs.
OATS (Orthogonal Array Test System)
http://www.isixsigma.com/librar y/content/c030106a.asp
[Phadke] AT&T
AETG
http://aetgweb.argreenhouse.co m/
Telecordia
[48]
Typ aplikace
Web-based, commercial
Dodatek C IMPLEMENTACE
EXISTUJÍCÍ
IPO (PairTest)
http://wwwcse.uta.edu/~ylei/paper/hase.pdf
[Tai/Lei]
TCG (Test Case Generator)
http://csmiss.jpl.nasa.gov/new/s et/2000-prop1.doc
NASA
AllPairs
http://www.satisfice.com/testme thod.shtml
Satisfice
Perl script, free, GPL
Pro-Test
http://www.sigmazone.com/prot est.htm
SigmaZone
GUI, commercial
CTS (Combinatorial Test Services)
http://www.alphaworks.ibm.co m/tech/cts
IBM
Free for noncommercial use
Jenny
http://burtleburtle.net/bob/math/ jenny.html
[Jenkins]
Command-line, free, publicdomain
ReduceArray2
http://www.stsc.hill.af.mil/cons ulting/sw_testing/improvement/ cst.html
STSC, U.S. Air Force
Spreadsheetbased, free
TestCover
http://www.testcover.com/
Testcover.com
Web-based, commercial
DDA
http://www.public.asu.edu/~rtur ban/dda.pdf
[Colburn/Cohen /Turban]
Test Vector Generator
http://sourceforge.net/projects/tv g/
OA1
http://www.softwaremetrics.org/tools_testing.asp
k sharp technology
CTE-XL
http://www.systematictesting.com/functional_testing/c te.php
Daimler Chrystler
GUI, free
AllPairs
http://www.mcdowella.demon.c o.uk/allPairs.html
[McDowell]
Command-line, free
Intelligent Test Case Handler (replaces CTS)
http://alphaworks.ibm.com/tech/ whitch
IBM
Free for noncommercial use
CaseMaker
http://www.casemakerinternatio nal.com/
Díaz & Hilterscheid
GUI, commercial
PICT
http://download.microsoft.com/
Microsoft
Command-line, free
rdExpert
http://www.phadkeassociates.co m/index_files/producthome.htm
Phadke Associates, Inc.
[49]
GUI, free
Dodatek C IMPLEMENTACE
EXISTUJÍCÍ
OATSGen
http://delivery.acm.org/
Motorola
SmartTest
http://www.smartwaretechnolog ies.com/smarttestprod.htm
Smartware Technologies Inc.
EXACT
http://doi.ieeecomputersociety.o rg/
[Yan/Zhang]
AllPairs
http://engineering.metacomm.com/allpairs.aspx
MetaCommunic ations
Free
ATD
http://www.atyoursideconsultin g.com/products/atd/atd_descript ion.html
AtYourSide Consulting
GUI, commercial
FireEye
http://csrc.nist.gov/acts
NIST
GUI
Bender RBT Inc.
http://www.benderrbt.com/bend ersoftware.htm
BenderRBT
GUI, commercial
Pairwise Test Case Generator
http://www.testersdesk.com/pair wse_testersdesk.html
TestersDesk
Web-based
Combo-Test
http://www.aehrc.net/hie/combo test.html
The Australian eHealth Research Centre
Command-line, free
GUI, commercial
Tabulka C.1 : Systémy pro generování testovacích dat na základě pairwise metody [6]
[50]
Dodatek D
SEZNAM POUŽITÝCH ZKRATEK
Dodatek D
Seznam použitých zkratek ASP
Active Server Pages
BLOB
Binary Large OBject
BVA
Border Value Analysis
DBA
DataBase Administrator
DBMS
DataBase Management System
DDL
Data Definition Language
DIČ
Daňové identifikační číslo
DML
Data Manipulation Language
GUI
Graphic User Interface
IČ
Identifikační číslo
IPO
In Parametr Order
JS
Java Script
OLAP
OnLine Analytical Processing
OLTP
OnLine Tansaction Processing
QA
Quality Assuarance
VBS
Visual Basic Script
RČ
Rodné číslo
SQL
Structured Query Language
TC
Test Case
[51]
Dodatek D
SEZNAM POUŽITÝCH ZKRATEK
[52]
Dodatek E
INSTALAČNÍ A UŽIVATELSKÁ PŘÍRUČKA
Dodatek E
Instalační a uživatelská příručka E.1. Instalace (OS Windows) 1. Přihlásíme se do databáze Oracle pod nějakým účtem. 2. Spustíme skript CREATE_TABLES.sql, který vytvoří systémové tabulky a testovací tabulky. 3. Spustíme skript INSERT_DATA.sql, který naplní tabulky testovacími daty. 4. Z DVD zkopírujeme na disk C: adresář GenData 5. Spustíme interpret příkazů cmd.exe a jako aktuální adresář nastavíme adresář Gendata 6. Spustíme dávku GenDat.cmd 7. Dále postupujeme podle kapitoly E.2 Uživatelská příručka
E.2. Uživatelská příručka Vzhledem k tomu, že součástí této práce je pouze prototyp aplikace pro generování testovacích dat. Je v GUI implementováno pouze nezbytné minimum funkcí za účelem demonstrace funkčnosti aplikačního jádra, které obsahuje samotné generátory. Proto je doporučeno při práci s prototypem dodržet následující postup: 1. Předpokládejme, že jsme provedli instalační proceduru podle kapitoly E.1 a máme úspěšně spuštěnu aplikaci pomocí dávky GenDat.cmd. 2. Zvolíme volbu Projekt – Otevřít projekt. 3. Z ComboBoxu název vybereme projekt “[1] Test 1” a potvrdíme tlačítkem Vybrat. 4. Nyní můžeme proklikat záložky “Šablony”, “Data”, “Číselníky”. 5. V záložkách data a číselníky vidíme kořeny stromů reprezentující dříve vygenerované datové tabulky a číselníky.
[53]
Dodatek E
INSTALAČNÍ A UŽIVATELSKÁ PŘÍRUČKA
6. Kliknutím na ikonu tabulky získáme v pravé části obrazovky informace o tabulce a její data. 7. Na dvojkliknutí dojde k rozbalení ikony tabulky a máme k dispozici sloupečky tabulky . 8. Kliknutím na sloupeček získáme detailní informace. 9. Přejdeme do záložky šablony a klikneme na ikonu šablony “Obchod”. Tato šablona má 3 položky. V pravé části obrazovky je vidět atribut Název tabulky, která bude generována. (T_Obchod). 10. Generování dat pomocí šablony “Obchod” spustíme volbou Generátor – Start generator. 11. Ve spodní části okna se objeví červený dialog se dvěmi editačními políčky. 12. Do editačního políčka počet záznamů vložíme číslo udávající kolik řádků má mít generovaná tabulka. 13. Do políčka “Prefix tabulky” vložíme např. “A_”, čímž bude zajištěno, že pomocné tabulky, které během generování vznikají a automaticky zanikají nebudou mít jméno shodné s některou z existujících tabulek. 14. Vlastní generování spustíme tlačítkem “Generovat”. 15. Vygenerovaná data si můžeme prohlédnout pomocí příkazu SELECT. (SELECT * FROM T_OBCHOD) přímo na úrovni databáze (mimo aplikaci). 16. V šabloně “Obchod” můžeme vidět generování datových typů: LONG, DATE, DOUBLE. 17. V šabloně “Osoba” jsou generovány datové typy STRING a PIN.
[54]
Dodatek F
OBSAH PŘILOŽENÉHO CD
Dodatek F
Obsah přiloženého CD
Přiložené CD obsahuje v kořenovém adresáři tyto podadresáře: GeneratorDat Java zdrojové texty aplikace GenDat a projekt IDE NetBeans GenDat distribouvatelná a spustitelná verze aplikace GenDat (jar-soubory), obsahuje spouštěcí dávku GenDat.cmd SQL skripty pro vytvoření tabulek pro aplikaci GenDat v databázi Oracle Doc PDF a Word verze této práce
[55]
Dodatek F
OBSAH PŘILOŽENÉHO CD
[56]