Code 커버리지 도구: 문장, 분기 및 결정 테스트
⚡ 스마트 요약
Code 코드 커버리지는 소스 코드가 테스트 스위트에 의해 얼마나 실행되었는지를 나타내는 화이트박스 측정값입니다.ping 팀은 숨겨진 결함이 있을 수 있는 테스트되지 않은 명령문, 분기, 조건 및 경로를 찾아냅니다.

Code 적용 범위?
Code 적용 범위 이는 프로그램 소스 코드가 얼마나 테스트되었는지를 나타내는 척도입니다. 이는 테스트의 한 형태입니다. 화이트 박스 테스트 이 도구는 일련의 테스트 케이스로 실행되지 않은 프로그램 영역을 찾아냅니다. 또한 추가 테스트 케이스를 생성하여 코드 커버리지를 높이고 정량적인 코드 커버리지 측정값을 산출하는 데 도움을 줍니다.
대부분의 경우 코드 커버리지 시스템은 실행 중인 프로그램에 대한 정보를 수집합니다. 그런 다음 이 정보를 소스 코드 정보와 결합하여 테스트 스위트의 코드 커버리지에 대한 보고서를 생성합니다.
왜 사용 하는가? Code 커버리지 테스트?
코드 적용 범위를 사용하는 몇 가지 주요 이유는 다음과 같습니다.
- 이는 테스트 구현의 효율성을 측정하는 데 도움이 됩니다.
- 이는 테스트에 대한 정량적 측정 방법을 제공합니다.
- 이는 소스 코드가 테스트된 정도를 정의합니다.
Code 커버리지 방법
다음은 주요 코드 커버리지 측정 방법입니다.
- 명세서 범위
- 의사결정 범위
- 지점 적용 범위
- Toggle 적용 범위
- FSM 적용 범위
명세서 범위
명세서 범위 문장 커버리지는 소스 코드의 모든 실행 가능한 문장을 최소 한 번 이상 실행하는 화이트 박스 테스트 기법입니다. 이는 소스 코드에서 실행된 문장의 수를 계산하는 데 사용됩니다. 문장 커버리지의 주요 목적은 소스 코드의 모든 가능한 경로, 줄, 문장을 커버하는 것입니다.
문장 커버리지는 테스트 대상 코드의 구조를 기반으로 시나리오를 도출하는 데 사용됩니다.
화이트 박스 테스트에서 테스터는 소프트웨어의 작동 방식에 집중합니다. 다시 말해, 테스터는 제어 흐름 그래프 또는 순서도와 관련된 소스 코드의 내부 작동 방식에 집중합니다.
일반적으로 어떤 소프트웨어든 소스 코드를 살펴보면 연산자, 함수, 함수 호출 등과 같은 다양한 요소들이 존재합니다.ping예외 처리기 등도 포함됩니다. 프로그램 입력에 따라 일부 코드 문장은 실행되지 않을 수 있습니다. 문장 커버리지의 목표는 코드 내의 모든 가능한 경로, 줄, 문장을 모두 커버하는 것입니다.
명세서 적용 범위 계산 방법을 예시를 통해 이해해 보겠습니다. 두 가지 시나리오를 사용하여 각 시나리오별 명세서 적용 범위 비율을 확인해 보겠습니다.
출처 Code:
Prints (int a, int b) { ------------ Printsum is a function int result = a + b; If (result > 0) Print ("Positive", result) Else Print ("Negative", result) } ----------- End of the source code
시나리오 1 : A = 3이면 B = 9
노란색으로 표시된 문장은 시나리오에 따라 실행된 문장입니다. 실행된 문장 수는 5개이고, 전체 문장 수는 7개이므로 문장 실행률(Statement Coverage)은 5/7 = 71%입니다.
시나리오 2 : A = -3이면 B = -9
노란색으로 표시된 문장은 시나리오에 따라 실행된 문장입니다. 실행된 문장 수는 6개이고, 전체 문장 수는 7개이므로 문장 실행률(Statement Coverage)은 6/7 = 85%입니다.
하지만 전체적으로 보면, 모든 진술이 두 시나리오 모두에 해당됩니다. 따라서 전체적인 진술 적용 범위는 100%라고 결론 내릴 수 있습니다.
명세서 적용 범위에는 무엇이 포함됩니까?
- 사용되지 않은 문
- 죽은 Code
- 사용하지 않는 지점
- 누락된 진술
의사결정 범위 테스트
의사결정 범위 결정 커버리지 테스트는 소스 코드의 각 부울 표현식에 대한 참 또는 거짓 결과를 보고하는 화이트 박스 테스트 기법입니다. 결정 커버리지 테스트의 목표는 모든 가능한 결정 지점의 각 분기가 최소 한 번 이상 실행되는지 확인하여 접근 가능한 모든 소스 코드를 커버하고 검증하는 것입니다.
이러한 유형의 코드 커버리지에서는 표현식이 복잡해질 수 있어 100% 커버리지를 달성하기 어렵습니다. 따라서 이 지표를 보고하는 데에는 다양한 방법이 사용됩니다. 이러한 방법들은 가장 중요한 조합을 우선적으로 고려합니다. 분기 커버리지와 유사하지만, 제어 흐름에 대한 민감도가 더 높습니다.
의사결정 범위 예시
다음 코드를 고려하십시오.
Demo(int a) { If (a > 5) a = a * 3 Print (a) }
시나리오 1 : a의 값은 2입니다. (a>5)인 경우 의사 결정 결과가 "아니오"이므로 의사 결정 범위는 50%입니다.
시나리오 2 : a의 값은 6입니다. (a>5)인 경우 "예"라는 결과가 선택되므로, 결정 범위는 50%입니다.
| 테스트 케이스 | A의 가치 | 산출 | 의사결정 범위 |
|---|---|---|---|
| 1 | 2 | 2 | 50% |
| 2 | 6 | 18 | 50% |
지점 적용 범위 테스트
지점 적용 범위 분기 커버리지는 코드 모듈(명령문 또는 반복문)의 모든 결과를 테스트하는 화이트 박스 테스트 방법입니다. 분기 커버리지의 목적은 모든 분기의 각 조건문이 최소 한 번 이상 실행되는지 확인하는 것입니다. 이를 통해 독립적인 코드 세그먼트의 비율을 측정하고 분기가 없는 부분을 찾아낼 수 있습니다.
예를 들어 결과가 이진형인 경우 True 및 False 결과를 모두 테스트해야 합니다.
지점 적용 범위를 계산하는 공식:
지점 적용 범위의 예
분기 커버리지를 배우려면 앞서 사용했던 예제를 다시 살펴보세요. 분기 커버리지는 무조건 분기도 고려합니다.
| 테스트 케이스 | A의 가치 | 산출 | 의사결정 범위 | 지점 적용 범위 |
|---|---|---|---|---|
| 1 | 2 | 2 | 50% | 33% |
| 2 | 6 | 18 | 50% | 67% |
지점 적용 범위의 장점:
- 코드의 모든 분기를 검증할 수 있습니다.
- 분기로 인해 프로그램 작동에 이상이 발생하지 않도록 보장하는 데 도움이 됩니다.
- 문장 범위 테스트로 인해 발생하는 문제를 제거합니다.
- 다른 검사 방법으로는 검사되지 않는 영역을 찾을 수 있습니다.
- 코드 커버리지에 대한 정량적 측정값을 찾을 수 있도록 해줍니다.
- 분기 커버리지는 부울 표현식 내의 분기를 무시합니다.
조건 커버리지 테스트
조건 적용 범위조건부 커버리지(또는 표현식 커버리지)는 조건문의 변수 또는 하위 표현식을 테스트하고 평가하는 데 사용되는 테스트 방법입니다. 조건부 커버리지의 목표는 각 논리 조건에 대한 개별 결과를 확인하는 것입니다. 조건부 커버리지는 결정 커버리지보다 제어 흐름에 대한 민감도가 더 높습니다. 이 커버리지에서는 논리 피연산자를 포함하는 표현식만 고려됩니다.
예를 들어, 표현식에 AND, OR, XOR과 같은 부울 연산이 포함되어 있다면, 이는 가능한 모든 경우의 수를 나타냅니다. 조건 커버리지가 완전한 결정 커버리지를 보장하는 것은 아닙니다.
조건 적용 범위를 계산하는 공식:
피연산자가 두 개인 표현식의 경우, TT, FF, TF, FT의 네 가지 조합이 가능합니다. 입력 X=3, Y=4(x)를 생각해 보겠습니다. b) 거짓입니다. 이는 조건 적용 범위가 1/4 = 25%임을 의미합니다.
유한 상태 머신 적용 범위
유한 상태 머신 커버리지는 코드 커버리지 방법 중 가장 복잡한 유형입니다. 이는 설계의 동작을 기반으로 하기 때문입니다. 이 커버리지 방법에서는 특정 상태가 몇 번 방문되거나 전이되는지 살펴봐야 합니다. 또한 유한 상태 머신에 포함된 시퀀스의 개수도 확인합니다.
어떤 유형 Code 선택할 수 있는 보장 범위
이것은 확실히 가장 어려운 답변입니다. 테스트 담당자는 코드 커버리지 방법을 선택하기 위해 다음 사항들을 확인해야 합니다.
- 테스트 대상 코드에 하나 이상의 미발견 결함이 있습니다.
- 잠재적 처벌 비용
- 평판 손실 비용
- 매출 손실 비용 등.
결함으로 인해 비용이 많이 드는 생산 실패가 발생할 가능성이 높을수록 선택해야 하는 보장 수준이 더욱 엄격해집니다.
Code 커버리지 vs. 기능적 커버리지
| Code 적용 범위 | 기능적 범위 |
|---|---|
| 소스 코드가 테스트 벤치에서 얼마나 잘 실행되었는지 알려줍니다. | 설계의 기능이 테스트 벤치에서 얼마나 잘 검증되었는지 측정합니다. |
| 설계 사양서를 전혀 사용하지 않습니다. | 설계 사양을 사용합니다. |
| 개발자들이 완료했습니다. | 테스터들이 완료했습니다. |
Code 커버리지 도구
다음은 중요한 코드 커버리지 도구 목록입니다.
| 도구 이름 | 기술설명 |
|---|---|
| Cobertura | 오픈 소스 코드 커버리지 도구입니다. 코드베이스에 계측 도구를 설치하고 테스트 스위트 실행 시 어떤 코드 라인이 실행되고 어떤 라인이 실행되지 않는지 분석하여 테스트 커버리지를 측정합니다. |
| 클로버 | 클로버(OpenClover또한 이전 빌드 이후 수정된 애플리케이션 코드를 포함하는 테스트만 실행함으로써 테스트 시간을 단축합니다. |
| 개발파트너 | DevPartner를 사용하면 개발자가 분석할 수 있습니다. Java 코드 품질 및 복잡성을 위한 코드. |
| 엠마 | EMMA는 소스 파일, 클래스 및 메서드 수준에서 집계된 클래스, 메서드, 라인 및 기본 블록 커버리지를 지원합니다. |
| 칼리스티크 | Kalistick은 다양한 관점에서 코드를 분석하는 타사 애플리케이션입니다. |
| CoView와 CoAnt | 코드 커버리지 측정, 모의 객체 생성, 코드 테스트 용이성, 경로 및 분기 커버리지 등을 제공하는 코드 커버리지 도구입니다. |
| 불스아이 C++ | BullseyeCoverage는 코드 커버리지 도구입니다. C++ 및 C. |
| 소나 | Sonar는 코드 품질 관리에 도움이 되는 오픈 소스 코드 커버리지 도구입니다. |
사용의 장점과 단점 Code 적용 범위
| 장점 | 단점 |
|---|---|
| 코드 커버리지의 정량적 측정치를 평가하는 데 도움이 됩니다. | 설계에 특정 기능이 구현되지 않았더라도 코드 커버리지는 여전히 100%로 보고됩니다. |
| 테스트 범위를 넓히기 위해 추가 테스트 케이스를 생성할 수 있습니다. | 코드 커버리지를 사용해서는 특정 기능의 모든 가능한 값이 테스트되었는지 여부를 판단할 수 없습니다. |
| 이 기능을 사용하면 일련의 테스트 케이스로 실행되지 않은 프로그램 영역을 찾을 수 있습니다. | Code 커버리지는 논리를 얼마나 잘, 그리고 얼마나 폭넓게 다루었는지를 알려주지 않습니다. |






