Main Content

성능 테스트 프레임워크 개요

성능 테스트 인터페이스에서는 스크립트, 함수, 클래스를 기반으로 한 단위 테스트 인터페이스를 활용합니다. 성능 테스트 내에서 가설 검정(Qualification)을 수행하여 코드 성능을 측정하는 동안 기능이 올바르게 동작하는지 확인할 수 있습니다. 또한 성능 테스트를 표준 회귀 테스트(Regression Test)로 실행하여 변경된 코드로 인해 성능 테스트가 망가지지 않는지 확인할 수 있습니다.

측정하는 코드의 범위 확인하기

다음 표는 여러 유형의 테스트가 측정하는 코드를 나타냅니다.

테스트 유형측정 항목제외 항목
스크립트 기반스크립트의 각 섹션에 있는 코드
  • 공유 변수 섹션의 코드

  • 프레임워크 오버헤드에 대해 측정된 추정량

함수 기반각 테스트 함수의 코드
  • setup, setupOnce, teardown, teardownOnce 함수의 코드

  • 프레임워크 오버헤드에 대해 측정된 추정량

클래스 기반Test 특성으로 태그가 지정된 각 메서드의 코드
  • 다음 특성을 갖는 메서드의 코드: TestMethodSetup, TestMethodTeardown, TestClassSetup, TestClassTeardown

  • 공유 픽스처(Fixture) 설정 및 해제

  • 프레임워크 오버헤드에 대해 측정된 추정량

matlab.perftest.TestCase에서 파생되고 startMeasuring 메서드와 stopMeasuring 메서드를 사용하는 클래스 기반Test 특성으로 태그 지정된 각 메서드에서 startMeasuring에 대한 호출과 stopMeasuring에 대한 호출 사이에 있는 코드
  • startMeasuring/stopMeasuring 범위 밖의 코드

  • 프레임워크 오버헤드에 대해 측정된 추정량

matlab.perftest.TestCase에서 파생되고 keepMeasuring 메서드를 사용하는 클래스 기반Test 특성으로 태그가 지정된 각 메서드의 각 keepMeasuring-while 루프 내 코드
  • keepMeasuring-while 범위 밖의 코드

  • 프레임워크 오버헤드에 대해 측정된 추정량

시간 실험 유형

두 가지 유형의 시간 실험을 생성할 수 있습니다.

  • 빈도주의적(Frequentist) 시간 실험에서는 지정된 오차 범위와 신뢰수준을 충족하기 위해 가변적인 개수의 측정값을 수집합니다. 빈도주의적 시간 실험을 사용하면 측정 샘플에 대한 통계적 목표를 정의할 수 있습니다. 이 실험은 runperf 함수나 TimeExperiment 클래스의 limitingSamplingError 정적 메서드를 사용하여 생성할 수 있습니다.

  • 고정 시간 실험은 고정적인 개수의 측정값을 수집합니다. 고정 시간 실험을 사용하면 코드의 최초 실행에 걸리는 시간을 측정하거나 샘플 크기를 명시적으로 제어할 수 있습니다. 이 실험은 TimeExperiment 클래스의 withFixedSampleSize 정적 메서드를 사용하여 생성할 수 있습니다.

다음 표에는 빈도주의적 시간 실험과 고정 시간 실험 사이의 차이점이 요약되어 있습니다.

 빈도주의적 시간 실험고정 시간 실험
워밍업 측정값기본적으로 5, 하지만 TimeExperiment.limitingSamplingError를 통해 구성 가능함기본적으로 0, 하지만 TimeExperiment.withFixedSampleSize를 통해 구성 가능함
샘플 수기본적으로 4~256, 하지만 TimeExperiment.limitingSamplingError를 통해 구성 가능함실험 생성 과정에서 정의됨
상대 오차 범위기본적으로 5%, 하지만 TimeExperiment.limitingSamplingError를 통해 구성 가능함해당 없음
신뢰수준기본적으로 95%, 하지만 TimeExperiment.limitingSamplingError를 통해 구성 가능함해당 없음
유효하지 않은 테스트 결과에 대한 프레임워크 동작테스트 측정을 중지하고 다음 테스트로 진행함지정된 개수의 샘플을 수집함

