Spec-Zone.ru › Kotlin 2

Стратегии тестирования

Lincheck предоставляет две стратегии тестирования параллельных структур данных: проверку модели и стресс-тестирование.

В этой статье вы узнаете, чем отличаются эти стратегии и что следует учитывать при выборе стратегии тестирования.

Проверка модели

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

Чтобы тестировать структуру данных с помощью проверки модели, объявите тестовую функцию с помощью ModelCheckingOptions():

    @Test
    fun test() = ModelCheckingOptions().check(this::class)

При использовании стратегии проверки модели Lincheck вставляет явные инструкции переключения потоков в точках доступа к общей памяти (read и write) или в точках синхронизации, например при захвате и освобождении блокировки, park/unpark, wait/notify и других.

Контроль переключения потоков позволяет Lincheck:

  • Детерминированно исследовать различные возможные расписания выполнения программы.

  • Предоставлять подробные трассировки выполнения.

В настоящее время для проверки модели Lincheck предполагает, что при выполнении используется модель последовательной согласованности памяти. Это означает, что Lincheck не моделирует и не может обнаружить ошибки, связанные с переупорядочиванием инструкций, поведением кэша памяти и другими подобными эффектами, возникающими при ослабленной модели памяти Java.

Дополнительную информацию см. в разделе Проверка модели.

Стресс-тестирование

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

Чтобы использовать стресс-тестирование, объявите тестовую функцию с помощью StressOptions():

    @Test
    fun stressTest() = StressOptions().check(this::class)

В отличие от проверки модели, Lincheck не контролирует и не отслеживает переключения потоков. Благодаря этому стресс-тестирование выполняется быстрее и Lincheck не требуется делать какие-либо предположения о модели памяти. Однако при стресс-тестировании тесты нельзя воспроизвести, а Lincheck не может предоставить трассировку выполнения.

Выбор стратегии

При выборе стратегии учитывайте следующее:

Проверка модели

Стресс-тестирование

Скорость

Медленнее.

Быстрее.

Воспроизводимость

Тесты дают одинаковые результаты, если входные данные не изменились.

Результаты тестов могут различаться, поскольку расписания потоков могут меняться от запуска к запуску.

Предположения

  • Предполагает использование модели последовательной согласованности памяти.

  • Не обнаружит ошибки, вызванные некорректным поведением за пределами этой модели.

  • Не делает никаких предположений о модели памяти.

  • Может обнаружить любое некорректное поведение независимо от его причины.

Подробность

Сообщает о параллельном сценарии и трассировке выполнения, которые привели к некорректному поведению.

Сообщает только о параллельном сценарии.

Охват стандартной библиотеки

  • Не моделирует поведение некоторых возможностей стандартной библиотеки, например слабых ссылок.

  • Не обнаружит ошибки, вызванные использованием таких возможностей.

Может обнаружить ошибку, вызванную использованием любой возможности.

Что дальше

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

См. также

  • Генерация аргументов операций

  • Настройка параметров выполнения операций

  • Проверка гарантий неблокирующего прогресса

  • Определение последовательной спецификации алгоритма

15 августа 2026 г.
Как тестировать структуры данныхНастройка стратегии тестирования

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/lincheck-testing-strategies.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API