워크숍의 핵심은 ‘충분히 좋은 테스트(Good Enough Testing)’라는 개념입니다. 이는 위험 수준(낮음, 중간, 높음)에 따라 테스트 전략을 유연하게 조정하는 것을 의미합니다. 위험이 낮은 경우 프레임워크의 기능을 신뢰하고 최소한의 테스트를 작성하며, 중간 위험의 경우 체계적인 접근 방식을 통해 최대의 커버리지를 최소한의 노력으로 달성합니다. 고위험 상황에서는 공식적인 테스트 방법론을 적용하여 모든 가능한 경우를 커버하고, 심지어 코드의 정확성을 수학적으로 증명하는 단계까지 나아갈 수 있습니다.
워크숍에서는 네 가지 주요 테스트 설계 기법을 소개합니다:
-
동등 분할 (Equivalence Partitioning): 입력 도메인을 동일한 동작을 보이는 여러 파티션으로 나누는 기법입니다. 이는 일반적이고 ‘정상적인’ 케이스를 효과적으로 커버하는 데 유용합니다. 예를 들어, 연령 제한이 18세 이상인 경우, 18세 미만과 18세 이상이라는 두 개의 동등 클래스로 나누어 각 클래스에서 대표값을 선택하여 테스트합니다. 이는 테스트 케이스의 수를 체계적으로 줄이면서도 광범위한 커버리지를 제공합니다.
-
경계값 분석 (Boundary Value Analysis): 입력 도메인에서 동작이 변하는 경계값 주변을 집중적으로 테스트하는 기법입니다. 입력이 순서가 있는 그룹으로 나눌 수 있을 때 적용되며, 경계값 자체와 그 바로 위, 아래 값을 테스트하여 잠재적인 오류를 찾아냅니다. 예를 들어, 18세 연령 제한의 경우 17, 18, 19세에 대해 테스트합니다. 이는 동등 분할만으로는 놓칠 수 있는 경계 조건의 버그를 발견하는 데 효과적입니다.
-
의사결정 테이블 (Decision Table): 여러 조건의 조합에 따라 특정 동작이 결정되는 복잡한 로직을 테스트할 때 사용됩니다. 진리표의 확장 개념으로, 모든 조건 조합과 그에 따른 예상 결과를 명확하게 정의하여 놓치는 시나리오 없이 테스트할 수 있도록 돕습니다. 특히 추상화로 인해 숨겨진 복잡한 비즈니스 규칙이나 레거시 코드의 동작을 이해하고 테스트하는 데 강력한 도구입니다. 예를 들어, 계정 상태(아카이브됨, 폐쇄됨, 만료 임박 등)가 여러 조건에 따라 결정되는 경우, 각 조건의 참/거짓 조합을 테이블로 만들어 테스트 케이스를 도출합니다.
-
상태 전이 (State Transition): 시스템의 로직을 노드(상태)와 전이(상태 변화)로 표현할 수 있을 때 적용됩니다. 이는 유한 상태 머신과 같이 상태 변화가 중요한 시스템의 동작을 테스트하는 데 적합합니다. 모든 노드를 커버하는 최소 경로 테스트와 모든 엣지(전이)를 커버하는 더 포괄적인 테스트로 나눌 수 있습니다. 워크숍 참석자의 등록, 참석, 확인, 취소, 체크인 상태 변화를 예로 들어 상태 전이 다이어그램을 통해 테스트 경로를 설계하는 방법을 설명합니다. 또한, 허용되지 않는 전이(불가능한 상태 변화)를 강제로 시도하여 시스템의 견고성을 테스트하는 방법도 논의합니다.
이러한 기법들은 테스트 케이스의 최대치를 계산하고, 위험 수준에 따라 테스트 수를 줄이는 방법을 체계적으로 제시합니다. 이는 개발자가 ‘감’이 아닌 명확한 근거를 가지고 테스트를 설계하고, 동료에게 그 선택을 설명할 수 있도록 합니다.