Рекомендации по тестированию многопоточного кода или обеспечению того, что код является поточно-ориентированным - PullRequest
6 голосов
/ 15 декабря 2010

Существуют ли какие-либо рекомендации по тестированию многопоточного кода (кроме как навести кучу потоков на проблему и скрестить пальцы).

Я в основном ищу хорошие способы проверки на повреждение данных, взаимоблокировки и другие проблемы параллелизма. По сути, я хочу иметь возможность доказать, что код является потокобезопасным с помощью теста.

Существуют ли какие-либо фреймворки в Java, которые позволяют легко писать тесты для многопоточного сценария?

Ответы [ 2 ]

3 голосов
/ 15 декабря 2010

Я написал много многопоточного кода и никогда не находил ничего такого, что могло бы легко проверить наличие ошибок правильности параллелизма, которые я не предсказал.Большую часть времени мне приходится думать о сценарии, в котором он может сломаться, и о том, как я могу доказать его правильность в экстремальной версии этого (часто используя CountDownLatches или аналогичные, чтобы согнуть его так, как я думаю, он может сломаться.

Обязательно используйте FindBugs и аналогичные инструменты статического анализа, чтобы помочь найти потенциальные проблемы, и определенно сделайте ваши проблемы параллелизма как можно более простыми. Проблемы с общей изменяемой памятью трудны, но на самом деле довольно легко переопределить проблему, чтобы вы неподелиться изменяемым состоянием, только неизменяемым. Это делает жизнь намного проще. О, и прочитайте JCiP - затем прочитайте его снова. И пересмотрите свой код.

0 голосов
/ 15 декабря 2010

GroboUtils, http://groboutils.sourceforge.net/testing-junit/using_mtt.html, предоставляет некоторые утилиты JUnit для тестирования потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...