Tesztelési feladatok és kihívások a FALCON projektben

Hasonló dokumentumok
Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

The modular mitmót system. DPY kijelző kártya C API

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

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

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

Modell alapú tesztelés mobil környezetben

Automatikus tesztgenerálás modell ellenőrző segítségével

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22

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

Programozás I. 5. Előadás: Függvények

Szoftverminőségbiztosítás

Rendszermodellezés. Modellellenőrzés. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Mintavételes szabályozás mikrovezérlő segítségével

Szárazföldi autonóm mobil robotok vezérlőrendszerének kialakítási lehetőségei. Kucsera Péter ZMNE Doktorandusz

C programozási nyelv

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

Az AVR programozás alapjai. Előadja: Both Tamás

Rubin SPIRIT TEST. Rubin firmware-ek és hardverek tesztelése esettanulmány V1.0. Készítette: Hajnali Krisztián Jóváhagyta: Varga József

Mikrorendszerek tervezése

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

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

Bevezetés a mikrovezérlők programozásába: WS2812 RGB LED-ek vezérlése

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

Dr. Schuster György október 14.

Alprogramok, paraméterátadás

C++ programok fordítása

Teszttervezés. Majzik István, Micskei Zoltán. Integrációs és ellenőrzési technikák (VIMIA04) Méréstechnika és Információs Rendszerek Tanszék

Rendszermodellezés: házi feladat bemutatás

MSP430 programozás Energia környezetben. Digitális szenzorok

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)

Tesztelési szintek Tesztautomatizálás

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

ÉRZÉKELŐK ÉS BEAVATKOZÓK I. GY1.1 SENSACT0 PÉLDAPROGRAM

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

Labor gyakorlat Mikrovezérlők

Programozás C és C++ -ban

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Szenzorhálózatok programfejlesztési kérdései. Orosz György

Labor gyakorlat Mikrovezérlők

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Intelligens kamera alkalmazás fejlesztése

Modellező eszközök, kódgenerálás

12. gyakorlat Enum; Tárolási osztályok Preprocesszor utasítások; Moduláris programozás

Alapszintű formalizmusok

Laborgyakorlat Logikai áramkörök számítógéppel segített tervezése (CAD)

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Teszttervezés. Majzik István, Micskei Zoltán. Integrációs és ellenőrzési technikák (VIMIA04) Méréstechnika és Információs Rendszerek Tanszék

Miskolci Egyetem Alkalmazott Informatikai Intézeti Tanszék A minőségbiztosítás informatikája. Készítette: Urbán Norbert

Pénzügyi algoritmusok

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

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

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

16F628A megszakítás kezelése

Témakiírások 2014/15. őszi félévben

Digitális technika (VIMIAA01) Laboratórium 9

Valószínűségi modellellenőrzés Markov döntési folyamatokkal

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

Bevezetés a számítástechnikába

Digitális technika (VIMIAA01) Laboratórium 9

Wigner Jenő Műszaki, Informatikai Középiskola és Kollégium // OKJ: Elektronikai technikus szakképesítés.

Bevezetés a programozásba Előadás: Fordítási egység

Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor

Multi-20 modul. Felhasználói dokumentáció 1.1. Készítette: Parrag László. Jóváhagyta: Rubin Informatikai Zrt.

Nagy pontosságú 3D szkenner

Az interrupt Benesóczky Zoltán 2004

Bevezetés a programozásba Előadás: A const

Gyakorlat és házi feladat tájékoztató

Élettartam teszteknél alkalmazott programstruktúra egy váltóvezérlő példáján keresztül

Programozás II. 2. Dr. Iványi Péter

Firmware fejlesztés. Mártonfalvi Zsolt Hardware programozó

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

Készítette: Ruzsinszki Gábor webmaster442

Hibatűrés. Majzik István Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

MSP430 programozás Energia környezetben. Analóg jelek mérése

Programozás és Digitális technika I. Pógár István eng.unideb.hu/pogari

Digitális eszközök típusai

Quadkopter szimulációja LabVIEW környezetben Simulation of a Quadcopter with LabVIEW

