テストエンジニアとは?仕事の内容や仕事のやりがいを元テストエンジニアが解説
テストエンジニアは、プロダクトや製品を制作した際に、品質や機能に問題がないかをチェックするエンジニアです。
製品にシステム上の問題がないかをチェックすることが主な役割になりますが、その役割は幅が広く、さまざまな業務を担います。
今回は、テストエンジニアの仕事内容や役割についてを、元テストエンジニアの観点から解説します。
自分の経験を踏まえたうえで、よりリアルな目線で解説するので、テストエンジニアについて知りたい方はぜひ参考にしてみてください。
また、以下の記事で未経験からテストエンジニアを目指す方法について解説しています。
テストエンジニアに未経験からなるには?就職・転職方法について解説してみた
テストエンジニアを目指す方は、ぜひこの記事とあわせて参考にしてみてください。
目次 (PRも含まれます)
テストエンジニアとは
テストエンジニアは、Webアプリケーションなどを作った際に、プロダクトをお客さんに出して本当に問題ないかをチェックする仕事になります。
テストエンジニアは別名「QAエンジニア」と呼ばれていますが、これはQuality Assurance、つまり品質保証エンジニアの略称です。
つまり、製品の品質を保証することが主な役割となります。
テストエンジニアの役割とは?
テストエンジニアは、Webアプリケーションを利用するお客様のために、サービスの品質を保証する仕事です。
テストエンジニアがいない世界を想像してみましょう。
基本的にWebアプリケーションを作る会社には、ディレクターやエンジニア、デザイナーがいます。
そして、どのようなアプリケーションを作りたいかを、ディレクターや上層部が決めて、そのシステムをエンジニアやデザイナーが作っていくのです。
そのなかで、作ったプロダクトが本当に問題ないかをチェックするのがテストエンジニアの役割となります。
お客様に製品を出す前の最後の門番としてテストをする人がいないと、公開した後に大きな問題が起こって、クレームに繋がるケースも起こり得ます。
この大きな問題が起こらないように、プロダクトをリリースする前に適切に対処することが、テストエンジニアのメイン業務です。
テストエンジニアの仕事内容
「品質を保証する」と言っても、実はテストエンジニアにはいろいろとやることがあります。
テストエンジニアの仕事内容について、それぞれ解説していきましょう。
テストケースの作成
サービスの品質を保証する際は、最初にテストケースを作成します。
テストケースとは、ユーザーがある特定の入力をしたときに、期待する結果が得られることをまとめたドキュメントのことです。
説明してもわかりづらいかもしれませんので、実際にある会員制アプリのログイン機能のテストケースを見てみましょう。
【テスト】
- 正しいIDとパスワードを入力した時に、ログインできること
【手順】
- https://example.com/loginにアクセスする
- ログインフィールドに以下の値を入れる: example@example.com
- パスワードに以下の値を入れる: password
- ログインボタンをクリックする
【期待値】
- ログインに完了しましたというフラッシュアラートが表示されること
【結果】 ・・・
したがって、テストケースには「期待値」、「手順」、「結果」が通常含まれています。
これらの詳細が集約されたドキュメントがテストケースです。
テストエンジニアの役割の一つは、このサービスがどのように機能するべきかをまとめたテストケースを作成することです。
ちなみに、例に出したテストケースは「正常系」と呼ばれるもので、本来期待される正しい入力に対するテストとなります。
さらに、テストケースには他にも多くの種類があり、以下のような例を挙げることができます。
【テスト】
- ログインIDとパスワードを入れないでログインしようとすると失敗すること
【手順】
- https://example.com/loginにアクセスする
- 何も入力せずにログインボタンをクリックする
【期待値】
- 「IDとパスワードを入力してください」と表示されること
このような間違った値を使うテストは「異常系」と呼ばれ、先ほど触れた正常系と併せて大切なテストケースの1つとなります。
上記のように、ログインIDやパスワードを全く打ち込まずにログインボタンを押すと、何も表示されない状況になることがあります。
このケースでは、ユーザーが「バグっている」と誤解することで、問い合わせが増加したり、サービスが機能していないと誤認識したりすることで、サービスの利用が停止する可能性があります。
そうした事態を防ぐためには、ユーザーのさまざまな使用方法を考え、本来存在すべき機能が適切に実現されているかを検討しつつ、テストケースを構築する作業が必要となります。
テストケースの実行
テストエンジニアの業務の一部としてテストケースの実施があります。
これは皆さんが描く最も分かりやすいテストエンジニアのイメージに近いと考えます。
例えば、以下のような検証ケースが存在した場合、その検証結果がどのようだったのかを記録するという作業になります。
【テスト】
- 正しいIDとパスワードを入力した時に、ログインできること
【手順】
- https://example.com/loginにアクセスする
- ログインフィールドに以下の値を入れる: example@example.com
- パスワードに以下の値を入れる: password
- ログインボタンをクリックする
【期待値】
- ログインに完了しましたというフラッシュアラートが表示されること
【結果】
- OK
【テスト】
- ログインIDとパスワードを入れないでログインしようとすると失敗すること
【手順】
- https://example.com/loginにアクセスする
- 何も入力せずにログインボタンをクリックする
【期待値】
- 「IDとパスワードを入力してください」と表示されること
【結果】
- NG(何も表示されなくなった)
この様なテストケースはエクセルなどにまとめられており、それぞれの結果がOKだったのか否かを記録する作業となります。
テストケースの期待値に合致しない場合はバグと判断され、それが発見された場合、開発チームに通知し、修正を行う必要があります。
テストケースの運用・改善
テストケースの運用と改善もテストエンジニアの役割となります。
最初にテストケース作りについて説明しましたが、テストケースは一度作成したらそれで終わり、という訳ではありません。
たとえば、「一度登録したログインアドレスは二度と登録できないようにしてほしい」という要望が寄せられ、その機能をプロダクトに取り入れた場合などが挙げられます。
この状況では、既に存在するテストケースに加えて、新たなテストケースを付け加える必要があります。
さらに、テストケースが既に作成されている機能が変更された場合、テストケースを改訂する必要がある場合もあります。
つまり、テストケースは一度作成したら完了というわけではなく、何度も改良を重ねながらテストケースを維持していくことが求められます。
テスト計画の作成
マネージャーレベルのテストエンジニアになると、テスト計画を作成するという仕事が増える傾向にあります。
テスト計画とは、どの程度の作業時間を使って、どのようなテストを何割でいつまでに終わらせるかという計画を作るタスクです。
探索テストの実行
テストエンジニアの仕事の一環として、探索テストの実行が存在します。
探索テストとは、さまざまな顧客の使用ケースを予想しつつ、「ここにエラーがあるのではないか」という部分をランダムにピックアップする作業形態のことを言います。
例えば、ログイン機能に対して探索テストを実行する場合、既存のテストケースは一時的に忘れて、更新ボタンを一気に100回押し続けたらどうなるかという事例を想定します。
その瞬間に、テストでは以下のような現象が起きる可能性があります。
- 画面が固まってしまう
- 同じアカウントが100個生成される
- 2回連続で一気に作ろうとするとアカウントが2つ生成される
全ての状況を予見することで、このようなバグを先んじて防ぐことができます。
加えて、セキュリティの弱点を狙ったテストも、探索テストの実行時に通常行います。
たとえば、IDとパスワードを打ち込む時に、既にそのメールアドレスが存在していると「メールアドレスが存在します」と表示されます。
また、メールアドレスが存在しない場合、「IDとパスワードを入力してください」と表示されるような仕様になっていたと仮定しましょう。
しかし、前者のケースでは、メールアドレスが存在しているため、パスワードを全て試すことでログインを突破する可能性があります。(これは総当たり攻撃と呼ばれるハッキングの手法です。)
このように、セキュリティの観点から問題がないかを、ハッキングを行いながら確認することもテストエンジニアの役割です。
テスト自動化
テストエンジニアの業務には、テストを自動化することも含まれます。
テスト自動化というのは、先述したテストドキュメントをソフトウェアを用いて自動的にテストを行うことを指します。
エンジニアが新機能を導入した際に、テストエンジニアがその新機能を手動で確認すると、テストにかかる時間が大幅に増えてしまいます。
したがって、頻繁に行われるテストは、場合によってはソフトウェアによる自動化が要求されます。
たとえば、先述のログインテストを自動化するシチュエーションを考えてみてください。
プログラミング言語(Ruby、Python、Java等)を用いて、Seleniumのようなブラウザの自動操作が可能なライブラリを活用し、ログインフィールドへの値の挿入やパスワードの入力、更新などのアクションを自動化することが可能です。
その結果、自動化されたプログラムにより、テストが稼働しているかどうかを確認できます。
テストを自動化する重要性
実際、テストの自動化はテストエンジニアだけでなく、Webエンジニアも実行することがあります。
テストには、
- 単体テスト
- 結合テスト
- 受け入れテスト
の3つがあります。
基本的に、単体テストと結合テストはユーザーの画面を通さずに、プログラムの各部分をテストするもので、通常Webエンジニアがこれを担当します。
一方、受け入れテストはユーザーインターフェースのテストで、通常はテストエンジニアが責任を持つことが多いです。
たとえば、IDに対する値の設定やパスワードの入力などの処理は、Webエンジニアだけのテストでは欠けることがあり、その部分をテストエンジニアが執筆する場合があります。
そのため、数回のテストを手動で行うのは厳しい作業になるため、自動化することがスムーズな進行を可能にします。
最近では、「Autify(オーティファイ)」や「mabl(メイブル)」のように、プログラムを記述せずにブラウザ上でテストを作成できるツールも活用されています。
自動化によりテストを楽に行うことが可能となり、その結果、ツールの操作スキルが重要となる状況も出てくるでしょう。
テスト結果の報告 / 開発部門への品質改善提案
様々なテストが終了した後、その結果を報告します。
テスト結果を基に、「バグ」または「要望」の形でフィードバックを提出するのが普通です。
バグが発見されたり、または現状がこれに当てはまります。
- 想定した仕様通りではない場合:バグ
- 仕様がユーザーにとって不便ではないかという疑問が生じた場合:要望
例えばバグが発生した場合、「○○の手順を踏んだにも関わらず、予想した結果とは異なり××になってしまった」と報告するのが一般的です。
普通、報告はチケット管理というシステムを活用して行い、他のエンジニアと共有します。
このテスト結果の伝達はとても重要で、エンジニアが素早く対応できるように、また問題がどのように再現するかを詳細に書くことが要求されます。
優秀なテストエンジニアは、この報告を適切にこなすことができます。
また、バグだけでなく、異常系テストを行った結果、ユーザーへのレスポンスが不足している場合など、ユーザーが理解しやすいように明確に記述して報告することが重要です。
テスト結果を共有するためには、「GitHub」や「Jira」、「Redmine」といったツールが頻繁に使用されます。
テストエンジニアのキャリアパス
次に、テストエンジニアのキャリアパスを説明します。
基本的に、テストエンジニアが歩むキャリアは2つに分類されます。
- テストエンジニアとして昇格していく
- テストエンジニアと別領域の能力を広げていく
ここからは、各々のキャリアパスについて、詳細に解説します。
テスター
テストエンジニアのキャリアは、普通テスターという職から始まります。
テスターは、テスト仕様書やテストケースを参考に確定されたテストを実行し、その結果を共有するのが仕事です。 新卒や中途、未経験からテストエンジニアに転身すると、まずはこの仕事を担当することになるでしょう。
さらに、SES等で成長が特段に要求されていない職業の場合、この仕事を継続するよう求められる場合が多くあります。
したがってこの職種では、テストケース通りにテストを実施しすることやエビデンスを残すこと、報告ができることがまず求められます。
テストエンジニア
テスターが自分自身でテストを実施できるようになると、少しずつタスクが増えていきます。
ただテストケースを実施するだけでなく、業務の幅が広がると、自然とテストエンジニアになっていきます。
具体的には、テストケースの生成やテスト計画の立案を任されます。
テストリーダー・テストマネージャー
テスターとして自立して仕事を進められるレベルに達したら、次にテストリーダーやテストマネージャーの役割を担います。
テストリーダーは、新製品の公開スケジュールを設定し、製品をリリースするにあたってテスト期間やテスト範囲を決定する役職です。
また、テストの設計や戦略の立案、そして必要なテストプランの策定もテストリーダーの業務です。
例えば、リグレッションテストをどの程度行うのか、探索テストをどれぐらいやるのかなど、テストのスケジュールを立てていくのが彼らの役割です。
テストの構築も担当しますが、指定された期限内でテストのプランを作成し、ガントチャート等を用いてスケジュールを引き、管理するのも仕事の一環です。
また、チーム別にどの程度の工数を持っていて、そのコースに合うように開発やテストを進めていくという役割もあります。
その他に、新人エンジニアの指導もテストリーダーやテストマネージャーの役割です。
たまに自分でテストを実施することもありますが、基本的にはチーム全体がテストを実施できるようにすることが主なタスクです。
テスト自動化エンジニア
次に、テスト自動化エンジニアの説明をします。
これは純粋にテストエンジニアの延長線上というよりは、特にプログラミングスキルを掛け合わせてバリューを出していくような職種です。
テスト自動化エンジニアが担当するのは、様々なテストの中でも、特に反復的に行われるテストの自動化です。
これをリグレッションテスト(回帰テスト)と呼び、新機能を導入した後に、エラーが発生しないかをチェックするテストです。
理想は、新機能が実装された時点で直ちにテストを行うことですが、テストエンジニアも人間であるため、テストの実行回数や速度には制約があります。
したがって、テストを一定レベルまで自動化することで、テストケースをプログラムにより動かすのがテスト自動化エンジニアの役目です。
前提として、テストエンジニアが立案したテストケースをプログラムに変換するのが主な仕事内容です。
テスト自動化エンジニアというのは、大きな需要があり、フリーランスになるのも比較的容易で、さらに給与も高額になる可能性がある職種だと言えます。
プログラマー
次にテストエンジニアとは全く異なる職業なのですが、プログラマーに転向するケースもあります。
事実、プログラマーもテストを行うことがあります。
テスト範囲は、単体テスト、結合テスト、そしてE2Eテストの3つになります。
この点について、プログラマーは単体テストや結合テスト、すなわちコードレベルのテストを直接行います。
しかし、ユーザーが実際に操作したときの動作の確認(E2Eテスト)は、基本的にテストエンジニアが担う仕事です。
そのため、テストエンジニアとして一定の経験を積んだ人が、ソフトウェアエンジニアに転職する事例も存在します。
テストエンジニアからプログラマーへの道は、テストエンジニアのキャリアの延長にはないことを理解していただきたいです。
テストエンジニアからプログラマーに転身できるという話を受けて、プログラマーになるためにテストエンジニアの道を選ぶケースをよく聞かれます。
しかし、テストエンジニアからプログラマーへの転身は非常に稀なケースです。
プログラマーの職業は、基本的には経験者が即座に業務に参加するか、未経験者をプログラマーとして育てる状況が多いのです。
テストエンジニアがプログラマーに進化するケースも見られますが、それは非常に稀な事例です。
だからこそ、初めてプログラマーを目指すなら、未経験からプログラマーへの転職活動を進めることをおすすめします。
テストエンジニアのやりがい
ここでは、実際にテストエンジニアとして仕事をしていた経験を元に、テストエンジニアのやりがいについて述べたいと思います。
インシデントを防げた時に、貢献できていることを実感できる
テストエンジニアとしてのやりがいを感じる瞬間は、バグを見つけ、大きなインシデントを避けられると感じる時です。
特に、自分が安全だと思っていた部分で、重大なバグを見つけたときにやりがいを感じます。
例えば、個人的には次のような体験をしたことがあります。
ログイン機能を持つシステムを構築したところ、セキュリティ上の深刻な不具合が見つかりました。
すぐに察知してリリース前に修正を施すことが可能でしたが、自分で見つけ出せなかった場合、サイバー攻撃の対象となり、情報の流出などによる損害賠償を求められる可能性もありました。
このように、ビジネスとして大きな損害を未然に防ぐという、大切な役割でもあります。
他の部署の人に感謝された時
自分が発見したバグが理由で、他の部署の人々から感謝される瞬間は、やりがいを覚えます。
たとえば、エラーを見つけてエンジニアに通知したときに、「明確な報告のおかげですぐに修正が可能でした」とフィードバックを受けた瞬間は、非常に喜ばしいですね。
テストエンジニアの奥が地味に深い
テストエンジニアとしてのやりがいは、新たな知識を得ることにも関連しています。
ただドキュメントに準じてテストを行うのではなく、製品の品質を保全しながら、少ないテストケースでより多くのバグを特定できるかを考慮することが必要です。
深掘りしていくと、極めて専門的な職業になるので、きちんと学習を進めていけば多くのことを学べるでしょう。
テストエンジニアはプロダクトの品質を保つ重要な役割
今回は、テストエンジニアの仕事内容や役割についてを、元テストエンジニアの観点から解説しました。
テストエンジニアは、商品やサービスをリリースする際に、とても重要な役割を担う職種です。
システムのテストを繰り返す中でも、自動化による効率化や、テストの進捗管理など、さまざまな面でスキルが問われます。
また、未然にトラブルを防げたときなどは、やりがいを感じられる仕事です。
テストエンジニアを目指す方は、ぜひこの記事を参考にしてみてくださいね。
また、以下の記事で未経験からテストエンジニアを目指す方法について解説しています。
テストエンジニアに未経験からなるには?就職・転職方法について解説してみた
テストエンジニアを目指す方は、ぜひこの記事とあわせて参考にしてみてください。