기능안전_기본이론

테스트 케이스 도출 방법

아즈마민초 2025. 7. 22. 17:42

아 그렇구나 그러면 테스트 케이스 도출 방법이 너가 언급한게, MC/DC, 경계값 분석이 있었자나 또 대표적으로 많이 사용하는 것들이 뭐가 있어?

 

아주 좋은 질문이에요!
Requirement-Based Testing에서 테스트 케이스를 도출할 때 실무에서 많이 사용하는 대표적인 기법은 다음과 같이 정리할 수 있어요.
(MC/DC, 경계값 분석 외에도 널리 쓰이는 주요 기법들이 있어요)

 

 

 

 

이전 주제와는 다른 질문인데, 테스트 케이스 도출 방법에서 MC/DC 방법의 이름이 왜 Modified coverage인지, decision coverage인지 알려줘

 

1. 기본 개념

소프트웨어 테스트 커버리지에는 여러 단계가 있습니다 (DO-178C, ISO 26262 등에서 사용):

  • Statement coverage: 모든 문장이 실행되었는지 확인.
  • Branch/Decision coverage: 모든 분기(True/False)가 실행되었는지 확인.
  • Condition coverage: 분기를 구성하는 개별 조건들이 True/False로 평가되는지 확인.
  • Condition/Decision coverage: 각 조건과 각 분기 결과가 모두 커버되었는지 확인.

여기서 **MC/DC (Modified Condition/Decision Coverage)**가 가장 강력한 방법으로 도입되었습니다.


2. 왜 "Decision coverage"인가?

  • “Decision”이란 프로그램에서 if, while, for 등의 분기 판단식 전체를 의미합니다.
  • MC/DC에서는 단순히 각 조건(True/False)을 보장하는 것에 더해, 해당 조건이 최종 Decision 결과(True/False)에 ‘독립적으로 영향을 미침’을 보여야 합니다.
  • 따라서 이 기법은 **“조건이 Decision에 끼치는 영향까지 고려한 커버리지”**라서 “Decision coverage”라는 말을 붙인 겁니다.

3. 왜 "Modified"인가?

  • 원래의 Condition/Decision coverage는 각 조건이 True/False 한 번씩 나타나고, 각 Decision 결과가 True/False 한 번씩 나타나면 충분했습니다.
  • 하지만 이 방식은 개별 조건이 최종 결과에 실제로 영향이 있는지를 보장하지 못합니다. (조건이 항상 무시되더라도 단순히 값만 바꿔치면 커버된 것처럼 보임)
  • 그래서 이를 보완(Modify)한 것이 MC/DC입니다.
    • 조건이 독립적으로 결과에 영향을 미치는 test pair를 반드시 포함시켜야 함.
    • 이 “독립적 영향(independent effect)” 부분이 바로 Modified의 핵심.

4. 정리

  • Decision coverage: 분기 결과(True/False)와 조건 값(True/False)을 다 확인하는 기준을 갖기 때문.
  • Modified: 단순히 값만 바꾸는 것이 아니라, 각 조건이 최종 Decision에 실제로 영향을 미친다는 것을 증명하도록 보완(수정)했기 때문.

👉 그래서 MC/DC = Modified Condition/Decision Coverage라는 이름이 된 것입니다.

 

너가 설명해준 부분에서 '분기'와 '개별 조건'의 개념의 차이가 명확하게 이해가 되지 않아 예시를 들어서 설명해줘

 

👍 바로 **분기(Decision)**와 **개별 조건(Condition)**의 차이를 예시 코드로 보여드릴게요.

2. 용어 구분

  • Decision (분기)
    → A && B 전체 식이 하나의 Decision
    → 결과는 True 또는 False 두 가지
  • Condition (개별 조건)
    → Decision 안에 들어 있는 원자 조건
    → 여기서는 A, B 두 개의 Condition

3. Coverage별 차이

(1) Statement coverage (문장 커버리지)

  • if 문 안의 실행문이 한 번이라도 실행되면 됨.
  • 예: A = true, B = true (조건식 True → 실행문 실행) → 커버리지 달성.

(2) Decision coverage (분기 커버리지, Branch coverage)

  • Decision 전체 결과가 True/False 모두 한 번 이상 나오면 됨.
  • 필요 테스트:
    • A = true, B = true → 전체 식 True
    • A = false, B = true → 전체 식 False

(3) Condition coverage (조건 커버리지)

  • 각 개별 조건(Condition)이 True/False 각각 한 번 이상 나타나야 함.
  • 필요 테스트:
    • A = true, B = true → A True, B True
    • A = false, B = true → A False
    • A = true, B = false → B False

(4) MC/DC (Modified Condition/Decision Coverage)

  • 각 조건이 최종 Decision 결과에 독립적으로 영향을 줬음을 보여야 함.
  • 즉, A만 바꿨을 때 결과가 달라지고, B만 바꿨을 때 결과가 달라지는 test pair가 필요.
  • 필요 테스트:
    • A = true, B = true (기준 케이스)
    • A = false, B = true (A만 바꿨더니 결과 True→False 됨 → A가 독립적으로 영향)
    • A = true, B = false (B만 바꿨더니 결과 True→False 됨 → B가 독립적으로 영향)

👉 이렇게 하면 **분기(Decision)**는 A && B 전체,
**조건(Condition)**은 A, B 각각이라는 차이가 명확해집니다.


4. 그림으로 요약

  • Decision = “if문이 실행되느냐, 아니냐” (전체 결과)
  • Condition = “결과를 결정하는 작은 단위 요소