毎回悩むところのメモです。
皆さん、どんな感じでされているのでしょう?
ステージングと本番で同じテストをすべき?
もちろんテストが自動化されていて、ステージングでも本番でも同じテストができる、というのが理想なのですが、そういった仕組みが整っていない場合、私は基本、本番はスモークテスト程度にしています。
最低限コレだけは死守したいというレベル、例えば EC サイトだったら注文できる、といったレベル感です。
もちろん本番でも綿密にテストするに越したことは無いのですが、それだったらステージングのテストの意味が無いような気がします。
ただし、ステージングと本番で環境が違うことも結構あるので、その部分は目を凝らしてしっかりテストを行っています。
環境が違うことで起きるあるある (PHP 編)
- 本番は IP アドレスが違うので通信先にブロックされた
- リリース前に疎通確認は基本ですね
- 本番で必要なモジュール (sftp 関数など) が入っていなくてエラー
- ステージングに誰かがこっそり入れていて、それが本番にも入っているものだと思って開発・・
- 本番で curl がコケる
- 古いサーバーで古い PHP を動かした時によく発生
- 本番でパーミッションの設定がされていなくてエラー
- バッチファイルの実行権限とかログフォルダの書き込み権限とか
どのブラウザでテストする? (MVC の V を変更した場合)
当たり前かと思いますが、まずはその Web サイトの対応ブラウザを決めて、部やチームで共有するのが大切ですね。
それに基づいて機械的にチェックするのがポイントで、テスト中にこのブラウザでも見たほうが良いかな?とかそういう邪念が沸き起こってテストに集中できなくなるのを防止します(笑
参考までに、私は大体以下で行っています。
SP (実機で)
- iPhone Safari
- Android Chrome
PC
- Windows Chrome
- Windows FireFox
- Windows IE
- Mac Chrome
- Mac Safari
本来ならば上記に OS やブラウザのバージョンを明記すべきだと思うのですが、所々の都合で (そこまでテストに時間をかけられない、手元に端末がないなど) 上記の最新版という形でやっています。
タブレットやアプリ内ブラウザ (Line とか facebook とか)も確認した方が良いなあと思っていますが、やっていないことが多いです。。
どこまでテストを自動化する?
再利用性が高いテストは Jenkins + Selenium や puppeteer 等で自動化しています。
内容的にはスモークテストやレグレッションテストが多いと思います。
また、手でやるとミスしそうなテストも自動化しています。
例えば EC サイトだと小計と送料と手数料を足した金額からクーポンの割引額を引いて合計がちゃんと合っているか計算する、などの場合です。
逆に 1 年に 1 - 2 回程度の頻度が低いテストは、あまり自動化するメリットが無いかもしれません。
感覚的で古い考えかもしれませんが、手でテストして気づくことも多いです。
特に一人で要件定義からリリースまで行っている場合は、開発時に気づかなかったけど、ステージングのテスト時に手でやって気づくことも多いです。。
その Web サイトにとって死守すべき機能を明確にし、まずはそこを自動化していくと、自ずと利用回数が多く、メリットが多いのでは無いかなと感じます。また、付随する事務的な部分 (例えば EC サイトの自動注文テストの場合だったら、注文後のキャンセルなど) を自動化できれば恩恵が高いように思います。
手作業のテストケース、どこまで作り込む?
基本的には他の人が見てもわかるようにテストケースを作成します。
明らかに再利用性が無さそうな場合でもテストケースを残す以上は、1 年後とかにそれを他の人が発見してくれて、コレどういう意味?と聞かれて自分も覚えていないパターンが多いので(笑)、意味がわかるようにしといた方がいいと思います。
当たり前ですが最低限、手順と期待値と出力結果は書いています。
成果物は取引先や上司がエクセル好きであればエクセルで作りますが、そうでなければ Google スプレッドシートで十分な気がします。
見栄えにこだわり出すと作り込みたくなるので(笑)、自社内のテストケースであれば、余計な装飾をせずなるべくシンプルにするようにしています。