以前 Developers Summit 2024 Summer での発表内容を下記記事で紹介しました。
今回 Developers Summit 2024 KANSAI にも登壇することになったので、そちらの発表内容を一部紹介します。
自動化を検討した際に出てくる選択肢
テスト自動化を検討した際に、以下のような選択が出てくると思います。
- どのテストレベルを自動化するか 〜 単体テスト vs システムテスト
- 手動テストと自動テストの割合 〜 手動テスト vs 自動テスト
- どこまでAIに頼るか 〜 人 vs AI
これらの選択肢で、バランスを取るために気にするべきポイントを解説します。
単体テスト vs システムテスト
テストは、V字モデルの単体テスト・結合テスト・システムテストのテストレベルで分けることが多いと思います。
自動化を考えた場合、まずどのテストレベルを自動化すべきかというポイントが出てきます。
テスト駆動開発や開発フレームワークの進化で単体テストの自動化はだいぶ実施しやすくなりました。
それに対して、E2Eのシステムテストはまだまだ手動実施が多いです。
手動でのシステムテストは時間も人手もかかります。
そうなると手動でコストのかかるシステムテストを自動化したいとなると思います。
自動化したらコストダウン?
自動化したらコストダウンになる!と考えがちですが、自動化したシステムテストでもコストはかかります。
- UIを操作するので、単体テストに比べテスト実施に時間がかかる
- ネットワークの影響でテストが安定しない
- デバッグに時間がかかる
- UIの変更に弱い
- 自動テスト自体の構築が必要
UIを操作するので、単体テストに比べテスト実施に時間がかかる
システムテストではUI、画面上にあるボタンやリンクの操作を行うため、それらが表示されるまで少し待つ必要があります。
手動テストの場合は意識する必要がない部分ですが、自動テストの場合は何も考慮しないと1秒未満のタイミングでどんどん操作を進めようとします。
その結果、押すべきボタンや確認するべきテキストが表示されていないからテストNGとなることがよくあります。
そのため該当の要素が表示されるまで待つという処理を入れることがあります。
待つと言っても1秒前後ではありますが、ボタンやリンクの数だけ待ち時間を入れるのでトータルではだいぶ長くなってしまう可能性があります。
ネットワークの影響でテストが安定しない
システムテストではネットワーク越しにやりとりすることが多いです。
そうなるとネットワークの状態にテストが依存する形になります。
ネットワークの調子が悪いため、ボタンの表示に時間がかかり、ボタンが押せずにテストNGになってしまう、画面遷移で失敗するなど起こり得ます。
ここがシステムテストの自動テストで一番の課題になります。
デバッグに時間がかかる
システムテストになると単体テストに比べ、さまざまな機能が連結し合っています。
そのためシステムテストの自動テストで不具合が見つかったとき、原因調査が単体テストに比べて難しい場合があります。
また、不具合の原因が前述したようにネットワークの影響の可能性もあり、自動テストのテストコード自体の不具合の可能性もあります。
そのように不具合の原因と思われる要素が複数ある可能性がありデバッグに時間がかかってしまいます。
UIの変更に弱い
システムテストではUIの操作や表示確認をするため、自動テストのプログラムでボタンや表示テキストなどの要素を指定します。
その際にデザイン変更等でUIの変更がされると、プログラム上で要素の指定の仕方によっては自動テストのプログラムを修正する必要が出てきます。
そのためデザイン変更が多いソフトウェアは、UI部分のテストを自動化すると自動テストのプログラムのメンテナンスコストが膨れ上がってしまいます。
自動テスト自体の構築が必要
忘れてはいけないのが、自動テスト自体のプログラムを開発する必要があることです。
今ではE2Eのテスト自動化にはさまざまなフレームワークやサービスがありますが、それでもサクッと自動テストを作るとまではまだまだ行きません。
そのため自動テスト構築のコストも事前に検討しておく必要があります。
手動テスト vs 自動テスト
次に手動テストと自動テストの特徴を見ていきましょう。
手動テスト | 自動テスト |
疲れちゃう | いつでも元気! |
たまにやる気が… | やる気が迷子にならない |
休日はもちろん休むよ! | 24時間働けます! |
たまにテストミスも.. | 指示通りテスト実施可能 |
広くテストできる(探索的テスト含む) | 指定された箇所しかテストしない |
なんでもテストできる | ユーザビリティ周りは出来ない(難しい) |
上記の表の通り、それぞれ得意・不得意があります。
また自動テストの指示通りテスト実施可能は利点に見えますが、逆に考えると指示がないとテストができないということになります。
自動テストにテストを指示するためには、明確なソフトウェアの仕様や期待値が必要です。
そのため、自動テストを作るためには、先に期待値などの整理が終わっている必要があります。
人 vs AI
はじめに紹介した 自動化だけがすべてじゃない!?テストプロセス効率化の最適解 でAIが進化しており、自動テストを書いてくれる例を記事内で紹介しました。
この 自動化だけがすべてじゃない!?テストプロセス効率化の最適解 では、いきなりAIに自動テストを書いてもらいましたが、本来テストはテスト設計というプロセスを踏む必要があります。
テスト設計を行い、テストとして何を確認すべきか、品質を測るためにどのようにテストをすべきかを、テスト実施前に決めておく必要があります。
ではこのテスト設計は人がやらなければいけないところかと言うと、もちろんAIで対応可能です。
テスト設計は大きく分けると以下のことを決めていきます。
- テスト観点
- リスク出し
- テスト設計(大雑把な確認内容と期待値を決定)
- テストケース作成(テストの目的や手順を決定)
順番にAIにお願いしてみましょう。
テスト観点とリスク
テスト設計
テストケース作成
バッチリ作ってくれました。
通常テストケースは上の情報に加え、テスト結果を入力する欄があるので、ついでにそれも追加してもらいましょう。(雰囲気を見てもらう目的のため小さいです)
「生成AIで自動化」だけでテストは十分?
今まで見てきたようにAI頼り、自動テスト頼りでも十分テストができそうな気がします。
しかし実際にはこれだけではテストとしては不十分なことが多いです。
品質を担保するためのテストとして十分か?また、無駄なテストをしていないか?
お客様に満足な品質を届けるためには、手動テスト・自動テスト、人・AIをバランスよく活用する必要があります。
では具体的なバランスの取り方は?
そのような話を Developers Summit 2024 KANSAI で9月18日(水)12:40から Bトラック(B-4)でお話しします。
ご興味がある方はぜひ聞きにいらしてもらえたらと思います。
参加申し込みは2024年9月13日(金)13時までです。(参加費無料の事前登録制です。)
また弊社には、自動化でのお悩みを解決するサービス「G-SAT(ジー・サット)」があります。
- 自動化したいけれど、どうすればいいのかわからない
- 自動化すればコストダウンできると思っていたのに、逆に…
- 用途ごとに最適ツールを選ぶ必要があるなんて知らなかった
- 自動化したら、プロセス管理はいらないと思っていたが…
そのようなお悩みがありましたら、ぜひGENZにご相談ください。
サービスの詳細についてはこちらをご覧ください。