ユニット 8 / 11

テストカバレッジ分析とリスクベースのテスト: AI で正しい目標を達成する

利益:

  • 回線、分岐、条件カバレッジなどのメトリクスを信頼ではなくマップとして読み取り、高いカバレッジが疑似信頼を与える可能性があることを理解する機能
  • 要件のスコープをコードのスコープの隣に置き、人工知能を使用してトレーサビリティのギャップを可視化する機能
  • リスク = 確率 × 影響という公式を使用して機能をスコアリングし、限られたテスト労力を最も高いリスクに向け、意図的な範囲外を文書化する機能

すべてのソフトウェアを永久にテストすることはできません。時間とリソースは限られています。したがって、本当の問題は、限られたテスト労力をどこに投入するかということです。この質問には 2 つの概念が答えます。テスト カバレッジ (テストによってどの程度のコードまたは要件が変更されたかを測定する指標) は、何がテストされているかを表します。リスクベースのテスト - エリアの劣化の確率と、劣化したときに引き起こされる損害に応じてテストの優先順位を決定するアプローチ - は、最もリスクの高い部分に取り組みを向けます。人工知能 (AI) は、カバレッジギャップを可視化し、リスク領域を示唆するという、両方の分野で強力な分析パートナーです。ただし、中心的な警告は残ります。AI が認識するスコープの数は誤解を招く可能性があります。何も検証しないテストでは、100% の行カバレッジさえも達成できます。あなたの仕事は、スコープを信頼ではなくマップとして読み取ることです。

カバレッジメトリクスを正しく読み取る

スコープにはいくつかの種類があり、すべてが同じように意味があるわけではありません。

  • 行カバレッジ: 少なくとも 1 回実行されたコード行数。最も一般的だが最も弱い基準。ラインが機能するからといって、それが正しく動作するという証拠にはなりません。
  • ブランチ カバレッジ: すべての if ブランチ (true と false の両方) がテストされたかどうか。一行よりも意味がある。
  • 条件カバレッジ: 複雑な条件の各サブ条件を個別にテストします。
  • パス カバレッジ: コード内の論理パスの組み合わせ。これは最も包括的なものですが、実際に完全に到達するのは困難です。
注意: カバレッジの割合は「品質スコア」ではありません。 100% の行カバレッジは、行が機能していることを示します。正しい結果 (ユニット 1 の擬似パス) が生成されるわけではありません。このスコープは、「すべてがテスト済み」という保証としてではなく、「どこを見たことがないのか」という質問に対する答えとして使用してください。

スコープの死角

カバレッジ メトリックは、実行されたコードの量のみを測定します。 (1) 未テストの要件 (コードは存在するがビジネス ルールが間違っている)、(2) 欠落しているコード (一度も書かれていないコントロールのスコープがない)、(3) データと状態の組み合わせ、(4) ユーザビリティ、パフォーマンス、セキュリティ。したがって、要件カバレッジ (各許容基準は少なくとも 1 つのテストで満たされる必要がある) をコード カバレッジの隣に配置する必要があります。 AI は、要件とテストのマッピング (トレーサビリティ マトリックス) を作成するのに非常に役立ちます。

リスクベースのテスト: どこに力を入れるか?

リスク = 確率 (破損の可能性) × 影響 (破損した場合の被害)。 AI を使用すると、これら 2 つの軸で特徴リストをスコア化し、ヒート マップを作成できます。高確率×高ドメイン (支払い、認証、データ整合性) には、最も厳しいテストが必要です。低×低領域(めったに使用されない設定画面)の照明テストで十分です。

エリア

確率

影響

リスク

テスト密度

お支払いの流れ

中程度

非常に高い

高い

ディープ + オートメーション

認証

中程度

非常に高い

高い

ディープ + セキュリティ

製品検索

高い

中程度

中~高

自動化 + 検出

プロフィール写真

低い

低い

低い

ライトコントロール

ヘルプページ

低い

低すぎる

低すぎる

レビュー

スコープを追いかける罠

カバレッジ率を目標にする (例: 「チームはカバレッジ 90% に合格する必要がある」ルール) という危険な副作用があります。開発者とテスターは実際のリスクに対処するのではなく、パーセンテージを高めることに集中します。その結果、多くの場合、アサートや簡単なテストのない肥大化したスコープが生成されます。数値は見栄えがしますが、保護はありません。これは、基準自体が目的になると基準が損なわれる現象です。「尺度が目的になると、それは良い尺度ではなくなる」のです。このスコープは、パフォーマンス レポート カードではなく、診断ツールとして使用してください。

より健全なアプローチは、範囲を方向性を持って読み取ることです。「なぜ重要な支払いモジュールで支店カバレッジが 40% に留まっているのか?」問題は「全体のカバー率は90%ですか?」です。それは質問よりもはるかに価値があります。 AI にスコープ レポートをモジュールとリスク レベルごとに分類させます。カバー範囲が狭い、リスクの高いエリアを強調表示します。したがって、スコープは、盲目的なパーセンテージではなく、労働を指示する羅針盤になります。

注意: 「100% カバレッジ」というスローガンは罠です。一部のコード (単純なアクセサー、自動生成された部分) をテストすることの価値は低くなります。そこで費やされる労力は、リスクの高いビジネス ルールから盗まれます。目標は、すべての行ではなく、すべての重要な動作とリスクをテストすることです。

弱いプロンプト / 強いプロンプト

