分散アルゴリズムのためのテスト手法
Disclaimer
先行研究をあまり調査していないです
用語や自分の理解など間違っている可能性があります
分散アルゴリズムのテストが難しいという問題
タイムアウトのテストとか時間がかかる
1秒タイムアウトなら1秒まったりしないといけない
ネットワークを介するので故障をわざと引き落としたりするのも面倒
IOが挟まりがち
とにかく状態が多いのでレアケースが思いつかない
実行時間によっては確率で落ちるテストができたりする
モデル検査
プロトコルには使えるけど、結局実装には使えない (はず)
モデルと実装のギャップはどうやって埋める?
網羅的なので時間がかかる (研究室時代のイメージ)
理想
ローカルで完結する
故障をさせられる
時間もかけない
書きやすい
あるレイヤだけテストできる
確率で落ちるテストがない
再現できる
アイデア
現在時刻や時間の経過に関するところの実装を入れ替えられるようにする
通信路の実装も入れ替えられるようにしておく
例: 相手のハートビートメッセージが途絶えたら死んだとみなす
1秒おきにハートビートメッセージを送るとする
途絶えた=10秒ハートビートメッセージが来なかった
途絶えたら自分も送るのをやめる
途絶えたと思ったのにハートビートメッセージが来たら、?
例が悪いかも (複雑)
メリット
1秒のタイムアウトでも1秒待つ必要がなくなる
実際どうやるか
わからないところ
いつかなになにが成り立つみたいなのはどうするか
タイムアウトを設定して何秒後までになにが成り立つみたいなのは書けると思うけど、結局確率で落ちるテストになってしまう
タイムアウトを十分大きくしておけばまあいいかもしれないが