Skip to content

Lincheckガイド

Lincheckは、JVM上の並行アルゴリズムをテストするための実用的で使いやすいフレームワークです。並行テストを記述するためのシンプルかつ宣言的な方法を提供します。

Lincheckフレームワークを使用すると、テストの実行方法を記述する代わりに、検証するすべての操作と必要な正しさのプロパティを宣言することで、_何をテストするか_を指定できます。その結果、典型的なLincheck並行テストは約15行しか含まれていません。

操作のリストが与えられると、Lincheckは自動的に次のことを行います。

  • ランダムな並行シナリオのセットを生成します。
  • ストレステストまたは有界モデル検査のいずれかを使用してそれらを検査します。
  • 各呼び出しの結果が必要な正しさのプロパティを満たしていることを検証します(線形化可能性がデフォルトです)。

Lincheckをプロジェクトに追加する

Lincheckのサポートを有効にするには、対応するリポジトリと依存関係をGradle設定に含めます。build.gradle(.kts)ファイルに以下を追加します。

kotlin
repositories {
    mavenCentral()
}
 
dependencies {
    testImplementation("org.jetbrains.kotlinx:lincheck:2.39")
}
groovy
repositories {
    mavenCentral()
}

dependencies {
    testImplementation "org.jetbrains.kotlinx:lincheck:2.39"
}

Lincheckを探索する

このガイドでは、Lincheckフレームワークに触れ、最も有用な機能を例とともに試すことができます。Lincheckの機能をステップバイステップで学びましょう。

  1. Lincheckで最初のテストを記述する
  2. テスト戦略を選択する
  3. 操作の引数を設定する
  4. 一般的なアルゴリズムの制約を考慮する
  5. 非ブロッキングな進行保証についてアルゴリズムをチェックする
  6. アルゴリズムの逐次仕様を定義する

追加リファレンス

  • 「Kotlinコルーチンにおける並行アルゴリズムのテスト方法」by Nikita Koval: 動画。KotlinConf 2023
  • 「Lincheck: JVMでの並行性のテスト」ワークショップ by Maria Sokolova: パート1パート2。Hydra 2021