ソフトウェア・システム開発を含め、モノづくりの現場には「QA(Quality Assurance:品質保証)」という活動があります。QA活動は、単に製品に問題がないかの確認にとどまらず開発物の品質をユーザーの視点で評価し、必要ならば企画段階から関与して製品の品質を保証し、さらに品質を向上させる活動を担います。ここでは、ソフトウェアのQAについて、その概要と取り組み方をご紹介します。
QAエンジニアが行うソフトウェアの品質保証とは
ソフトウェアに限らず、製品やサービスに求められる品質は、それを使う人のニーズによって変化します。QAとは、使う人のニーズによりマッチした高い満足感が得られる製品・サービスを生み出すすべての活動を指します。
近年、ソフトウェア・システムがあらゆるシーンで利用され、その品質問題が個人だけではなく社会に大きな影響を与えています。ソフトウェア・システムに対するニーズの変化も激しくなり、それに追従するために開発サイクルが短くなっています。、変化に柔軟に対応できる開発体制に移行するなど、開発環境の変化も激しくなっています。
ソフトウェアはハードウェアのような物理法則の制約がないぶん設計の自由度が高く、またソフトウェアは「目に見えない」という特性もあります。
このようにソフトウェアの品質保証はハードウェアとは異なる難しさがあり、ソフトウェアの特性を踏まえた品質保証を行う必要があります。
QAとQC
QA(Quality Assurance:品質保証)と似た言葉に、「QC(Quality Control:品質管理)」があります。「QA」が時には企画段階からかかわりながら製品の品質全体を保証するのに対し、「QC」は製造の一工程で製品が一定水準を満たしているかを検査・分析する仕事をさします。ソフトウェア開発ではイメージしにくいですが、工場の生産ラインの工程を管理し、不良品を出荷しない活動といえばイメージしやすいのではないでしょうか。「QC」は品質保証の仕事の一部といってもいいでしょう。
QAエンジニアとは
ソフトウェアの品質を保証する活動は、設計段階での要件・仕様の確認と評価、テスト設計、開発工程や環境の見直しなど、多岐にわたります。その中で専門の知識を有しQA活動をけん引する技術者を総称して「QAエンジニア」と呼びます。ソフトウェア・システムの品質を守り、より高めるための役割をQAエンジニアが担います。
開発エンジニアとQAエンジニア
ソフトウェアの単体テスト、ホワイトボックステストは開発知見が必要となるため、その実施は通常開発エンジニアが担当します。また、CI/CD(継続的インテグレーション/継続的デリバリー)体制においてはツール上で静的解析を行うなど、開発エンジニアがテストを行う環境が整い、また自動化エンジニアがテストを行うケースも増えています。
しかし、QAやテストに関する専門知識を有するQAエンジニアがテストを担当することで、以下のようなメリットが生まれます。
- ソフトウェアのテストには開発知見を問わないテストも多々あり、テストに対する専門知識を有するQAエンジニアがテストを担当することでテスト内容が充実し、また開発エンジニアが開発に専念できる環境が作れる
- QAエンジニアがテスト戦略に則り計画したQA活動を行うことで、全体を俯瞰して第三者視点でのテストが行える
以降で、代表的なQAエンジニアの役割をご紹介します。
QAエンジニアの役割と仕事
QAエンジニアには以下のような役割が求められます。
- QAコンサルタント:既存のQA体制の分析と改善活動
- テストマネージャー:テスト計画~テスト運用~テスト振り返りなどを担当
- テスト設計者(テストエンジニア):テスト分析~設計~実装を担当
QAコンサルタントの仕事
QAコンサルタントが行う業務に、「QAマネジメント」があります。より良い品質を目指すには完成したプロダクトの品質をチェックし不良品を市場に出さないだけではなく、より上流から品質を作りこむ体制の構築が重要です。既存のQA体制の改善やプロセス改善の推進など、品質保証を推進するためには専門的知識と経験、コミュニケーション能力をもつQAコンサルタントが重要な役割を担います。
テストマネージャーの仕事
テストマネージャーが主に行う業務として「テスト計画」があります。テスト計画は、対象ソフトウェア・システムに対して
- テスト対象
- テスト範囲
- テストアプローチ
- 開始終了判定基準
- ドキュメントの定義
- テストスケジュール
- 使用機材・ツール・環境
などのテスト活動に必要な要素を定義します。以降のテストは、このテスト計画に沿って行われるため、テストにおいて重要な活動の一つです。
テスト設計者の仕事
テスト設計者は、「テスト分析~設計~実装(テスト基本設計・詳細設計)」という一連の業務を担います。要件定義書や設計書などの各種資料を分析し、必要なテスト密度・粒度を設定、テスト技法を決定してテストケースを作成します。
テスト分析から実装までの活動で確認すべき要件の漏れが発生すると、実際のテスト実施でも確認が漏れることになり、結果として納品後やリリース後に障害が発生するリスクが高まります。何に対してどのようにテストすべきかの見極めはこのような確認漏れを防ぐために重要で、テスト設計者の仕事もまた品質を守るうえで重要な活動です。
品質保証は、QAエンジニア単独ではなく組織的な取り組みが必要
品質保証は、よりよいソフトウェア・システムをリリースするために欠かせない活動です。その活動は、開発エンジニアやQAエンジニアが単独で行うものではなく、組織的に取り組む必要があります。とはいえ、組織のQA体制を強化するためには人材の育成や組織風土の醸成が必要で、一朝一夕でできるものではありません。そのような場合は、外部委託などで品質保証の体制強化を図ることも選択肢のひとつです。
また、長期的にはQAエンジニアの育成を進めることも必要となるでしょう。
ソフトウェアテストの分野には、ISTQBという国際団体があり、その加盟組織であるJSTQBが日本におけるソフトウェアテスト技術者資格の認定を行っています。JSTQBの認定取得を目指すことはQAエンジニアの育成につながり、企業の品質保証の土壌をつくるひとつの方法です。QAエンジニアへの第一歩として、JSTQB資格の取得を目指してみるのも良いかもしれません。