2009-06-05 9 views
15

Avez-vous des conseils pour tester une application multithread? Je sais, les erreurs de filetage sont très difficiles à attraper et elles peuvent survenir à tout moment - ou pas du tout. Les tests sont difficiles et les résultats ne sont jamais sûrs. Il est certainement préférable de concevoir et de programmer avec soin les modules concurrents.
Néanmoins - je ne veux pas omettre l'aspect du test. L'exécution de beaucoup de threads qui fonctionnent tous sur les mêmes éléments peut parfois provoquer des erreurs de threading.Comment tester la sécurité des threads

Des idées ou des bonnes pratiques pour obtenir un taux de réussite élevé d'erreurs de threads cachées?
(J'utilise .Net/C#)

+0

voici une question similaire: http://stackoverflow.com/questions/111676/unit-testing-a-multithreaded-application –

+0

merci, j'ai eu un Regardez autour de vous, mais je n'ai pas trouvé celui-ci. – tanascius

+0

Oups, commentaire en double. –

Répondre

11

Vous pouvez utiliser quelques bons outils pour tester toutes les questions de threading comme les courses de données, les blocages, les threads bloqués, etc. intel-thread-checker est un tel bon outil.

Vous pouvez également essayer, CHESS par Microsoft Research

+0

Merci pour les liens - Je suis en ce moment en regardant CHESS - les exemples semblent très prometteurs – tanascius

+1

CHESS est certainement le chemin à parcourir, consultez les vidéos sur http://channel9.msdn.com/ ainsi –

5

Essayez d'augmenter le nombre de threads à un grand nombre si possible, même au-delà du nombre qui sera utilisé dans une version. Avec beaucoup de threads exécutant votre programme, une erreur apparaîtra plus souvent car plus de threads sont en cours d'exécution sur le code.

Vérifiez bien vos déclarations, verrous, déverrouillages, dénombrements de sémaphores, etc. et assurez-vous qu'ils ont un sens. Créez un document de test ou une feuille de calcul et, en utilisant vos connaissances sur le code, pensez à l'endroit où des conditions de course ou des impasses peuvent se produire.

Prenez quelques personnes dans le hall et faites un «test d'utilisabilité» (Joel on Software a dit que je pense?). Généralement, les gens qui n'ont aucune idée de ce que fait ou fait votre programme seront capables de le casser facilement.

2

Bonne question. Je fais habituellement des tests de conditions de course en engendrant de nombreux fils et en les laissant effectuer de façon extravagante les opérations que je suspecte être soumises à des conditions de course.

Peut-être que vous pouvez regarder PNUnit - même si c'est probablement un peu différent de ce que vous cherchez. Les auteurs disent qu'ils l'ont construit parce que «nous avions besoin de simuler des centaines de clients contre le même serveur».

-1

code grep pour les appels aux routines de threads. Si des erreurs sont détectées, le test échoue car votre code comporte des bogues multithread.

Si cela réussit, étendez votre recherche aux parties des bibliothèques que vous utilisez, jusqu'à ce qu'elle échoue ou (improbable) soit sécurisée pour les threads (c'est-à-dire monothread). Une fois que vous savez que vous avez des bogues de thread, la partie de test du travail est terminée. Tout ce qui reste est la petite question de trouver et de les supprimer ...

Questions connexes