E2Eテストを導入しようとして失敗した話
これは 検索エンジンプロダクトを一緒に開発してた同窓会 Advent Calendar 2023 の15日目の記事です。
当プロダクトのQAエンジニアとして私が参加していたのは2019年7月〜2020年3月までの期間でした。
(既に記憶が曖昧な部分はありますが)在籍中にE2Eテストを書こうという機運が高まったは良いものの、結果的に大失敗した経験を語ろうと思います。
QA文化がなかった現場で数ヶ月後にE2ETestを!
そもそも私がjoinしたきっかけは、POのこんなお悩み相談からはじまったのでした。
「リリースしたら毎回切り戻してるんですよね〜」
そ、それはたいへんですね。
いろいろ話は省略しますが、QA文化がなかった現場でどうにか毎回きちんとしたテストフローに乗せるまでの体制をつくり、9〜10月頃には開発チーム自らE2Eテストを書くようになったのです!
テストは書いたが、粒度がバラバラだった
割と物量もあがってきたところで、テスト/QA界隈ではよくある悩みが持ち上がります。
テストがなかなか終わらない(20〜30分かかる)
よく見たら同じようなテストがいっぱいある気がする
他にどんなテストが書かれているのかよくわからない
私に相談があったのはこの辺からだったと思います(ここまで自律的に動けたことはすごいです!)。
そこで「テスト自動化改善委員会」が発足しました。
全員サンクコスト効果に囚われていた
ここまでに費やした時間。大量のテスト。それらをどうにか使えるものにしたい。
私の性格では、(自分自身がテストを書いた主体ではないこともあって)「パーッとイチから書き換えましょう!」と言いたかったところですがw
「どうすれば今ある資産を有益なものにできるか?」
という議論を長く続けたような気がします。
ちなみに「サンクコスト」とは「もう支払ってしまった代償がもったいなく撤退できない気持ち」を指します。
しかし、やはり一度ひっくり返してこう言うべきでした。
「テスト自動化を検討する前にテスト設計をしっかりしましょう」
テスト自動化の8原則
以下は STAR(Software Testing Automation Research Group Jp) という研究会が提唱している「テスト自動化の8原則」です。
有名なやつなのであちこちで引用されていますが、知らない人は知らないので何度でも引用しようと思います。1つずつ見ていきましょう。
1. 手動テストはなくならない
なおグーグルでは「毎日40万件の自動テストを行っている」そうです(※2017年ICST基調講演情報)。
2. 手動でおこなって効果のないテストを自動化しても無駄である
いきなりテスト自動化をしようとすることは、「仕様検討も設計もせずにコーディングする」ことと同等です。
ちなみに「おいておや」→「おいてをや」ね。
3. 自動テストは書いたことしかテストしない
機械が機械的にテストするのは「チェッキング」という領域です。
人間は「テスティング」に集中したい。
4. テスト自動化の効用はコスト削減だけではない
一般的に「コスト削減」を期待される自動テストですが、実はメンテコストがわりとかかるので劇的なコスト削減ができる状況というのがけっこう限られたりします。
どこをどのくらい自動化するのか計画をしっかりたてることが重要です。
5. 自動テストシステムの開発は継続的におこなうものである
上述の通りメンテコストがばかになりません。メンテコストを織り込んだ上でテスト自動化を考えることが必要です。
6. 自動化検討はプロジェクト初期から
自動化のためのbreak pointを設定しないといけなかったりしますが、そのような点が考慮されていないプログラムに対して自動化をしていくのは骨が折れます。
長期利用されるシステムであれば、最初から「いずれテスト自動化する」という目的をもった上でシステム構築をした方が幸せになれます。
7. 自動テストで新種のバグが見つかることは稀である
自動テストで「新しいバグの発見」は期待しないでください。言い換えると、「新しいバグの発見」は人間がやらないといけないです。
8. テスト結果分析という新たなタスクが生まれる
「マニュアルテスト」=「手でやるテスト」という意味です。何度も登場する「メンテコスト」には、「テスト結果がGreenにならない場合の原因調査」も含まれます。たいへんなんだこれが。
「Freaky(不安定なテスト結果)をどうするか」がテスト自動化担当者の永遠のテーマだったりします。
テスト自動化を検討する前にテスト設計をしっかりしましょう
ここまでお読みいただきありがとうございました。
「テスト設計をしっかりする」とはどういうことなのかは、また別のお話になるので他の記事に譲ります。
さて、当時のE2Eテストは最終的にどうなったのか…?
(あまり覚えてないけど)結局最初から必要なものだけ抜き出して書き直したような記憶です。
それではまた次の記事でお会いしましょう!
この記事が気に入ったらサポートをしてみませんか?