テスト環境でも本番環境に近いデータを用意しようぜ
今回は、テスト環境にやばいデータが大量に生息していたせいで、えらい目にあった話です。
TL;DR
- テスト環境のデータがヤバすぎると営業先で営業が詰められる
- テスト環境のデータが雑すぎるとバグに気付きづらい
- データが偏る事による不都合
- 可能な限り本番に近いデータを用意しよう
テストデータに泣かされた日
昔々、僕がまだ企画職としてとある企業で働いていた頃のこと。担当するWEBサービスに追加された新機能の使い方を説明するために、それはそれは怖いお客さんを訪問したことがありまして。
まぁとにかく怖いお客さんで隙あらば「それロジカルじゃないよね?」とか「で、結論は?」とか「要はウチからお金欲しいんでしょ?」と詰められるし、売上依存度も高いので機嫌を損ねられません。なのでその日もビクビク震えながら致死量に近いGabaをカバンに詰めて訪問し、早速サービスのデモを始めました。
ワイ「で、このボタンをクリックしていただくと...」
客「使い方はいいから。結論は?」
ワイ「ヒィッ。えっと...事前に保存しておいた条件を満たすユーザーが登録したら通知が届く機能です。目的としては...」
客「話はいいから。使い方を見せて」
ワイ「ヒィッ」
こんな凍りついた空気のなか条件を満たすユーザの一覧画面をお客さんに見せたところ、その画面に表示されたのは...
- 今日も元気に やる夫(1192歳)
- 1億円 くれ助(7歳)
- Vitiguso Taletter(38歳)
空気の重さでモニターが軋む音がしました。マジで勘弁してくれと思いました。
絶望的な気持ちの帰路に営業担当に愚痴ってたら「別の訪問先でも同じこと起きた」「俺の時はNoguso Taletterが出てきた」「Talleter一族がひとまず全員ヤバい」という話になり、部長会議の結果、緊急対応でテスト環境のデータを作り直すことになりました。
一部上場企業の部長会議で「客先でノグソ・タレッターが表示されてしまうと...」と協議されている様は大変シュールでした。よくこの人たち笑わずにこんな名前を呼べるなという畏敬の念を抱くと同時に、テスト環境のデータをふざけて作りすぎるとここまで大事になるんだな、と貴重な(?)学びを得ました。
テスト環境とはいえ、いつ投資家や客先のプレゼンに使うか分かりません。ちゃんと真面目に作りましょう
テスト環境のデータが雑すぎるとバグに気づけない
例えばマッチングアプリを作っていたとして「User1」「User2」みたいなユーザーだと、仮に実装ミスで異性ではなく同性が表示されてしまっていても気付きづらくなります。
「いやいや、それは自動テストで考慮されてるでしょ」
と思うかもしれませんが、モンキーテスト中にたまたま複合的な条件を満たさないと発見できなかったり、年末年始にしか発生しない期間限定のバグ等、全てのバグを開発者が事前に想定してテストケースで回避するのは不可能です。
テストデータに整合性があれば「あれ?なんで自分は男性なのに男性のプロフィールが流れてくるんだ?」「あれ?なんで過去に『いいね』を送った人がまだ一覧に表示され続けているんだ?」と、たまたまバグを見つけられる確率が上がるのではないでしょうか。
勿論、テスト環境で人間がポチポチする手動テストは精度も速度も頻度も低いので、性能保証の観点からそこまで頼れるテスト手法ではないのですが、あえてそのテストの効果を捨てる必要はないのではないか?と思った次第です。
テストデータの生成に関しては(一部やばいのもあったけど)様々な便利ライブラリが用意されているので、人名を性別指定で生成したり、年齢を現実的な範囲に留めたり、多少は意味のあるテストデータを生成した方が良いのではないでしょうか。
データが偏ることによる不都合
欲を言えば秘匿情報を除いて本番環境のデータをテスト環境にも活用したいところです。
テスト環境のユーザー名が全員UserXXだとインデックスの利き方も変わってくるでしょうし、本番相当のデータ数が投入された時に初めてページネーションが崩れることに気づくとか、テスト環境には最大200文字のデータしか入っていないから本番環境で1000文字入力された時の崩れに気づかなかったとか。
実際の本番環境とは異なる状況を意図的に作っている場合を除いて(負荷テスト環境とか)、基本的にテストデータを本番環境のデータに近づけておいた方が想定外のバグは減らせると思うんですよね...秘匿情報をマスキングするなり除外してDumpしたデータを突っ込む程度の手間ですし、そこまで大変な作業でもないのかなと
蛇足ですが過去「私が表示されていたらバグです。開発者に連絡してください」などデバッグ的な意味を持つユーザーを意図的に作ったことがあります。こういうデータはモンキーテスト中のバグ発見の確率を高めてくれるかな?と期待して許容していたので、必ずしも本番と瓜二つのデータでなければいけないわけではないと感じています。
まとめ
ノグソ・タレッターは止めてくれ
Discussion
良記事ありがとうございます!w
これだけで笑えました。あるあるですよね。私も大学時代のアルバイトでやらかしたことがあります。
写真のプレイスホルダーとして自分のスマホに入ってた、代々木公園にいた白塗りの大道芸人の写真を使ったら「狂ったおっさんは、これなんや?」と上司に怒られました。
私だけの?プラクティスとしては、一発でデモ用データが用意されるスクリプトを準備していました。
よく作るのは、まずデータを全部消して、20人ぐらいのデモユーザーと付随するデータが登録されるスクリプトです。それをデモで見せたい観点やテスト目的によってメンテしますね。
死ぬほど笑わせてもらいました。癒やしをありがとうございます