DevOpsにおけるQAの役割とは

Hannah Son著

ますます大きくなる顧客からの要求に応え、業界内で遅れを取らないために、企業は以前にもまして速く機能をリリースしようと奮闘しています。市場の競争は激しく、品質の高い製品をデリバリーするために効率的なアプローチが注目されています。このような取り組みをサポートするさまざまなアジャイルアプローチが採り入れられる中で、近年人気を集めているのがDevOpsです。

DevOpsとは

従来、開発とテストは別個の要素とみなされていました。しかし、そのようなモデルにはボトルネックがあることがわかりました。たとえば以下のようなボトルネックがあります。

  • グループ間にコミュニケーションギャップがあり、欠陥につながっている
  • 実装済みの機能に関する理解が誤っている
  • テストカバレッジが明確ではない 
  • 互いの作業が可視化されていない
  • コラボレーションの不足により無用な摩擦が発生している
  • 不安定な機能がQAに送られる

そして何より、デプロイ後の製品を顧客がどのように利用しているかを誰もまったく把握していません。運用中のアプリケーションをモニターしている運用チームと直接コミュニケーションが取れていないため、製品をさらに改善するのに役立つ重要な統計が収集されていません。これは組織にとって計り知れない時間と労力、そしてコストの浪費であり、最終的には機能をスケジュール通りにリリースできず、顧客満足度の低下にもつながります。

DevOpsは、上記の問題を軽減し、誰もが品質に責任を持つという精神を改めて浸透させるために導入されました。DevOpsアプローチは、開発者、テスター、運用チーム間のコラボレーションを増やし、1つのユニットとして品質の高い製品のデリバリーに取り組めるようにすることに重点を置きます。 

DevOpsにおけるQAの役割

他のアジャイルアプローチでは、開発者はコーディングと機能の開発、単体テストの作成と実行を担当します。いっぽう、テスターは開発された機能に対して自動または手動テストを実施します。DevOpsは、このような担当範囲の線引きをあえてあいまいにし、コラボレーションを促進します。すると、開発者はコードのエラーを継続的にチェックするという意識を持ち始めます。テスターの責任は、アプリケーションの検証に留まらず、アプリケーションが常にデプロイ可能であることを保証することにまで拡大します。必要に応じてテスターがコードを修正することさえあるでしょう。これらの要素が組み合わさって、機能の迅速なデリバリーを保証します。顧客重視の視点がチーム全体の作業を動かします。

DevOpsでは、テストの観点が変わり、「このモジュールのテストが完了した」ではなく「リリース候補のどんなビジネスリスクが軽減されたか」が評価されます。QAチームは手動のテストに留まらず、スケーラブルなデプロイメント、開発プロセス開始時からの自動化、QA環境の標準化、継続的テストおよびCI/CDパイプラインへのQAタスクの統合などに重点的に取り組みます。

開発者、テスター、運用チーム間の高度なコラボレーションは、テスターが運用中のアプリケーションをモニターし、そのデータを利用して、十分な情報を得たうえで決断を下すことができるようステークホルダーを支援することを可能にします。

TestRail製品ページ

DevOps環境にQAを統合する方法

DevOpsは既存のQAプロセスに取って代わるものではなく、テスターの視点を従来のテスト方法からシフトさせます。たとえば、要件にテストケースをマッピングすること、手動でテストを実行すること、欠陥をレポートすることから、QAが個別の組織ではなく、大きなチームの一部として、よりアジャイルにソフトウェアをデリバリーする方法に目を向けさせます。

DevOpsにQAを統合する

DevOps環境にQAを統合するために行うことはいくつかあります。

チームの構造を再編する

最初に、開発者、QA、運用チームの間の境界を取り払う必要があります。これには、既存のQAチームをDevOpsの目標に沿って再編成することも含まれます。 