Szoftvertechnológia 10. előadás. Verifikáció és validáció. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás

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

Információs Technológia

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Szoftver karbantartási lépések ellenőrzése

Szoftverminőségbiztosítás

Szoftverminőségbiztosítás

Hardver modellezés SystemC-vel és SDL grafikus könyvtárral Visual Stúdió alatt

NFA Teljesítményszabályozó mérőlánc

Csoportos üzenetszórás optimalizálása klaszter rendszerekben

Tulajdonságalapú tesztelés

ISA szimulátor objektum-orientált modell (C++)

MSP430 programozás Energia környezetben. Az I/O portok kezelése

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

Mikrorendszerek tervezése

MSP430 programozás Energia környezetben

Újrakonfigurálható eszközök

Járműinformatika Bevezetés

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Átírás:

Tesztelési feladatok és kihívások a FALCON projektben Búr Márton Szoftver Verifikáció és Validáció 2016.12.07. Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

A FALCON projekt First Auto Locating Camera ON-board Közvetítő drón jégkorong mérkőzésekhez Két fős mérnökcsapat (mechatronikus, informatikus) Hobbi projekt szakmai ismeretek bővítése a cél Fejlesztés folyamatban 2015 január óta (nem befejezett) 2

Mechanikai részek A projekt rövid áttekintése o Saját tervezésű és gyártású alkatrészek: burkolat, kameratartó o Kész alkatrészek: váz, propellerek Elektronika o Saját tervezésű kiegészítő áramkörök: teljesítményelektronika, szintillesztő áramkör o Kész alkatrészek: motorvezérlők, mikrokontroller kártya Szoftverek o Futtató platformok: PC, egykártyás számítógép, mikrokontroller PC Vezetéknélküli kapcsolat Odroid I 2 C busz TivaC LaunchPad 3

Mechanikai részek A projekt rövid áttekintése o Saját tervezésű és gyártású alkatrészek: burkolat, kameratartó o Kész alkatrészek: váz, propellerek Elektronika o Saját tervezésű kiegészítő áramkörök: teljesítményelektronika, szintillesztő áramkör o Kész alkatrészek: motorvezérlők, Prezentáció mikrokontroller fókusza az itt kártya futó szoftver vizsgálatának bemutatása Szoftverek o Futtató platformok: PC, egykártyás számítógép, mikrokontroller PC Vezetéknélküli kapcsolat Odroid I 2 C busz TivaC LaunchPad 4

A beágyazott vezérlő szoftvere Tiszta C nyelvű forrás o ~3500 SLOC + külső mikrokontroller könyvtárak Feladatai: o Szenzorok figyelése Jelek szűrése, feldolgozása o Kommunikáció a csatlakozó egykártyás számítógéppel o Repülésirányító szoftver PID szabályozó algoritmus Időzítéskritikus feladatok 6

Unit tesztek Szoftver vizsgálata o Modell-alapú teszttervezési technika alkalmazása Tesztmodell készítése GraphWalker eszköz alkalmazása tesztesetek generálására o Unit/modulok izolációja kihívás Kezdetben nem volt fontos szempont a tesztelhetőség Cmockery teszt keretrendszer alkalmazása Integrációs tesztek o Komponensek együttműködése Interruptok priorizálása o Rate-monotonic scheduling algoritmus 7

Modell-alapú tesztelés Egy komponensre vonatkozó követelmények alapján viselkedésmodelleket készítettünk o Black-box teszteléshez Viselkedésmodellek: yed-ben, formátuma graphml Tesztesetek származtatása GraphWalkerrel o Csak azt vizsgáltuk, hogy az események hatására melyik állapotot melyik állapot követ 8

Tesztesetek generálása GraphWalkerrel Bemenet: 9

Tesztesetek generálása GraphWalkerrel Bemenet (részlet kinagyítva): 10

