A Feldspar fordító, illetve Feldspar programok tesztelése



Hasonló dokumentumok
Tulajdonságalapú tesztelés

Feldspar: Nyelv digitális jelfeldolgozáshoz

Mesterséges intelligencia alapú regressziós tesztelés

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Specifikáció alapú teszttervezési módszerek

Specifikáció alapú teszttervezési módszerek

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május)

FUNKCIONÁLIS PROGRAMOZÁS ELŐADÁS JEGYZET

Integrációs mellékhatások és gyógymódok a felhőben. Géczy Viktor Üzletfejlesztési igazgató

Programozási nyelvek (ADA)

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Programozási nyelvek JAVA EA+GY 1. gyakolat

Pénzügyi algoritmusok

FUNKCIONÁLIS PROGRAMOZÁS GYAKORLAT JEGYZET

Verifikáció és validáció Általános bevezető

Szoftverminőségbiztosítás

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

2019, Funkcionális programozás. 5. el adás. MÁRTON Gyöngyvér

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Modell alapú tesztelés: célok és lehetőségek

Funkcionális Nyelvek 2 (MSc)

Fordítóprogramok. Aszalós László szeptember 7.





























Véletlen sorozatok ellenőrzésének módszerei. dolgozat

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

C++ programok fordítása

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Programzás I gyakorlat

2018, Funkcionális programozás

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

Kaposi Ambrus. Informatikai Kar. Pannonhalmi Bencés Gimnázium november 24.

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

Pénzügyi algoritmusok


Programozási nyelvek Java

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Kifejezések. Kozsik Tamás. December 11, 2016

Python tanfolyam Python bevezető I. rész

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

2018, Funkcionális programozás

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Challenge Accepted:C++ Standard Template Library

MIÉRT KELL TESZTELNI?

Komputeralgebra Rendszerek

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

2016, Funkcionális programozás

Podoski Péter és Zabb László

8.3. AZ ASIC TESZTELÉSE

WebService tesztelés. SOAPui Pro, GreenPepper és Confluence használatával. Verhás & Verhás Szoftver Manufaktúra KNOW-HOW

Teszt terv Új funkció implementációja meglévı alkalmazásba

A DevOps-kultúra eszközei

Tartalomjegyzék. Általános Információ! 2. Felhasználói dokumentáció! 3. Feladat! 3. Környezet! 3. Használat! 3. Bemenet! 3. Példa!

