분기 커버리지(Branch Coverage)란?
프로그램의 모든 판정(if 문 등)에서 참과 거짓 두 분기를 적어도 1회씩 실행할 것을 요구하는 화이트박스 테스트의 커버리지 기준. 결정 커버리지, C1이라고도 부른다. 모든 명령문을 1회 이상 실행하는 구문 커버리지(C0)보다 강한 기준이다.
일본어 명칭: 分岐網羅
분기 커버리지(Branch Coverage)은(는) 소프트웨어 개발과 프로젝트 관리 등 1개 분야의 연습 문제 2개에 나와요.
프로그램의 모든 판정(if 문 등)에서 참과 거짓 두 분기를 적어도 1회씩 실행할 것을 요구하는 화이트박스 테스트의 커버리지 기준. 결정 커버리지, C1이라고도 부른다. 모든 명령문을 1회 이상 실행하는 구문 커버리지(C0)보다 강한 기준이다.
일본어 명칭: 分岐網羅
분기 커버리지(Branch Coverage)은(는) 소프트웨어 개발과 프로젝트 관리 등 1개 분야의 연습 문제 2개에 나와요.
구문 커버리지(C0)는 모든 명령문을 적어도 1회 실행하면 만족됩니다. else가 없는 if (a) { S1; }에서는 a가 참인 테스트 케이스 하나를 실행하면 S1을 지나므로 구문 커버리지는 만족하지만, a가 거짓이어서 아무것도 하지 않고 다음으로 나아가는 분기는 실행되지 않습니다. 분기 커버리지(C1)는 이 거짓 쪽도 요구하므로, a가 거짓일 때 필요한 처리가 빠져 있는 오류 등을 찾기 쉬워집니다. 분기 커버리지를 만족하면 구문 커버리지도 만족됩니다.
판정이 'A 그리고 B'처럼 여러 조건으로 이루어진 경우, 개별 조건이 각각 참과 거짓을 취할 것을 요구하는 것이 조건 커버리지입니다. (A = 참, B = 거짓)과 (A = 거짓, B = 참)의 2개 테스트 케이스에서는 조건 커버리지는 만족하지만, 판정은 둘 다 거짓이므로 분기 커버리지는 만족하지 않습니다. 그래서 판정과 조건을 모두 만족하는 결정/조건 커버리지나, 각 조건이 판정 결과에 독립적으로 영향을 준다는 것을 확인하는 MC/DC(수정 조건/결정 커버리지) 등이 쓰입니다. MC/DC는 항공기 소프트웨어 규격 DO-178C에서 가장 높은 안전 수준에 요구되며, 자동차 기능 안전 규격 ISO 26262에서도 ASIL D에서 강하게 권장되고 있습니다.
커버리지는 실행된 분기의 수 ÷ 모든 분기의 수로 나타내며, 컴파일러나 테스트 도구의 기능으로 측정할 수 있습니다. 커버리지가 100%여도 사양에는 있는데 구현되지 않은 처리의 누락이나, 값에 따라 결과가 바뀌는 오류는 발견되지 않습니다. 커버리지는 '테스트가 지나가지 않은 부분'을 찾는 도구로 쓰고, 블랙박스 테스트와 조합합니다. 하드웨어 검증에서도 RTL의 코드 커버리지로서 같은 사고방식이 쓰입니다.
정답: B. 2
세 판정 각각에서 참과 거짓을 모두 지나가야 합니다. (a, b, c가 모두 참)과 (모두 거짓)의 2개 테스트 케이스로 각 판정의 참과 거짓이 1회씩 실행되므로, 최소는 2개입니다. 1개(모두 참)로도 S1~S3의 모든 명령문은 실행할 수 있으므로 구문 커버리지는 만족하지만, 거짓 쪽 분기(아무것도 하지 않고 다음으로 나아가는 경로)가 실행되지 않습니다. 8은 참·거짓의 조합 2³ = 8가지를 모두 시험하는 경우의 수입니다.
커버리지 기준을 나타내는 약칭으로, C0는 구문 커버리지(모든 명령문을 1회 이상 실행한다), C1은 분기 커버리지(모든 분기의 참과 거짓을 1회 이상 실행한다)를 가리킵니다. C1을 만족하면 C0도 만족합니다.
안전에 관련된 소프트웨어에서는 규격이나 사내 기준으로 분기 커버리지나 MC/DC의 목표가 정해지는 경우가 있습니다. 그 밖에는 100%에 집착하기보다, 지나가지 않은 분기가 정말 불필요한지 테스트가 부족한지를 확인하는 것이 중요합니다. 이상 시에만 지나가는 처리는 고장 주입 등으로 시험해야 합니다.
그러나 'A 그리고 B'는 어느 테스트 케이스에서도 거짓이 되어 판정이 참이 되는 분기를 한 번도 지나지 않으므로, 분기 커버리지는 만족하지 않습니다.
판정 'A 그리고 B'(A와 B는 서로 독립적으로 참·거짓을 정할 수 있는 조건)에 대해 테스트 케이스 (…경계값 분석(Boundary Value Analysis) 동치 분할(Equivalence Partitioning) 블랙박스 테스트(Black-box Testing) 스크럼(Scrum) 애자일 개발(Agile Development) 임계 경로법(CPM) 테스트 주도 개발(TDD) 폭포수 모델(Waterfall Model) 화이트박스 테스트(White-box Testing) 획득가치관리(EVM)