Tesztesetek generálása GraphWalkerrel Eszköz paraméterei: o Kezdőállapot o Cél Állapot/átmenetfedési kritérium Célállapot o Használt algoritmus Kimenet: állapotok és átmenetek sorozata Quick random vertex traversal {"currentelementname":"v_start" {"currentelementname":"e_start" {"currentelementname":"v_initializing0" {"currentelementname":"e_initializationcomplete" {"currentelementname":"v_waitingforhandshake1" 11

Unit tesztek megvalósítása A tesztesetek alapján unit tesztek kézi megvalósítása Nehézségek: o Számos közös, globális változó o Perifériákat kezelő függvények o Kommunikáció más komponensekkel a működés során 12

Unit tesztek megvalósítása megoldások Forráskód felkészítése a tesztelésre o #define UNIT_TESTING 1 preprocesszor makró segítségével a meglévő kód kiegészítése és felkészítése unit tesztelésre #ifdef UNIT_TESTING volatile uint32_t time5us; float eulersref[3]; float eulersact[3]; float eulerserr[3]; #else extern volatile uint32_t time5us; extern float eulersref[3]; extern float eulersact[3]; extern float eulerserr[3]; #endif void ESCDutiesRefresh() { #ifndef UNIT_TESTING PWMPulseWidthSet(PWM0_BASE, PWM_ESC1, PWM_PERIOD_400HZ * duties[0] / ESC_DUTY_MAX); PWMPulseWidthSet(PWM0_BASE, PWM_ESC2, PWM_PERIOD_400HZ * duties[1] / ESC_DUTY_MAX); PWMPulseWidthSet(PWM0_BASE, PWM_ESC3, PWM_PERIOD_400HZ * duties[2] / ESC_DUTY_MAX); PWMPulseWidthSet(PWM0_BASE, PWM_ESC4, PWM_PERIOD_400HZ * duties[3] / ESC_DUTY_MAX); #endif 13

Unit tesztek megvalósítása megoldások Cmockery használata mockok készítésére o Mock: kommunikáció esetére az egyes komponensek között #if UNIT_TESTING 1 char I2CSlaveDataGet(int reg_addr){ return (char)mock(); #endif Perifériakezelő függvény definiálása a Cmockery framework egy makrójával 14

Unit tesztek megvalósítása megoldások Cmockery használata mockok készítésére o Mock: kommunikáció esetére az egyes komponensek között #define I2C_TAKE_OFF_REQUEST 0x02 #define FLY_BACK_HOME_REQUEST 0x04 void test_from_takeoff_to_flyhome(){ int i; //Test setup - initial state, mocking communication will_return(i2cslavedataget,i2c_take_off_request); for (i = 0; i < 4; ++i) { // a message is 5 bytes long will_return(i2cslavedataget,0); will_return(i2cslavedataget,fly_back_home_request); setdevicestate(state_ready_for_takeoff); // Execute test scenario & check states for (i = 0; i < 5; ++i) { // read a message readi2cbyte(); assert_int_equal(getdevicestate(),state_taking_off); updatealtitude(5000); // setting altitude - callback for interrupts assert_int_equal(getdevicestate(),state_flying); readi2cbyte(); // read only the next message header assert_int_equal(getdevicestate(),state_flying_home); 15

Unit tesztek megvalósítása megoldások Cmockery használata mockok készítésére o Mock: kommunikáció esetére az egyes komponensek között #define I2C_TAKE_OFF_REQUEST 0x02 #define FLY_BACK_HOME_REQUEST 0x04 void test_from_takeoff_to_flyhome(){ int i; //Test setup - initial state, mocking communication will_return(i2cslavedataget,i2c_take_off_request); for (i = 0; i < 4; ++i) { // a message is 5 bytes long will_return(i2cslavedataget,0); will_return(i2cslavedataget,fly_back_home_request); setdevicestate(state_ready_for_takeoff); // Execute test scenario & check states for (i = 0; i < 5; ++i) { // read a message readi2cbyte(); Egy sorba kerülnek a kívánt assert_int_equal(getdevicestate(),state_taking_off); visszatérési értékek updatealtitude(5000); // setting altitude - callback for interrupts assert_int_equal(getdevicestate(),state_flying); (record-replay) readi2cbyte(); // read only the next message header assert_int_equal(getdevicestate(),state_flying_home); 16

Unit tesztek megvalósítása megoldások Cmockery használata mockok készítésére o Mock: kommunikáció esetére az egyes komponensek között #define I2C_TAKE_OFF_REQUEST 0x02 #define FLY_BACK_HOME_REQUEST 0x04 void test_from_takeoff_to_flyhome(){ int i; //Test setup - initial state, mocking communication will_return(i2cslavedataget,i2c_take_off_request); for (i = 0; i < 4; ++i) { // a message is 5 bytes long will_return(i2cslavedataget,0); will_return(i2cslavedataget,fly_back_home_request); setdevicestate(state_ready_for_takeoff); // Execute test scenario & check states for (i = 0; i < 5; ++i) { // read a message readi2cbyte(); Kiinduló állapot beállítása assert_int_equal(getdevicestate(),state_taking_off); kisebb módosító és lekérdező updatealtitude(5000); // setting altitude - callback for interrupts assert_int_equal(getdevicestate(),state_flying); függvények kellhetnek readi2cbyte(); // read only the next message header assert_int_equal(getdevicestate(),state_flying_home); 17

Unit tesztek megvalósítása megoldások Cmockery használata mockok készítésére o Mock: kommunikáció esetére az egyes komponensek között #define I2C_TAKE_OFF_REQUEST 0x02 #define FLY_BACK_HOME_REQUEST 0x04 void test_from_takeoff_to_flyhome(){ int i; //Test setup - initial state, mocking communication will_return(i2cslavedataget,i2c_take_off_request); for (i = 0; i < 4; ++i) { // a message is 5 bytes long Assertionök will_return(i2cslavedataget,0); a modul will_return(i2cslavedataget,fly_back_home_request); állapotára setdevicestate(state_ready_for_takeoff); // Execute test scenario & check states for (i = 0; i < 5; ++i) { // read a message readi2cbyte(); assert_int_equal(getdevicestate(),state_taking_off); updatealtitude(5000); // setting altitude - callback for interrupts assert_int_equal(getdevicestate(),state_flying); readi2cbyte(); // read only the next message header assert_int_equal(getdevicestate(),state_flying_home); 18

Cmockery példa kimenet test_from_takeoff_to_flyhome: Starting test test_from_takeoff_to_flyhome: Test completed successfully. test_from_taking_off_to_ready_to_takeoff: Starting test 2!= 0 ERROR:../src/main.c:77 Failure! test_from_taking_off_to_ready_to_takeoff: Test failed. 1 out of 2 tests failed! test_from_taking_off_to_ready_to_takeoff 19

Integrációs tesztek Ugyanazzal az eszközkészlettel, mint a unit tesztek Kevesebb mockolt résztvevő (függvény) Példa: I 2 C kommunikáció integrációs tesztje: o Mindkét résztvevő egy egyszerű kommunikációs forgatókönyvet játszik le o Még mindig csak a komponensek kis része valós 20

Interruptok priorizálása Periodikus taszkok prioritási szintjeinek beállítása Offline feladat Alapötlet: rövidebb feladatok nagyobb prioritási szinten Figyelembe vett jellemzők: o n: interrupt rutinok száma (taszkok száma) o C i : i. interrupt futási ideje o T i : i. interrupt periódusideje o µ i : i. interrupt CPU kihasználása; µ i = C i /T i 21

Interruptok priorizálása Ütemezhetőség feltétele: FALCON esetén: o n = 12 o C i : az egyes rutinok futási idejét hardveres időzítővel lemértük Flagek beállítása, értékek lementése sokszor közel 0 idő alatt megtörténik o T i : periódusidőket mi határoztuk meg 0,005 ms 100 ms közötti értékek 22

Interrupt priorizálás példa kimenet 23

Összefoglalás 24

Hivatkozások GraphWalker: graphwalker.github.io Cmockery: https://github.com/google/cmockery http://blogs.grammatech.com/unit-testing-cprograms-with-mock-functions https://en.wikipedia.org/wiki/ratemonotonic_scheduling 25

Fénykép az eszközről (burkolat nélkül) 26