Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

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

Tomq 19 Paź 2017 00:17 1734 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://embeddedtechnology.pl/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


    Fajne!