소프트웨어 공학에서 말하는 테스트는 소프트웨어의 품질과 기능을 확인하고 버그를 찾아내는 과정을 말합니다. 이 과정은 시스템의 안정성과 성능 등 다양한 측면을 평가하고 문제점을 발견하기 위해 반드시 필요합니다. 그래서 오늘날 많은 프로젝트에서는 개발된 시스템을 배포하기 전 어떤 방법으로든 테스트를 거치게 하고 있습니다.
이때 테스트는 시스템을 어떻게 검증하느냐에 따라 크게 두 가지로 분류할 수 있습니다.
- 수동 테스트 ( manual testing )
- 자동 테스트 ( automated testing )
수동 테스트는 테스트 담당자가 소프트웨어를 직접 실행해보고 각각의 기능을 평가하며 구현된 기능이 요구사항이 부합하는지 검증하는 과정을 말합니다. 테스트 담당자는 사용자 관점에서 소프트웨어를 다양한 시나리오를 토대로 실행합니다. 덕분에 수동 테스트는 검증 과정에서 소프트웨어의 사용자 경험을 직접 평가할 수 있습니다.
자동 테스트는 테스트 스크립트나 도구를 사용해 소프트웨어를 자동으로 테스트 하는 과정을 말합니다. 예를 들어, 자동 테스트는 아래와 같은 코드로 작성될 수 있습니다.
lass MyControllerTest {
@Test
void 뎃셈을_할_수_있다() {
// given (준비)
Calculator calculator = new Calculator();
long a = 10L;
long b = 20L;
// when (실행)
long result = calculator.add(a, b);
// then (단언 assert)
assertThat(result).isEqualTo(30L);
}
}
위와 같이 테스트를 위해 만들어진 코드를 테스트 코드라고 합니다. 테스트 코드는 테스트를 자동으로 할 수 있는 방법 중 하나입니다. 위 코드는 자바 코드를 테스트 하기 위해 JUnit 테스트 라이브러리를 사용해 만들어진 코드입니다. JUnit의 @Test 애너테이션을 이용하면 특정 메서드를 테스트 메서드로 만들 수 있습니다.
다음으로 코드의 마지막에 then 주석과 함께 assertThat 이라는 정적 메서드를 이용하고 있는 것에 주목 합니다. 이는 테스트 검증 과정으로 테스트 수행 결과가 기댓값과 일치하는지 확인하는 것입니다. 이 코드 덕분에 개발자는 테스트를 수행할 때마다 원하는 결과 값이 나왔는지 매번 눈으로 확인하지 않아도 됩니다. 두 값이 일치한다면 테스트 코드는 무사히 실행되고 종료될 것이고 아니라면 개발자에게 테스트가 실패 했음을 알릴 것 입니다.
이렇게 만들어진 자동 테스트는 수동 테스트와 다르게 인간의 개입이 적어 정확성이 높습니다. 그리고 반복적인 검증 업무를 줄이고 빠르게 수행될 수 있어 개발자가 코드를 검증하는 데 걸리는 시간을 줄일 수 있습니다.
그런데 자동 테스트는 코드를 보면 알 수 있듯이 수동 테스트와 다르게 코드를 작성하거나 스크립트를 작성하는 형태로서 소프트웨어 개발과 많이 닮아 있습니다. 그래서 자동 테스트는 개발자의 테스트 숙련도에 따라 테스트 품질이 결정됩니다. 더불어 초기 설정과 유지보수에 많은 시간이 소요될 수 있습니다.
'테스트' 카테고리의 다른 글
테스트 대역 5가지 (0) | 2024.07.17 |
---|---|
Mockito 를 활용한 단위 테스트 (0) | 2024.01.24 |
번거로운 동작을 스텁(stub)으로 대체 (0) | 2024.01.24 |
번거로운 동작을 스텁(stub)으로 대체 (0) | 2024.01.19 |
JUnit 기본 (2) | 2024.01.03 |