From 6b172d1a47bdd6efaf838ca1e84a218732839a45 Mon Sep 17 00:00:00 2001 From: Kristian Toldy Date: Fri, 20 Nov 2020 13:29:33 +0100 Subject: [PATCH 1/2] PW-31 Add testing methodology --- out/metodiky/metodika-testovania.pdf | Bin 0 -> 130 bytes src/metodiky/metodika-testovania.tex | 56 +++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 out/metodiky/metodika-testovania.pdf create mode 100644 src/metodiky/metodika-testovania.tex diff --git a/out/metodiky/metodika-testovania.pdf b/out/metodiky/metodika-testovania.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fcd7a9b14183845ec2317085fcbe8566425dd4ab GIT binary patch literal 130 zcmWN{xe>!45CFiODrmss=Rn#qlXiXwYhuy1H6@KVJ{WXSqlZ+q&l#Js)@A^NT3jm01whQ;!ab!9 N78s3R<=~`>><`aQChY(K literal 0 HcmV?d00001 diff --git a/src/metodiky/metodika-testovania.tex b/src/metodiky/metodika-testovania.tex new file mode 100644 index 0000000..fb15963 --- /dev/null +++ b/src/metodiky/metodika-testovania.tex @@ -0,0 +1,56 @@ +\documentclass{article} + +\usepackage[margin=2cm]{geometry} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} + +% Title +\newcommand{\documenttitle} +{Metodika testovania} + +% Subtitle +\newcommand{\documentsubtitle} +{Metodika} + +\begin{document} + + \include{title-page} + + \section*{Úvod} + + \textnormal{% + Metodika testovania definuje typy testov, spôsob ich písania a spúšťania. Testovanie softvéru a jeho častí je dôležitou súčasťou vývoja softvéru. Akákoľvek, hoci aj malá zmena môže ovplyvniť funkcionalitu súvisiacich komponentov, preto je potrebné aby bola správnosť danej funkcionality vždy pred jej schválením otestovaná. \\\\ +Každá nová funkcionalita systému, ktorá bola implementovaná, musí prejsť testovaním. Testy sa vyvárajú jednotkové, ale aj integračné, pričom testy musia pokrývať aj určitú časť funkcionality. + } + \section*{UNIT testy} + + \textnormal{% + Unit testy umožňujú testovať individuálne jednotky kódu nezávisle od ostatných. Za jednotku považujeme samostatne testovateľnú časť programu, napr. funkciu, či jednotlivé komponenty. \\\\ +Unit testy by mali byť písané tak, aby overovali práve jednu funkcionalitu. Ak sa unit test skladá z viacerých častí, ktoré sa dajú dekomponovať, je ich potrebné rozdeliť do viacerých unit testov.\\\\ +Unit testy využívajú framework Mocha spolu s knižnicou Chai. V unit teste porovnávame vopred špecifikované hodnoty s výstupmi testovanej funkcie alebo metódy.\\\\ +Unit testy sú uložené v adresári \/tests\/unit, v ktorom je na každý komponent vytvorený samostatný test. Pomenovanie jednotlivých testov musí dodržiavať menovaciu konvenciu *.spec.js. +Testy je možné spustiť príkazom: +npm run test:unit + } + + \section*{End to End testy \(E2E\)} + + \textnormal{% + Metodika testovania definuje typy testov, spôsob ich písania a spúšťania. Testovanie softvéru a jeho častí je dôležitou súčasťou vývoja softvéru. Akákoľvek, hoci aj malá zmena môže ovplyvniť funkcionalitu súvisiacich komponentov, preto je potrebné aby bola správnosť danej funkcionality vždy pred jej schválením otestovaná. \\\\ +Každá nová funkcionalita systému, ktorá bola implementovaná, musí prejsť testovaním. Testy sa vyvárajú jednotkové, ale aj integračné, pričom testy musia pokrývať aj určitú časť funkcionality. + } + + \section*{Postup testovania} + + \textnormal{% +\begin{enumerate} +\item Napísanie kódu, ktorý sa bude testovať. +\item Napísanie testov pre danú časť kódu. +\item Spustenie testov. +\item Ak testy prebehli úspešne nasleduje commitnutie kódu na Github spolu s testami (kód je pripravený na Code Review) +\item Ak testy neprebehli úspešne, je potrebné kód opraviť, prípadne overiť či sú testy napísané správne. +\end{enumerate} + } + + +\end{document} From bd9722e8ffd9340cf322d16f89089b1b9c50a27f Mon Sep 17 00:00:00 2001 From: KToldy Date: Thu, 26 Nov 2020 11:20:33 +0100 Subject: [PATCH 2/2] PW-31 Fix errors --- out/metodiky/metodika-testovania.pdf | Bin 130 -> 59359 bytes src/metodiky/metodika-testovania.tex | 16 ++++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/out/metodiky/metodika-testovania.pdf b/out/metodiky/metodika-testovania.pdf index fcd7a9b14183845ec2317085fcbe8566425dd4ab..78ba9d227f881a04bf1c933680a37bfc3fdf1ead 100644 GIT binary patch literal 59359 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 literal 130 zcmWN{xe>!45CFiODrmss=Rn#qlXiXwYhuy1H6@KVJ{WXSqlZ+q&l#Js)@A^NT3jm01whQ;!ab!9 N78s3R<=~`>><`aQChY(K diff --git a/src/metodiky/metodika-testovania.tex b/src/metodiky/metodika-testovania.tex index fb15963..f734341 100644 --- a/src/metodiky/metodika-testovania.tex +++ b/src/metodiky/metodika-testovania.tex @@ -22,31 +22,31 @@ Metodika testovania definuje typy testov, spôsob ich písania a spúšťania. Testovanie softvéru a jeho častí je dôležitou súčasťou vývoja softvéru. Akákoľvek, hoci aj malá zmena môže ovplyvniť funkcionalitu súvisiacich komponentov, preto je potrebné aby bola správnosť danej funkcionality vždy pred jej schválením otestovaná. \\\\ Každá nová funkcionalita systému, ktorá bola implementovaná, musí prejsť testovaním. Testy sa vyvárajú jednotkové, ale aj integračné, pričom testy musia pokrývať aj určitú časť funkcionality. } - \section*{UNIT testy} + \section*{Unit testy} \textnormal{% Unit testy umožňujú testovať individuálne jednotky kódu nezávisle od ostatných. Za jednotku považujeme samostatne testovateľnú časť programu, napr. funkciu, či jednotlivé komponenty. \\\\ -Unit testy by mali byť písané tak, aby overovali práve jednu funkcionalitu. Ak sa unit test skladá z viacerých častí, ktoré sa dajú dekomponovať, je ich potrebné rozdeliť do viacerých unit testov.\\\\ -Unit testy využívajú framework Mocha spolu s knižnicou Chai. V unit teste porovnávame vopred špecifikované hodnoty s výstupmi testovanej funkcie alebo metódy.\\\\ +Unit testy by mali byť písané tak, aby overovali práve jednu funkcionalitu. Ak sa unit test skladá z viacerých častí, ktoré sa dajú dekomponovať, je ich potrebné rozdeliť do viacerých unit testov. \\\\ +Unit testy využívajú framework Mocha spolu s knižnicou Chai. V unit teste porovnávame vopred špecifikované hodnoty s výstupmi testovanej funkcie alebo metódy. \\\\ Unit testy sú uložené v adresári \/tests\/unit, v ktorom je na každý komponent vytvorený samostatný test. Pomenovanie jednotlivých testov musí dodržiavať menovaciu konvenciu *.spec.js. Testy je možné spustiť príkazom: npm run test:unit } - \section*{End to End testy \(E2E\)} + \section*{E2E testy} \textnormal{% Metodika testovania definuje typy testov, spôsob ich písania a spúšťania. Testovanie softvéru a jeho častí je dôležitou súčasťou vývoja softvéru. Akákoľvek, hoci aj malá zmena môže ovplyvniť funkcionalitu súvisiacich komponentov, preto je potrebné aby bola správnosť danej funkcionality vždy pred jej schválením otestovaná. \\\\ -Každá nová funkcionalita systému, ktorá bola implementovaná, musí prejsť testovaním. Testy sa vyvárajú jednotkové, ale aj integračné, pričom testy musia pokrývať aj určitú časť funkcionality. +Každá nová funkcionalita systému, ktorá bola implementovaná, musí prejsť testovaním. Testy sa vytvárajú jednotkové, ale aj integračné, pričom testy musia pokrývať aj určitú časť funkcionality. } \section*{Postup testovania} \textnormal{% \begin{enumerate} -\item Napísanie kódu, ktorý sa bude testovať. -\item Napísanie testov pre danú časť kódu. -\item Spustenie testov. +\item Napíš kód, ktorý sa bude testovať. +\item Napíš testy pre danú časť kódu. +\item Spusti testy. \item Ak testy prebehli úspešne nasleduje commitnutie kódu na Github spolu s testami (kód je pripravený na Code Review) \item Ak testy neprebehli úspešne, je potrebné kód opraviť, prípadne overiť či sú testy napísané správne. \end{enumerate}