これまでの経験から考えるQAのスキルセットについて
はじめに
今日は自分のこれまでのキャリアを振り返ることで、「今後QAが必要なスキルとは何か?」を考えていきたいと思います。
そもそもQAのキャリアとは、個人的に以下の3つがあると思っています。
- テストエンジニア
- 品質保証(QA)
- つよつよエンジニア
テストエンジニア
テストエンジニアは開発工程の後半を担当し、要求や仕様書を元にテストを設計し実施していきます。
ただ、最近はシフトレフト(テストを前倒しで行う)が流行し始め、開発工程の初期から参加するテストエンジニアが増えています。
求められるスキルは以下の通りです。
- テスト実施ができる
- テストケースを把握し、決められた期間内に遂行できる
- テストをミスなく実施できる(環境が違った、バージョンが違った...など)
- 仕様の不明点を質問できる(早いと嬉しい)
- テストの設計ができる
- 何をテストすべきか考え検討すること
- 業務に対する深い知識からテスト範囲を割り出す
- 過去の不具合から不具合が多そうな場所を推測
- テストに必要な技法を使うことができる(組み合わせ技法など)
- テストの計画が立てられる
- 必要な人材・スキルを検討できる
- テストの見積もりができる
- テストの管理ができる(予定工数を超えた場合、調整できる)
品質保証(QA)
品質保証とは製品が品質を満たしているか、作成から納品後も体系的に見ていく活動全般を指します。最近は、上記以外の様々な活動をするので、定義が色々と変わって来るものでもあります。
求められるスキルは以下の通りです。
- 製品の品質を可視化できる
- 要件の変更率やテスト工程の不具合数など、可視化する指標を決める
- 指標を収集・分析する
- 規定値から逸脱していれば、対応策を検討・実施する
- 品質をチェックできる
- CMMIなどを用いて逸脱がないか確認する
- テストを実施する(テストエンジニアと同じ)
- 改善の仕組みを導入できる
- レビューや開発のフロー図を作成し導入する
- フローにはCMMIやITILなどのベストプラクティスを利用する
つよつよエンジニア
かつてスーパーSEと呼ばれた人たちです。高い技術力をもち、困難な課題を一瞬にして解決していく素晴らし技術者のことを指します。
求められるスキルは以下の通りです。
- コードに対する高い技術力
- コードを読むだけで問題点を把握できる
- エラーメッセージだけで修正箇所がわかる
- テストコードを書いて、品質の担保ができる
- フロント・バックエンド両方に対応している
- サーバやネットワークも対応できる
- 機能的な要素だけでなく、非機能的な要素にも対応できる
3つのキャリアまとめ
以上3つのキャリアがQAの着地点と思っています(多少スキルが被るところはありますが...)。
私はこの中でも、「テストエンジニア」からキャリアがスタートしました。テストエンジニアからどのようなスキルを得たのか、次章からまとめていきたいと思います。
これまでのキャリア〜テスター編〜
まず求められたスキルは「テスト実施が正しくできるか」です。テスト実施をするにあたって問題になったのは、
- テストケースをしっかりと読まないといけない
- テスト設計者が間違ったテストを提案していることもある
- 開発者がテスト設計者に誤った情報を伝えていることもある
- テスト環境を理解する
- ものによっては様々な道具を使うことになる(特に組み込み系はハードウェアも関わってくる)
- バージョンを確認する(自動でアップデートされて、すべてやり直しになることも...)
- 問題があれば早めに報告する
- 自分が重箱かなと思ったことでも、後々大問題になることもある。
- 後で問題になるより今問題になった方が、最終的にはいい。
といったところです。上記をきちんと行うことで、テストを正確に行うことの重要性を学ぶことができました。大事なことは、
誰でも失敗なく作業をできることはありえません。しかし、常に失敗することもないでしょう。人間どうしても信じる方向に話が行きがちだと思うので、疑うことを覚えることは大切です。(9割以上は言いがかりになりますので、心の中で思うだけに留めます)
この時点で持っていたスキルは「テスト実施」のみです。
これまでのキャリア〜テストエンジニア編〜
テスト実施がある程度できるようになると次は「どのようにしてテストケースを作成していくのか?」のスキルが求められました。また、テスト設計を行うと必ず問題となってくるのは、「期間内に質の高いテストを行うにはどうすればいいか」ということです。
テストを行うことができる期間・人員は限られてています。その中で、最もいいテストを行うにはどうすればいいのか、テスト設計者の腕が求められます。
私はテスト設計を行う際、以下の点に注意しました。
- テスト設計の方針は早めに提示する
- 聞いていることとテストすることがずれていることが多い。早めに見せるとそれだけ間違いが早めに見つかる。
- 最初はメモ書き程度でいい。気合いを入れて作ると、差し戻しがあれば詰む
- テスト技法は必要な時だけ
- テスト技法を学ぶとどこでも使いたくなってくる。無闇に使ってもテストケースが増えるだけなので、必要な時だけ使う
- 組み合わせは意味あるものだけ実施する(ユーザーがよく使う組み合わせを中心、など)
- できそうなら自動化も取り入れてみる
- 手動テストでは限界がある。自動でできるところは自動化するべき
- 自動化はテスト実施だけでなく、テストデータの作成などにも導入できる
- 最後に探索的テストの時間をとる
- どんなに綺麗なテスト設計を行なっても、抜け漏れは起きる
- テストケースに頼らないテストを行うことで、例外にも対応できるようにする
- (問題が起きた時のバッファに使うことも...)
そしてその中でもテスト設計に重要なポイントは、
上記にも記載しましたが、どんなに完璧なテスト設計を行なっても想定外の不具合は発生します。そのため、状況に応じてテスト方針を変える柔軟な能力が求められます。
この時点で「テスト実施」「テスト設計」のスキルを持っていました。
これまでのキャリア〜保守運用編〜
テストができるようになっても、品質向上に必ずしもつながるわけではありません(現状の問題点を示せるだけで、問題の作り込みを防げない)。また、開発者に指摘しても、指摘だけでは改善が難しく、ある程度こちらから改善案と改善が成功することを示す必要があると感じてきました。
また、この辺りからテスト自動化に関するカンファレンスに参加すると、自動化だけでなく自動テストをどのようにして効率的に動かすか、が議題に上がってきました。(CI/CDにどのように乗せていくか、など)
そこでインフラ系のスキルを身につけるため、現在のチームに所属しQAをやりながら保守運用を行なっています。その中で以下のスキルを習得しています。
- 簡単なコードの修正ができる
- ログ監視、調査、改善ができる
- 負荷検証ができる(AWSの負荷サービスを利用)
結果として、自動テストが効率的に動かせるインフラを構築できる技術を手に入れたいと思っています。また、「テスト実施」「テスト設計」「コーディング」「負荷検証」「インフラ」を身につける予定です。
今の時代のキャリア~自動テストの効率化編~
ここからは様々な勉強会に参加し、「最近のトレンド技術は何か」について記載していきたいと思います。
テストの自動化について、どの企業でも取り組むことが増えてきました。その後問題になってきたのは、テスト自動化の対象を増やしすぎたため、1回の実施に時間がかかるようになったことです。
最初は5分で終わっていた自動テストが徐々に増えてきて、現在は1日かかる、ということもあるようです。そのため、「限られた期間内に自動テストをどう終わらせるか」がテーマとなってきました。
対策として、以下のようなことを検討・実施しているようです。
- 不要なテストを減らしていく
- ユーザーがほとんど触らない機能などはテストしない
- AIなどを使って不要なテスト(何回やっても不具合がでないケース、など)を減らすようにする
- テスト対象の観点を再定義する(もう一度顧客分析する、など)
- 自動テストのタイミングを変えてみる
- コミットした時、検証環境にリリースした時、本番リリースした時などで、見る観点を変える
そのため、必要になってくるのはCI/CD、DevOpsなどの環境を作り改善できる技術となります。QA=インフラもできる、という時代になってきたなと感じています。
妄想:今後の時代のスキルセット
ここからは私の妄想シリーズ。「自動化がひと段落した後に求められるQAのスキルとは」を考えていきたいと思います。
現在弊社では、ChatGPTやGitHub Copilotが開発で使われています。そのため、今後の開発はAIを用いた開発が主になっていくでしょう。そうなってくると、コードの品質はある程度AIが支えてくれる未来が待っていると思っています。
コードの品質がいいので、自動テストの量は徐々に減ってくるでしょう。そうなってくると次にQAが求められるのは、
- 正確な要求を把握する技術
- 運用監視の技術
の2つに集約されてくるのでは、と考えています。
正確な要求を把握する技術
これは、システムに求められている機能は何かを素早く把握することです。近年リリース速度はどんどん速くなっていますが、リリースしたものが必ずしも使ってもらえるというわけではありません。
そのため、リリースするものの質が求められる時代になってくるでしょう。その中で必要なスキルセットは以下と思っています。
- 市場を分析する能力
- マーケティングの分析ツールなどを使って、必要な要求を洗い出せる
- 顧客から有益な情報を引き出すことができるヒアリング能力
- 市場にない新たな価値を生み出す能力
- 市場を圧巻するような新たな仕組みを分析し提案できる(AIの画像生成、みたいなもの)
- (それを作成できるスキルもあるといいかも)
運用監視の技術
システムの機能上問題なくても、大量アクセスなどで利用できない状況になることもあります。そのため、サービスが安定して稼働できるように稼働状況を監視していく必要があります。
そのため、絶対に止まらないシステムが求められます。その中で必要なスキルセットは、以下と思っています。
- 必要なインフラ構成を作成できる
- 現在の利用者を分析し、対象のシステムが止まらないインフラアーキテクチャを作成できる
- 今後アクセス数が増えても対応できるような拡張性を備えている
- 自動でインフラを構成できる
- インフラ環境を自動で拡張(スケールイン、スケールアウトなど)できる
- (AIなどを用いて、常に最適化された環境を構築できる)
まとめ
いかがでしょうか?
これまでの経験を振り返りながら、QAに求められるスキルをまとめてみました。QAはどんどん求められるスキルが増える傾向にありますので、テストからキャリアが始まっても企画やインフラなどにも手を出す必要があります。
特に最近のトレンドだと、自動化+効率化の流れができていますので、自動コードがかける+インフラ環境を構築できる、は必須な要素となる気がしています。
Discussion