시나리오 테스트 실행 중에, 특정 변수의 값을 확인하고자 할 때는 테스트 케이스를 나누어 확인합니다. 예를 들어, 주기 단위가 ms인 테스트에서 2초와 4초에 특정 변수의 변화를 알고 싶다면 다음과 같이 테스트 케이스를 설계합니다.

테스트 케이스(TC) 시간 누적 시간
1 1999 1999
2 1 2000
3 1999 3999
4 1 4000

TC1과 TC2를 통해 2초 전/후의 값 변화를 확인하고 TC3과 TC4를 통해 4초 전/후의 값 변화를 확인합니다.

이러한 방식으로 테스트 케이스를 나누어 원하는 시점에 원하는 값을 확인할 수 있습니다. 간단한 예제를 통해 자세히 설명하겠습니다.

소스 코드 및 요구사항

예제로 사용할 소스 코드와 요구사항은 아래와 같습니다.

#include <stdio.h>
#include <stdbool.h>

typedef enum {
    CLOSED, OPEN
} OpenCloseState;

typedef enum {
    OFF, ON
} OnOffState;

OpenCloseState doorState;
OpenCloseState doorSensor;
OnOffState ignitionState;
OnOffState lightState;

void initial() {
	doorState = OPEN;
	doorSensor = OPEN;
	ignitionState = OFF;
	lightState = OFF;
}

void lightOn() { if (lightState != ON)     lightState = ON; }

void lightOff() { if (lightState != OFF)     lightState = OFF; }

void setDoorSensor(OpenCloseState sensor) {
	doorSensor = sensor;
}

void tick() {
    static int timer = 0;

    if (doorState == OPEN && doorSensor == CLOSED) {
        timer = 500;
        lightOn();
    } else if (ignitionState == ON){
        timer = 0;
        lightOff();
    }

    if (timer > 0)     timer--;

    if (timer == 0)     lightOff();

    doorState = doorSensor;
}
요구사항: 자동차의 열려있던 문이 닫히면, 실내등이 5초간 켜진 후 꺼진다.

테스트 설계

이러한 요구사항을 만족하는 테스트를 설계하려고 합니다.

주기 함수와 주기 단위 설계

실내등이 5초간 켜진 후 꺼진다timer = 500;을 통해, timer의 시간 단위는 ms이며, tick() 함수가 10ms마다 호출되는 함수임을 알 수 있습니다. 따라서, tick()을 주기 함수로 설정하고, 주기 단위를 ms, tick()의 시작 시간을 0, 주기 시간을 10으로 설정합니다.

초기화 함수 설계

initial() 함수를 초기화 함수로 호출하여 각 센서와 상태에 초깃값을 할당합니다. 이때, doorStatedoorSensor의 초깃값 모두 OPEN입니다. 자동차의 열려있던 문이 닫히면이라는 요구사항에 따라 setDoorSensor() 함수의 매개변수로 CLOSED 값을 주어 문 닫힘을 설정합니다.

테스트 케이스 및 시나리오 변수(시간) 설계

요구사항을 확인하기 위해 lightState의 출력값을 확인합니다. 5초간 실내등이 켜져 있고 5초 이후에 실내등이 꺼져야 합니다. 즉, tick()이 499회 호출될 때까지 lightStateON이고, 500번째 호출에서 lightStateOFF가 됩니다. 이를 확인하기 위해 첫 번째 테스트 케이스에서 시간을 4990, 두 번째 테스트 케이스에서 시간을 10으로 입력합니다.
전역 변수에서 lightState를 선택하고 [출력]에 체크하여 테스트 후 lightState의 값을 확인합니다.

테스트 작성

위 설계를 토대로 테스트를 작성하면 다음과 같습니다.

  • [테스트 정보] 탭
  • [테스트 케이스] 탭

테스트 결과 확인

테스트를 실행하고 [테스트 케이스] 탭에서 결과를 확인합니다.

0ms~4990ms 동안 lightStateON(1)이고 5000ms가 될 때 lightStateOFF(0)이 됩니다. 시나리오 테스트를 이용하여 소스 코드가 요구사항을 만족하는 것을 확인했습니다.

Need more help with this?
Don’t hesitate to contact us here.

Thanks for your feedback.