Main Content

パフォーマンス テストのフレームワークの概要

パフォーマンス テストのインターフェイスには、スクリプトベース、関数ベースおよびクラスベースのユニット テスト インターフェイスが使用されます。パフォーマンス テスト内で検定を実行することで、コードのパフォーマンスを測定しながら正しい機能的動作も確保できます。また、パフォーマンス テストを標準の回帰テストとして実行し、コードの変更によってパフォーマンス テストが中断されないようにすることもできます。

測定対象コードの範囲の判別

次の表は、それぞれのタイプのテストで、どのコードが測定されるかを示しています。

テストのタイプ測定対象除外対象
スクリプトベーススクリプトの各セクション内のコード
  • 共有変数セクション内のコード

  • 測定されたフレームワーク オーバーヘッドの推定値

関数ベース各テスト関数内のコード
  • 次の関数内のコード: setupsetupOnceteardown および teardownOnce

  • 測定されたフレームワーク オーバーヘッドの推定値

クラスベースTest 属性でタグ付けされた各メソッド内のコード
  • 次の属性をもつメソッド内のコード: TestMethodSetupTestMethodTeardownTestClassSetup および TestClassTeardown

  • 共有フィクスチャのセットアップおよび破棄

  • 測定されたフレームワーク オーバーヘッドの推定値

matlab.perftest.TestCase から派生していて、startMeasuring メソッドと stopMeasuring メソッドを使用しているクラスベースTest 属性でタグ付けされた各メソッド内の、startMeasuring の呼び出しから stopMeasuring の呼び出しまでのコード
  • startMeasuring/stopMeasuring 範囲の外部のコード

  • 測定されたフレームワーク オーバーヘッドの推定値

matlab.perftest.TestCase から派生し keepMeasuring メソッドを使用するクラスベースTest 属性でタグ付けされた各メソッドの各 keepMeasuring-while ループ内のコード
  • keepMeasuring-while 範囲の外部のコード

  • 測定されたフレームワーク オーバーヘッドの推定値

時間実験のタイプ

2 つのタイプの時間実験を作成できます。

  • "頻度論的時間実験" は、指定された許容誤差および信頼度を達成するために可変数の測定値を収集します。頻度論的時間実験を使用すると、測定サンプルの統計目標値を定義できます。この実験は、関数 runperf または TimeExperiment クラスの limitingSamplingError 静的メソッドを使用して生成します。

  • "固定回数時間実験" は、固定数の測定値を収集します。固定回数時間実験を使用して、コードの初期コストを測定したり、サンプルのサイズを明示的に制御したりすることができます。この実験は、TimeExperiment クラスの withFixedSampleSize 静的メソッドを使用して生成します。

次の表は、頻度論的時間実験と固定回数時間実験の相違点をまとめています。

 頻度論的時間実験固定回数時間実験
ウォームアップ測定既定では 5 だが、TimeExperiment.limitingSamplingError で設定可能既定では 0 だが、TimeExperiment.withFixedSampleSize で設定可能
サンプル数既定では 4 ~ 256 だが、TimeExperiment.limitingSamplingError で設定可能実験の作成時に定義される
相対許容誤差既定では 5% だが、TimeExperiment.limitingSamplingError で設定可能該当なし
信頼度既定では 95% だが、TimeExperiment.limitingSamplingError で設定可能該当なし
無効なテスト結果に対するフレームワークの動作テストの測定を停止し、次のテストに移る指定されたサンプル数を収集する

測定範囲のあるパフォーマンス テストの記述

クラスベースのテストが matlab.perftest.TestCase ではなく matlab.unittest.TestCase から派生している場合は、startMeasuring メソッドおよび stopMeasuring メソッドまたは keepMeasuring メソッドを複数回使用してパフォーマンス テスト測定の範囲を定義できます。テスト メソッドに startMeasuringstopMeasuring および keepMeasuring への呼び出しが複数ある場合、パフォーマンス テスト フレームワークは測定値を累積して合計します。パフォーマンス テスト フレームワークは入れ子にされた測定範囲をサポートしていません。これらのメソッドを Test メソッド内で誤って使用し、TimeExperiment としてテストを実行すると、フレームワークは測定値を無効としてマークします。これらのパフォーマンス テストはユニット テストとして実行することもできます。詳細については、クラスを使用したパフォーマンスのテストを参照してください。

パフォーマンス テストの実行

パフォーマンス テストを実行する方法は 2 通りあります。

  • 関数 runperf を使用してテストを実行します。この関数は、可変の測定数を使用して、信頼度 0.95 内における相対許容誤差 0.05 のサンプル平均を達成します。テストを 5 回実行してコードをウォームアップし、次に 4 ~ 256 回実行して統計目標値を満たす測定値を収集します。

  • 関数 testsuite または TestSuite クラス内のメソッドを使用して、明示的なテスト スイートを生成してから、時間実験を作成して実行します。

    • TimeExperiment クラスの withFixedSampleSize メソッドを使用して、固定数の測定での時間実験を作成します。ウォームアップ測定の固定数とサンプルの固定数を指定できます。

    • TimeExperiment クラスの limitingSamplingError メソッドを使用して、許容誤差、信頼度などの統計目標値が指定された時間実験を作成します。また、ウォームアップ測定の数およびサンプルの最小数と最大数を指定できます。

回帰テストとしてパフォーマンス テストを実行できます。詳細については、クラスを使用したパフォーマンスのテストを参照してください。

無効なテスト結果について

場合によっては、テスト結果の MeasurementResult が無効としてマークされます。パフォーマンス テスト フレームワークによって MeasurementResultValid プロパティが false に設定されるとテスト結果は無効としてマークされます。この無効化は、テストに失敗した場合か、テストがフィルター処理された場合に発生します。また、テストで、matlab.perftest.TestCasestartMeasuring メソッドと stopMeasuring メソッドが正しく使用されないと、そのテストの MeasurementResult は無効としてマークされます。

パフォーマンス テスト フレームワークは、無効なテスト結果を検出すると、時間実験のタイプに応じて異なる動作をします。

  • 頻度論的時間実験を作成した場合、フレームワークはそのテストの測定を停止し、次のテストに移ります。

  • 固定回数時間実験を作成した場合、フレームワークは指定された数のサンプルの収集を継続します。

参考

| | | |

関連するトピック