이전 블로그 게시물에서 우리는 테스트 과제의 한 측면을 분석하고, 한 번에 한 가지 입력에 집중하여 시작할 수 있는 설계된 실험으로 여러 입력을 처리하는 것에 대해 이야기했습니다. 이후 블로그 게시물에서는 설계된 실험에서 요인 효과의 기본 원리를 다시 살펴보았습니다. 이제 이러한 아이디어를 결합하여 테스트에 사용할 실험을 설계할 때 원하는 것이 무엇인지 논의해 보겠습니다.
베타 분포로 돌아가서 베타 분포의 입력을 다양하게 변경하면서 q, 알파, 베타에 초점을 맞춰 테스트할 것인지 고려해 보겠습니다.

각 입력에 대해 세 가지 값(낮음/중간/높음)을 선택한다고 가정합니다. 27가지(3x3x3) 가능한 조합을 모두 시도해 볼 수 있습니다. 하지만 입력이 10개라면 이게 효과가 있을까요? 20개? 100개? 어느 시점에서 다른 전략이 필요하다는 게 분명해집니다. 일반적인 실험 설계 문제에서 이를 처리할 방법이 있지만, 소프트웨어 테스트에도 같은 접근 방식이 효과가 있을까요? 버그를 찾고 싶고 버그가 모서리와 경계에 숨어 있다는 점을 상기하면서, 우리의 목표는 실패를 유도하는 입력 조합을 찾는 것이라고 다시 말해 보겠습니다(즉, 예상한 결과를 관찰하지 못합니다).
경계는 어떻게 되나요?
제가 경계를 무시하는 것 같다는 것을 알아차렸을 것입니다. OFAT 접근 방식이 가치를 가질 수 있는 부분입니다. 이상적으로는 테스트에서 이 지점에 도달하기 전에 각 입력에 대한 경계를 이미 확인했고(그리고 모든 문제를 해결했습니다). 그럼에도 불구하고 나중에 알게 되겠지만 입력을 다양화하면서 경계를 고려할 수 있습니다.
OFAT를 넘어서
요인 설계에서 요인 효과의 기본 원칙은 중요/상당한 효과와 관련이 있습니다. 그러나 소프트웨어 테스트의 경우 기본 원칙을 "실패를 유발하는 조합"의 관점에서 재구성합니다.
조합 계층 : i) 적은 수의 입력을 포함하는 조합은 많은 수의 입력을 포함하는 조합보다 실패를 유발할 가능성이 더 높습니다. ii) 동일한 순서의 조합은 중요할 가능성이 동일합니다.
조합 희소성 : 실패를 유발하는 조합의 수가 적습니다.
복합 유전 : 상호작용에 관련된 부모 요인 중 적어도 하나가 실패를 유발하는 데 관련될 가능성이 더 높은 경우, 복합 유전은 실패를 유발할 가능성이 더 높습니다 .
왜 우리는 구별을 해야 할까?
테스트의 주요 차이점 중 하나는 우리의 반응이 단순히 통과/실패라는 것입니다. 예상 결과에서 벗어나는가? 게다가 우리는 일반적으로 결정론적 결과를 가정합니다. 즉, 동일한 입력을 사용하면 동일한 결과(오류 없음)를 얻습니다. 테스터는 버그를 찾고 싶어하지만 결국 우리는 그 버그가 수정되기를 바랍니다. 우리는 모델을 맞추거나, 효과를 찾거나, 반응을 최적화하려고 하지 않습니다. 사실, 모델링이라는 아이디어에 가장 가까운 것은 실패를 유도한 조합을 추적하는 작업입니다. 이를 결함 위치 지정 문제라고 하며 고유한 과제가 있습니다.
그렇다면 이러한 원칙이 테스트에 적용 가능할까요?
조합 계층이 성립한다는 경험적 증거가 있는 것으로 밝혀졌습니다(Kuhn et al., 2004 참조). 반면에 조합 희소성은 항상 합리적인 가정이 아닐 수 있습니다. 시스템이 상호 작용에 대한 어떤 종류의 테스트나 개별 입력에 대한 테스트도 거치지 않았다면 테스트 모음에서 많은 실패가 있을 수 있습니다(특히 버그가 수정되기 시작하기 전에). 이는 또한 조합 유전 원리와 관련이 있습니다. 개별 입력이 실패를 유도하면 해당 입력을 포함하는 모든 조합이 실패를 유도합니다.
그렇다면, 이러한 가정이 타당하다면, 좋은 테스트 세트는 무엇일까요? 다음 블로그 항목에 계속 주목하세요.
Kuhn, DR, Wallace, DR 및 Gallo, AM, 2004. 소프트웨어 오류 상호작용 및 소프트웨어 테스트에 대한 의미.IEEE 소프트웨어 엔지니어링 거래, 30(6), 418-421쪽.