企業同士の競争が国内に留まらずグローバル化し、消費者は多様な選択肢から製品やサービスを選べる世の中になりました。その選択材料となるものは「値段」だけでなく、「品質」や商品が抱える「ストーリー」など、こちらも多様なものになっています。
特に、モノづくり大国である日本において、昔から「品質」に重きが置かれてきました。この品質は、モノや接客といったサービスだけでなく、システム開発においても重要なポイントとなります。
そこで今回は、システム開発における「品質保証」について、品質保証とは何か?というところから、システム開発における品質保証の必要性、QAエンジニアの役割や業務内容まで解説していきます。品質保証とはどんな業務なのか気になる方や、QAエンジニアの仕事に興味のある方にぜひ読んでいただきたい内容になっています!ぜひ最後までご覧ください。
冒頭の文章で「QAエンジニア」という言葉が出てきて、頭の中で「?」が浮かんだ人もいるかと思います。
品質保証は、英語でQuality Assuranceと表記し、その頭文字を取ってQA呼ばれています。QAとは、製品の性能・機能が一定基準の品質を保っているか、また顧客が製品を安心・満足して使用できる状態か品質評価することを指します。QAは買い手視点の活動であるのが特徴です。
また、品質保証の話をする時に、必ずと言って良いほど出てくるのが「品質管理」です。これは英語でQuality Controlと表記し、頭文字を取ってQCと呼ばれています。QCとは、製品の生産時にその品質に問題がないか検証・保証を行うことを指します。買い手視点であるQAと比較すると、QCは作り手視点の活動であるのが特徴です。
ここで、QAとQCの違いについて、「期間」「責任」「業務範囲」の観点から見ていきます。
・期間
QAは製品の企画から販売後のアフターサービスまでが対象になりますが、QCの場合は製品の最終検査までが範囲となります。つまり、QAは長期的、QCは短期的に品質強化に取り組みます。
・責任
QAは製品が顧客の手に渡った後も対象になるため、製品を使う顧客に対しても責任が発生します。一方、QCは製品の完成前までに品質基準が一定ラインをクリアしているかをチェックするため、市場に製品を出す時での品質に対して責任を持ちます。
・業務範囲
製品の企画段階から、生産、販売、アフターサービスと多岐に渡る業務内容のQAは、製品完成前の管理を担うQCと比較すると、圧倒的に長い視点での品質維持を目標とします。
ここまで、製造やサービス全般に当てはまるQAについて解説してきました。ここからは、システム開発におけるQAについて解説していきます。
システム開発におけるQAとは、開発中のシステム・ソフトウェア品質管理の業務全般を意味し、そのポジション自体を指すこともあります。また、その職種は「QAエンジニア」と呼ばれ、主にQA環境下でのテストを担います。
ちなみに、QA環境とはユーザーが使用する環境に近づけて設定した環境で、開発終了〜リリースまでの間にテストを行う環境を指します。
まず、QAエンジニアと似たような言葉として、テストを行うテスター(テストエンジニア)やデバックを行うデバッカーがいます。
テスターとデバッカーの役割としては、テスターがテスト中に見つけたバグをデバッカーに報告し、デバッカーがバグの解析・修正を行い、再びテスターがテストが行うといったものです。
では、しっかりとテストを行うテスターが居るのに、なぜQAエンジニアが必要なのでしょうか?
それは、テストを実施する際の視点の違いにあります。テスターはあくまで、仕様書に通りに動作するかのテストしか行いません。もちろんシステムが使用通り動作するかどうかは重要ですが、QAエンジニアはユーザーの目線に立ち、ユーザーが使いやすいかユーザー体験も踏まえて、品質条件をクリアしているかテストを行います。
また、開発環境とは異なる、より使用環境に近づけたQA環境下で客観的なテストを行うことで、開発時に見つけることのできなかった不具合の発見や、リリース後の不具合発生のリスクを減らすこともできます。そのため、システム開発においてQAエンジニアによるテストはとても重要なのです。
QAエンジニアは企画段階からアフターサポートまで、業務内容は多岐に渡ります。特に、テストの設計・実行・フィードバックはQAエンジニアならではの役割と言えます。ここではQAエンジニアの一般的な役割・業務内容を挙げていきます。
・機能や仕様の確認/評価
システム設計の段階からQAエンジニアが入り、ニーズを満たしながら、正常に動作するものが作れるかどうかや、不具合発生のリスクをできる限り回避し、機能・仕様の確認をし、評価を行います。
・テストの設計/実行
機能漏れなど無いよう、無駄なくテストが行えるようなテストケース(テスト時に使用する仕様書)の設計を行います。QAテストの精度が低いと、システムが市場に出た後の不具合発生や正常な動作をしないなどのリスクが高くなります。
また、市場に出た後の改修作業は工数が大きくなりがちで、コストも大きくなるため、精度の高いQAテストを行い、できる限り不具合が起きない状態にしてリリースする必要があります。
・テストのフィードバック
テストの実施結果から、不具合が見つかった場合は、その原因を解明し対策を打ちます。そして、不具合の内容や再現手順をまとめたものを開発者やテスター、デバッカーに報告します。
・テストの自動化検討/提案
システムの規模次第では、テストの工数が膨らみすぎてしまうこともあります。その場合、テストに自動化ツールを導入することも検討する必要があります。自動化すれば、効率的なテストが実現できますが、この際もしっかりと品質保証に焦点を当てたテスト設計が必要になります。
・開発プロセスの改善
バグやエラーの内容を分析し、不具合発生の原因が開発プロセスにあるのかどうか、洗い出す必要があります。もし、開発プロセスに問題がある場合は、不具合を発生させないためのプロセスの確立や、不具合を素早く発見するための有効的なテストなど、開発プロセスの改善提案を行います。
・顧客対応
システムについて、開発者よりもQAエンジニアやテスター、デバッカーの方が詳しい傾向にあると言われています。そのため、ユーザーから不具合の報告があった場合、その対応をQAエンジニアが行うというのも珍しくありません。
このように、システム開発における「品質テスト」と言っても、QAエンジニアが担当する業務は多岐に渡ります。システム設計の段階から機能・仕様の確認や評価を行い、テストケースの設計、テストの実行、フィードバック、そして追加テストの判断もQAエンジニアの役割です。抜け漏れのないテスト計画の設計・実施のためにも、次の章で紹介するようなスキルが求められます。
QAエンジニアはその業務内容の多さから、求められるスキルも幅広いものになります。
・論理的思考
バグやエラーの分析を行い原因を突き止めて対策を打つ、分析 → 検証 → 対策実行 → フィードバックと言う流れを繰り返し行います。そのため、正しい対策を導き出すための論理的な思考が必要です。
・問題解決能力
重大なバグや顧客からのクレームにも対応が必要になる場合があります。そのため、様々な問題に直面した際に、冷静に対処し、迅速に原因を把握し解決を図る能力が求められます。
・プログラミングスキル
プログラミングの知識がないと、不具合について正しい判断ができない可能性があります。また、QAエンジニアが直接修正を行う場合もあるため、プログラミングのスキルが必要です。そのため、QAエンジニアはプログラマーやSEの経験者が多いです。
・システム開発やテスト技法に関する知識
品質テストの的確な設計や実行、フィードバックのためには、システム開発構造の理解や、開発内容にあった適切なテストを設計するための知識が重要です。
・マネジメント/コミュニケーションスキル
QAエンジニアは、開発に関わる様々な部署や関係者に関わります。そのため、スムーズな開発のためにもコミュニケーションは欠かせません。また、品質テストはリリース直前に行われることが多く、時間に余裕がないことも多いため、イレギュラーに対応する能力も必要になります。また、開発工程全体や品質向上のためのマネジメントスキルも必要です。
ここまで、品質保証の基本的な知識から、システム開発における品質保証の必要性、QAエンジニアの役割や業務内容を解説してきました。
QAエンジニアはただテストするだけでなく、テストケースの設計から関わり、テストの実施、フィードバック、またユーザーからの不具合報告の対応など、その業務内容は多岐に渡ります。
JIITAKでも多くのプロジェクトでQAエンジニアを起用してきました。「テクノロジーの力で今日の挑戦を価値ある明日につなぐ」というミッションのもと、ストラテジー・デザイン・エンジニアリングの各デジタル分野の専門チームで、アイデアの創出から戦略設計、開発・運用まで一気通貫で並走いたします。プロダクト開発でアイデアのある方、お困りごとのある方は、一度JIITAKまでご相談ください!