リスクベーステストの実践的アプローチ

すべてのソフトウェアアプリケーションは、何らかの形で顧客にサービスを提供するために設計されています。アプリケーションには、製品としてリリースされたときに期待された通りに動作する複数の機能があり、開発チームはこれら機能を早期リリースするために常にプレッシャーをかけられています。その結果、すべての機能をテストしなければならないという厳しいスケジュールを抱えています。

では、どのようにしてテストすべき機能に優先順位を付け、どのモジュールが他のモジュールよりも多くのテスト作業を必要とするかを評価すればよいのでしょうか。その答えは「リスクベーステスト」にあります。

リスクベーステストは、リスクを低減し、それに応じてテスト作業の優先順位を決めることに重点を置いたテスト手法の一つです。このテストでは、ソフトウェアの複雑さ、顧客への影響、製造上の問題の履歴などに基づいてリスクを評価します。最終的には、各モジュールに必要なテスト作業のレベルを決定するリスクスコアを算出します。

たとえば、2つの要件をテストするとします。
要件Aは、顧客がWebページを介して支払いをおこなえるように支払い機能を構築することであり、要件Bは、Webページ全体のフォントサイズを14から16サイズに変更することです。
要件Aが正しく実装されていない場合、顧客からの支払いが一切おこなわれない可能性があるため、ビジネスや顧客に対して大きな影響を与えます。その結果、莫大な金銭的損失や、顧客の満足度の低下を招く恐れがあります。また、要件Bが期待通りに動作しなかった場合、問題ではありますが、顧客やビジネスには金銭的な影響はなく、お客様に気づかれないこともあります。

上記の要件をテストするための作業工数が3日間ある場合、大半の時間を要件Aのテストに割り当て、残りの時間(もしあれば)を要件Bのテストに割り当てる方が理にかなっています。このようにして、リスクと影響に基づいてテスト作業に優先順位を付けます。

リスクベーステストの実施方法

リスクベースのテストは2つの段階で構成されています。

  • 何をテストすべきかを明確にする
  • 形式的手法に基づいてリスク分析を実施する

何をテストすべきかを明確にする

開発チームのメンバーは、アプリケーションの一部としてテストしなければならないさまざまな機能について、共通の理解を深める必要があります。

このプロセスに役立つ質問は以下の通りです。

  • どのような機能をテストしなければならないか?
  • テストに必要な時間はどれくらいか?
  • テストのためのリソースはどれくらいあるか?
  • アプリケーションの中でリスクの高い部分は何か?
  • テストの対象外とすべきものは何か?
  • テストの進捗を測定するために、どのような指標を使用すべきか?

これらの質問に対する答えを明確に理解した上で、開発チームはリスク分析をおこなうことができます。

形式的手法に基づいてリスク分析を実施する

リスクベースドテストの最初のステップは、正しいリスク分析をおこなうことから始めます。

  • テスト対象のモジュールを絞る
  • 各モジュールに関連するさまざまなリスクを特定する
  • 影響度、複雑性、製造上の問題の履歴に関するスコアを収集する
  • リスクスコアの算出

次のステップでは、リスクスコアに基づいて、実行すべきテストの種類と、各モジュールにどれだけの作業コストを割くべきかを特定します。

たとえば、飛行機のチケット予約のアプリケーションがあるとします。
このアプリケーションにはさまざまな機能がありますが、一部の機能が動作しなかった場合のお客様への影響は機能によって異なります。

リスク分析をおこなった場合、次のことが明らかになるかもしれません。

  • モジュール:テストしたい、またはテストする可能性のあるもの
  • リスク:潜在的な問題とその影響を直接的かつ簡潔に記述したもの
  • 影響度評価:ビジネス担当者が、顧客への潜在的な影響の評価を1~5段階で表したもの(5 = 最大の影響、1 = 最小の影響)
  • 技術的評価:ソリューションアーキテクトまたはテクニカルリードによる、実装の複雑性、解約、依存性、その他の技術的側面に基づく、モジュールで問題が発生する可能性の評価を1~5の段階で表したもの(5 = 最も可能性が高く、1 = 最も可能性が低い)
  • 過去の評価:過去の製造上の問題に基づく、問題の主題専門家の評価を1~5段階で表したもの(5 = 最も可能性が高く、1 = 最も可能性が低い)

¹ 技術的および歴史的評価の最大値
² 影響度評価×モジュール評価

リスクスコアを特定した後は、次の観点からテストの優先順位付けを始めます。

  • どのくらいの手動テストへの作業コストが必要なのか?
  • どのようなフローを自動化しなければならないか?
  • どのようなリグレッションテストをおこなう必要があるか?
  • どのようなフローで、どれくらいの数の探索的テストが必要か?

このようにして、顧客や会社に大きな影響を与えるリスクの高いモジュールに絞ってテストをおこないます。また、致命的な不具合を早期に発見することができます。

テストにかけられる時間は限られているので、その時間を賢く使うことが大切です。テストをより効果的なものにしたいのであれば、リスクに応じたテストを始めてみてはいかがでしょうか。

作者について:

Raj Subrameyerは、国際的な基調講演者、ライター、およびキャリアコーチであり、技術的なバックグラウンドを豊富に持っています。 彼のBlog(rajsubra.com/blog/)では、読者の生活に役立ち、インスピレーションを与えるニュース、リソースを投稿しています。

(この記事は、開発元 Ranorex 社 Blog 「A Practical Approach to Risk-Based Testing」2021年3月3日の翻訳記事です。)