코드 적용 범위 튜토리얼: 분기, 명령문 및 결정 테스트
코드 적용 범위는 무엇입니까?
코드 커버리지는 프로그램의 소스 코드가 테스트된 정도를 설명하는 척도입니다. 테스트 케이스 세트에서 실행되지 않는 프로그램 영역을 찾는 화이트 박스 테스트의 한 형태입니다. 또한 커버리지를 늘리고 코드 커버리지의 정량적 측정을 결정하기 위해 일부 테스트 케이스를 만듭니다.
대부분의 경우 코드 검사 시스템은 실행 중인 프로그램에 대한 정보를 수집합니다. 또한 이를 소스 코드 정보와 결합하여 테스트 스위트의 코드 적용 범위에 대한 보고서를 생성합니다.
코드 커버리지 테스트를 사용하는 이유는 무엇입니까?
코드 적용 범위를 사용하는 몇 가지 주요 이유는 다음과 같습니다.
- 테스트 구현의 효율성을 측정하는 데 도움이 됩니다.
- 정량적 측정을 제공합니다.
- 이는 소스 코드가 테스트된 정도를 정의합니다.
코드 적용 방법
다음은 주요 코드 커버리지 방법입니다.
- 명세서 범위
- 의사결정 범위
- 지점 적용 범위
- Toggle 적용 범위
- FSM 적용 범위
명세서 범위
명세서 범위 소스 코드의 모든 실행 가능한 문장이 최소한 한 번 실행되는 화이트 박스 테스트 기법입니다. 소스 코드에서 실행된 문장의 수를 계산하는 데 사용됩니다. Statement Coverage의 주요 목적은 소스 코드의 모든 가능한 경로, 줄 및 문장을 포함하는 것입니다.
명령문 적용 범위는 테스트 중인 코드의 구조를 기반으로 시나리오를 도출하는 데 사용됩니다.
In 백 Box 지원, 테스터는 소프트웨어가 어떻게 작동하는지에 집중하고 있습니다. 즉, 테스터는 제어 흐름 그래프 또는 흐름도와 관련된 소스 코드의 내부 작업에 집중하게 됩니다.
일반적으로 모든 소프트웨어에서 소스 코드를 살펴보면 연산자, 함수, 루핑, 예외 처리기 등과 같은 다양한 요소가 있습니다. 프로그램에 대한 입력에 따라 일부 코드 문장은 실행되지 않을 수 있습니다. 문장 커버리지의 목표는 코드에서 가능한 모든 경로, 줄, 문장을 커버하는 것입니다.
명세서 적용 범위를 계산하는 방법에 대한 예를 통해 이를 이해해 보겠습니다.
주어진 소스 코드에 대한 명령문 적용 범위를 계산하는 시나리오입니다. 여기서는 두 가지 시나리오를 사용하여 각 시나리오에 대한 명세서 적용 비율을 확인합니다.
소스 코드 :
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
명세서 적용 범위: 5/7 = 71%
마찬가지로 우리는 시나리오 2를 볼 것입니다.
시나리오 2 :
A = -3이면 B = -9
노란색으로 표시된 문장은 시나리오에 따라 실행된 문장입니다.
실행된 문 수 = 6
총 문 수 = 7
명세서 적용 범위: 6/7 = 85%
그러나 전체적으로 보면 모든 진술이 두 시나리오에서 모두 다루어지고 있습니다. 따라서 전체 명세서 적용 범위는 100%라고 결론을 내릴 수 있습니다.
명세서 적용 범위에는 무엇이 포함됩니까?
- 사용되지 않은 문
- 데드 코드
- 사용하지 않는 지점
- 누락된 진술
의사결정 범위 테스트
의사결정 범위 소스 코드의 각 부울 표현식의 참 또는 거짓 결과를 보고하는 화이트 박스 테스트 기술입니다. 결정 범위 테스트의 목표는 모든 가능한 결정 지점의 각 분기가 최소한 한 번 실행되었는지 확인하고 보장하여 액세스 가능한 모든 소스 코드를 커버하고 검증하는 것입니다.
이 적용 범위 유형에서는 표현식이 복잡해질 수 있어 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 결과를 모두 테스트해야 합니다.
지점 적용 범위를 계산하는 공식:
지점 적용 범위의 예
분기 적용 범위를 알아보려면 이전에 사용한 것과 동일한 예를 고려해 보겠습니다.
다음 코드를 고려해보세요.
Demo(int a) { If (a> 5) a=a*3 Print (a) }
Branch Coverage는 무조건 분기도 고려합니다.
테스트 케이스 | A의 가치 | 산출 | 의사결정 범위 | 지점 적용 범위 |
---|---|---|---|---|
1 | 2 | 2 | 50% | 33% |
2 | 6 | 18 | 50% | 67% |
지점 적용 범위의 장점:
지점 커버리지 테스트는 다음과 같은 이점을 제공합니다.
- 코드의 모든 분기를 검증할 수 있습니다.
- 프로그램 작동에 어떠한 분기 리드도 비정상적으로 이어지지 않도록 보장하는 데 도움이 됩니다.
- Branch Coverage 방식은 명세서 커버리지 테스트로 인해 발생하는 문제를 제거합니다.
- 다른 테스트 방법으로 테스트되지 않은 영역을 찾을 수 있습니다.
- 코드 적용 범위에 대한 정량적 측정값을 찾을 수 있습니다.
- 분기 적용 범위는 부울 표현식 내부의 분기를 무시합니다.
조건 커버리지 테스트
조건 적용 범위 또는 표현식 커버리지는 조건문에서 변수나 하위 표현식을 테스트하고 평가하는 데 사용되는 테스트 방법입니다. 조건 커버리지의 목표는 각 논리적 조건에 대한 개별 결과를 확인하는 것입니다. 조건 커버리지는 결정 커버리지보다 제어 흐름에 대한 민감도가 더 좋습니다. 이 커버리지에서는 논리적 피연산자가 있는 표현식만 고려됩니다.
예를 들어, 표현식에 AND, OR, XOR과 같은 부울 연산이 있는 경우 이는 전체 가능성을 나타냅니다.
조건 커버리지는 전체 결정 커버리지를 보장하지 않습니다.
조건 적용 범위를 계산하는 공식:
예:
위의 표현에는 4가지 조합이 가능합니다
- TT
- FF
- TF
- FT
다음 입력을 고려하세요
X = 3
Y = 4 |
(엑스 | TRUE | 조건 적용 범위는 ¼ = 25%입니다. |
A = 3
B = 4 |
(a>b) | 그릇된 |
유한 상태 머신 적용 범위
유한 상태 머신 커버리지는 확실히 가장 복잡한 유형의 코드 커버리지 방법입니다. 이는 설계의 동작에 따라 작동하기 때문입니다. 이 커버리지 방법에서는 방문한 시간별 상태의 수, 전이된 수를 찾아야 합니다. 또한 유한 상태 머신에 포함된 시퀀스의 수를 확인합니다.
선택할 코드 범위 유형
이것은 확실히 가장 어려운 답변입니다. 적용 범위 방법을 선택하려면 테스터는 다음 사항을 확인해야 합니다.
- 테스트 중인 코드에 발견되지 않은 단일 또는 다중 결함이 있음
- 잠재적인 처벌 비용
- 평판 상실의 대가
- 판매 손실 비용 등
결함으로 인해 비용이 많이 드는 생산 실패가 발생할 가능성이 높을수록 선택해야 하는 보장 수준이 더욱 엄격해집니다.
코드 적용 범위와 기능 적용 범위
코드 커버리지 | 기능적 범위 |
---|---|
코드 적용 범위는 테스트 벤치에서 소스 코드가 얼마나 잘 실행되었는지를 알려줍니다. | 기능 적용 범위는 테스트 벤치에서 설계 기능이 얼마나 잘 적용되었는지 측정합니다. |
절대로 디자인 사양을 사용하지 마세요. | 디자인 사양 사용 |
개발자가 수행함 | 테스터가 수행함 |
코드 적용 도구
다음은 중요한 코드 적용 도구 목록입니다.
도구 이름 | 상품 설명 |
---|---|
Cobertura | 오픈소스 코드 커버리지 도구입니다. 코드 베이스를 계측하여 테스트 범위를 측정하고 테스트 스위트가 실행될 때 실행 중인 코드 줄과 실행되지 않는 코드 줄을 분석합니다. |
클로버 | 클로버는 이전 빌드 이후 수정된 애플리케이션 코드에 대한 테스트만 실행하여 테스트 시간을 줄여줍니다. |
개발파트너 | DevPartner를 사용하면 개발자가 분석할 수 있습니다. Java 코드 품질 및 복잡성을 위한 코드입니다. |
엠마 | EMMA는 클래스, 메서드, 라인 및 기본 블록 범위, 집계된 소스 파일, 클래스 및 메서드 수준을 지원합니다. |
칼리스티크 | Kalistick은 다양한 관점으로 코드를 분석하는 타사 애플리케이션입니다. |
CoView와 CoAnt | 코딩 소프트웨어는 메트릭, 모의 객체 생성, 코드 테스트 가능성, 경로 및 분기 적용 범위 등을 위한 코드 적용 도구입니다. |
불스아이 C++ | BulseyeCoverage는 다음을 위한 코드 커버리지 도구입니다. C++ 및 C. |
소나 | Sonar는 코드 품질을 관리하는 데 도움이 되는 개방형 코드 적용 도구입니다. |
코드 커버리지 사용의 장점과 단점
코드 적용 범위의 장점 | 코드 적용 범위의 단점 |
---|---|
코드 적용 범위의 정량적 측정을 평가하는 데 도움이 됩니다. | 특정 기능이 설계에 구현되지 않은 경우에도 코드 커버리지는 여전히 100% 커버리지를 보고합니다. |
적용 범위를 늘리기 위해 추가 테스트 사례를 만들 수 있습니다. | 코드 적용 범위를 통해 기능의 가능한 모든 값을 테스트했는지 여부를 판단하는 것은 불가능합니다. |
일련의 테스트 케이스에 의해 실행되지 않는 프로그램 영역을 찾을 수 있습니다. | 코드 적용 범위는 논리를 얼마나 잘 다루었는지 알려주지 않습니다. |
지정된 기능이 구현되지 않았거나 사양에 포함되지 않은 경우 구조 기반 기술로는 해당 문제를 찾을 수 없습니다. |
요약
- 코드 커버리지는 프로그램의 소스 코드가 테스트된 정도를 나타내는 척도입니다.
- 테스트 구현의 효율성을 측정하는 데 도움이 됩니다.
- 다섯 가지 코드 커버리지 방법은 1.) 명령문 커버리지 2.) 조건 커버리지 3) 분기 커버리지 4)입니다. Toggle 적용 범위 5) FSM 적용 범위
- 명령문 적용 범위에는 소스 코드의 모든 실행 가능한 명령문을 한 번 이상 실행하는 것이 포함됩니다.
- 결정 범위는 각 부울 표현식의 참 또는 거짓 결과를 보고합니다.
- 분기 적용 범위에서는 코드 모듈의 모든 결과가 테스트됩니다.
- 조건문은 조건문의 변수 또는 하위 표현식이 평가되는 방법을 나타냅니다.
- 유한 상태 머신 커버리지는 확실히 가장 복잡한 유형의 코드 커버리지 방법입니다.
- 보상 방식을 선택하기 위해 테스터는 잠재적인 벌금, 평판 손실, 판매 손실 등의 비용을 확인해야 합니다.
- 코드 커버리지는 테스트 벤치에서 소스 코드가 얼마나 잘 실행되었는지를 알려주는 반면, 기능 커버리지는 디자인의 기능이 얼마나 잘 커버되었는지를 측정합니다.
- Cobertura, JTest, Clover, Emma, Kalistick은 몇 가지 중요한 코드 적용 도구입니다.
- 코드 커버리지를 사용하면 추가 테스트 케이스를 생성하여 커버리지를 늘릴 수 있습니다.
- 코드 적용 범위는 기능의 가능한 모든 값을 테스트했는지 여부를 결정하는 데 도움이 되지 않습니다.