La prossima settimana parlerò con il mio dipartimento del test unitario e dello sviluppo guidato dai test. Come parte di questo, mostrerò alcuni esempi reali di alcuni codici che ho scritto di recente, ma vorrei anche mostrare alcuni esempi molto semplici che scriverò nel discorso.
Ho cercato sul web buoni esempi, ma ho avuto difficoltà a trovare quelli che sono particolarmente applicabili alla nostra area di sviluppo. Quasi tutto il software che scriviamo è un sistema di controllo integrato che funziona su microcontrollori di piccole dimensioni. C'è un sacco di codice C che è facilmente applicabile ai test unitari (parlerò dei test unitari sul PC piuttosto che sul bersaglio stesso) fintanto che rimani libero dal livello "inferiore": le cose che parlano 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 Dive Into Python) e poiché non usiamo quasi mai stringhe, questo non è davvero adatto (riguardo alle uniche funzioni di libreria che il nostro codice utilizza in genere sono memcpy
, memcmp
e memset
,strcat
o le espressioni regolari non sono del tutto esatte).
Quindi, alla domanda: per favore qualcuno può offrire alcuni buoni esempi di funzioni che posso usare per dimostrare unit test in una sessione live? Una buona risposta secondo la mia opinione (soggetta a modifiche) sarebbe probabilmente:
- Una funzione abbastanza semplice che chiunque (anche chi scrive solo occasionalmente codice) può capire;
- Una funzione che non appare inutile (cioè elaborare la parità o CRC è probabilmente migliore di una funzione che moltiplica due numeri insieme e aggiunge una costante casuale);
- Una funzione che è abbastanza breve da scrivere davanti a una stanza di persone (potrei approfittare dei molti appunti di Vim per ridurre gli errori ...);
- Una funzione che accetta numeri, matrici, puntatori o strutture come parametri e restituisce qualcosa di simile, anziché gestire le stringhe;
- Una funzione che presenta un semplice errore (ad es.
>
Anziché>=
) che è facile da inserire e che comunque funzionerebbe nella maggior parte dei casi ma si spezzerebbe con un caso particolare: facile da identificare e correggere con un test unitario.
qualche idea?
Anche se probabilmente non è pertinente, i test stessi saranno probabilmente scritti in C ++ usando Google Test Framework: tutte le nostre intestazioni hanno già il #ifdef __cplusplus extern "C" {
wrapper attorno a loro; questo ha funzionato bene con i test che ho fatto finora.