チームは1つの技術的チームに合流し、機能をスケジュールどおりデリバリーするためのさまざまなアクティビティに注力します。この技術チームは、コミュニケーションをとり、コラボレートし、作業を最適化することによって、問題を早期に検出してデプロイメントの前に修正する必要があります。また、テスターは要件からあいまいさを削ぎ落すことができる要件フェーズから開発プロセスに関与するべきです。テスターは機能がどのように開発され、テストされ、デプロイされ、リリース後にモニターされるかについてチーム全体が明確に理解できるようにします。そうすることで、継続的テストはひとりひとりの責任の一部になります。

できるだけ自動化する

次に、DevOpsと自動化を両輪として進めます―どちらかが欠けていると、もういっぽうもうまくいきません。ここでリリースサイクルを短縮し、信頼性を高めるために、優秀なメンバーやツールが活躍します。自動化可能なあらゆるものを自動化するべきです。これには、単体テスト、デプロイメントテスト、インテグレーションテスト、スモークテスト、セキュリティテスト、パフォーマンステストなどが含まれるでしょう。テスターは、いち早く欠陥を発見できる早期に自動化を開始することで、DevOpsプロセスにおいて不可欠の役割を果たします。

また、自動化の有効性を保つため、テストスイートをモジュール化し、開発プロセスのさまざまなフェーズで、テストする必要がある機能に基づいて実行します。最後に、製品に新機能が追加されるのに伴って、テストスイートは複雑さに応じてスケールアップできる柔軟性を備えている必要があります。これには、作業をサポートするためのソフトウェア、ハードウェア、スキルの高い人的リソースを追加することも含まれます。

メトリクスを使用して進捗を追跡する

DevOpsプロセスへのQAの統合がうまくいくかを左右するもう1つの重要な要素は、価値を定量化するメトリクスがあるかどうかです。Forrester Researchが実施した調査では、DevOpsチームが導入の成功度合いを測るために使用している75個の一般的なメトリクスが挙げられています。製品の品質に直接関係するものとしては、以下のようなメトリクスがあります。

  • テストケースのカバレッジ
  • 単体テストのカバレッジ
  • 成功/失敗率
  • 実行済みのテスト数
  • APIの成功/失敗率
  • テストによってカバーされた要件
  • ブロックされたテストケース
  • 自動テストケースの割合
  • 成功したコードのビルド
  • 新規欠陥
  • 重大な欠陥
  • リスクによって優先度を付けられた自動テスト
  • コードカバレッジ
  • リリース期日
  • テストで見つかった欠陥の合計
  • 新たに見つかった API の欠陥

こういったメトリクスを使用することで、どうすればQAが効果的に開発者、運用チーム、およびプロジェクト内のその他の職種とコラボレーションできるかを、ステークホルダーが情報に基づいて判断できます。

テストを並行して実行する

テスターはDevOpsプロセスのさまざまなアクティビティと並行してテストを実行します。並行テストを効果的に実行するには、QAエンジニアが標準化されたテスト環境をセットアップし、多数のテストをできるだけ高速に実行するのに十分なハードウェアおよびソフトウェアリソースを準備する必要があります。また、定期的な監査によって、テストプロセスがソフトウェアのデリバリー期間内に終わるよう最適化されていることを確認する場合もあります。

継続的モニタリング

DevOpsにはさまざまなツール、プロセス、自動テスト、環境が関与します。システムが常に最適なレベルで動作していることを保証するため、開発プロセスの複数のステージからデータが抽出され、分析されます。通常、運用チームは開発者およびテスターと協力して、開発対象アプリケーションに監視および解析機能を組み込みます。テスターが運用チームをサポートするには、Splunk、Kibana、Graphite、Firebaseなど、このために使用されるツールの使い方を理解することが重要です。

プロセスおよびツールの共通セットを持つ

組織における最大の問題の1つが、各チームが別々のプロセスに従い、同じタスクを実行するのに異なるツールのセットを使用していることです。これに気付かないでいると、コスト、時間、労力の浪費につながります。 

