2009-06-05 20 views
15

Czy masz jakieś porady, jak przetestować aplikację wielowątkową?Jak testować bezpieczeństwo wątków

Wiem, że błędy gwintowania są bardzo trudne do złapania i mogą wystąpić w dowolnym momencie - lub wcale. Testy są trudne, a wyniki nigdy nie są pewne. Z pewnością najlepiej jest dokładnie zaprojektować i zaprogramować moduły współbieżne.
Niemniej jednak - nie chcę pominąć aspektu testowego. Tak więc uruchamianie wielu wątków, które pracują nad tymi samymi elementami, czasami może wywoływać błędy wątków.

Wszelkich pomysłów lub najlepszych praktyk, aby uzyskać wysoki wskaźnik błędów ukrytych wątków?
(Używam .Net/C#)

+0

Oto podobne pytanie: http://stackoverflow.com/questions/111676/jednostka-testowanie-użytkownik-aplikacja –

+0

dzięki, miałem rozejrzyj się, ale nie znalazłeś tego. – tanascius

+0

Ups, zduplikowany komentarz. –

Odpowiedz

11

Możesz użyć kilku dobrych narzędzi do przetestowania wszystkich zagadnień gwintowania, takich jak wyścigi danych, zakleszczenia, zatrzymane wątki itp. intel-thread-checker jest jednym z takich dobrych narzędzi.

Można również spróbować, CHESS przez Microsoft Research

+0

Dzięki za linki - teraz patrzę na CHESS - przykłady wyglądają bardzo obiecująco. – tanascius

+1

CHESS to zdecydowanie najlepszy sposób na obejrzenie filmów na http://channel9.msdn.com/ –

5

Spróbuj zwiększyć liczbę wątków do dużej liczby, o ile to możliwe, nawet jeśli nie będzie ich więcej niż w wersji. Z wieloma wątkami uruchomionymi w twoim programie błąd będzie pojawiał się częściej, ponieważ więcej wątków jest uruchamianych nad kodem.

Podwójne sprawdzanie deklaracji, blokad, odblokowań, liczników semaforów itd. I upewnienie się, że mają one sens.

Utwórz dokument testowy lub arkusz kalkulacyjny i korzystając z wiedzy o kodzie, zastanów się, gdzie mogą wystąpić warunki wyścigu lub zakleszczenia.

Złap kilka osób z hali i wykonaj test użyteczności korytarza (Joel na Software powiedział, że myślę?). Ogólnie rzecz biorąc, ludzie, którzy nie mają pojęcia o tym, co robi/zamierza twój program, będą mogli łatwo go złamać.

2

dobre pytanie. Zwykle testuję warunki wyścigowe, tworząc wiele wątków i pozwalając im wykonywać operacje, które, jak podejrzewam, mogą podlegać warunkom wyścigu.

Być może możesz spojrzeć na PNUnit - chociaż prawdopodobnie różni się nieco od tego, czego szukasz. Autorzy twierdzą, że go zbudowali, ponieważ "musieliśmy symulować setki klientów na tym samym serwerze".

-1

kod grep dla połączeń z wątkami. Jeśli jakieś zostaną znalezione, zakończ test, ponieważ twój kod zawiera wiele błędów.

Po przejściu należy rozszerzyć wyszukiwanie do części używanych bibliotek, aż do ich niepowodzenia lub (mało prawdopodobne) zostanie udowodnione, że są bezpieczne dla wątków (tj. Jednowątkowe).

Gdy już wiesz, że masz wątki błędów, część testowa zadania jest wykonywana. Pozostaje tylko mała kwestia znalezienia i usunięcia ich ...

Powiązane problemy