본문 바로가기

QA

Smoke test, Sanity test, Regression test 뭐가 다른거지?

728x90

개요

QA 업무를 수행하다보면 Smoke test, Sanity test, Regression test를 자주 접하게됩니다.
위 3가지 테스트들은 보통 소프트웨어의 유지보수단계에서 많이 사용됩니다.
코드 변경이 발생할때마다 새로운 기능ㅇ디 제대로 작동하는지, 기존의 기능이 영향을 받진 않았는지 등을 체크할때 사용됩니다.
이 글에서는 해당 테스트들의 정확한 의미를 알아보고 언제, 어떻게 사용되어야 하는지를 알아보도록 하겠습니다.

Smoke Test

Smoke Test는 소프트웨어의 기본 기능이 제대로 동작하는지를 확인하는 가장 초기의 테스트 단계입니다. 이 테스트는 소프트웨어가 심각한 결함 없이 작동하는지 빠르게 확인하는 것을 목표로 합니다. “Smoke”라는 용어는 하드웨어 공학에서 유래했으며, 전원을 켰을 때 연기가 나는지(즉, 기본적인 것이 작동하는지) 확인하는 것에서 비롯되었습니다.

Smoke Test는 주로 새로운 빌드나 배포 후에 즉시 수행됩니다. 이 테스트는 빌드가 정상적으로 이루어졌고, 소프트웨어가 최소한의 수준에서 작동하는지를 검증합니다. 빌드가 제대로 되었는지 확인하는 것이 주 목적이기 때문에, 문제가 발생하면 즉시 빌드를 중지하고 원인을 분석하는 것이 일반적입니다.

Smoke Test의 테스트 케이스는 매우 기본적인 케이스를 포함합니다. 예를 들어, 애플리케이션이 실행되는지, 주요 기능이 작동하는지 등의 테스트가 포함될 수 있습니다.

Sanity Test

Sanity Test는 코드 변경 또는 버그 수정 후에 수행되는 테스트로, 변경된 부분이 예상대로 동작하는지를 확인하는 데 초점을 맞춥니다. 이는 해당 부분에 대해 Smoke Test보다 구체적으로 수행되며, 특정 기능이 의도한 대로 작동하는지를 확인합니다.

Sanity Test는 일반적으로 특정 모듈이나 기능에 대한 변경이 이루어진 후, 해당 부분이 정상적으로 작동하는지 빠르게 검증할 때 사용됩니다. 이는 전체 테스트를 수행하기 전에 변경 사항이 기본적으로 문제가 없는지를 확인하는 역할을 합니다.

Sanity Test의 테스트 케이스는 변경된 기능이나 모듈에 집중됩니다. 예를 들어, 새로운 기능이 추가되거나 버그가 수정된 경우, 해당 부분이 제대로 작동하는지를 간단히 확인하는 수준의 테스트가 포함됩니다.

Regression Test

Regression Test는 새로운 코드나 수정된 코드가 기존의 기능에 부정적인 영향을 미치지 않았는지를 확인하는 포괄적인 테스트입니다. 이는 과거에 정상적으로 작동하던 기능이 새로운 변경으로 인해 깨지지 않았는지를 검증하는 데 중점을 둡니다.

Regression Test는 주로 새로운 기능이 추가되거나, 기존 기능에 수정이 가해진 후에 수행됩니다. 이 테스트는 과거에 작성된 모든 테스트 케이스를 다시 실행하여, 변경 사항이 기존의 안정성을 해치지 않았는지 확인합니다.

Regression Test는 기존 기능에 대한 포괄적인 테스트 케이스를 포함합니다. 이는 모든 기능이 여전히 예상대로 작동하는지를 확인하기 위해 가능한 많은 시나리오를 다룹니다.

Smoke Test, Sanity Test, Regression Test는 모두 소프트웨어의 품질을 유지하기 위한 중요한 테스트 방법입니다. 이들은 서로 보완적인 관계에 있으며, 각각의 테스트는 다른 시점과 목적에 따라 수행됩니다.

 

Regression Test와 Smoke, Sanity Test의 관계

•    Smoke Test는 소프트웨어의 기본적인 작동 여부를 빠르게 확인하는 초기 단계의 테스트로, 빌드 검증에 중점을 둡니다.
•    Sanity Test는 특정 변경 사항이 정상적으로 작동하는지를 확인하는 데 중점을 두며, 주로 변경된 부분에 대해 수행됩니다.
•    Regression Test는 코드 변경이 기존 기능에 영향을 미치지 않았는지를 포괄적으로 확인하는 테스트로, 소프트웨어의 안정성을 보장합니다.

이 세 가지 테스트를 적절하게 조합하여 사용하면, 코드 변경에 따른 리스크를 최소화하고 소프트웨어의 품질을 유지할 수 있습니다. 따라서 개발 과정에서 각 테스트의 역할과 사용 시점을 명확히 이해하고, 이를 체계적으로 실행하는 것이 중요합니다.