품질 관점 SW 테스팅 주요 개념 및 트랜드

소프트웨어 테스팅은 개발의 전체 Cycle (SDLC)에서 필수적인 단계로, IT 서비스의 품질을 보장하고 결함을 최소화하는 데 중요한 역할을 한다. ITO의 안정적 개발 및 운영, 품질 관점에서의 인시던트 예방, 대응, 후속 관리 측면에서 이와 관련된 주요 관심 주제와 트렌드를 살펴보고자 한다.
Oct 07, 2024
품질 관점 SW 테스팅 주요 개념 및 트랜드

1. 시프트 레프트

테스팅을 소프트웨어 개발 초기 단계로 이동시키는 접근 방식이다. 전통적으로 테스팅은 개발 후반부에 수행되었지만, 시프트 레프트 테스팅은 개발 초기부터 테스팅을 시작하여 결함을 조기에 발견하고 수정하여 개발 비용을 절감* 하고, 소프트웨어 품질을 향상시키는 목적을 둔다.

예를 들어, 적극적 정적 테스트 (코드 리뷰, 정적 분석 도구, IA 검토 등) 및 TDD(Test-Driven Development)는 테스트 케이스를 먼저 작성하고, 그에 맞는 코드를 작성하는 방식으로, 개발 초기부터 테스팅을 통합하여 결함을 최소화하는데 목적이 있다.

*결함을 조기에 발견하면 수정 비용이 적어진다. 후반부에 발견된 결함은 수정하는 데 더 많은 시간과 비용이 소요되기 때문에, 시프트 레프트 테스팅은 전체 개발 비용을 절감하는 데 기여할 수 있다.

KT-DS-품질관점-SW-테스팅-개념-및-트렌드

2. 테스트 피라미드

테스트 피라미드는 다양한 테스트 레벨을 계층적으로 구성하여 효율적인 테스트 전략을 수립하는 데 활용되는 개념이다. 이 피라미드는 주로 세 가지 레벨로 구성된다:

  • A.유닛 테스트: 가장 하단에 위치하며, 개별 함수나 메서드의 동작을 검증한다. 유닛 테스트는 빠르고 비용이 적게 들기 때문에 많은 수의 테스트를 작성할 수 있다. 이를 통해 코드의 기본적인 동작을 빠르게 확인할 수 있다.

  • B.통합 테스트: 중간 레벨에 위치하며, 여러 모듈이 함께 동작하는지를 검증한다. 유닛 테스트보다 시간이 더 걸리지만, 시스템의 안정성을 높이는 데 중요하다. 통합 테스트는 모듈 간의 상호작용을 확인하여, 개별 모듈이 아닌 시스템 전체의 동작을 보장한다.

  • C.엔드 투 엔드 테스트: 가장 상단에 위치하며, 전체 시스템의 동작을 사용자의 관점에서 검증한다. 수행 시간이 길고 비용이 많이 들지만, 전체적인 품질을 높이는 데 필수적이다. 실제 사용자가 시스템을 사용하는 것과 같은 환경에서 테스트를 진행하여, 최종 사용자 경험을 보장한다.

프로젝트 특성에 따라, 예를 들어 복잡도에 의한 모듈 간 의존도나 연동이 많은 부분을 차지할 때 통합 테스트의 비중을 늘리는 등, 각 레벨의 테스트는 서로 보완하며 가중치를 조절하여 전체 시스템의 품질을 높이는 데 기여하는 전략을 수립할 수 있다.

3. 자동화 테스팅

자동화 테스팅은 SW 테스팅의 효율성을 극대화하는 데 중요한 역할을 한다. 전통적인 수동 테스팅은 시간이 많이 소요되고 오류 발생 가능성이 높지만, 자동화 테스팅은 회귀 테스트 (Regression Testing)* 와 같이 반복적인 작업을 자동으로 수행하여 시간과 비용을 절감할 수 있다. 예를 들어, API와 RPA 등을 활용한 자동화 테스팅 도구는 인터페이스 및 UI 포함 애플리케이션의 기능을 자동으로 테스트하여 개발자들이 더 중요한 작업에 집중할 수 있도록 도울 수 있다.

*회귀 테스트 (Regression Testing)
소프트웨어의 기존 기능이 새로운 변경 사항에 의해 영향을 받지 않는지 확인하는 테스트이다. 이는 소프트웨어 업데이트 후에도 안정성을 유지하는 데 중요하다. 예를 들어, 새로운 기능을 추가한 후 기존 기능이 여전히 정상 작동하는지 확인하기 위해 수행한다.

KT-DS-품질관점-SW-테스팅-개념-및-트렌드

4. 엣지, 코너 케이스

엣지(Edge)와 코너(Corner) 테스트 케이스는 매월 정기 버전업 사항을 리뷰하면서, 테스트의 미흡 사항을 언급할 때 빠지지 않는 부분으로 소프트웨어의 안정성과 신뢰성을 보장하기 위해 다양한 경계 조건과 예외 상황을 점검하는 데 염두에 두어야 할 사항이다. 

엣지 테스트 케이스 (Edge Test Cases)
입력값이나 상태가 경계 조건에 있을 때 소프트웨어가 어떻게 동작하는지를 테스트하는 것이다. 이는 주로 최솟값, 최댓값, 빈값, 또는 경계 근처의 값을 테스트하는 데 중점을 둔다. 엣지 테스트 케이스는 소프트웨어가 경계 조건에서 예상대로 작동하는지 확인하는 데 중요하다.

예시:
• 입력 필드 길이 제한: 사용자가 입력할 수 있는 최대 문자 수가 100자라면, 99자, 100자, 101자를 입력하여 테스트한다.
• 숫자 범위: 입력값이 1에서 100 사이여야 한다면, 0, 1, 100, 101을 테스트한다.
• 날짜 범위: 특정 날짜 범위 내에서 입력해야 한다면, 범위의 시작과 끝 날짜를 테스트한다.

코너 테스트 케이스 (Corner Test Cases)

여러 경계 조건이 동시에 발생할 때 소프트웨어가 어떻게 동작하는지를 테스트하는 것이다. 이는 복잡한 시나리오에서 소프트웨어의 안정성을 확인하는 데 중점을 둔다. 코너 테스트 케이스는 일반적으로 예상치 못한 조합의 입력값이나 상태를 테스트하여 소프트웨어의 견고성을 평가한다.

예시:
• 복합 입력 필드: 여러 입력 필드가 동시에 경계 조건에 있을 때, 예를 들어, 이름 필드가 최대 길이이고, 나이 필드가 최댓값이며, 날짜 필드가 경계 날짜인 경우를 테스트한다.
• 다중 시스템 상태: 시스템이 높은 부하 상태에서, 네트워크 연결이 불안정할 때, 그리고 데이터베이스 세션 풀이 거의 가득 찬 상태에서 동시에 작동하는지를 테스트한다.
• 복합 연산: 계산기 애플리케이션에서 매우 큰 숫자와 매우 작은 숫자를 동시에 연산할 때의 결과를 테스트한다.

개별 경계 상황에서 올바르게 작동하는지, 또한 여러 경계 조건이 동시에 발생할 때 안정성이 유지될 수 있는지의 테스트 케이스 점검을 통해 소프트웨어의 품질을 높이고, 예기치 않은 오류를 최소화할 수 있다.

Share article
Subscribe to our newsletter

ICT사업본부 블로그