CTC++ : 코드 커버리지 의 핵심, MC/DC와 Multicondition의 차이

min Read

안전하고 신뢰할 수 있는 소프트웨어 개발을 위한 품질 보증 과정에서 테스트는 필수적인 요소입니다.

충분한 테스트가 없으면 소프트웨어가 안전하고 기능적으로 올바른지 평가하는 데 어려움이 있기 때문입니다. 특히 코드 커버리지(또는 테스트 커버리지) 측정은 소프트웨어의 테스트 범위를 파악하는 데 중요한 지표로 작용합니다. 코드 커버리지 는 실제로 테스트된 코드의 비율을 전체 코드와 비교하여 나타내는 지표입니다. 예를 들어 테스트 가능한 네 가지 기능 중 세 가지를 테스트했다면 코드 커버리지는 75%로 측정되며, 이는 소프트웨어가 얼마나 포괄적으로 테스트되었는지 판단할 수 있는 기준이 됩니다.

특히 안전에 중요한 소프트웨어를 개발할 때 다양한 산업 표준은 코드커버리지에 대한 정확한 요구사항을 규정하고 있기 때문에, 충분한 테스트 커버리지가 증명되지 않으면 소프트웨어 인증을 받기가 매우 어려워 집니다. 이와 관련하여 코드커버리지 측정 도구인 Testwell CTC++ 의 개발사 Verifysoft에서는 아래 10가지 항목을 코드커버리지 도구를 선택하기 위한 기준으로 제시하고 있습니다.

각 기준에 대한 조금 더 자세한 설명은 Verifysoft사의 “10 criteria for selecting a code coverage tool”에서 참조하실 수 있습니다.

이중 네번째 항목의 커버리지 레벨에 대해 좀더 자세히 살펴보면, 구조적 커버리지 측정 측면에서 Testwell CTC++는 다양한 측정레벨 옵션을 제공하며, ISO-26262, DO-178C, EN-50128 등의 산업표준에서는 이중 최대 MC/DC 까지의 높은 커버리지 레벨을 규정하고 있습니다.

이 글에서는 Testwell CTC++에서 지원하는 다양한 커버리지 레벨 중 MC/DC 커버리지와 Multicondition 커버리지의 개념과 두 측정방식의 차이점에 대해 살펴보고, 테스트 담당자 입장에서 MC/DC 측정방식이 가질 수 있는 이점에 대해 살펴보겠습니다.

Multicondition Coverage

Multicondition 커버리지는 코드상의 분기점에서 발생할 수 있는 모든 경우의 수를 포함하는 방식으로, 복합 조건상에서 발생할 수 있는 모든 True-False 조합 결과를 평가하기 위한 측정 방식입니다.

예를 들어 각각 True-False결과를 가질 수 있는  a, b, c, d를 요소로 가지는 조건문 ( a || b ) %% ( c || d ) 가 있다고 가정하면 여기에서 발생할 수 있는 7가지조합을 모두 테스트해야지만 100%의 커버리지 결과를 얻을 수 있습니다.

Tip : 여기서는 Short Circuit evaluation 법칙에 따라 무시될 수 있는 결과는 배제 된다는 점을 참고해야 합니다.

Short Circuit evaluation이란 논리식 연산에서 결과가 확실히 예상될 때 뒤의 연산을 실행하지 않고 무시하는 평가방식을 의미합니다.

Short Circuit evaluation에서는 AND 연산자 앞의 연산이 False인경우 AND 뒤의 연산은 생략되고, OR연산자는 앞 연산이 True가 나오면 뒤 연산은 생략됩니다.

이렇게 생략된 연산은 위 목록에서 Underscore(_) 로 표기합니다.

전체조건식의 구조가 복잡해질수록 필요한 테스트케이스의 수는 기하급수적으로 늘어날 것이라고 예상할 수 있습니다. 결국 테스트 담당자가 Multicondition 커버리지의 측정조건에 따라 테스트를 수행하려면 위와 같이 모든 조건에 대한 조합을 모두 만족하는 많은 테스트케이스를 필요로 할 것입니다.

Tip : ctc++의 ctcreport 명령에서 multicondition 보고서를 표시하려면 다음과 같이 옵션을 사용할 수 있습니다.

> ctcreport -measures m

MC/DC 커버리지 (Modified Condition/Decision Coverage)

MC/DC 커버리지에서는 각 조건식의 각 개별 요소가 전체 조건식 결과에 영향을 주는 경우를 조합하여 커버리지를 측정하는 방식입니다.

위의 Multicondition Coverage와 동일한 조건식을 예로들어 설명하면 다음과 같습니다.

위 7가지 경우 중 개별조건식이 전체결과에 영향을 주는 경우를 추려 내보면 다음과 같습니다.

추려낸 결과에서 각 개별조건식을 기준으로 대응되는 계산식을 Group으로 묶습니다.

a 조건식을 예로 들면, 1번과 7번은 a조건식의 결과만 다르고 나머지 조건식들의 결과가 같아서 서로 대응된다고 말할 수 있습니다.

2번과 7번 또한 마찬가지로 a조건식 외에 나머지 조건식들의 결과가 같은 경우입니다. (이때, Underscore(_)는 T와F의 경우를 모두 포함하는 것으로 계산합니다.)

이렇게 각 조건식을 기준으로 대응되는 계산식들을 Grouping하면 다음과 같은 목록을 얻을 수 있습니다.

MC/DC 측정 방식에서는 각 조건식 별로 Grouping된 조합 중 한가지 조합에 대한 테스트만 수행하면 해당 조건식에 대한 커버리지를 만족하는 것으로 간주합니다.

d 조건식을 예로 들면 Group으로 묶여있는 2번조건과 5번조건을 테스트하면 4번과 6번은 테스트하지 않아도 커버리지를 만족하게 됩니다.

이 방식을 바탕으로 테스트를 수행해야 하는 최소한의 조합을 생각해보면 다음의 경우만 테스트 하면 100%의 커버리지를 달성할 수 있다는 것을 알 수 있습니다.

Tip : ctc++의 ctcreport 명령에서 multicondition 보고서를 표시하려면 다음과 같이 옵션을 사용할 수 있습니다.

> ctcreport -measures m

MC/DC 달성을 위해 필요한 테스트케이스를 도출하는 것이 조금 복잡해 보이지만, 다양한 산업인증의 코드 커버리지 조건을 만족시키고 그와 동시에 수행해야 하는 테스트케이스의 수를 줄여주는 MC/DC 측정방식은 프로젝트 수행 시간과 비용을 줄이는 데에 핵심적인 요소가 될 수 있다고 말할 수 있습니다.

Get more insights into Testing & Security

빠르게 업데이트 되는 솔루션 인사이트에 대해 탐구해보세요!

Youngseon Kim

Subscribe for the Latest News!

 
123
Edit Template