핵심 인사이트 (3줄 요약)
- 본질: 조건/결정 커버리지 (Condition/Decision Coverage)은(는) 소프트웨어 공학의 핵심 개념으로, 복잡한 시스템을 체계적으로 설계·관리하기 위한 원칙과 기법이다.
- 가치: 이 개념을 올바르게 적용하면 소프트웨어의 품질·유지보수성·재사용성이 향상되고, 개발 생산성과 팀 협업 효율이 높아진다.
- 판단 포인트: 도입 시에는 비용·복잡도·조직 성숙도를 함께 고려해야 하며, 맹목적 적용보다 프로젝트 특성에 맞는 선택적 적용이 핵심이다.
Ⅰ. 개요 및 필요성
조건/결정 커버리지는 조건 커버리지와 결정 커버리지를 함께 만족시키는 방식이다. 개별 조건이 참과 거짓을 모두 가져야 하고, 전체 결정도 참과 거짓을 모두 가져야 한다. 즉, 부품 검사와 완제품 검사를 동시에 통과해야 한다.
이 지표가 필요한 이유는 복합 조건문이 단순해 보여도 실제로는 많은 결함을 숨기기 때문이다. 조건만 맞추면 전체 분기의 참/거짓이 한쪽으로만 고정될 수 있고, 결정만 맞추면 조건 하나가 아예 검증되지 않을 수 있다.
if (A and B)
├─ A = T/F 모두 확인
├─ B = T/F 모두 확인
└─ 전체 결과도 T/F 모두 확인
- 📢 섹션 요약 비유: 부품 하나씩만 검사하면 조립 불량을 놓치고, 완제품만 보면 속 부품의 결함을 놓친다. 둘 다 봐야 한다.
Ⅱ. 아키텍처 및 핵심 원리
조건(Condition)은 더 쪼갤 수 없는 부울 식이고, 결정(Decision)은 조건들이 논리 연산자로 묶인 결과다. 조건/결정 커버리지는 두 층을 모두 만족시켜야 한다.
| 항목 | 확인 대상 | 예시 |
|---|---|---|
| 조건 커버리지 | 각 조건의 T/F | A > 0, B > 0 |
| 결정 커버리지 | 전체 식의 T/F | A > 0 and B > 0 |
| 조건/결정 커버리지 | 둘 다 | 조건도, 결과도 모두 T/F |
TC-1: A=T, B=T -> Decision=T
TC-2: A=T, B=F -> Decision=F
TC-3: A=F, B=T -> Decision=F
TC-4: A=F, B=F -> Decision=F
위처럼 테스트를 설계하면 각 조건의 참/거짓과 전체 결정의 참/거짓을 함께 확인할 수 있다. 다만 논리식이 복잡해질수록 테스트 수가 늘어난다.
- 📢 섹션 요약 비유: 레고를 살 때 블록 색만 보고 사면 안 되고, 완성된 모양도 함께 봐야 한다.
Ⅲ. 비교 및 연결
조건 커버리지는 조건 값 자체에 집중하고, 결정 커버리지는 분기 결과에 집중한다. 조건/결정 커버리지는 둘 사이의 공백을 메우는 절충안이다.
| 구분 | 장점 | 한계 |
|---|---|---|
| 조건 커버리지 | 개별 조건 검증에 강함 | 결정 결과가 한쪽으로만 고정될 수 있음 |
| 결정 커버리지 | 분기 흐름 확인이 쉬움 | 각 조건이 실제로 다 검증되지 않을 수 있음 |
| 조건/결정 커버리지 | 둘의 빈틈을 함께 줄임 | MC/DC만큼 엄격하지는 않음 |
안전 중요 시스템에서는 이 수준을 기본으로 삼고, 더 높은 안전 등급에서는 MC/DC로 넘어간다.
- 📢 섹션 요약 비유: 한쪽 눈으로 보면 입체가 흐릿하고, 양쪽 눈으로 봐야 거리감이 잡힌다.
Ⅳ. 실무 적용 및 기술사 판단
실무에서는 복합 조건문이 많은 승인 로직, 예외 처리, 권한 검증에서 자주 쓴다. 테스트 케이스를 만들 때는 조건 하나씩 참/거짓이 바뀌는지와 전체 분기가 양쪽으로 나뉘는지를 같이 본다.
체크 포인트는 다음과 같다.
- 조건이 2개 이상이면 단순 분기 커버리지로 끝내지 않는다.
- 단락 평가(short-circuit) 때문에 뒤 조건이 평가되지 않는 경로를 확인한다.
- 안전 관련 로직이면 커버리지 기준을 명시한다.
- 📢 섹션 요약 비유: 운전할 때 앞차만 보고 멈추는지, 신호도 보고 멈추는지 같이 확인해야 사고를 줄일 수 있다.
Ⅴ. 기대효과 및 결론
조건/결정 커버리지는 복합 논리의 결함을 더 촘촘하게 잡아준다. 조건만 보는 테스트보다 강하고, 결정만 보는 테스트보다 덜 허술하다. 그래서 안전성과 효율성 사이의 균형점으로 자주 쓰인다.
결론적으로 이 지표는 "부품도 보고 결과도 보는" 테스트다. 복합 조건이 많은 코드에서 기본 방어선 역할을 한다.
- 📢 섹션 요약 비유: 체온만 재지 말고 맥박도 같이 재야 몸 상태를 더 정확히 안다.
📌 관련 개념 맵
| 개념 | 연결 포인트 |
|---|---|
| 소프트웨어 공학 (Software Engineering) | 조건/결정 커버리지 (Condition/Decision Coverage)의 상위 학문 체계이며 품질·생산성 향상의 공통 목표를 공유한다 |
| 소프트웨어 생명주기 (SDLC, Software Development Life Cycle) | 조건/결정 커버리지 (Condition/Decision Coverage)은 SDLC의 특정 단계에서 핵심적으로 적용된다 |
| 품질 보증 (QA, Quality Assurance) | 조건/결정 커버리지 (Condition/Decision Coverage) 적용 결과는 QA 활동을 통해 검증되고 측정된다 |
| 형상 관리 (SCM, Software Configuration Management) | 조건/결정 커버리지 (Condition/Decision Coverage)에서 생성된 산출물은 SCM을 통해 체계적으로 관리된다 |
📈 관련 키워드 및 발전 흐름도
소프트웨어 위기 (Software Crisis) 인식
│
▼
조건/결정 커버리지 (Condition/Decision Coverage) 개념 정립
│
▼
표준화 및 방법론 체계화 (ISO, CMMI, Agile)
│
▼
클라우드 네이티브·AI 기반 확장 적용
│
▼
지속적 개선 및 DevOps·MLOps 통합
이 흐름은 소프트웨어 위기 인식 → 체계적 방법론 개발 → 표준화 → 현대적 플랫폼 적용으로 이어지는 발전 과정을 보여준다.
👶 어린이를 위한 3줄 비유 설명
- 조건/결정 커버리지 (Condition/Decision Coverage)은 레고 블록으로 성을 만들 때처럼, 규칙을 정하고 역할을 나누어 함께 작업하는 방법이에요.
- 혼자서 막 만들면 나중에 무너지거나 고치기 어렵지만, 약속을 지키면 누구나 쉽게 고치고 더 크게 만들 수 있어요.
- 그래서 소프트웨어 공학은 프로그래머들이 좋은 프로그램을 빠르고 안전하게 만들 수 있게 도와주는 '규칙 모음집'이에요.