전역 변수의 값에 따라 함수의 호출 여부가 결정될 때는 [함수 호출 전/후 코드]를 이용하여 테스트합니다.
// Before call code
if( globalVar == 1 ) {
// Function call code.
func()
// After call code
}
이러한 방식으로 함수 호출 전/후 코드에 if 문을 추가하여 특정 조건을 만족할 때 함수를 호출하도록 합니다. 신호등과 음향신호기 예제를 통해 자세히 설명하겠습니다.
소스 코드 및 요구사항
예제로 사용할 소스 코드와 요구사항은 아래와 같습니다.
#include <stdio.h>
typedef enum {
RED,
GREEN
} TrafficLightState;
typedef enum {
ON,
OFF
} SoundSystemState;
TrafficLightState trafficLight;
SoundSystemState soundSystem;
void init() {
trafficLight = GREEN;
soundSystem = OFF;
}
void setSoundSystem (SoundSystemState state) {
soundSystem = state;
}
void alarmForBlind() {
if( trafficLight == GREEN ) {
printf("beep for blind\n");
} else if( trafficLight == RED ) {
printf("warning for blind\n");
}
}
void tick() {
static int timer = 50;
if(timer > 0) {
timer--;
}
if( timer == 0 ) {
timer = 50;
if( trafficLight == GREEN ) {
trafficLight = RED;
} else if( trafficLight == RED ) {
trafficLight = GREEN;
}
}
}
요구사항: 빨간불과 파란불은 각각 5분 동안 켜진다.
음향신호기가 켜져 있고 신호등이 파란불이면, 시각장애인을 위한 신호가 1초에 한 번씩 출력된다.
음향신호기가 켜져 있고 신호등이 빨간불이면, 시각장애인을 위한 경고가 1초에 한 번씩 출력된다.
테스트 설계
이러한 요구사항을 만족하는 테스트를 설계하려고 합니다.
주기 함수와 주기 단위 설계
tick()
함수에서 신호등의 timer
가 50
이고, 요구사항에서 각각의 등이 5분씩 켜진다고 하였으므로, 주기 단위는 ms이고 tick()
의 주기 시간은 100ms입니다.
음향신호기가 1초에 한 번씩 신호를 출력하므로 alarmForBlind()
의 주기 시간은 1000ms(1초)입니다.
초기화 함수 설계
initial()
함수를 초기화 함수로 호출하여 각 센서와 상태에 초깃값을 할당합니다. 이때, trafficLight
의 초깃값은 GREEN
이고 soundSystem
의 초깃값은 OFF
입니다.
테스트 케이스 및 변수 설계
요구사항을 확인하기 위하여 음향신호기를 켜고 파란불, 빨간불일 때 신호를 확인합니다. 이에 맞게 테스트 케이스를 다음과 같이 설계하겠습니다.
TC | 시간 | 음향신호기 |
---|---|---|
1 | 5000 | OFF |
2 | 5000 | OFF |
3 | 5000 | ON |
4 | 5000 | ON |
5 | 5000 | OFF |
6 | 5000 | OFF |
음향신호기의 값을 바꿔주기 위해 사용자 코드에 다음과 같이 입력합니다. 테스트 케이스가 3일 때, 음향신호기를 켜고 테스트 케이스가 5일 때, 음향신호기를 끕니다.
if (CS_TESTCASENO()==3) {
setSoundSystem(ON);
} else if (CS_TESTCASENO()==5) {
setSoundSystem(OFF);
}
전역 변수에서 trafficLight
를 선택하고 [출력]에 체크하여 신호등의 상태를 확인합니다.
테스트 작성
위 설계를 토대로 테스트를 작성하면 다음과 같습니다.
테스트 결과 확인
테스트를 실행하고 [테스트 케이스] 탭과 [소스 코드 편집기]에서 결과를 확인합니다.
Need more help with this?
Don’t hesitate to contact us here.