Marginalia

Trace-based Testingというアイデアに感動した

先日、Trace-based Testingなるテスト技法についてのブログを読んで感動した。(感動しただけでまだ試してはいない。)

何に感動したかというと、トレースによってシステムの振る舞いをテストするというアイデアは、僕がPHPカンファレンス福岡で発表したテストについての基本的な考え方とこの上なくマッチしていて、なおかつ具体的な技法としてトレースをテストに使うという発想は僕の中になかったからだ。あっぱれという感じだ。

PHPカンファレンス福岡では、テストの本質は開発者が安心を得るためのプロセスであり、したがって、「このテストが通るなら本番でも期待通りに動作するはずだ」と思えるようなテストが、テストとしてのパフォーマンスが高いと話した。

Trace-based Testingがもっともよく機能するのは、開発者がデプロイ後にシステムの正常動作を検証するために最も信頼しているものがトレースである場合だろう。つまり、本番デプロイ後にデプロイの成功を確認するのと同じ方法で、デプロイ前のシステムを検証するということだ。まさしくこれは「このテストが通るなら本番でも期待通りに動作するはずだ」と思えるようなテストである。

裏を返せば、Trace-based Testingは、普段トレースを見ていないならばたいして安心に繋がらないだろう。テストのためのトレースになってしまっては意味がない。

日頃、何をもってデプロイが成功したと判断しているか。それが自分が何によって安心を得ているかということである。デプロイ後に手元で動作確認しなければ安心できないなら、Trace-based Testingはそれほど安心につながらないだろう。逆に、手元の動作ではなくリアルユーザーモニタリングによるトレースを強く信頼しているのなら、Trace-based Testingは試して見る価値があるように思う。