世に出回るソフトウェアは、その品質が保証されてこそ安全性・信頼性のある製品だと評価されます。
リリースされてから重大な欠陥が見つかったり、利用ユーザーに被害が及ぶようなセキュリティ事故が起こってしまうと企業全体の信用に影響してきます。
そのため、品質保証(QA)はシステム開発に欠かせない要素となっています。
今回は、QAについて、そしてQAに特化したQAエンジニアについてご紹介します。
QAとは?
製品の品質が期待される基準を満たしているかをチェックすることをQA(Quality Assurance:品質保証)と言います。
IT業界におけるQAとは、ソフトウェアの機能が仕様を満たしているかどうかを保証する検証作業のことを指します。
検証作業といえばテストやデバッグ等が思い当たりますが、それらを包括した概念がQAであり、リリース後に不具合を発生させないようにソフトウェアを検証していきます。
デバッグについては、以下の記事でも詳しく紹介しているのでぜひご確認ください。
QCとの違い
QC(Quality Control)とは、品質管理のことを言います。
QAとQCは混同されがちですが、QAはユーザーにソフトウェアを安全に利用してもらうための検証を行う仕事なのに対して、QCはソフトウェア開発において開発スケジュールや人員等に問題がないか、仕様通りのものが開発されているか等、製造の過程の中で製品の品質を向上させる仕事のことを指します。
大局的に見れば、QCはQAの一部であると考えることも出来ます。
QAエンジニアとは?
QAエンジニアとは、ソフトウェアの品質保証を目的とした業務を行うエンジニアです。
QAエンジニアの役割
QAエンジニアの役割は、品質保証であるため、ソフトウェアの品質チェック、及び品質維持が目的です。ソースコードの確認からテストケースの作成・実行まで、ソフトウェアの品質の改善に関わる部分を幅広く担当します。
テスト作業についてはテスターやデバッガーも担当するため意味が混同しがちですが、QAエンジニアはテスターやデバッガーよりも業務の幅は広いです。
テスターやデバッガーがテストや修正を行う担当であれば、QAエンジニアはその基になるテストケースを作成する役割があります。
しかし企業やプロジェクトによっては、QAエンジニアと、テスターやデバッガーを明確に区別していない場合もあります。
QAの具体的な内容
QAにおいて行われる具体的な作業内容についてご紹介します。
仕様書・機能設計内容の確認
対象ソフトウェアの仕様書や、機能設計内容を確認していきます。
仕様書に曖昧な点や設計に抜け漏れがないか、また仕様変更があればそれが仕様書に正しく反映されているか等、開発以降のフェーズで少しでも不具合発生のリスクを回避するために入念に確認・評価していきます。
テストケース設計とテストの実行
ソフトウェアが期待通りに動作するか、シナリオに基づいたテストケースを作成して、実際にテストを行います。
不具合が見つかった場合は、開発者に不具合が起こったテスト時の状況を報告して修正対応に入ってもらう等、コミュニケーションを取りながら作業を進めていきます。
テスト結果に応じた不具合分析
テスト結果で発生した不具合について分析し、不具合の再発防止策を提案します。
また、不具合分析により判明した傾向をプロジェクトのメンバーへ共有して、以降の開発を効率よく進められるためのフィードバックを行います。
### テスト自動化の構築・実行
テストを効率よく進めるために、必要に応じてテスト自動化の環境構築を行い、テストを実行します。
自動化出来るテスト、手動で行うべきテストをそれぞれ洗い出してツールの導入を検討する必要があるため、QAエンジニアにも開発や設計のスキルが求められます。
テスト自動化については、こちらの記事でも詳しく紹介しているのでぜひご確認ください。
### 開発計画の改善
開発計画の確認や評価、改善を行います。
QAにおいてソフトウェアのテストや分析を行なっていく中で、不具合の原因となった開発プロセスの問題点が浮き彫りとなってきます。
不具合を起こさないためにはどうするべきなのか、また不具合が起こっても早期発見する場合はどういった計画で開発を進めていけばいいかなどを、製品の品質向上のために検討していきます。
品質を上げるポイント
QAエンジニアとしてソフトウェアの品質を向上させるための具体的なポイントについてご紹介します。
開始前に品質管理の工程を明確にする
まず、作業全体のスケジュールを策定しやすくするために、開発の工程を明確にします。
開発の工程には、ウォーターフォール開発とアジャイル開発の代表的な2種類があります。
ウォーターフォール開発
何を作るかを明確にした状態で、システムを全体的に捉えて上流工程から順に開発にしていく手法です。
アジャイル開発
システムを機能単位で開発していく手法です。
それぞれにメリットはありますが、ウォーターフォール開発は手戻りが発生した場合に大幅にスケジュールが崩れてしまったり、アジャイル開発では開発の方向性がブレてしまうデメリットがあります。
テストケースの作成等、QAエンジニアは不具合を発見するための作業を行なっていくため、工程を明確にしておくことでスケジュールも組みやすくなります。
プロセスを重視する
開発の工程を明確にした後は、それぞれの作業が必要なプロセスに基づいているのかを確認します。
作業の漏れや無駄がないか、一連の流れを確認しましょう。
開発に割けるコストや時間をリスクマネジメントする
問題点を解決するのがQAの本質ですが、そのためには開発に割けるコストや時間を管理することも大切です。
各人員の作業パフォーマンスを維持するために作業負担を減らし、かつ、コストや時間を使いすぎないよう管理することが求められます。
品質マネジメントによる原則・ルールに従う
製品やサービスの品質を監視する活動・システムのことを品質マネジメントと言います。
システム自体がユーザーにとって安全なシステムか、またシステム開発が質の高い作業工程のもと行われているか、それら全ての活動が品質マネジメントにあたります。
品質マネジメントは、国際規格としてISO9001とISO14001で確立されています。
それぞれの規格に則った改善活動が出来ているかを確認しましょう。
関連部署との連携
関連部署との連携を取ることで、生産性は大きく上がり、品質向上にも繋がります。
例えば、製造部門と営業部門それぞれの部署間の連携が上手に取れていると、それぞれの立場で協力的に意見交換出来るようになり、お互いが納得のいくシステムを実現させることが出来ます。
まとめ
QAは、ユーザーの立場になって製品の品質をコントロールする大切な活動です。
製品の安全性や信頼性は、そのまま企業への評価にも繋がってきます。
QAエンジニアは、品質を上げるためのポイントを押さえて品質向上に取り組んでいきましょう。
QAに関してお困りの際はぜひ弊社までお問い合わせください。