Skocz do zawartości

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


FlyingDutch

Pomocna odpowiedź

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
Link do komentarza
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
Link do komentarza
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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.