프로젝트

일반

사용자정보

MCDC Testing

Prof. Jong Min Lee이(가) 6일 전에 추가함

MCDC(Modified Condition/Decision Coverage) 테스팅

MCDC는 소프트웨어 테스트에서 각 조건(condition)이 결정(decision) 결과에 독립적으로 영향을 미치는지 검증하는 구조적 커버리지 기법입니다. IEC 61508, DO-178C(항공), ISO 26262(자동차) 등 안전 필수 시스템에서 SIL 4/ASIL D 수준에 필수적으로 요구됩니다[1][2].


MCDC의 4대 핵심 조건

  1. 모든 조건의 참/거짓 평가
  2. 모든 결정의 참/거짓 결과 도출
  3. 각 조건이 결정 결과에 독립적 영향 증명
  4. 최소 테스트 케이스(n+1) 사용
    • n: 조건 개수
    • 예: 3개 조건 → 4개 테스트 케이스[1][6]

MCDC 테스트 설계 절차

  1. 결정문 식별
    • 예: if (A && B) || C
  2. 조건 독립성 검증 쌍 도출
    • 각 조건을 변경할 때 결정 결과가 변하는 경우 선택
  3. 중복 테스트 제거
    • 마스킹(Masking) 효과 발생 케이스 제외[8]

MCDC 테스트 사례: (A || B || C)

if (A || B || C) 조건식에 대한 MC/DC(Modified Condition/Decision Coverage) 테스트 케이스를 최소로 생성하기 위해서는 N+1 원칙을 적용합니다(N: 개별 조건식 수). 여기서 N=3이므로 4개의 테스트 케이스가 필요합니다. 각 조건식(A, B, C)이 전체 조건식 결과에 독립적으로 영향을 미치는 경우를 포함해야 합니다.


MC/DC 테스트 케이스 (최소 4개)

| 테스트 케이스 | A | B | C | 결과 (A||B||C) | 설명 |
|--------------|-----|-----|-----|-----------------|---------------------------|
| TC1 | T | F | F | T | A가 T → F로 변경될 때 결과가 T → F로 변경됨 (B, C는 F로 고정) |
| TC2 | F | T | F | T | B가 T → F로 변경될 때 결과가 T → F로 변경됨 (A, C는 F로 고정) |
| TC3 | F | F | T | T | C가 T → F로 변경될 때 결과가 T → F로 변경됨 (A, B는 F로 고정) |
| TC4 | F | F | F | F | 모든 조건식이 F인 기본 케이스 (결과 F) |


핵심 원리

  1. 독립적 영향 검증:

    각 조건식(A, B, C)이 다른 조건식의 값 변경 없이 단독으로 결과를 변경시켜야 합니다.

    예: TC1과 TC4 비교 시, A의 값만 변경되어 결과가 T → F로 변합니다[5][8].

  2. Neutral Value 활용:

    OR 연산에서는 다른 조건식을 F로 고정시켜 특정 조건식의 영향력을 분리합니다[6][7].

    (AND 연산일 경우 Neutral Value는 T)

  3. N+1 최소화:

    3개 조건식 → 4개 테스트 케이스로 모든 조건식의 독립적 영향을 검증할 수 있습니다[2][7].


검증 예시

  • A의 영향력: TC1(T,F,F) vs TC4(F,F,F) → 결과 T → F 변경 [1][5]
  • B의 영향력: TC2(F,T,F) vs TC4(F,F,F) → 결과 T → F 변경 [2][6]
  • C의 영향력: TC3(F,F,T) vs TC4(F,F,F) → 결과 T → F 변경 [3][7]

이 구조는 DO-178C, IEC 61508 등 안전-critical 시스템 표준에서 요구하는 MC/DC 커버리지를 충족합니다.


MCDC vs 기타 커버리지 비교

커버리지 유형 테스트 케이스 수 특징
MC/DC n+1 조건 독립성 검증
조건 커버리지 2n 개별 조건 참/거짓만 평가
다중 조건 커버리지 2n 모든 조합 테스트

MCDC의 한계 및 고려사항

  • 복잡한 조건식: 1000개 이상 논리 조합 시 분석 불가[4]
  • 단락 평가(Short-circuit) 영향: &&, || 연산자 사용 시 주의[6]
  • 도구 지원 필요: LDRA, VectorCAST 등 전문 도구 활용[1][5]

MCDC는 안전 필수 시스템에서 결함 탐지율을 극대화하는 핵심 기법으로, 테스트 비용 절감과 품질 보증을 동시에 달성합니다.

