ソフトウェアにおけるパステストと基本パステスト(例付き)

⚡ スマートサマリー

基本パステストは、制御フローグラフと循環的複雑度を用いて最小独立パスセットを見つけ出し、プログラム内の論理パスからテストケースを導出するホワイトボックス手法です。

  • おいおいおいそ️ コアアイデア: テストケースは、要件定義書ではなく、コード構造から生成される。
  • 🔢 4つのステップ: 制御フローグラフを描き、循環的複雑度を計算し、基底集合を導出し、パスごとに1つのテストを記述する。
  • 📐 テストケース数: 独立経路の数は循環的複雑度に等しく、客観的な目標値を与える。
  • 🔄 ハイブリッド方式: 分岐テストとパステストを組み合わせることで、最小限のテストで最大限のカバレッジを実現します。
  • 補償保証: 基底セットを実行すると、モジュール内のすべてのステートメントが少なくとも1回実行されます。
  • ⚠️ 既知の限界値: 既に存在するコードしかテストしないため、不足している要件を見つけることはできません。

パステストの基本パステスト

ソフトウェアテストにおけるパステストとは何ですか?

パス テストは、プログラムのソース コードを使用して、考えられるすべての実行可能パスを見つける構造テスト方法です。 これは、コード内にあるすべての障害を特定するのに役立ちます。 この方法は、コンピュータ プログラムを通じてすべてまたは選択されたパスを実行するように設計されています。

複雑なプログラムには、多くの実行パスが存在します。それらすべてをテストすることは困難かつ時間もかかり、しかもほとんどのパスは重複しています。基本パステストは、すべてのステートメントとすべての分岐を少なくとも一度は実行する最小限のパスセットを特定することで、こうした重複を削減します。

ソフトウェアエンジニアリングにおけるベーシスパステスト

基底パスのテスト ソフトウェアエンジニアリングでは、 ホワイト Box テスト プログラム内で通過できるフローまたは論理パスに基づいてテスト ケースを定義する方法。 基本パス テストの目的は、独立したパスの数を定義することであるため、必要なテスト ケースの数を明示的に定義してテスト カバレッジを最大化できます。

In ソフトウェア工学, ベーシス パス テストでは、プログラム内のすべての可能なブロックの実行が含まれ、最小限のテスト ケースで最大のパス カバレッジを実現します。 ブランチテストとパステストのハイブリッド方式です。

簡単な例を挙げれば、その考えが具体的に理解できるだろう。

ソフトウェアエンジニアリングにおけるベーシスパステスト

上記のフローグラフには条件文が含まれているため、制御は複数の経路で出口に到達できます。これを網羅するには、3つの独立した経路が必要です。

  • パス1:1,2,3,5,6、7
  • パス2:1,2,4,5,6、7
  • パス3:1、6、7

制御フローグラフの描き方

基本パステストのすべてのステップは制御フローグラフに依存するため、その構築方法について正確に理解しておくことが重要です。

  • ノード: 常に同時に実行される一連のステートメントを円で表したもの。分岐のないステートメントの連続は、単一のノードに集約される。
  • エッジ: 制御が1つのノードから次のノードへ移行する様子を矢印で表したもの。制御の移動はエッジによってのみ行われる。
  • 述語ノード: 条件を含むノードで、そこから2つ以上のエッジが伸びているもの。これらが複雑度を決定づける要因となる。
  • 地域: 辺と節点によって囲まれた領域。領域の数に1を加えた数が、サイクロマティック複雑度に等しい。

2つの決定事項を含む短いモジュールを考えてみましょう。

if (a > b) {          // node 1, predicate
    max = a;          // node 2
} else {
    max = b;          // node 3
}
if (max > limit) {    // node 4, predicate
    alert();          // node 5
}
return max;           // node 6

グラフには6つのノードと6つのエッジがあり、エッジの公式を用いるとV(G) = 6 – 6 + 2 = 2となります。述語カウントを用いると、同じ答えがより早く得られます。2つの決定に1を加えたものが、2つの分岐を合わせた3つの独立したパスとなります。どちらの形式でも確実に計算できるものを使用し、もう一方の形式と照合してください。

ほとんどのミスを防ぐ2つのルール。 まず、複合条件として (x > 0 かつ y > 0) の場合 短絡評価によって2つ目の決定が行われるため、述語ノードは1つではなく2つとしてカウントされます。次に、ループは、反復回数に関係なく、述語ノードを1つ提供します。

基本パスのテスト手順

基底パスのテストに含まれる基本的な手順は次のとおりです。

  • 制御グラフを描画します (さまざまなプログラム パスを決定するため)
  • 計算 循環的複雑性 (独立したパスの数を決定するためのメトリック)
  • パスの基本セットを見つける
  • 生成する テストケース 各道を実践する

基本パステストの利点と限界

基本パステストの利点

  • 冗長なテストの削減に役立ちます
  • プログラムロジックに注目
  • これは、恣意的なテストケースの選択を分析的な基準に置き換えるものです。
  • 基本セットを実行するテスト ケースは、プログラム内のすべてのステートメントを少なくとも XNUMX 回実行します。

基本パステストの限界

  • 不足しているコードが見つかりません。 実装されなかった要件にはパスが存在しないため、テストは生成されません。基本パスのテストは、要件ベースのテストと組み合わせて実施する必要があります。
  • パス数は急速に増加する。 入れ子になったループや複合条件は複雑さを急速に高め、V(G)が20を超えるモジュールは、この方法では現実的にカバーできなくなります。
  • 報道内容の正確さは、報道内容の正確さとは異なる。 パスを実行することは、コードが正しく実行されることを証明するだけであり、正しい結果を生成することを証明するものではありません。各テストには、意味のあるアサーションが依然として必要です。
  • データ依存パス。 一部の経路は、特定の入力の組み合わせによってのみ到達可能であり、そのような組み合わせを構築することは困難または不可能な場合がある。

よくあるご質問

パステストは考えられるすべてのパスを実行することを目的としていますが、ループを含むモジュールではこれは現実的ではありません。基本パステストは独立したパスのみを実行します。これははるかに小さなセットですが、それでもすべてのステートメントと分岐を網羅しています。

モジュールの循環的複雑度と全く同じ値です。V(G)が4の場合、4つの独立したパスが存在し、完全な分岐網羅には4つのテストケースが必要です。

いいえ。これは既に存在するコードのみを実行するため、実装されていない要件ではパスが生成されず、テストも失敗しません。この2つの手法は相互補完的な関係にあります。

AIツールは、特定の分岐に到達する入力値を生成します。これは、手作業の中で最も時間がかかる部分です。また、到達不可能なパス、つまりデッドコードを示す箇所も検出します。

はい。静的解析ツールは長年にわたり制御フローグラフや複雑度指標を生成してきましたが、AI支援ツールは現在、各独立パスに対して推奨テスト入力を追加するようになっています。