Quale framework di unit test posso usare per un progetto MCU basato su AC?


15

Sto pensando a come posso usare i test unitari nel mio progetto MCU e quali framework posso usare per semplificarlo.

Oggi sto usando uno stm32 con OpenOCD-jtag da un PC Linux, dove è tutto controllato da un classico Makefile e crosscompilato con gcc.

Potrei creare qualcosa da solo, ma se c'è un framework che posso usare sarebbe bello. (È un vantaggio se il framework può produrre il risultato in un formato leggibile da Jenkins / Hudson).

C'è un modo per usare un framework di unit test con uno stm32?


3
Non ho tempo di scrivere una risposta completa, ma ho usato molti degli strumenti e delle tecniche presenti in questi articoli e in questa serie di blog . In una parola: CMock!
Kevin Vermeer,

Risposte:


4

Dai un'occhiata a CppUTest e all'eccellente http://pragprog.com/book/jgade/test-driven-development-for-embedded-c di James Grenning

CppUTest ha il supporto per C e C ++ e ha un bel set di modelli Makefile che mi hanno fatto iniziare abbastanza rapidamente.


Acquistato una versione ePub, vediamo se è buono :)
Johan

Il libro è buono, ma penso che l'unità (l'altra struttura in quel libro) soddisferà meglio le mie necessità.
Johan

Accettato dal momento che il libro mi ha spinto nella giusta direzione.
Johan,

5

Esistono molte variabili che determineranno il miglior framework di unit test da utilizzare nella tua situazione. Alcuni elementi che potrebbero influenzare la tua scelta saranno:

  • La lingua di destinazione
  • Quale supporto di libreria è disponibile. ad esempio libc o una sua versione ridotta.
  • Il sistema operativo del target. ad es. Nessuno, FreeRTOS, personalizzato.

La maggior parte dei framework di tipo xUnit fornirà un livello base di funzionalità che può essere utile. Ho usato Cunit con un certo successo in passato. (pacchetto libcunit1-dev su Ubuntu / Debian). La maggior parte dei framework richiederà la disponibilità di libc, alcuni richiederanno supporto aggiuntivo per il sistema operativo.

Un altro altermativo che è lungo solo 3 righe è Minunit .

Ho trovato i test unitari che utilizzano il microcontrollore come obiettivo sono piuttosto ingombranti in quanto è necessario essere in grado di presentare un ambiente adatto per scaricare test, eseguirli e quindi ottenere risultati. Basta mettere in piedi la piattaforma che ti permetterà di farlo è un grosso compito.

Un altro approccio che ho adottato e che ha funzionato per me è quello di eseguire test di unità sull'host, implementando un livello di astrazione tra i driver e il codice dell'applicazione. Dato che stai usando gcc per la destinazione, il codice dovrebbe anche essere compilato sull'host.

Il test sull'host di compilazione è generalmente molto più semplice in quanto si dispone del supporto completo del sistema operativo host e di tutti i suoi strumenti. Ad esempio, durante i test sull'host, ho una versione derisa del mio driver wireless con la stessa interfaccia del driver reale che gira sulla destinazione. La versione host utilizza i pacchetti UDP per simulare il trasferimento di pacchetti wireless, con il driver simulato che supporta la possibilità di rilasciare i pacchetti in modo da poter testare i miei protocolli.

Nel prodotto su cui stavo lavorando, veniva utilizzato un sistema operativo thread, quindi il livello di astrazione per i test sul sistema operativo host utilizzava invece pthreads.

Sebbene non sia perfetto, più è facile per te scrivere ed eseguire test, più è probabile che tu implementi più casi di test. Un altro vantaggio di far funzionare il codice su piattaforme diverse è testare che il codice è portatile. Riceverai rapidamente errori endian se il target e le architetture host differiscono.

Ora sono un po 'fuori tema, ma penso che queste idee possano aiutare con la scelta del framework di test e dei metodi di test.


Ho risolto il modo in cui ottengo il codice sul target e posso usare gdb in modalità script per fermarmi a diversi punti di interruzione come test_ok o test_fail ( fun-tech.se/stm32/TestSuite/index.php ). Quindi sono un po 'a metà strada. Questa è più una domanda su come costruire i diversi "test". Le mie idee oggi sono un po 'poco flessibili, ecco perché ho iniziato a cercare una sorta di framework.
Johan

1

Dai un'occhiata a embUnit http://embunit.sourceforge.net/embunit/index.html . È un framework di test di unità C incorporato con un ingombro ridotto.

L'abbiamo usato con successo in un paio di progetti di microcontrollori integrati. Non aspettarti le opzioni e le funzionalità che ottieni con un framework di test delle unità desktop. Ma è decisamente abbastanza potente.

Ha definito un sacco di assert per te, quindi non devi perdere molto tempo a scrivere assert personalizzati come con minUnit.


1

Qualche tempo fa ho scritto un tutorial completo sull'argomento: Unit-test (embedded) applicazioni C con Ceedling ; Uso queste tecniche in molti progetti e finora sono abbastanza contento.


2
Questa è una risposta di solo collegamento e come tale diventerà inutile se l'URL cambia o il collegamento si interrompe. Dovresti spiegare le informazioni pertinenti nella risposta , quindi puoi aggiungere il link come riferimento.
pipe

2
@pipe Sì, ma la domanda (essenzialmente la raccomandazione del prodotto) richiede risposte come questa.
Dmitry Grigoryev


-1

Prova lanugine, ma non credo sia per test unitari, è per l'analisi del codice.


2
L'analisi statica del codice non può aiutare a eseguire e testare il codice, quindi non è molto utile.
Johan

1
Forse non è utile nel contesto del test unitario, ma tutti dovrebbero utilizzare una sorta di strumento di analisi statica.
Tim
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.