DevOpsでは、誰もが従う共通のプロセスおよびツールのセットについて、チームが合意を形成する必要があります。共通セットが決まれば、各チームメンバーには、開発プロセスの特定の段階でどのプロセスに従い、どのツールを使用するべきかがわかります。

継続的フィードバック

実装期間にチームから継続的なフィードバックを受け取ることの重要性を強調する必要があります。毎日のスタンドアップミーティング、チームミーティング、レトロスペクティブミーティング、計画ミーティングは、フィードバックを収集するためのよい接点です。フィードバックを元に、次のイテレーションに向けてアプローチを修正します。ビルド->計測->学習(検証済み学習)という継続的サイクルは、DevOpsプロセスの改善に役立ちます。

検証済み学習

タスクとプロセスの可視性を高める

DevOpsの導入を成功させるには、チームがコラボレーションし、互いの作業に対する可視性を持つ必要があります。あらゆる時点で、チームは開発プロセスの進捗を視覚的に確認できなければなりません。チームの速度、登録/修正された欠陥、実行されたテストの数、テストカバレッジ、その他チームにとって重要なKPIなどの必須メトリクスをハイライトするツールやダッシュボードを利用することができます。 

適切なトレーニング

テスターのスキルをDevOpsプロセスに適応させる必要があります。それには、誰もがフルスタックのテスト自動化を実施できるようトレーニングすることから始めます。これには、単体テスト、APIテスト、UIテスト、バックエンドテストなどの自動テストの作成が含まれます。手動テストも引き続き重要ですが、テストケースを手動で実行するだけでなく、リスクベースのテストおよび探索的テストをもっと実施することに重点が移ります。これは自動テストと並行して実施されます。

DevOpsプロセスでは、テスト戦略およびテスト設計がいっそう重要になります。テスターは開発者および運用チームと協力して作業しているため、テスト戦略はQAに加えて開発および運用チームを横断する領域に関するタスクを含む必要があります。確実なテスト戦略を考えだし、テストを設計するのによいアプローチは、さまざまな役割のメンバーが協力することです。これは、何をテストする必要があるか、誰が作業を実施するか、どのようにテストを実行するかについてチームが共通の理解を得るのに役立ちます。

最後に、DevOpsへの移行を成功させるには、3つの必須プロセス、つまり継続的テスト、継続的インテグレーション、継続的デリバリーを実装する必要があります。

DevOpsの3本柱 

DevOpsの主要な目的は、コラボレーションの促進です。これは継続的テスト、継続的インテグレーション、継続的デリバリーなしには実現不可能です。テスターはこれらのプロセスで重要な役割を果たします。

1.継続的テスト (CT)

CTとは、簡潔に言えば、早期ステージからアプリケーションをテストし、開発プロセスのライフサイクル全体でテストを自動化することです。CTはプロセスの各ステージで製品の品質を分析し、ステークホルダーが情報に基づいて決断を下すことを可能にするのに役立ちます。

また、運用中にエラーが発生するような機能をリリースしてしまうリスクを低減し、多大な時間、コスト、労力を節約します。鍵となるのは、できるだけ早期にテストし、できるだけ早く欠陥を見つけることです。 

現在のテストプロセスにCTを統合するにあたっては、以下のような点を考慮するべきです。

適切なリソースを準備する

開発プロセスの各ステージでテストを実施するなら、チームには適切なリソース、つまりハードウェア、ソフトウェア、そしてスキルを持ったエンジニアが必要です。CTを導入する前に、チーム共同でテスト戦略を決定し、必要なリソースを調達します。

シフトレフトパラダイムと連携する

CTはシフトレフトテストと連携し、早期の要求フェーズからテストを開始し、開発およびリリースプロセス全体を通じてテストを継続することを重視します。この連携の一環として、開発者およびテスターを従来とは異なるアクティビティに触れさせ、エンパワメントします。たとえば、開発者はよりよい単体テストを作成することにいっそう注意を払うようになり、テスターは開発アクティビティに関与することができます。これは開発サイクルのスピードアップと、どのような環境にも適用できる機能横断的チームの形成に役立ちます。