弱者: 「テスト対象範囲を増やしてください。」
Strong: 「この許容基準とこれらの既存のテスト ケースのリストを考慮します。(1) どのテストでも満たされていない許容基準 (要件カバレッジ ギャップ) を表にします。(2) 確率軸と影響軸で各機能に 1 ~ 5 のスコアを付けます。リスク = 確率 × 影響でランク付けします。(3) 限られた時間内で、リスクが最も高いものから順に、最初に埋めるべき 5 つのギャップを提案してください。コード ライン カバレッジを唯一の基準とせず、ビジネス リスクを優先します。基準: [...]テスト: [...]"

強力なプロンプト。範囲とビジネスリスクを組み合わせ、限られた労働力を優先します。

コピー可能な 4 つのテンプレート

1) 要件範囲のギャップ:

以下の許容基準とこれらのテストケースを考慮します。トレーサビリティ テーブルを作成します: 各基準 -> それを満たすテスト。テストが存在しない基準は「COVERAGE GAP」と呼ばれ、どの基準にも接続されないテストは「NECESSARY?」と呼ばれます。マーク: 基準: [...] / テスト: [...]

2) リスクスコアリング:

この機能/モジュールのリストを、確率 (壊れる可能性) 軸と影響 (壊れた場合のダメージ) 軸で 1 ~ 5 でスコア付けします。リスク = 確率 × 影響。表に並べ替えて、高リスク領域ごとに推奨されるテストの種類 (ユニット/API/UI/偵察/セキュリティ) を指定します。リスト: [...]

3) 範囲の解釈:

次のカバレッジ レポートが提供されました (行 %、分岐 %)。これを教えてください:- これらの数字が証明していないことは何ですか?- 行カバレッジが高いにもかかわらず、リスクにさらされている可能性のある領域は何ですか?- カバレッジでは確認できないギャップ (要件、データの組み合わせ、セキュリティ) について、どのような追加テストをお勧めしますか?レポート: [貼り付け]

4) 期間限定プラン:

放送まであと [X 時間]。以下のリスクランキングと補償範囲のギャップが示されています。この期間中に、優先順位に従って、最大のリスクを軽減するテスト計画が作成されます。意識的にテストしてはいけないことと、テストを行うことで許容されるリスクを明確に述べます。データ: [...]

ミニケース3個

ケース 1 — 100% カバレッジ、ゼロトラスト。あるチームは 94% のライン カバレッジを誇っていました。 「スコープ解釈」分析では、ほとんどのテストがアサートレスであり、行を実行しても何も検証していないことがわかりました。実際の保護範囲ははるかに低かった。チームは数値ではなく、突然変異テスト (ユニット 10) に焦点を当てました。実際のエラー捕捉率は 2 倍になりました。

ケース 2 — リスク マップの優先順位が修正されました。あるチームは、テスト作業の 40% をめったに使用されないレポート画面に費やし、「うまくいく」という理由で支払いフローをスキップしていました。 AI リスク スコアリングでは、この不均衡が示されました。労働力は再分配された。 2 週間後、支払いフローで大きな影響を与えるバグが見つかり、ライブ前にクローズされました。

ケース 3 — 意識が範囲外。リリースから 4 時間後、チームは何をテストするか、「限られたスケジュール」テンプレートで何を意識的にスキップするかを決定しました。 2 つの高リスクストリームが徹底的にテストされました。低リスクの設定画面は「許容リスク」として文書化され、スキップされました。この決定は透明性があり、合理的でした。無事バージョンが出ました。

よくある間違い

  • カバレッジ率を品質と誤解しています。高い行カバレッジを「テスト済み」の保証として読み取ります。
  • コードカバレッジを見ているだけです。要件の範囲をスキップします (各受け入れ基準のテスト)。
  • リスクを考慮せずに平等にテストする。リスクの低い領域に労働力を割り当て、重要なフローを無視する。
  • 範囲外に隠れています。十分な時間がなかったときにテストされなかったものを文書化しない。発売後の驚き。
  • AIのリスクスコアを疑いなく受け入れる。 AI は製品のコンテキストを完全には理解していません。専門家の目でスコアを調整します。

要約すれば

テストカバレッジとリスクベースのテストは、限られた労力を適切な場所に振り向けるための 2 つのツールです。カバレッジ メトリック (ライン、ブランチ、条件、パス) は、何に触れられたかを示しますが、それが正しく動作したことを証明するものではありません。スコープはマップですが、信頼はそうではありません。要件のカバレッジをコード カバレッジの隣に置きます。リスク = 確率 × 影響という式を使用して特徴にスコアを付け、最大のリスクに直接取り組みます。 AI はギャップを可視化し、リスクをスコア化し、限られた時間を計画します。しかし、最終的な優先事項と「意識的なオプトアウト」の決定は、ビジネスの背景を理解している専門家にあります。

アプリケーションタスク

独自のプロジェクトからモジュールを選択します。 AI を使用して「要件範囲のギャップ」テンプレートを実行し、どの受け入れ基準がテストされていないかを見つけます。次に、「リスクスコアリング」を使用して、確率×影響軸でモジュールのサブ機能をランク付けします。 (仮定の) 3 時間のテスト時間を「限られたスケジュール」で配分します。意識的にテストしないことと、許容されるリスクを書き留めます。見つかった最もリスクの高い適用範囲のギャップを埋める具体的なテストを追加します。

チェックリスト

  • [ ] カバレッジの割合を品質ではなくマップとして読みます。
  • [ ] コード カバレッジに加えて、要件カバレッジも削除しました。
  • [ ] 確率×影響度によって特徴をスコア化し、リスクによってランク付けしました。
  • [ ] 私はテスト作業の方向を最も高いリスクに向け直しました。
  • [ ] 私は意識的にテストされておらず、リスクが認識されていない領域を文書化しました。
  • [ ] 製品のコンテキストに基づいて AI のリスク スコアを確認しました。