2009-06-05 15 views
15

Hai qualche consiglio su come testare un'applicazione multithread?Come testare la sicurezza del thread

Lo so, gli errori di threading sono molto difficili da catturare e possono verificarsi in qualsiasi momento - o non del tutto. I test sono difficili ei risultati non sono mai sicuri. Certamente è meglio progettare e programmare attentamente i moduli concorrenti.
Tuttavia, non voglio escludere l'aspetto del test. Quindi, l'esecuzione di un numero elevato di thread che funzionano tutti sugli stessi elementi può talvolta provocare errori di threading.

Eventuali idee o best practice per ottenere un alto tasso di errori di thread nascosti?
(Sto usando .Net/C#)

+0

ecco una domanda simile: http://stackoverflow.com/questions/111676/unit-testing-a-multithreaded-application –

+0

grazie, ho avuto un guardati intorno, ma non l'hai trovato. – tanascius

+0

Oops, commento duplicato. –

risposta

11

È possibile utilizzare alcuni buoni strumenti per testare tutti i problemi di threading come corse dati, deadlock, thread bloccati ecc. intel-thread-checker è uno strumento così buono.

Si può anche provare, CHESS da Microsoft Research

+0

Grazie per i link - Sto guardando ora a CHESS - gli esempi sembrano molto promettenti – tanascius

+1

CHESS è sicuramente la strada da percorrere, guarda anche i video su http://channel9.msdn.com/ –

5

Se possibile, aumentare il numero di thread su un numero elevato, anche oltre il numero di thread che verranno utilizzati in una release. Con molti thread che eseguono il tuo programma, un errore apparirà più spesso poiché più thread sono in esecuzione sul codice.

Controlla le tue dichiarazioni, blocchi, sblocca, conteggi di semafori, ecc. E assicurati che abbiano senso.

Creare un documento di prova o un foglio di calcolo e, utilizzando la conoscenza del codice, pensare a dove potrebbero verificarsi condizioni di competizione o situazioni di stallo.

Afferra alcune persone dalla sala e fai un 'test di usabilità del corridoio' (Joel on Software ha detto che penso?). Generalmente, le persone che non hanno idea di cosa il tuo programma/riguardi saranno in grado di romperlo facilmente.

2

Buona domanda. Di solito collaudo per condizioni di gara generando molti fili e lasciando che eseguano selvaggiamente le operazioni che sospetto possano essere soggette a condizioni di gara.

Forse si può guardare PNUnit - anche se è probabilmente un po 'diverso da quello che stai cercando. Gli autori dicono che l'hanno costruito perché "dovevamo simulare centinaia di client contro lo stesso server".

-1

codice grep per le chiamate alle routine di threading. Se ne viene trovato uno, fallisce il test, poiché il codice ha bug multi-thread.

Se si passa, espandere la ricerca alle parti delle librerie che si utilizzano, fino a quando non riesce o (improbabile) è dimostrato thread-safe (vale a dire single-threaded).

Una volta che si conoscono i bug di threading, la parte di test del lavoro è terminata. Tutto ciò che rimane è la piccola questione di trovarli e rimuoverli ...

Problemi correlati