既存のテストプロセスの不備を特定する

CTを導入する前に、現在のテスト戦略の監査を行います。現在のテストカバレッジや実施されているテストのタイプ(スクリプトに基づく手動でのテスト実行、自動テスト、探索テストなど)を把握します。現在のボトルネックを特定し、運用で見つかったバグの傾向を分析し、CTによってどのように問題を軽減できるかを割り出します。

賢く自動化する

CTを導入するときにチームが陥りがちな問題の1つが、価値をもたらさず、長期的にはメンテナンスが悪夢になるかもしれないにもかかわらず、何もかもを自動化しようとすることです。たとえば、流動性の高い機能のテストを自動化すると、テストの実行よりもメンテナンスに時間を取られ、リソースの非効率的な利用につながる可能性があります。自動化を利用するのは、決まりきったタスクを繰り返す場合、より迅速にビルドに関するフィードバックを取得したい場合、複数の環境にビルドをデプロイする場合、また他の方法では実行が難しかったり、手動では時間がかかったりするようなテストを実施する場合にします。

適切な自動化ツールを利用する

効果的にCTを導入するには、さまざまなアクティビティに対して適切なツールを使用することに投資する必要があります。これには、単体テスト、UIテスト、APIテスト、パフォーマンステスト、セキュリティテスト、アクセシビリティテストなどのツールが含まれます。

2.継続的インテグレーション(CI)

CIは主要なDevOpsベストプラクティスの1つであり、コードの変更を中央のリポジトリに自動的に統合し、1日に数回ビルドして実行します。CIを導入する大きなメリットの1つは、エラーをすばやく検出し、比較的容易にエラーの場所を特定できることです。

CIパイプラインの導入はQAにとってさまざまなメリットがあります。

  • コードのチェックインへの依存を排除する

任意の数のメンバーが1日に複数回コードをバージョン管理システムにチェックインできます。互いに依存することはなく、各チェックインにはタイムスタンプがあるので、誰がコードを作成して特定のブランチにプッシュしたかを確実に知ることができます。つまり、テスターと開発者は、互いに干渉することなくアプリケーションと自動化コードを作成し、別々のブランチにチェックインできます。

  • より迅速なフィードバック

コードをチェックインすると、自動的にテストが実行され、ビルドに関するフィードバックがすばやく返されるため、可能な限り早くエラーを見つけて修正することができます。これによって、テスターは何が問題なのかをすばやく把握し、問題をレポートし、必要なアクションを取って欠陥を修正することができます。

  • コラボレーションの促進

CIはエンジニアリングのコミュニケーションおよびアカウンタビリティ全般を向上させ、DevOpsチーム内の開発、テスト、運用間のコラボレーションをより活発にします。プルリクエストがCIプロセスに結び付けられ、他のメンバーから見たコードの可視性が向上します。これにより、フィーチャーがCIパイプラインを通る過程で、フィーチャーブランチ上で開発者とテスターがコラボレーションできます。自動テストも同じプルリクエストプロセスに従う必要があります。

  • レグレッションテストの自動化

CIプロセスの一環として、テスターはレグレッションテストを構成し、ビルドが異なる環境にデプロイされたときに自動的に実行します。これにより、新しい変更が既存の機能を壊していないことが保証されます。レグレッションテストは、デプロイメントに対するフィードバックをより迅速に受け取れるよう、できるだけ短時間で実行されるよう設定されます。

  • 広汎な文書化

CIパイプラインの各ステージで自動テストが実行されると、事後の参照に備えてタイムスタンプ付きのログが大量に生成されます。これは、規制コンプライアンスを順守する必要がある組織にとっては特に役に立ちます。ログは定期監査時にポリシーおよび手順への違反がないことを証明するための豊富な情報源となります。

