Skocz do zawartości
FlyingDutch

Framework do testów automatycznych dla C/C++

Pomocna odpowiedź

Napisano (edytowany)

Cześć,

w pracy rozwijam (aktywny development) system oparty na MCU STM32F103VGTx. Jest to skomplikowany system embedded (trzy rodzaje modułów każdy ze wspomnianym MCU).

Składa się z modułów sterujących i wykonawczych (te można łączyć szeregowo za pomocą magistrali CAN - do 6-ciu modułów).

System (wprowadzanie danych ) może być sterowany w następujące sposoby:

1) 10-cio calowy monitor z interfejsem dotykowym

2) Dedykowane pulpity sterujące wytwarzane w firmie

3) Smartfon lub tablet z Androidem (komunikacja po Bluetooth)

Wykorzystywane są w nim interfejsy komunikacyjne: CAN, SPI, RS485, RS422, Modbus RTU (po RS485), Bluetooth. Podstawowe moduły systemu powstały jako grant badawczy na UTP w Bydgoszczy (około 40% kodu). System jest napisany w nieobiektowym C z użyciem "Standard Peripheral Library". Cały czas są dodawane nowe funkcjonalności do systemu (dość skomplikowane) - około 60% kodu jest napisany przeze mnie (także w kilku miejscach "corowe" funkcjonalności). Niestety doszedłem do takiego etapu, gdzie dodanie nowych funkcjonalności powoduje czasami błędy w innych miejscach systemu. Doszedłem do wniosku, że jest najwyższy czas, aby objąć część kodu testami automatycznymi (Unit tests).

Dotychczas w pracy zawodowej korzystałem z framework'ów do testów automatycznych dla języków Java (Junit) oraz C# (NUnit), natomiast nie mam doświadczenia z podobnymi rozwiązaniami dla języka C/C++.

Zależałoby mi na rozwiązaniu które oferowałoby następujące opcje:

1) Możliwość zdefiniowania testów jednostkowych, oraz grup takich testów

2) Miałoby sensownie zdefiniowany zbiór asercji

3) Pozwalałoby wykonywać poszczególne testy lub grupy testów

4) Prezentowałoby (najlepiej także w sposób graficzny) wyniki przeprowadzonych testów

Jako dodatkowe funkcje (im więcej z tych funkcji spełnia tym lepiej) oferowałoby co nastepuje:

1) Analiza statyczna kodu w C/C++

2) Ocena zgodności kodu ze Standardem "MISRA C"

3) Ocena zgodności ze standardami bezpieczeństwa innych organizacji np. IEC 61508, ISO 26262 itp

Do developmentu używam komercyjnej wersji IDE, kompilatora: "Ride7" + "RKit-ARM" firmy Raisonace . Wybór narzędzi programowych został dokonany wcześniej przez osoby które pisały "podwaliny" systemu, ale nie narzekam, bo dobrze mi się pracuje z tymi firmy Raisonance.

Jak wspomniałem kod jest napisany w języku C (nie C++). Szukając narzędzia do automatyzacji testów dla języka C/C++ znalazłem w sieci Framework "Cantata":

https://www.qa-systems.com/tools/cantata/

Jest to komercyjny system do automatyzacji testów dla języka C/C++ i ma budowę modułową. Spełnia (przynajmniej w teorii) wszystkie moje wymagania co do takiego systemu, niestety cena jest tak zaporowa, że mojej firmy nie będzie raczej stać na jego kupno. Przeglądałem stronę Wikipedii z listą takich frameworków open-source:

https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C

ale nie miałem z nimi doświadczenia. Może ktoś korzystał z niektórych z nich i może się podzielić doświadczeniami? Będę wdzięczny za opinie.

BTW: jak na razie przyglądałem się trochę framework'om "Googletest" (Google) oraz "Boost" (IBM) ale z tego co zobaczyłem wynika, że oba są zorientowane raczej na kod w C++ a nie w C.

Pozdrawiam

Edytowano przez FlyingDutch
  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Cześć,

Od kilku dni zajmuję się konfiguracją i testowaniem środowiska unit testowego dla projektu pisanego w języku C opartego na procku STM32F030K6. Z początku próbowałem podziałać z Ceedling/Unity jednak w trakcie prac wyszło, że jest możliwość wykorzystania wspólnego tool'a w wielu projektach, przy czym część z nich jest pisana w języku C++. W związku z tym zacząłem się bawić narzędziem Googletest. Bez problemu można przy pomocy tego framework'a testować kod w C oraz C++. Niestety problem pojawia się w momencie mockowania funkcji. Googlemock już sobie z tym nie radzi (dedykowany do C++). Z pomocą przychodzi FFF (Fake Function Framework), który jest dedykowany do języka C, bez problemu tworzy fałszywe funkcje i imituje żądane działania.

Osobnym tematem jest analiza statyczna kodu. Do tego celu używamy PC-Lint, który można skonfigurować pod różne standardy, m.in. MISRA C.

 

Pozdrawiam

  • Lubię! 1
  • Pomogłeś! 1

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...