Osztott jáva programok automatikus tesztelése. Matkó Imre BBTE, Kolozsvár Informatika szak, IV. Év 2007 január

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat április 13. Például (bemenet/pelda.

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Kommunikációs rendszerek teljesítőképesség-vizsgálata

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

LabVIEW példák és bemutatók KÉSZÍTETTE: DR. FÜVESI VIKTOR

Programozási technológia II 7. előadás. Verifikáció és validáció Giachetta Roberto

Objektum Orientált Programozás IV.

Miért van szükség fordítóprogramokra? Fordítóprogramok célja és szerkezete. Miért van szükség fordítóprogramokra?

OPENCV TELEPÍTÉSE SZÁMÍTÓGÉPES LÁTÁS ÉS KÉPFELDOLGOZÁS. Tanács Attila Képfeldolgozás és Számítógépes Grafika Tanszék Szegedi Tudományegyetem

Modell alapú tesztelés mobil környezetben

Szoftver újrafelhasználás

2019, Funkcionális programozás. 4. el adás. MÁRTON Gyöngyvér

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

MŰSZAKI TESZTTERVEZÉSI TECHNIKÁK A TESZT FEJLESZTÉSI FOLYAMATA A TESZTTERVEZÉSI TECHNIKÁK KATEGÓRIÁI

Dr. habil. Maróti György

Esedékesség napja Nettó eszközérték összege (Ft) Nettó eszközérték jegyenként (Ft/db)

Átírás:

A Feldspar fordító, illetve Feldspar programok tesztelése [KMOP-1.1.2-08/1-2008-0002 társfinanszírozó: ERFA] Leskó Dániel Eötvös Loránd Tudományegyetem Programozási Nyelvek és Fordítóprogramok Tanszék 2012. június 19. Leskó Dániel 1 / 13

Motiváció Feldspar fordító, értelmező összehasonlítása Tesztadatok generálása Nyitott rendszer kiértékelés - nyelvek generálás tulajdonság Automatizált, regressziós tesztelésre alkalmas legyen Ne kelljen nagy szaktudás egy teszteset megírásához Leskó Dániel 2 / 13

Tesztadat-generálás Kiszámítás Értékelés Futtatás, környezet Modell Generátor Transzformátor Tulajdonság Operátor Leskó D., Tejfel M.: Testing framework for embedded languages /Symposium on Computer Languages, Implementations and Tools 2012/ Leskó Dániel 3 / 13

Tesztadat-generálás Kiszámítás Értékelés Futtatás, környezet Generátor Feladata típusosan helyes Haskell tesztadatok generálása Megvalósítás QuickCheck, SmallCheck generátorok használata továbbiakkal bővíthető a rendszer Erős típusrendszer legtöbbször nem kell megírni a generátort (arbitrary, serial) kivéve ha speciális generátorunk van az adott típushoz foo :: Data Float -> DVector (Int16) -> Data Bool foo x y =... gen :: Gen (Float ::> [Int16] ::> ()) gen = genfloat ::> vectorof 170 genint16 ::> () Paraméterek közötti kapcsolat? Megoldható Leskó Dániel 4 / 13

Tesztadat-generálás Kiszámítás Értékelés Futtatás, környezet Transzformátor Transzformátor = Transzformátor-minta + tesztelendő program, függvény A tesztelendő függvényt, programot értékeli ki Elrejti a kiszámolást, kifelé egy egyszerű Haskell függvénynek látszik A kiszámolás módját a transzformátor-minta határozza meg (evaltransformer foo) :: Transformer (Float ::> [Int16] ::> ()) (Bool ::> ()) Leskó Dániel 5 / 13

Tesztadat-generálás Kiszámítás Értékelés Futtatás, környezet Tulajdonság Bemenet transzformátorok végeredménye + extra adatok (futási- fordítási idő, code coverage, eloc) tesztadatok Kimenet: Ok / Hiba Alap típusokra kell elkészíteni (példák) strictequality, epsilonequality, disequality Tulajdonság kombinátorok: elemwise, sumwise and, or, not, imply base, total Leskó Dániel 6 / 13

Tesztadat-generálás Kiszámítás Értékelés Futtatás, környezet Operátor Összefogja, összekapcsolja az eddigi egységeket Felelős: külső konfiguráció fogadása iterációk száma epsilon, tűréshatár munkakönyvtár naplózás az eredmények megjelenítéséért összegzés, statisztikák Leskó Dániel 7 / 13

Transzformátor-minták Transzformátor rendszerek Statisztika Fordító vs. Értelmező evaltransformer Feldspar interpretert használja a kiértékeléshez compilertransformer Feldspar compilert használja Feldspar függvény -> C függvény! I/O kezelő main() függvényt a transzformátor generálja tc1 = TestCase { tc_name = "example tc", gen = arbitrary, trans = [ evaltransformer foo, compilertransformer foo], prop = strictequality} Leskó Dániel 8 / 13

Transzformátor-minták Transzformátor rendszerek Statisztika Tesztelés referencia implementációkkal refhaskelltransformer Haskell függvényt vár Haskell interpretert használ refctransformer C függvényt vár C fordítót használ I/O megkötések tc_round_float = TestCase { tc_name = "round Float to Int8(eval-comp-ref)", gen = R.genFloat ::> (), trans = [ compilertransformer Feldspar.roundFloat, evaltransformer Feldspar.roundFloat, refhaskelltransformer ((H.round) :: Float -> Int8)], prop = strictequality} Leskó Dániel 9 / 13

Transzformátor-minták Transzformátor rendszerek Statisztika Fixpontos könyvtár tesztelése fixedpointtransformer eddig csak azonos szignatúrájú függvényeket teszteltünk float <-> int erős típusrendszer visszaüt! TestCase { tc_name = "Plus", gen = genfloat ::> genfloat ::> (), trans = [ compilertransformer ((+) :: Data Float -> Data Float -> Data Float), fixedpointtransformer ((+) :: Fix Int32 -> Fix Int32 -> Fix Int32) (-8 ::> -8 ::> -10)], prop = epsilonequality 0.03} Leskó Dániel 10 / 13

Transzformátor-minták Transzformátor rendszerek Statisztika További minták constanttransformer mindig a kapott konstanst adja eredményül unit teszteléshez jó errortransformer mindig hibával tér vissza pl.: elvárt fordítási hibák tesztelése convertertransformer TestCase { tc_name = "(length) with DVectors (eval-refhaskell-comp)", gen = vectorof 256 genint32 ::> (), trans = [ refhaskelltransformer Prelude.length >>> convertertransformer (fromintegral ::> id), evaltransformer length_dv, compilertransformer length_dv], prop = strictequality} Leskó Dániel 11 / 13

Transzformátor-minták Transzformátor rendszerek Statisztika Transzformátor kombinátorok >>> pairt listt +> TestCase{ tc_name = "sys eval-comp", gen = arbitrary, trans = [( evaltransformer sqr pairt (compilertransformer sqr >>> refhaskelltransformer (P.replicate 10) ) ) >>> convertertransformer ((\(a,b) -> (a,p.sum b)) ::> id)], prop = (\i [Result o1 _] opts -> True)} Leskó Dániel 12 / 13

Transzformátor-minták Transzformátor rendszerek Statisztika Számok ~ 500 teszteset 10,100,1000 iterációs futások éjszakai tesztek hónapokon keresztül számos megtalált hiba szemantika pontosítása Leskó Dániel 13 / 13