3.継続的デリバリー(CD)

DevOpsに欠かせない要素の1つが、機能の迅速なデリバリーです。CDはいつでもアプリケーションをリリース可能にすることで、迅速なデリバリーを実現します。アプリケーションが自動テストに合格したことを確認するだけでなく、必要なすべての設定を運用環境にプッシュしなければなりません。CDは、ビルドの概念化から運用環境へのデリバリー準備を整えるまでのあらゆることを包摂します。

CDパイプラインにおけるQAの役割は、開発プロセスを通じて継続的テストが実施されるようにすることです。テスターはさまざまなツールを使用してスモークテスト、レグレッションテスト、APIテスト、UIテスト、パフォーマンステスト、セキュリティテストを実施します。ツールは時間を節約し、探索的テストやリスクベースのテストを実行するための時間を作り、認識されたリスクを軽減します。また、CI環境を整えることで、ビルドプロセスのさまざまなフェーズで自動化されたチェックが行われ、機能の品質に関するフィードバックをより早く届けることができます。

DevOps導入に必要な主なツール

DevOpsは継続的テスト、継続的インテグレーション、継続的デプロイメント、継続的デリバリーを伴うため、多数のツールを使用してアプリケーションに関するフィードバックをすばやく取得する必要があります。

以下は、DevOpsパイプラインでよく利用されるツールの例です。

  • ソースコードリポジトリ: Git、Assembla、CloudForce、TFS、Subversion
  • ビルドサーバー: SonarQube、Jenkins、Artifactory、Travis CI、Circle CI、Kubernetes、Docker
  • フィーチャーフラグ: Rollout、LaunchDarkly
  • 単体テスト: JUnit、NUnit、RSpect、TestNG、Jasmine、Mocha
  • 構成管理: Puppet、Ansible、Salt、Chef
  • テスト自動化: Selenium、Appium、Watir、Ranorex、Cypress、Espresso
  • テスト管理: TestRail、Jira、Zephyr、Xray、PractiTest
  • モニタリングツール: Splunk、Kibana、Graphite、Crashlytics
  • 仮想基盤: Amazon Web Services、Microsoft Azure、VMware vCloud
  • 非機能的セキュリティテスト – Mittn、Gauntlt、BDD Security
  • 静的解析セキュリティテストツール – Kiuwan、Coverity、Checkmarx、その他の有償ツール。オープンソースの選択肢には、Reshift、Brakeman、JSHint、NodeJsScanなどがある。
  • セキュリティスキャナー – Netspaker、Acunetix、Wireshark、Nessus、OWASP ZAP (オープンソース)

このように、DevOpsパイプラインでさまざまな目的のためにさまざまなツールを利用できます。自分のプロジェクト環境に最適なツールを選択するのによいアプローチとして、以下に気を付けてください。

  • コラボレーションを促進するツールを選択する

DevOpsで利用されるほぼすべてのツールは、複数のチームメンバー間の効率的なコラボレーションを促進するべきです。たとえば、バージョン管理は、DevOpsを実践するプロジェクトも含めたあらゆるアジャイルプロジェクトにとって基本的な必須要素です。バージョン管理に使用されるツールは、コード、構成ファイル、スクリプト、その他の成果物を複数のチームやシステムにわたってシームレスに統合するのに役立つべきです。

  • オープンなAPIを備えたツール

技術は急速に進歩するため、既存の問題を解決する新しいツールが登場します。従って、チームは新しいツールに移行することがよくあります。新しいフレームワークやツールへの移行は、DevOpsプロセスに従うチームでは通常のことと仮定する必要があります。 

新しいツールに移行する場合でも、APIを呼び出すことで、最小限の混乱で既存のスクリプトを使い続けられるよう、ツールにオープンなAPIがあることが重要です。1つのツールにとらわれず、選択したツールがAPIを利用して他のツールとどれだけ容易に統合できるかを検討しましょう。

  • 使いやすさ