Citations:
[1] https://ldra.com/capabilities/mc-dc/
[2] https://en.wikipedia.org/wiki/Modified_condition/decision_coverage
[3] https://ocw.tudelft.nl/course-readings/3-4-3-another-mc-dc-example/
[4] https://www.mathworks.com/help/slcoverage/ug/types-of-code-coverage.html
[5] https://www.qt.io/quality-assurance/coco/feature-modified-condition-decision-coverage-mcdc
[6] https://dev.to/yo-shi/understanding-software-test-coverage-criteria-step-by-step-from-line-coverage-to-mcdc-54k0
[7] https://www.cse.chalmers.se/edu/course.2018/TDA567_Testing_Debugging_Verification/Lec2018/Examples1.pdf
[8] https://people.inf.elte.hu/lupin/dc_mcdc_study.pdf
[9] https://trendig.com/en/blog/mcdc-technique/
[10] https://shemesh.larc.nasa.gov/fm/papers/Hayhurst-2001-tm210876-MCDC.pdf
[11] https://maskray.me/blog/2024-01-28-mc-dc-and-compiler-implementations
[12] https://support.vector.com/sys_attachment.do?sys_id=a178c18edb7d6c9c4896115e68961900
[13] https://isoft.acm.org/isec2018/presentations/Feb_9/MCDC-ISEC-2018.pdf
[14] https://www.youtube.com/watch?v=9i9xpxn6pzM
[15] https://mural.maynoothuniversity.ie/id/eprint/5356/1/CS640_Thesis_NanLi(11139552).pdf
[16] https://wildart.github.io/MISG5020/standards/ISO-IEC-IEEE-29119-4.pdf
[17] https://www.rapitasystems.com/mcdc-coverage
[18] https://cdn.standards.iteh.ai/samples/60245/8543ef28dcbf4e04b4e386c5464e7895/ISO-IEC-IEEE-29119-4-2015.pdf


답글 (1)

MCDC Testing의 최소 테스트 케이스 개수 - Prof. Jong Min Lee이(가) 4일 전에 추가함

MC/DC(Modified Condition/Decision Coverage)에서 조건이 n개일 때 최소 테스트 케이스 수가 n+1이라는 원칙은, 각 조건이 논리적으로 독립적으로 전체 결과에 영향을 줄 수 있을 때 적용됩니다[1][2][5]. 그러나 실제 조건식이 단순 논리곱(AND)나 논리합(OR)만으로 구성되지 않고, 중첩된 구조(예: if (A || (B && C)))를 가지는 경우에는, 각 조건의 독립적 영향성을 보장하기 위해 n+1보다 많은 테스트 케이스가 필요할 수 있습니다.

왜 5개가 필요한가?

  • if (A || (B && C))는 3개의 조건(A, B, C)이 있지만, B와 C가 AND로 묶여 있고, 그 전체가 A와 OR로 결합되어 있습니다.
  • 이 구조에서는 B와 C의 조합이 전체 결과에 미치는 영향이 단순하지 않으므로, 각 조건이 독립적으로 결과를 바꿀 수 있음을 증명하려면 더 많은 조합이 필요합니다.
  • 예를 들어, B의 값이 결과에 영향을 주려면 A가 False이고, C의 값에 따라 결과가 바뀌는 상황이 필요합니다. 이런 식으로 각 조건의 독립적 영향성을 보장하려면 5개의 테스트 케이스가 필요합니다.

결론

  • n+1 법칙은 일반적인 경우에 적용되지만, 조건 간 결합이 복잡할 경우(중첩, 혼합 논리 연산 등)에는 더 많은 테스트 케이스가 필요할 수 있습니다[1][2][5].
  • 이는 MC/DC의 본질인 "각 조건의 독립적 영향성"을 충족하기 위해서이며, 복잡한 논리 구조에서는 n+1보다 큰 테스트 케이스가 요구될 수 있음을 표준적으로 인정합니다.

"전체 조합을 테스트 하는 것은 현실적으로 불가능, 의미있게 조합수를 줄여 테스트 하자는 것이 변경조건/결정 커버리지의 핵심... 테스트 상황으로 구성된 조합의 개수는(조건식의 개수+ 1) 임. 하지만 조건식의 결합 구조에 따라 더많아질 수 있다.[1][2]

따라서, if (A || (B && C))와 같이 조건이 중첩된 경우 5개의 MC/DC 테스트 케이스가 필요한 것은 표준적이며, 예외적인 상황이 아닙니다.

Citations:
[1] https://itpewiki.tistory.com/567
[2] https://belljundev.tistory.com/35
[3] https://velog.io/@33bini/%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%B8%A1%EC%A0%95-%ED%9A%A8%EA%B3%BC
[4] https://brunch.co.kr/@@95BE/228
[5] https://armin.tistory.com/358
[6] https://stayjun.tistory.com/176
[7] https://itpenote.tistory.com/713
[8] https://swingswing.tistory.com/123
[9] https://bantree.tistory.com/386
[10] http://dcoll.ajou.ac.kr:9080/dcollection/jsp/common/DcLoOrgPer.jsp?sItemId=000000011219


Perplexity로부터의 답변: pplx.ai/share

    (1-1/1)