Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Unit Testy dla Embeded - jak do tego podejść w najprostszy sposób?

Tomq 19 Oct 2017 00:17 2262 0
  • Wiele osób zastanawia się czy Unit Testy (testy jednostkowe) mają sens w systemach wbudowanych, a jeśli tak, to jak podejść do tematu. Aby nie trzymać czytelników w napięciu napiszę - mają sens. Stanowią one świetny parasol ochronny dzięki któremu możemy się wyzbyć obawy przed modyfikacją działającego kodu - skoro mamy testy, to mamy pewność, że wprowadzony refactor nic nie zepsuł.

    Często również tworząc jakąś funkcję pobieżnie sprawdzamy jej działanie i przechodzimy do pisania kolejnej. Wprowadzając Testy Jednostkowe do projektu wprowadzamy pewną dyscyplinę - nie możemy spocząć na szybkim sprawdzeniu, czy osiągnęliśmy zamierzony rezultat - testy motywują nas do tego, by sprawdzić tzw "corner case'y" - przypadki brzegowe, które zwykle generują najwięcej problemów. Pisanie testów może być również doskonałą zabawą, postawienie się w roli "tego złego, który chce wszystko zepsuć" jest ciekawym doświadczeniem.

    Do przeprowadzania testów proponują stworzyć sobie środowisko oparte o MinUnit i FFF. Niezbędne pliki można pobrać z githuba https://github.com/siu/minunit/blob/master/minunit.h oraz https://github.com/meekrosoft/fff/blob/master/fff.h i umieścić w projekcie zgodnie z opisem zawartym na stronie http://tomaszpluta.dx.am/unit_testy_embeded.html . Opisany framework MinUnit jest niezwykle intuicyjny i bardzo lekki (mieści się w jednym pliku nagłówkowym!). Odpadają więc wszelkie problemy z zależnościami wymaganymi do kompilacji potężnych frameworków, a jednocześnie nie tracimy na niezbędnej funkcjonalności (twórcy zapewne wykorzystali zasadę Pareto i zawarli w swoim dziele 20% standardowych asertów, które są wykorzystywane w 80% przypadków).

    Uzupełnieniem dla MinUnit jest generatorem mocków (nazwanym niezbyt szczęśliwie "FFF" od "Fake Function Framework"). Nie muszę chyba szczegółowo wyjaśniać czym są mocki - każdy, kto choćby pobieżnie zainteresował się tematem wie, że zastępują one oryginalne wywołania funkcji). Generator ten świetnie pasuje do MinUnit - jest równie prosty w użyciu - wystarczy do pliku z testem zainkludować plik nagłówkowy z deklaracją funkcji dla której chcemy stworzyć Mock, a plik zawierający definicję wykluczyć z budowania (za pomocą opcji w Eclipsie lub edytując Makefile).

    Unit Testy dla Embeded - jak do tego podejść w najprostszy sposób?

    Umieszczając więc te dwa pliki w projekcie (polecam założyć nowy projekt do tego celu) i podlinkowując ścieżki z testowanymi plikami mamy już ustawione całe środowisko - proponowany sposób jego zorganizowania przedstawia obrazek powyżej.
    Wysiłek w to włożony jest naprawdę niewielki, skopień skomplikowania niski, a funkcjonalność jaką otrzymujemy - naprawdę wartościowa. Dobry zestaw testów potrafi oszczędzić długich godzin spędzonych na debugowaniu - także w systemach embeded!

    Kwestią sporną natomiast może być czy należy uruchamiać testy na natywnym sprzęcie (np stm, avr), czy tylko testować logikę działania na PC. Oba podejścia mają swoich zwolenników i przeciwników, od siebie dodam tylko, że wspomniany zestaw frameworków nadaje się zarówno do pierwszego (gdzie output testów powinniśmy przekierować np uartem) jak i drugiego podejścia.

    Drugi z ciekawych frameworków mających zastsowanie w testowaniu kodu embedded to Ceedling - http://embeddedtechnology.pl/ceedling.html

    Cool! Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    Tomq
    Level 38  
    Offline 
    Has specialization in: akustyka, uc
    Tomq wrote 3408 posts with rating 168, helped 363 times. Live in city Piekoszów. Been with us since 2008 year.