가이드라인: 테스트 디자인
이 가이드라인은 테스트를 식별하고 디자인하는 방법을 설명합니다.
관계
기본 설명

설명

사용자의 기대를 확실히 인식하여 이런 기대를 확인 및 검증할 수 있는 것은 소프트웨어를 사용하는 사용자의 만족에 가장 큰 영향을 미칩니다. 테스트 케이스는 확인해야 하는 요구사항을 반영합니다. 그러나 이러한 요구사항의 확인은 서로 다르게 수행되거나 다른 테스터에 의해 수행될 수 있습니다. 예를 들어, 기능과 성능을 확인하기 위해 소프트웨어를 실행하는 것은 테스터가 자동화된 테스트 기법을 사용하여 진행하고, 컴퓨터 시스템의 종료 시퀀스는 수동 테스트 및 관찰로 진행하며, 제품 요구사항이기도 한 시장 점유율 및 판매는 제품 및 경쟁 판매를 측정하여 진행합니다.

모든 요구사항을 확인할 수 없으므로(확인해야 할 책임도 없음) 프로젝트의 성공을 위해서는 테스트에 대해 가장 알맞거나 중요한 요구사항을 선택해야 합니다. 확인하도록 선택하는 요구사항은 확인되는 요구사항에 대한 비용, 위험성 및 필요성 사이에서 밸런스가 조정됩니다.

테스트 케이스 식별은 다음 몇 가지 이유로 중요합니다.

  • 테스트 케이스는 테스트 스크립트를 디자인하고 개발하는 기반을 형성합니다.
  • 테스트 "깊이"는 테스트 케이스 수에 비례합니다. 테스트 케이스 수가 증가하면 제품 및 테스트 프로세스 품질의 신뢰성이 향상되는데, 이는 각 테스트 케이스가 제품을 통해 서로 다른 시나리오, 조건 및 플로우를 반영하기 때문입니다.
  • 테스트 완료 측정의 핵심은 식별, 구현 및/또는 실행된 테스트 케이스 수를 기반으로 하는 요구사항 기반 적용 범위입니다. "핵심 테스트 케이스 중 95%가 실행되어 확인됨"이라는 문장이 "테스트가 95% 진행됨"보다 더 의미가 있습니다.
  • 테스트 노력 크기는 테스트 케이스 수에 비례합니다. 테스트 케이스를 포괄적으로 구분하여 테스트 주기의 후속 단계 시기를 보다 정확하게 예상할 수 있습니다.
  • 테스트 디자인 및 개발 종류와 필요한 자원은 주로 테스트 케이스에 따라 다릅니다.

테스트 케이스는 종종 테스트의 유형 또는 연관된 테스트의 요구사항에 따라 분류됩니다. 이 사례는 각 테스트 요구사항에 대해 최소 두 개의 테스트 케이스를 개발하는 것을 목적으로 합니다.

  • 요구사항이 달성었음을 보여주는 테스트 케이스. 이를 긍정적 테스트 케이스라고 합니다.
  • 다른 테스트 케이스는 허용 불가능, 비정상 또는 예기치 않은 조건이나 데이터를 반영하고 원하는 조건 하에서만 요구사항이 달성됨을 보여주는데 이를 부정적 테스트 케이스라고 합니다.

유닛 테스트용 테스트 케이스 찾기

유닛 테스트에는 유닛의 내부 구조 및 동작 특성 모두에 대한 테스트가 필요합니다. 내부 구조 테스트에는 유닛 구현 방법에 대한 지식과 이 지식을 기반으로 한 테스트가 필요합니다(화이트 박스 테스트로 알려짐). 유닛의 동작 특성 테스트는 지식 또는 구현에 관계 없이 외부의 관찰 가능한 유닛 동작에 초점을 맞춥니다. 이러한 접근 방식을 기반으로 한 테스트는 블랙 박스 테스트라고 합니다. 두 접근 방식을 기초로 한 테스트 케이스 도출이 아래 설명되어 있습니다.

화이트 박스 테스트

이론상으로는 코드를 통해 가능한 모든 경로를 테스트해야 합니다. 아주 간단한 단위를 제외하고, 이러한 목적을 달성하는 것은 비현실적이거나 거의 불가능합니다. 최소한 모든 DD(Decision-to-decision) 경로(DD-경로)를 적어도 한 번은 연습하고 모든 명령문을 적어도 한 번은 실행하여 결과를 확인해야 합니다. 결정은 일반적으로 if-문이고 DD-경로는 두 결정 사이의 경로입니다.

이러한 레벨의 테스트 적용 범위를 얻으려면 테스트 데이터를 선택하여 가능한 모든 방법으로 모든 결정을 평가하는 것이 좋습니다. 끝부분에서 테스트 케이스는 다음을 확인해야 합니다.

  • 모든 부울 표현식은 truefalse로 평가됩니다. 예를 들어, (a<3) OR (b>4) 표현식은 네 개의 true/false 조합으로 평가됩니다.
  • 모든 무한 루프는 적어도 0, 1 및 1회 이상 실행됩니다.

코드 적용 범위 도구를 사용하여 화이트 박스 테스트로 실행하지 않은 코드를 식별하십시오. 신뢰성 테스트는 화이트 박스 테스트와 동시에 수행해야 합니다.

