Git Product home page Git Product logo

smarttester's People

Contributors

brozekm avatar markovd18 avatar straky23 avatar

Stargazers

 avatar

Watchers

 avatar  avatar

smarttester's Issues

Připojit testovací filtr k hlavní aplikaci

Je třeba začlenit funkční testovací filtr do celé aplikace.
Ve vstupním bodě nějak zvolit jednotkové testování filtrů a následně vytvořit jeho instanci.
Odhadovaná časová náročnost [h]: 5h
** Výsledná časová náročnost [h]: 10**

Zprovoznění v IDE

Otevření a zprovoznění projektu v IDE (CLion / VS). Ověření spustitelnosti z vývojového prostředí.
Odhadovaná časová náročnost [h]: 1
Výsledná časová náročnost [h]:

Implementace regresních testů

Je třeba začít s implementování regresního testování. Proto je nutné vytvořit zatím jednoduchou implementaci třídy RegressionTester a zajistit načtení konfigurace z konfiguračního souboru pomocí vhodných knihoven systému SmartCGMS.
Odhadovaná časová náročnost [h]: 10
Výsledná časová náročnost [h]: 10

Spuštění všech testů všech filtrů

Je třeba implementovat spuštění veškerých testů pokud nebude zadáno GUID. (metoda executeAllTests() třídy UnitTestExecutor.
Výsledná časová náročnost [h]: 0.5

Tvorba instance třídy podle zadaného GUID

V metodě executeFilterTests(GUID& guid) třídy UnitTestExecutor je třeba implementovat vytvoření instance správné odvozené třídy podle zadaného GUID.
Výsledná časová náročnost [h]: 2

Přidat scgms knihovnu do GenericUnitTesteru

V GenericUnitTesteru potřebujeme vytvářet IDevice_Eventy, které posíláme do filtrů. Tyto eventy se vytváří pomocí exportovaných symbolů z knihovny scgms, kterou musíme načítat.
Musíme tedy buď přidat další instanci CDynamic_Library jako atribut, nebo, lépe, po načtení filtru první knihovnu zavřít a otevřít druhou.
Výsledná časová náročnost [h]: 0.5

Odkaz na instanci knihovny scgms se vynuluje

V metodě loadScgmsLibrary() třídy GenericUnitTester se správně nainicializuje instance třídy CDynamic_Library a uloží se do atributu scgmsLib. Tímto atributem je v této metodě správně nahrána knihovna scgms pomocí metody Load().
Když je načtená knihovna volána v testu infoEventTest(), ukazatel na naštenou knihovnu je nullptr a nelze s ní pracovat.

Vrátit hodnotu HRESULT podle toho, jaký event do TestFilteru přijde

Abychom mohli dodělaj ještě pár generickách unit testů, bylo by dobré implementovat funkci TestFilteru takovou, že zkontroluje, jaký event mu přišel jako parametr do metody Execute a podle toho vrátí odpovídající hodnotu.
Bylo by tak možné testovat "komplexnější" generické scénáře.
Odhadovaná časová náročnost [h]: 1
Výsledná časová náročnost [h]: 1

Týmový meeting

Setkání ohledně integrování SmartCGMS do vývojového prostředí a tvorby jednoduchého modelu.
Časová náročnonst [h]: 2

Implementace konfiguračních testů

Je třeba začít se zapracováním konfiguračních testů do aplikace. Pro detailnější info viz. email od p. Úbla.
Odhadovaná časová náročnost [h]: 5
Výsledná časová náročnost [h]: 10

Vytvoření jednoduchého modelu aplikace

Pokusíme se vytvořit aspoň nějaký jednoduchý model, jak by mohla výsledná aplikace vypadat. Od p. Úbla jsme dostaci celkem dost informací, tak si myslím, že bychom se mohli trochu pohnout z místa.
Odhadovaná časová náročnost [h]: 3
Výsledná časová náročnost [h]: 2

Vstupní bod aplikace + připojení .dll

Nesplněno ve 4. týdnu (17. 3. - 23. 3.), přesunuto na další týden.
Cílem je vytvořit vstupní bod naší testovací aplikace (třídu Main) a v ní úspěšně připojit požadované dynamické knihovny.
Odhadovaná časová náročnost [h]: 5
Výsledná časová náročnost [h]: 8

Načítání dynamických knihoven nefunguje

Pro další posun je třeba opravit načítání dynamických knihoven na obou platformách:

  • Windows: načítání scgms.dll končí výjimkou Access violation reading location
  • Linux: načítání libscgms.so funguje pouze s cestou ./libscgms.so a volání úspěšně načtených symbolů končí SEGMENTATION Fault

Konzultace s PhD. Moučkem

Pravidelná konzultace 17. 3. od 9.20 hodin.
Odhadovaná časová náročnost [h]: max. 1
Výsledná časová náročnost [h]: 0.5

Přechod na nové API SMartCGMS

Je třeba udělat vhodné úpravy v aplikaci, aby byla kompatibilní s novým API testovaného SmartSCMG.
V rámci přechodu na nové API bude refactorována třída ReggressionTester.

RegressionTester - configuration debug

scgms::SPersistent_Filter_Chain_Configuration configuration - configuration se nevytváří, pravděpodobně chyba při načítání dynamických knihoven

Obecné testy pro jednotlivé modely

Modely obecně:

  • každý model má buď příznak scgms::NModel_Flags::Discrete_Model nebo Signal_Model
  • pokud má model příznak (v deskriptoru) Discrete_Model, měl by jít vytvořit funkcí do_create_discrete_model
  • analogicky pokud tento příznak nemá, nesmí jít vytvořit
  • diskrétní modely:
    • nesmí jít vytvořit, pokud je na vstupu do_create_discrete_model vektor parametrů jinak velký, než je v deskriptoru (number_of_parameters)
    • jejich metoda Initialize musí jít volat právě jednou na začátku (opakované volání vrací chybu)
    • metoda Step musí jít volat s parametrem time_advance_delta == 0.0 (pak by měl model posílat dál současný stav) nebo větší (pak model může a nemusí něco poslat)
  • navíc implementuje scgms::IDiscrete_Model
    • Initialize - nastavuje počáteční stav, current_time je platná double hodnota, segment_id je jakékoliv číslo
    • Initialize - lze ho volat právě jednou, jakékoliv další volání musí vrátit E_ILLEGAL_STATE_CHANGE
    • Step - nesmí být volán dříve, než je zavolána metoda Initialize
    • Step - parametr musí být >= 0.0 (je to "rat time")
    • Step - pokud je parametr 0.0, emituje na výstupu současný stav (vždy)
    • Step - pokud je parametr >0, emituje na výstupu stav v čase o tolik dál

Discrete model ale reálně musí být vytvořen v rámci nějakého filtru, my na to máme "Signal generator" filtr

Funkčnost testujte např. s "Bergman extended minimal model" (bergman.dll):

  • synchronize to signal
    • synchronizace probíhá tak, že modelu se zavolá Step metoda podle Steppingu tak, aby "dohnal" signál, na který je synchronizovaný
    • např. mám vyplněný Stepping = 5min, jdou synchronzační signály v čase 1, 6, 7, 11, model je krokován na čas 0 (když přijde t=1), 5 (když přijde t=6), 10 (když přijde t=11)
  • pokud model není synchronizován, bude krokován maximálně do času uvedeného v Maximum time (od první hodnoty)
  • Shutdown_after_last - pokud model není synchronizován, tak po ukončení generování (maximum time) musí poslat shutdown
  • echo default parameters as event - pokud je zaškrtnuto, filtr jako první věc vyplivne parametry, které má nastavené v poli Parameters jako Parameters event

Vytvoření prezentace

Je třeba vytvořit krátkou prezentaci na páteční předášku, kde budeme prezentovat odvedenou práci na projektu.
Odhadovaná časová náročnost [h]: 1
Výsledná časová náročnost [h]: 1

Oprava připomínek zadavatele

Je třeba opravit drobné detaily podle připomínek zadavatele ve výsledné aplikaci.
Odhadovaná časová náročnost [h]: 2
Výsledná časová náročnost [h]: 4

Základní jednotkový test

Je třeba vytvořit test, kterým by měl projít každý filtr a který by se měl reálně spouštět nad všemi filtry. Vytvoříme například "info" event, pošleme ho a budeme ho očekávat na výstupu. "Info" eventy filtr nesmí pořzat, stejně tak jako "warning" a "error" eventy.
Jelikož jde o test, který by měl testovat každý filtr, dá se uvažovat o abstraktní třídě/metodě. - prokonzultovat
Výsledná časová náročnost [h]: 2

Vyřešit problém s kompilátory

Je potřeba vybrat a zprovoznit vhodný kompilátor, abychom se mohliu dále posunout v implementaci aplikace. Ideálně najít poslední opravenou verzi MinGW, nebo zprovoznit MSVC a jeho debugging ve Visual Studiu.

Sepsání dokumentace

Je třeba sepsat požadovanou dokumentaci pro zadavatele.
Odhadovaná časová náročnost [h]: 1
Výsledná časová náročnost [h]: 1

Logování jednotkových testů

Je třeba začít se zapracováním logování do souboru při jednotkových testech.

Výsledná časová náročnost[h]: 10

Nastavení maximální délky testu

Pro všechny jednotkové testy je třeba nastavit dobu, za kterou musí být test splněn, jinak bude vyhodnocen jako nesplněn. Reálně by měl být každý test splněn za několik milisekund, pro nás stačí defaultně nastavit např. 1 sekundu. Toto nastavení by mělo být snadno upravitelné, např. formou konstanty v kódu.
Výsledná časová náročnost [h]: 0.5

Přepracovat jednotkové testy

Je třeba přepracovat vykonávání jednotkových testů.
Každý test bude spuštěn ve vlastním vlákně. Viz. diagram tříd na Gapps.
Odhadovaná časová náročnost [h]: 3
Výsledná časová náročnost [h]: 6

Komunikace se zadavatelem

Je třeba poslat mail PhD. Úblovi, ohledně upřesnění dalších věcí a rekapitulace toho, co už víme.
Výsledná časová náročnost [h]: 1
E-maily jsem přeposlal na studentské e-maily.

Vytvořit jednoduchý filtr pomocí rozhraní IFilter

Vzhledem k tomu, že jsme dostali informace o tom, jak by měl náš testovací filtr vypadat a další informace jsou dostupné v souborech, které nám p. Úbl poslal, mohli bychom se pokusit o vytvoření aspoň jednoduchého filtru s nějakou jednoduchou funkcionalitou.
Odhadovaná časová náročnost [h]: 4

Dokončení dokumentů

Je třeba dotáhnout požadavky specifikace a hrubý odhad práce do finální podoby, dát odsouhlasit zadavateli a odevzdat.
Odhadovaná časová náročnost [h]: 3
Výsledná časová náročnost [h]: 4

Konzultace s PhD. Úblem

Konzultace 10. 3. od 10.00 hodin ohledně opřesnění funkcionality testovaného softwaru a výsledného produktu.
Odhadovaná časová náročnost [h]: max 1
Výsledná časová náročnost [h]: 0.5

Logování v C++

Najít vhodnou knihovnu pro logování v jazyce C++ a následně otestovat její použití.
Odhadovaná časová náročnost [h]: 2
Výsledná časová náročnost [h]: 2

Týmový meeting kvůli objektové analýze

Je třeba sepsat dokument objektové analýzy, který se v úterý odevzdává. Bylo by tedy vhodné se sejít a probrat výslednou podobu aplikace.
Výsledná časová náročnost [h]: 4

Obecné testy pro všechny filtry

Filtry obecné:

  • Information, Warning a Error událost nesmí být nikdy maskována (projde v nezměněné podobě)
  • Shut_Down událost ukončí činnost filtru a nesmí být nikdy maskována (projde dál; filtr pak už nepřijímá další eventy - Execute vrací chybový kód)
  • Warm_Reset nikdy není maskován
  • z deskriptorů by u některých parametrů mělo být zřejmé, jak testovat

Konzultace s PhD. Moučkem

Pravidelná konzultace 10. 3. od 9.20 hodin.
Odhadovaná časová náročnost [h]: max. 1
Výsledná časová náročnost [h]: 0.5

Obecné testy pro jednotlivé moduly

Obecné:

  • každá knihovna musí exportovat alespoň jednu do_get_*_descriptors metodu (do_get_filter_descriptors, model, signal, metric, solver, approximator)
  • pokud knihovna exportuje do_get_*_descriptors, musí exportovat i nějakou další create/solve metodu podle tohoto klíče:
    • do_get_filter_descriptors --> do_create_filter
    • do_get_signal_descriptors --> do_create_signal
    • do_get_metric_descriptors --> do_create_metric
    • do_get_solver_descriptors --> do_solve_generic
    • do_get_approximator_descriptors --> do_create_approximator
  • filtr, signál, aproximátor i metrika by měly jít příslušnou funkcí vytvořit
  • žádná knihovna nesmí vytvořit entitu, kterou neobsahuje v deskriptoru (pro případ kdy např. zapomeneme else blok nebo tak něco - testovat se to dá s náhodným nebo neplatným GUID na vstupu)
  • do_get_descriptors, do_create a do_solve.. funkce obecně validují všechny vstupy (že nejsou nullptr, u deskriptorů že begin != end, apod.)

Unit testy padají na uvolnění paměti

Unit testy spadnou na neoprávněnm zásahu do paměti, když se snažíme poslat event chainem. Je to způsobené tím, že se implicitně zavolá destruktor nad CDynamic_Library, když vrátíme instanci GenericUnitTesteru pomocí return.
Výsledná časová náročnost [h]: 1

Nelze předávat ukazatel na členskou funkci.

Pro testování ve vláknech potřebujeme předávat ukazatele na funkce, které provádí testování. Tyto funkce chceme mít jako členské. Předávat bychom je ale potřebovali jako ukazatele na klasické funkce, protože se pak jinak nedají zavolat a neznáme členské funkce v budoucích odvozených třídách.
Proto potřebujeme vyřešit, jak předat ukazatele na členské funkce jako ukazatele na normální funkce, nebo přijít s náhradním řešením.
Viz poslední commit ve feature-unit_testy. (4031e39)

Testování podle GUID

Vstupní parametr pro jednotkové testování chceme změnit názvu logu na GUID logu. Jako parametry příkazové řádky budou tedy pro jednotkové testování zadány parametry ve tvaru např.:
-u C0E942B9-3928-4B81-9B43-A347668200BA pro otestování log filtru. Je proto třeba změnit logiku zpracovávání vstupního parametru a přepsat pomocný výpis v metodě print_help().
Očekávaná časová náročnost [h]: 2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.