La prossima settimana parlerò con il mio dipartimento dei test unitari e dello sviluppo basato sui test. Come parte di questo, ho intenzione di mostrare alcuni esempi del mondo reale da qualche codice che ho scritto di recente, ma mi piacerebbe anche mostrare alcuni esempi molto semplici che scriverò nel talk.
Ho cercato sul Web buoni esempi, ma ho cercato di trovare quelli che sono particolarmente applicabili alla nostra area di sviluppo. Quasi tutto il software che scriviamo è un sistema di controllo profondamente integrato che funziona su microcontrollori di piccole dimensioni. C'è un sacco di codice C che è facilmente applicabile al test delle unità (parlerò dei test delle unità sul PC piuttosto che sul bersaglio stesso) a patto che tu stia lontano dal livello "in basso": il materiale che parla direttamente alle periferiche del microcontrollore. Tuttavia, la maggior parte degli esempi che ho trovato tendono ad essere basati sull'elaborazione di stringhe (ad esempio l'eccellente esempio di numeri romani di Dive Into Python) e dal momento che non utilizziamo quasi mai le stringhe questo non è particolarmente adatto (riguardo alle sole funzioni di libreria che il nostro codice utilizza in genere sono memcpy
, memcmp
e memset
, quindi qualcosa basato su strcat
o espressioni regolari non è del tutto corretto).
Quindi, alla domanda: per favore qualcuno può offrire alcuni buoni esempi di funzioni che posso usare per dimostrare i test unitari in una sessione live? Una buona risposta nel mio (soggetto a cambiamento) opinione sarebbe probabilmente:
- Una funzione abbastanza semplice da consentire a chiunque (anche a coloro che scrivono codice solo occasionalmente);
- Una funzione che non appare inutile (ad esempio, elaborare la parità o CRC è probabilmente meglio di una funzione che moltiplica due numeri insieme e aggiunge una costante casuale);
- Una funzione abbastanza breve da scrivere di fronte a una stanza di persone (posso trarre vantaggio dai numerosi Appunti di Vim per ridurre gli errori ...);
- Una funzione che accetta numeri, matrici, puntatori o strutture come parametri e restituisce qualcosa di simile, piuttosto che gestire stringhe;
- Una funzione che ha un semplice errore (ad esempio
>
piuttosto che>=
) facile da inserire che funzionerebbe ancora nella maggior parte dei casi ma che si interromperebbe con alcuni casi limite: facile da identificare e correggere con un test unitario.
Qualche idea?
Anche se probabilmente non è pertinente, i test stessi verranno probabilmente scritti in C ++ usando il Google Test Framework: tutti i nostri header hanno già il wrapper #ifdef __cplusplus extern "C" {
attorno a loro; questo ha funzionato bene con i test che ho fatto finora.