측정 범위를 갖는 성능 테스트 작성하기

matlab.unittest.TestCase 대신 matlab.perftest.TestCase에서 파생된 클래스 기반 테스트를 수행하는 경우 startMeasuring 메서드와 stopMeasuring 메서드 또는 keepMeasuring 메서드를 여러 번 사용하여 성능 테스트 측정값의 범위를 정의할 수 있습니다. 테스트 메서드에 startMeasuring, stopMeasuring, keepMeasuring에 대한 호출이 여러 개 있는 경우 성능 테스트 프레임워크는 측정값을 누적하여 합계를 계산합니다. 성능 테스트 프레임워크는 중첩된 측정 범위를 지원하지 않습니다. Test 메서드에서 이러한 메서드를 잘못 사용하고 TimeExperiment로 테스트를 실행하면 프레임워크에서는 측정값을 유효하지 않은 값으로 표시합니다. 또한, 계속해서 이러한 성능 테스트를 단위 테스트로 실행할 수 있습니다. 자세한 내용은 클래스를 사용하여 성능 테스트하기 항목을 참조하십시오.

성능 테스트 실행하기

성능 테스트를 실행하는 방법에는 다음 두 가지가 있습니다.

  • runperf 함수를 사용하여 테스트를 실행합니다. 이 함수는 신뢰수준이 0.95, 상대 오차 범위가 0.05인 표본평균을 얻기 위해 가변적인 개수의 측정값을 사용합니다. 이 함수는 코드 워밍업을 위해 테스트를 5번 실행하고 통계적 목표를 충족하는 측정값을 수집하기 위해 테스트를 4~256번 실행합니다.

  • testsuite 함수를 사용하거나 TestSuite 클래스의 메서드를 사용하여 명시적인 테스트 스위트를 생성한 다음, 시간 실험을 생성하고 실행합니다.

    • TimeExperiment 클래스의 withFixedSampleSize 메서드를 사용하여 고정적인 개수의 측정값을 갖는 시간 실험을 생성합니다. 고정적인 개수의 워밍업 측정값과 고정적인 개수의 샘플을 지정할 수 있습니다.

    • TimeExperiment 클래스의 limitingSamplingError 메서드를 사용하여 오차 범위 및 신뢰수준과 같은 통계적 목표가 지정된 시간 실험을 생성합니다. 또한, 워밍업 측정값의 개수와 샘플의 최대/최소 개수를 지정할 수 있습니다.

성능 테스트를 회귀 테스트로 실행할 수 있습니다. 자세한 내용은 클래스를 사용하여 성능 테스트하기 항목을 참조하십시오.

유효하지 않은 테스트 결과 이해하기

어떤 상황에서는 테스트 결과에 대한 MeasurementResult가 유효하지 않은 것으로 표시되기도 합니다. 성능 테스트 프레임워크가 MeasurementResultValid 속성을 false로 설정하면 테스트 결과가 유효하지 않은 것으로 표시됩니다. 테스트가 실패하거나 필터링된 경우 이러한 결과가 생기게 됩니다. 또한, 테스트가 matlab.perftest.TestCasestartMeasuring 메서드와 stopMeasuring 메서드를 잘못 사용하는 경우 이 테스트의 MeasurementResult가 유효하지 않은 것으로 표시됩니다.

성능 테스트 프레임워크에서 유효하지 않은 테스트 결과를 감지하는 경우 시간 실험의 유형에 따라 다르게 동작합니다.

  • 빈도주의적 시간 실험을 생성한 경우 프레임워크는 그 테스트에 대한 측정을 중지하고 다음 테스트로 진행합니다.

  • 고정 시간 실험을 생성한 경우 프레임워크는 작업을 중지하지 않고 지정된 개수의 샘플을 계속 수집합니다.

참고 항목

| | | |

관련 항목