E2Eテスト導入から1年半が経過した。サービス品質の目的に対してE2Eテストが守ってきたものは大きく、大規模な実装変更のガイドラインとして機能した点がもっとも分かりやすい効果であった。
一方、E2Eテストを継続的にメンテナンスし続けることを通じて、品質の概念そのものが書きかわってきた。
品質を定量的にとらえる場合、シックスシグマが象徴的なアプローチと言える。要するに、パーツの変更や経時的な変化にさらされても動作のバラつきが少ない、減っていくことが理想という見方だ。
他に良い指標がないためシックスシグマはベンチマークであり続けるのだろうが、計測のスケールによっては機能しないと考えるようになった。
少なくとも、素朴なE2Eテストの実装ではうまく評価できないケースに直面してきた。
WebサービスのE2Eの難点
品質評価の観点でE2E方式の難しいポイントは、適切なコードであっても不規則にエラーを検出することだ。
E2Eでは実際のブラウザでWebサービスにアクセスして利用するのだが、プログラムによる自動実行が高速動作することに伴うテストエラーが頻発する。
コード上の処理が適切でないケースもあるためケースごとに確認するのだが、分析のためにスクリーンショット取得を追加すると正常に動作することも多い。
言いかえれば、コードに異常はないケースであっても、テスト自体をゆっくり動作させるようなチューニングを追加するよう迫られる。
これが高速操作されると動作がクラッシュするということなら修正する意義はまだあるのだが、じっさいには短時間のアニメーション効果によりボタン位置がずれたのでツール操作対象がずれて押せない、というシナリオが多い。
Seleniumが描画の完了を待つ機能を持っていないということは大きな要因ではある。ただ、それだけではない。
ブラウザじたいに難がある
E2Eのトラブルはバリエーションがあるのだが、昨日、コードを一切変更することなくエラーが収束したケースに直面し、根本的に見方を改めるに至った。
つまり、ツールセットのブラウザをバージョンアップしたらエラーなく動作することがある。
もう少し視野を広げると、今回のケースはある時点でブラウザをバージョンアップしたことにより生じたエラーだったのだ。
重要なのは「新しいツールを使えば環境から受ける悪影響が減る」という見方は完全に幻想だという点。
バージョンアップにより描画性能がデグレードし、適切なコードであっても高速操作時の挙動不安定が増幅する、ということの方が重要なのだ。
評価しえぬものとのミックス
ブラウザのバージョンによって挙動が変わるということは、Seleniumが評価しているのはWebサービスではなくブラウザの品質である。
しかも、エラーになる箇所は自分が書いたコードではなく利用しているライブラリが提供しているアニメーション効果なのだ。
そもそも、Seleniumの動作じたいもリアルからかけ離れている。
ここで人間性を取りもどして言えば、徹頭徹尾ばかげた話とも言える。
ただシックスシグマを念頭に置くなら、常用の条件よりも厳しい環境でこそバラつきを低減したいというチャレンジとして捉えるべきなのだ。
Seleniumが示唆しているのは、より厳しい条件でバラつき低減を目指すなら、ライブラリやブラウザに手を入れていくべき、ということだろう。
それは計測対象の操作に占める処理量のウェイトが大きいのはブラウザだからという事実から来る。
一方で実務の現実味から考えれば、ブラウザ開発に割って入る余力はどう考えても出ない。
けっきょくのところ、Seleniumが測っているのは評価しえぬものとの混合物であり、ヴィトゲンシュタインなら沈黙せざるを得ないというアドバイスを提示しそうなものだ。
動作前提を絞る
ひとつ分かったことは、動作しやすいブラウザと動作しないブラウザがあり、動作するバージョンを確保しておくとヒントが増えるということだ。
実務上は動作しやすいバージョンを活用することにするが、その方針の意味は現時点では結論づけていない。
おそらく多くのエンジニアは、動作環境を制御してオールグリーンになることが「正しい」選択であると考えるだろう。
僕はそれはもっとも浅はかな捉え方だと思う。結論づけたいという願望そのものが誤っている。
シックスシグマの理想からすれば、動作しないはずのブラウザで操作させることは目標であり続けるのだが、それは良いマイルストーンとは言えない。
逆に、一部の動作しやすい環境で正常動作したとしても、それは別の環境でどこまで動作するかという点に何も保証を与えていない。
おそらく現在のE2E実装は、リアルな人間による使われ方を想定した極限域といった適切な計測レンジをターゲットにできていない。
テストケースを個別にチューニングするのではなく、風洞実験のように全体のリアリティを向上することの方が大事になるはずだ。
居つくな
分かる、という現象にはいくつかのモードがあり、このE2Eの事例は行動原理の優劣にヒントを提供すると捉えている。
縮小均衡からの脱却で、複数のプロダクトを予断なく交換するアプローチを強調した。E2Eにも同じパターンを読みとれるだろう。
サンクコストが説明するとおり、やり方を変えることにはコストが伴うため、見かけ上は合理的な選択ではない。
それでも僕が代替実装をとるのは、エンジリアリングとはまったく無関係な武道の基本挙動から来ている。
武道は「居つく」状態に着目し、居つかない行動原理を維持するように組み立てられている。
居つくとは、相対的な静止状態の一部を指している。典型的な棒立ちだけでなく、直前動作の延長のような単調な動きも、居つく状態に含むのではないかと思う。
消極的な挙動をとると的を定めやすくなるためサバイバルの点で不利である、という実践の知見の上になり立っている。
あらゆる動作には攻防一体の効果があるため、闇雲であっても何らかの型を実行すれば局面を動かせる。操作には認識を改善する効果がある。
状況を一般化すると、局所的カオスは広く存在していて、カオスそのものは評価できる対象ではないのだと思う。
E2Eの例も、視野がミクロになり過ぎていることによりカオス構造を直接観測する図式になってしまっている。
カオスの挙動を予断をもって評価することは間抜けだが、人間は分かったような気になることを欲するため、居つく挙動になる。
武道の不文律はカオスに呑まれることを説いている。場の影響を受けて流されながら観測することにより、相対的な観測対象からカオスの一部を除去できる、という構造があるように思う。
リサーチ不足でこの点に言及した研究を確認していないが、観測装置じたいが場の影響を受けるようなモデルを考えると、静止座標から観測するモデルと比較して交差エントロピーが減る例が存在するのだろう。
行動原理を意識する際、折にふれて宮本武蔵の『五輪書』が思い出される。
宮本武蔵のアドバイスは随所で「よくよく工夫あるべし」といった結論になっている。それ以外のアプローチはない、ことの強調に読める。
語りえぬカオスにとり囲まれた際に、演繹的には沈黙せざるを得ないのだとしても、居つきを排した挙動の主観から帰納的に知覚できるパターンは確かに存在する。