1. 시프트 레프트
테스팅을 소프트웨어 개발 초기 단계로 이동시키는 접근 방식이다. 전통적으로 테스팅은 개발 후반부에 수행되었지만, 시프트 레프트 테스팅은 개발 초기부터 테스팅을 시작하여 결함을 조기에 발견하고 수정하여 개발 비용을 절감* 하고, 소프트웨어 품질을 향상시키는 목적을 둔다.
예를 들어, 적극적 정적 테스트 (코드 리뷰, 정적 분석 도구, IA 검토 등) 및 TDD(Test-Driven Development)는 테스트 케이스를 먼저 작성하고, 그에 맞는 코드를 작성하는 방식으로, 개발 초기부터 테스팅을 통합하여 결함을 최소화하는데 목적이 있다.
*결함을 조기에 발견하면 수정 비용이 적어진다. 후반부에 발견된 결함은 수정하는 데 더 많은 시간과 비용이 소요되기 때문에, 시프트 레프트 테스팅은 전체 개발 비용을 절감하는 데 기여할 수 있다.
2. 테스트 피라미드
테스트 피라미드는 다양한 테스트 레벨을 계층적으로 구성하여 효율적인 테스트 전략을 수립하는 데 활용되는 개념이다. 이 피라미드는 주로 세 가지 레벨로 구성된다:
A.유닛 테스트: 가장 하단에 위치하며, 개별 함수나 메서드의 동작을 검증한다. 유닛 테스트는 빠르고 비용이 적게 들기 때문에 많은 수의 테스트를 작성할 수 있다. 이를 통해 코드의 기본적인 동작을 빠르게 확인할 수 있다.
B.통합 테스트: 중간 레벨에 위치하며, 여러 모듈이 함께 동작하는지를 검증한다. 유닛 테스트보다 시간이 더 걸리지만, 시스템의 안정성을 높이는 데 중요하다. 통합 테스트는 모듈 간의 상호작용을 확인하여, 개별 모듈이 아닌 시스템 전체의 동작을 보장한다.
C.엔드 투 엔드 테스트: 가장 상단에 위치하며, 전체 시스템의 동작을 사용자의 관점에서 검증한다. 수행 시간이 길고 비용이 많이 들지만, 전체적인 품질을 높이는 데 필수적이다. 실제 사용자가 시스템을 사용하는 것과 같은 환경에서 테스트를 진행하여, 최종 사용자 경험을 보장한다.
프로젝트 특성에 따라, 예를 들어 복잡도에 의한 모듈 간 의존도나 연동이 많은 부분을 차지할 때 통합 테스트의 비중을 늘리는 등, 각 레벨의 테스트는 서로 보완하며 가중치를 조절하여 전체 시스템의 품질을 높이는 데 기여하는 전략을 수립할 수 있다.
3. 자동화 테스팅
자동화 테스팅은 SW 테스팅의 효율성을 극대화하는 데 중요한 역할을 한다. 전통적인 수동 테스팅은 시간이 많이 소요되고 오류 발생 가능성이 높지만, 자동화 테스팅은 회귀 테스트 (Regression Testing)* 와 같이 반복적인 작업을 자동으로 수행하여 시간과 비용을 절감할 수 있다. 예를 들어, API와 RPA 등을 활용한 자동화 테스팅 도구는 인터페이스 및 UI 포함 애플리케이션의 기능을 자동으로 테스트하여 개발자들이 더 중요한 작업에 집중할 수 있도록 도울 수 있다.
*회귀 테스트 (Regression Testing)
소프트웨어의 기존 기능이 새로운 변경 사항에 의해 영향을 받지 않는지 확인하는 테스트이다. 이는 소프트웨어 업데이트 후에도 안정성을 유지하는 데 중요하다. 예를 들어, 새로운 기능을 추가한 후 기존 기능이 여전히 정상 작동하는지 확인하기 위해 수행한다.
4. 엣지, 코너 케이스
엣지(Edge)와 코너(Corner) 테스트 케이스는 매월 정기 버전업 사항을 리뷰하면서, 테스트의 미흡 사항을 언급할 때 빠지지 않는 부분으로 소프트웨어의 안정성과 신뢰성을 보장하기 위해 다양한 경계 조건과 예외 상황을 점검하는 데 염두에 두어야 할 사항이다.
엣지 테스트 케이스 (Edge Test Cases)
입력값이나 상태가 경계 조건에 있을 때 소프트웨어가 어떻게 동작하는지를 테스트하는 것이다. 이는 주로 최솟값, 최댓값, 빈값, 또는 경계 근처의 값을 테스트하는 데 중점을 둔다. 엣지 테스트 케이스는 소프트웨어가 경계 조건에서 예상대로 작동하는지 확인하는 데 중요하다.
예시:
• 입력 필드 길이 제한: 사용자가 입력할 수 있는 최대 문자 수가 100자라면, 99자, 100자, 101자를 입력하여 테스트한다.
• 숫자 범위: 입력값이 1에서 100 사이여야 한다면, 0, 1, 100, 101을 테스트한다.
• 날짜 범위: 특정 날짜 범위 내에서 입력해야 한다면, 범위의 시작과 끝 날짜를 테스트한다.
코너 테스트 케이스 (Corner Test Cases)
여러 경계 조건이 동시에 발생할 때 소프트웨어가 어떻게 동작하는지를 테스트하는 것이다. 이는 복잡한 시나리오에서 소프트웨어의 안정성을 확인하는 데 중점을 둔다. 코너 테스트 케이스는 일반적으로 예상치 못한 조합의 입력값이나 상태를 테스트하여 소프트웨어의 견고성을 평가한다.
예시:
• 복합 입력 필드: 여러 입력 필드가 동시에 경계 조건에 있을 때, 예를 들어, 이름 필드가 최대 길이이고, 나이 필드가 최댓값이며, 날짜 필드가 경계 날짜인 경우를 테스트한다.
• 다중 시스템 상태: 시스템이 높은 부하 상태에서, 네트워크 연결이 불안정할 때, 그리고 데이터베이스 세션 풀이 거의 가득 찬 상태에서 동시에 작동하는지를 테스트한다.
• 복합 연산: 계산기 애플리케이션에서 매우 큰 숫자와 매우 작은 숫자를 동시에 연산할 때의 결과를 테스트한다.
개별 경계 상황에서 올바르게 작동하는지, 또한 여러 경계 조건이 동시에 발생할 때 안정성이 유지될 수 있는지의 테스트 케이스 점검을 통해 소프트웨어의 품질을 높이고, 예기치 않은 오류를 최소화할 수 있다.