そもそもなぜテストを自動化するのか
セッションの冒頭で、石原氏は「なぜ、そもそもテストを自動化するのか」と問いかけた。
「一番大きなメリットは、人的・コスト的なメリットを生み、開発の効率化が期待できるからです。自動テストと手動テストには、いくつか異なる点があります。自動テストであれば24時間365日やってくれて、書いてあることはしっかり実行してくれる。何より、スピーディに実行してくれます」と説明した。
一方で、テスト自動化にはデメリットもある。まず、テストスクリプトを書いたりテスト環境を整えたりと初期導入コストを考える必要がある。さらに、常にテストが成功する状態を保つために、自動テストの保守運用体制の確保が不可欠になるのだ。
ここで石原氏は、デブサミ2022夏で実施したアンケート調査の結果を見せた。「これまで、テスト自動化経験がありますか?」という質問では、「ある(現在も利用)」が44%ともっとも多いが、「ある(現在は使っていない)」が30%となっていたのだ。
さらに「テスト自動化について、今どんな課題を抱えていますか?」という質問では、スキル不足・リソース不足など多くの課題があがっていた。
「使い続けていないという声が多かったのが今日のセミナーのポイントですね。使い続けるために問題になってくるのは、人の問題とメンテナンスの問題です。この2つが一番大きなボトルネックになっています」
テスト自動化の計画:スコープと解決したい課題を明確に
1番目のポイントは、テスト自動化の計画フェーズについてだ。テスト自動化で何を解決したいのか、スコープと解決したい課題を明確にすることが重要になると説明した。
「何を自動化するのかを整理する。これは自動化においてすごく重要なところです。自動化には向くところと向かないところがあるからです」
テストは、その対象によって単体テスト・APIテスト・機能テストなどに整理できる。このテストの種類によって、実行頻度とカバレッジが異なり、自動化に向くのは実行頻度とカバレッジの高いところ、つまり単体テストとAPIテストのレイヤーになるのだ。
なぜ、ここがテスト自動化に向いているのか。それを説明するために石原氏は、DevOpsバグフィルタという考え方を紹介した。バグフィルタでは、単体テスト・結合テスト・E2Eテストといった階層になっている。各フィルタの粒度と範囲も異なっており、単体テストは粒度は細かいが範囲が狭く、E2Eテストは粒度は荒いが範囲が広くなっている。
「ちょっと気持ち悪いと思うかもしれませんが、ここに上から害虫のタマゴが降ってくると考えてください。単体テストでしっかりと害虫のタマゴを見つけると、次の段階で孵化する害虫を減らすことができます。結合テストで孵化した害虫を見つけられると、次の段階で成虫が少なくて済むんです」
このように単体テストや結合テストのフェーズで細かく網羅的に繰り返しテストをしたほうが、費用対効果が高くなる。
「もう1つ、テスト自動化で何を解決しようとしているのか、これもしっかり押さえておきたい話です」
つまり、テスト自動化の目的を定義することで、どのような手段を採用すべきか明確になるのだ。
例えば、デグレードが頻発してテスト工数が増えているのであれば、単体・結合・スモークテストを強化しながら、開発プロセスに自動化を組み込み頻度を向上させることが考えられる。テストエンジニアのスキルにバラツキがありテストミスが多ければ、機能テストやリグレッションテストを強化する。クライアントから品質が低いという評価を受けたのであれば、自動化によってスピード・頻度・コストの課題をクリアにして、人による高度なテストを十分に実施するコストを確保するといった具合だ。
「うまく行かなかった例では、とりあえず自動化、何でもやっちゃえが多くなっています。テストの自動化を計画するときは、スコープと解決したい課題のところを明確にすることで、どこを自動化するのか、どこの自動テストをちゃんとやるのか見極めることが重要になります」