Test della sicurezza del thread

5

Supponiamo che tu abbia una funzione f che è o contiene una sezione critica. Come testare l'unità che solo un thread può eseguirlo contemporaneamente, che non ha condizioni di competizione e che non causa un deadlock, ecc ...?

    
posta Crazy Eddie 20.05.2012 - 18:04
fonte

4 risposte

6

Non puoi. I test possono solo dimostrare che non hai trovato bug, non che nessuno esiste, e in presenza di codice multi-thread, direi che è quasi inutile. Non è possibile verificare come si comporta la funzione quando il sistema operativo lo modifica o mette in pausa l'esecuzione o uno qualsiasi di mille eventi esterni che possono influire sulla pianificazione del thread e sul suo comportamento.

Devi, almeno in modo informale, dimostrare la funzione corretta.

    
risposta data 22.05.2012 - 10:16
fonte
2

Non puoi fare un test "strong", ma puoi mitigare il rischio eseguendo un test "debole".

Parametrizza f per prendere qualche altro codice se passato. Poi nel test, passa il codice per un contatore di thread, un sonno e un'affermazione che il contatore di thread non ha mai avuto sopra 1. Quando eseguivo il test userei 5 -10 discussioni. Ristrutturerei anche una funzione senza una sezione critica e assicurarmi che il contatore dei thread fosse al di sopra 1. L'idea sarebbe di assicurarsi che la serializzazione fosse solo il risultato della sezione critica.

    
risposta data 22.05.2012 - 09:07
fonte
1

Aggiungi addormenta intorno alle operazioni entro f e aggiungi un parametro per permetterti di controllarne la lunghezza. È quindi possibile eseguire il test dell'unità come normale, ma con diversi schemi di pianificazione.

    
risposta data 20.05.2012 - 18:16
fonte
0

Il TDD è inutile negli scenari multi-thread. Non testate la sicurezza del filo, lo dimostrate o contro-provate, dolorosamente ...

    
risposta data 23.05.2012 - 23:26
fonte

Leggi altre domande sui tag