Читать книгу Полезные конспекты книг и авторские заметки по информационным технологиям. Без формул онлайн
Изучать базовые алгоритмы, разбираться в решениях.
Избегать использования нескольких методов одного совместно используемого объекта.
Избегать зависимостей между синхронизированными методами.
Или использовать 3 стандартных решения:
– блокировка на стороне клиента;
– блокировка на стороне сервера;
– адаптирующий сервер.
Код не должен перегружаться лишними синхронизированными объектами, так как блокировки создают задержки и увеличивают затраты ресурсов.
Синхронизированные секции должны иметь минимальные размеры.
Корректное завершение не может быть бесконечным ожиданием потока.
Реализовать логическую изоляцию конфигураций многопоточного кода.
Протестировать программу с количеством потоков, превышающим число процессоров.
Применять инструментовку кода для повышения вероятности сбоев.
Сначала отлаживать основной код.
Не игнорировать системные ошибки, считая их случайными разовыми сбоями.
Убедиться, что сам код работает вне многопоточного контекста, созданием POJO-объектов, вызываемых из потоков.
Реализовать многопоточный код так, чтобы он мог выполняться в различных конфигурациях: с разным числом потоков, тестовых заменителей, времени работы тестов, количеством повторов тестов.
Найти средства измерения производительсноти системы в разных конфигурациях.
Реализовать систему так, чтобы количество программных потоков могло легко изменяться, в том числе во время работы системы, в том числе с автоматическим регулированием количества потоков.
JVM не гарантирует вытесняющей многопоточности.
Протестировать систему во всех средах, которые могут использоваться для ее развертывания, начиная с ранней стадии.
Заставить поток исполняться по разным путям в тесте методами object. wait (), object.sleep (), object. yield (), object.priority () – инструментовка кода.
Автоматическая инструментовка с использованием Aspect-Oriented Framework, CGLIB, ASM, ConTest.
Суть тестирования – сломать предсказуемость пути выполнения.
Использовать стратегию случайного выбора пути выполнения для выявления ошибок.