SOFTWARE
|
DEBUG
84
C
hiunque sia coinvolto nello sviluppo sof-
tware avrà senza dubbio udito a un certo punto
questa frase: “Non è un bug, ma una caratteri-
stica”: l’origine del problema resta avvolta nel
mistero, ma si tratta certamente di un errore
(bug, appunto) che non era stato rilevato in pre-
cedenza.
Nel dominio hardware esistono strumenti, come
ad esempio gli analizzatori logici, che consentono
agli ingegneri di visualizzare i segnali e qualsiasi
“glitch” (comportamento anomalo) indesiderato.
Nel dominio software la situazione è più com-
plicata, specialmente nel caso di sistemi multi-
thread basati su un sistema operativo real-time
(RTOS) in cui più task concorrenti interagiscono
e condividono risorse limitate, come ad esempio
il tempo di CPU e la memoria.
Si consideri il caso in cui, dovendo eseguire il
campionamento di un sensore ogni 5 ms, occa-
sionalmente si sia riscontrato un ritardo tra i
campioni pari a 6,5 ms e la causa di questo com-
portamento non sia spiegabile in modo semplice.
In un altro caso, alcuni utenti avevano notato un
fenomeno di reset intempestivo dei loro sistemi.
Una possibile causa poteva essere l’interven-
to del Watchdog prima che esso potesse essere
“rinfrescato” dall’applicazione. Il problema era
rappresentato dalla difficoltà di verificare la ve-
ridicità di questa ipotesi.
Sono esempi tipici di come sistemi embedded su
cui gira software complesso possano comportarsi
in un modo non previsto, costringendo i team di
sviluppo a fare speculazioni sulle possibili cau-
se e a procedere spesso in maniera empirica per
cercare di risolvere il problema. Nel caso di mal-
funzionamenti intermittenti o di variazioni delle
prestazioni di un sistema, si tratta di un metodo
“Non è una
caratteristica,
ma un errore”
Un tool come Tracealyzer, in grado
di offrire numerosi punti di vista
sul sistema analizzato, si propone
come un valido complemento agli
strumenti di debug software esistenti
e svolge un ruolo essenziale nello
sviluppo delle odierne applicazioni
embedded
Johan Kraft
Ceo
Percepio AB
EMBEDDED
60 • MAGGIO • 2016
Fig 1(a) – Da questa visualizzazione si evince
che ControlTask potrebbe disabilitare gli inter-
rupts