Как создать тестовую среду для многопоточного приложения - PullRequest
6 голосов
/ 14 октября 2010

All,

Недавно я разработал код, который предположительно является потокобезопасным классом.Теперь я сказал «предположительно» потому, что даже после использования синхронизированных блоков, неизменяемых структур данных и параллельных классов я не смог протестировать код в некоторых случаях из-за среды планирования потоков JVM.то есть у меня были только контрольные примеры на бумаге, но я не мог воспроизвести ту же среду тестирования.Есть ли какие-то конкретные рекомендации или что-то еще, что могут рассказать опытные участники о том, как тестировать многопоточную среду.

Ответы [ 4 ]

10 голосов
/ 14 октября 2010

Во-первых, вы не можете гарантировать только с помощью тестирования, что ваш класс полностью поточнобезопасен .Какие бы тесты вы ни выполняли, вам все равно нужно , чтобы ваш код был проверен как можно большим количеством опытных глаз, чтобы вы могли обнаружить тонкие проблемы параллелизма.тестовые сценарии, чтобы попытаться охватить все возможные сценарии синхронизации между потоками , как вы это сделали.Для идей по этому (и для проектирования потоковобезопасных классов в целом) рекомендуется прочитать Параллелизм Java на практике .

Кроме того, вы можете запустить стресс-тесты выполнение нескольких потоков одновременно в течение длительного периода времени.Количество потоков должно быть больше разумного предела, чтобы частые конфликты потоков происходили часто - это увеличивает шансы потенциальных ошибок параллелизма проявиться со временем.

1 голос
/ 14 октября 2010

Мы используем GroboUtils для создания многопоточных тестов.

1 голос
/ 14 октября 2010

Кроме того, я бы рекомендовал вам использовать покрытие кода измерительными инструментами и установить в качестве своей цели высокий стандарт. Например, установите высокую цель для измененного покрытия условий / решений.

0 голосов
/ 16 октября 2010

Если у вас есть код, который вы планируете протестировать, чтобы сделать его надежным, то сделайте его однопоточным.

Потоки должны быть зарезервированы для кода, который либо не требует особой работы, либо достаточно прост для статического анализа и проверки на правильность без тестирования.

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