DevOpsチームを構成するのは、開発者、テスター、運用チーム、ビジネスアナリスト、プロダクトマネージャー、プロジェクトマネージャー、その他のステークホルダーなどのさまざまな役割のメンバーです。選択したツールは、学習カーブが急ではなく、誰にでも使えるツールでなければなりません。ツールの使い方を学ぶのが難しすぎると、みな消極的になり、ツールを使うのをやめてしまいます。コラボレーションがDevOpsの鍵である以上、さまざまな技術的また業務的バックグラウンドを持つメンバーにとってツールが使いやすいかどうかに注意を払うことが重要です。

QAは確実なDevOps戦略の導入に欠かせない一部です。包括的なQA-DevOps移行計画なしでは、より高速なリリースおよびデリバリーサイクルは実現しません。DevOpsの世界ではQAチームの役割もシフトしました。単独で貢献するのではなく、QAに関する相談役という立場になりました。テスターは従来のようにテストサービスを提供することから、開発や運用チームを含めた役割を越えてリスクを軽減することで、品質の高いソフトウェアデリバリーを支援することに意識をシフトする必要があります。役割の異なるメンバーと密接に協力することになるため、品質の重要性を皆に教える機会が増えるでしょう。個別のQAチームというものはなくなり、異なる役割のメンバーを統合した技術チームになります。

QAチームは価値を付加する新たな方法を見つけ出すことを迫られますが、それはQAチームの持つクリティカルシンキングのスキルを表に出すのに役立つでしょう。それは、責任を引き受け、従来のQAチームにいたときには経験しなかった、戦略的決定を下すことも意味する場合があります。エンドユーザーから見たソフトウェア、また顧客が日々どのようにソフトウェアを利用しているかを考えることがより重視されます。 

DevOps導入を阻害する最大の問題の1つがプロセスそれ自体です。QAだけでなく、すべての職種が態度を変化させる必要があります。それには相当の努力と高い基準が求められ、より多くのツールやリソースを必要とします。適切にDevOpsを導入すれば、最初の苦労をはるかにしのぐ恩恵を受けられます。

(この記事は、開発元Gurock社の Blog 「What is the Role of QA in DevOps?」2022年4月26日の翻訳記事です。)

「DevOps」に関連する記事

関連する製品

テスト管理ツール TestRail

テストケースの管理やテスト結果の記録、チームでの情報共有など、Excelを使ったテスト管理の業務に限界を感じていませんか?TestRailはシンプルで使いやすいUIを提供し、テストにかかるさまざまな管理コストの削減に貢献します。

■ TestRailの特長 ■

  • テストにさまざまな情報を関連づけて一元管理
  • Webブラウザー上でテストケースを簡単に入力や編集可能
  • テスト実施の準備と結果の共有が容易
  • 進捗や比較などのレポートを提供
  • 要件 / 課題管理ツールやテスト自動化ツールと連携

日本国内では、テスト管理にExcelを使っていたお客さまからの乗り換えが多く、Web上で完結するテスト管理を実現されています。

TestRailでテスト管理のお悩みを解決しませんか?

テストの生産性向上をTestRailでお試しください

クラウドおよびオンプレミス、デモサイトでTestRailがお試しいただけます。

  • TestRailクラウド(クラウドサービス)
    • クラウドサービス環境でTestRailをお試しいただけます。
  • TestRailサーバー(オンプレミス版)
    • お客様のマシンにTestRailをインストールしてお試しいただけます。
  • TestRailデモサイト
    • インストールなどの設定なしにTestRailにサンプルデータが登録された環境にて操作をお試しいただけます。

eBook 公開中

Paul Gerrard著 効果的なテスト管理12の秘密 (日本語)

テスト計画やテスト管理に役立つ12のトピックを解説します。

詳細はこちら