예제:

Set of Integers 클래스의 member 함수에서 구조 테스트를 수행하고 있다고 가정해 보십시오. 2진 검색을 사용하여 테스트는 주어진 정수가 포함된 세트를 확인합니다.

함께 표시된 텍스트에서 설명되는 다이어그램

member 함수와 해당하는 플로우 차트입니다. 점선 화살표는 두 테스트 케이스를 사용하여 모든 명령문을 적어도 한 번 이상 실행하는 방법을 설명합니다.

이론적으로 전체적으로 테스트하는 오퍼레이션의 경우 테스트 케이스는 코드의 모든 라우트 조합을 수행해야 합니다. member에서는 while-loop 내에 세 가지의 대체 라우트가 있습니다. 테스트 케이스는 루프를 여러 번 순회하거나 전혀 순회하지 않을 수 있습니다. 테스트 케이스가 루프를 전혀 순회하지 않으면 코드에서 하나의 라우트만 발견하게 됩니다. 루프를 한 번 순회하면 세 개의 라우트를 발견합니다. 두 번 순회하면 여섯 개의 라우트를 발견하게 됩니다. 그러므로 라우트 총계는 1 + 3 + 6 + 12 + 24 + 48 +...이 되어 실제로는 해당 라우트 조합의 수를 관리할 수가 없습니다. 이것이 모든 라우트의 서브세트를 선택해야 하는 이유입니다. 이 예제에서 두 개의 테스트 케이스를 사용하여 모든 명령문을 실행할 수 있습니다. 하나의 테스트 케이스에서 Set of Integers = {1,5,7,8,11} 및 테스트 데이터로 t = 3을 선택할 수 있습니다. 다른 테스트 케이스에서 Set of Integers = {1,5,7,8,11}t = 8을 선택할 수 있습니다.

추가 정보는 기법: 유닛 테스트를 참조하십시오.

블랙 박스 테스트

블랙 박스 테스트의 목적은 유닛이 동작을 어떻게 구현하는지를 확인하지 않고 유닛의 지정된 동작을 확인하는 것입니다. 블랙 박스 테스트는 유닛의 입력 및 출력에 초점을 맞추고 이에 의존합니다.

등가 파티션은 필수 테스트 수를 줄이는 기법입니다. 모든 오퍼레이션에서 인수 및 오브젝트 상태의 등가 클래스를 식별해야 합니다. 등가 클래스는 오브젝트가 비슷하게 동작할 것이라 예상하는 값 세트입니다. 예를 들어, Set에는 empty, some elementfull이라는 세 가지 등가 클래스가 있습니다.

코드 적용 범위 도구를 사용하여 화이트 박스 테스트로 실행하지 않은 코드를 식별하십시오. 신뢰성 테스트는 블랙 박스 테스트와 동시에 수행해야 합니다.

다음 두 서브섹션은 특정 인수에 대한 테스트 데이터를 선택하여 테스트 케이스를 식별하는 방법을 설명합니다.

입력 인수를 기반으로 한 테스트 케이스

입력 인수는 오퍼레이션에 사용되는 인수입니다. 각 오퍼레이션과 다음 각 입력 조건에 따라 입력 인수를 사용하여 테스트 케이스를 작성해야 합니다. 

  • 각 등가 클래스의 정상 값입니다.
  • 각 등가 클래스의 경계에 있는 값입니다.
  • 등가 클래스 외부의 값입니다.
  • 올바르지 않은 값입니다.

오브젝트 상태는 입력 인수로 간주됨을 기억하십시오. 예를 들어, Set 오브젝트에서 add 오퍼레이션을 테스트하는 경우 모든 Set 등가 클래스의 값을 사용하여 add를 테스트해야 합니다. 즉, 전체 Set, Set의 일부 요소 및 빈 Set을 사용합니다.

출력 인수를 기반으로 한 테스트 케이스

출력 인수는 오퍼레이션 변경 인수입니다. 인수는 입력 및 출력 인수 둘 다일 수 있습니다. 입력을 선택하여 다음에 따라 출력을 얻으십시오.

  • 각 등가 클래스의 정상 값입니다.
  • 각 등가 클래스의 경계에 있는 값입니다.
  • 등가 클래스 외부의 값입니다.
  • 올바르지 않은 값입니다.

오브젝트 상태는 출력 인수로 간주됨을 기억하십시오. 예를 들어, List에서 remove 오퍼레이션을 테스트하는 경우, 입력 값을 선택하여 오퍼레이션이 수행된 후 List가 전체이거나, 일부 요소를 가지거나, 비어 있도록 해야 합니다(모든 등가 클래스의 값을 사용하여 테스트).

오브젝트가 오브젝트의 상태에 따라 서로 다르게 반응하는 상태 제어인 경우 다음 그림 중 하나와 같은 상태 매트릭스를 사용해야 합니다.

함께 표시된 텍스트에서 설명되는 다이어그램

테스트에 대한 상태 매트릭스입니다. 이 매트릭스를 기초로 모든 상태 및 자극 조합을 테스트할 수 있습니다.

추가 정보는 기법: 유닛 테스트를 참조하십시오.