테스트 커버리지

ahha로군·2024년 7월 15일
0

정처기_10단원

목록 보기
4/5

결정 vs 조건 차이점 요약:

  • 결정 커버리지는 조건문 전체의 결과 (참/거짓)만 고려하여 테스트.
  • 조건 커버리지는 조건문 내부의 각 개별 조건이 참/거짓을 모두 고려하여 테스트.

예를 들어, 다음과 같은 복잡한 조건문이 있다고 가정합시다.

def complex_condition(a, b):
    if (a > 1) and (b < 5):
        return True
    else:
        return False

이 경우에:

  • 결정 커버리지:

    • (a > 1) and (b < 5)가 참인 경우와 거짓인 경우 모두 테스트.
    • 예: complex_condition(2, 3) (참), complex_condition(0, 6) (거짓).

    이거

    1. 분기1 참, 분기2 참
    2. 분기1 거짓, 분기2 거짓

    아니면 이거 둘 중 하나만해도 됨. 분기마다 참, 거짓 둘 다 나옴

    1. 분기1 참, 분기2 거짓
    2. 분기1 거짓, 분기2 참
  • 조건 커버리지:

    • a > 1이 참/거짓, b < 5가 참/거짓 각각을 모두 테스트.
    • 예: complex_condition(2, 6) (a > 1 참, b < 5 거짓), complex_condition(0, 3) (a > 1 거짓, b < 5 참).
      테스트 커버리지와 관련된 개념들을 쉽게 설명하기 위해, 간단한 코드 예시를 통해 각 개념을 설명하겠습니다.
def is_even(number):
    if number % 2 == 0:
        return True
    else:
        return False

조건 커버리지는 복합 조건식 내의 각 개별 조건이 참과 거짓을 모두 가지도록 테스트하는 것을 의미합니다. 예를 들어, 조건식 if (A && B)에서 조건 커버리지를 달성하려면 각 조건 A와 B가 각각 최소 한 번씩 참과 거짓을 가져야 합니다. 따라서, 주어진 조건이 두 개일 경우 가능한 모든 조합을 테스트해야 합니다:

분기1 참, 분기2 거짓
분기1 거짓, 분기2 참 (확인 필요)

is_even은 숫자가 짝수인지 아닌지를 판단
이 예시를 바탕으로 각 커버리지 개념을 설명하겠습니다.

  1. 구문(문장) 커버리지 (Statement Coverage):

    • 프로그램 내의 모든 명령문을 적어도 한 번 실행하는 테스트입니다.
    • 예: is_even(2), is_even(3)를 테스트하면 모든 명령문이 한 번씩 실행됩니다.
  2. 결정 커버리지 (Decision Coverage):

    • 결정 포인트 내의 전체 조건식이 적어도 한 번은 참과 거짓의 결과를 수행하는 테스트입니다.
    • 예: is_even(2) (참), is_even(3) (거짓)을 테스트하면 if 문의 두 가지 결과를 모두 확인할 수 있습니다.
  3. 조건 커버리지 (Condition Coverage):

    • 결정 포인트 내의 개별 조건식이 적어도 한 번은 참과 거짓이 되도록 수행하는 테스트입니다.
    • 예: 위 예시와 동일하게 is_even(2)is_even(3)으로 커버할 수 있습니다.
  4. 조건/결정 커버리지 (Condition/Decision Coverage):

    • 전체 조건식뿐만 아니라 개별 조건식도 참 한번, 거짓 한번 결과가 되도록 수행하는 테스트 커버리지입니다.
    • 예: 위 예시와 동일하게 is_even(2)is_even(3)으로 커버할 수 있습니다.
  5. 변경 조건/결정 커버리지 (Modified Condition/Decision Coverage):

    • 각 개별 조건식이 다른 개별 조건식에 영향을 받지 않고, 전체 조건식의 결과에 독립적으로 영향을 주도록 함으로써 조건/결정 커버리지를 향상시키는 테스트 커버리지입니다.
    • 예: 이 경우는 단일 조건 함수이므로 특별히 추가적인 설명이 필요하지 않습니다.
  6. 다중 조건 커버리지 (Multiple Condition Coverage):

    • 결정 조건 내 모든 개별 조건식의 모든 가능한 조합을 100% 보장하는 테스트 커버리지입니다.
    • 예: 이 경우는 단일 조건 함수이므로 특별히 추가적인 설명이 필요하지 않습니다.
  7. 기본 경로 커버리지 (Base Path Coverage):

    • 맥케이브의 순환 복잡도를 기반으로 커버리지 계산. 수행 가능한 모든 경로를 테스트합니다.
    • 순환 복잡도 계산식: V(G) = E - N + 2 (여기서 E는 간선 수, N은 노드 수)
    • 예: is_even(2)is_even(3) 두 가지 경로를 모두 테스트하여 모든 경로를 커버합니다.
  8. 제어 흐름 테스트 (Control Flow Testing):

    • 프로그램 제어 구조를 그래프 형태로 나타내어 내부 로직을 테스트하는 기법입니다.
    • 예: if-else 구조의 제어 흐름을 통해 각 분기를 테스트합니다.
  9. 데이터 흐름 테스트 (Data Flow Testing):

    • 제어 흐름 그래프에 데이터 사용 현황을 추가한 그래프로 통해 테스트합니다.
    • 예: 변수 number의 값이 어떻게 사용되는지 확인합니다.
profile
달달한 거 좋아합니다. 잘부탁드려요.

0개의 댓글