테스트 커버리지
01. 테스트 커버리지
1) 테스트 커버리지(Test Coverage)의 개념
- 테스트 케이스에 의해 수행되는 소프트웨어의 테스트 범위를 측정하는 테스트 품질 측정 기준
- 테스트의 정확성과 신뢰성을 향상시키는 역할을 함
2) 기능(Function)기반 커버리지
- 애플리케이션의 전체 기능을 모집단의 특성(모수)으로 설정하고 테스트함
- 모수 : 모집단의 특성으로 평균, 표준편차 등이 있음
- 실제 테스트가 수행된 기능의 수를 측정하는 방법
- 기능 기반 테스트 커버리지는 100% 달성을 목표로 함
- UI가 많은 시스템의 경우 화면 수를 모수로 사용할 수 있음
3) 라인(Line)기반 커버리지
- 애플레키이션 전체 코드의 라인 수를 모수로 테스트 시나리오가 수행한 코드의 라인 수를 측정하는 방법
- 단위 테스트에서는 라인 기반 커버리지를 척도로 삼기도 함
4) 코드(Code) 커버리지 유형
- 애플리케이션 테스트 충분성 지표 중 하나로 코드의 구문, 조건, 결정 등의 구조 코드 자체가 얼마나 테스트 되었는지를 측정하는 방법
- 프로그램의 테스트 수행 정도를 나타내는 값으로 테스트 수행의 완벽성을 측정하는 도구
1. 구문(Statement) 커버리지
- 구문에 대한 단순한 실행 여부를 측정
- 코드 구조 내의 모든 구문이 한 번 이상 실행되어야 함
2. 결정(Decision) 커버리지
- 결정 포인트 내의 모든 조건식을 실행하여 측정
- 전체 조건식이 참, 거짓을 한 번씩 실행할 수 있도록 함
- 전체 조건식을 고려함
3. 조건(Condition) 커버리지
- 결정 포인트 내의 모든 개별 조건식을 실행하여 측정
- 조건식이 여러 개일 경우, 개별 조건식의 참, 거짓을 모두 한 번씩 실행할 수 있도록 함
- 전체 조건식을 고려하지 않음
4. 조건/결정(Condition/Decision) 커버리지
- 전체 조건식과 개별 조건식을 함께 실행하여 측정
- 전체 조건식의 참, 거짓을 한 번씩 실행하고, 개별 조건식의 참, 거짓을 모두 한 번씩 실행할 수 있도록 함
5. 변경 조건/결정(Modified Condition/Decision) 커버리지
- 조건과 결정을 복합적으로 고려한 측정 방법
- 다른 개별적인 조건식 결과에 상관없이 독립적으로 전체 조건식의 결과에 영향을 주는 테스트 커버리지
6. 다중 조건(Multiple Condition) 커버리지
- 결정 조건 내에 모든 개별 조건식의 모든 가능한 논리적 조합으로 모든 경우의 수(100%)를 실행하여 측정
5) 코드(Code) 커버리지의 예시
| 이중 조건식 | 조건 1개 | 조건 2개 |
|---|---|---|
| if(조건) 구문 - 1; else 구문 - 2; |
if( a > b) max = a; else max = b; |
if(a! = 0 && b! = 0 && a > b) max = a; else max = b; |
1. 구분(Statement) 커버리지
- 조건과 상관없이 구문 - 1, 구문 - 2의 실행 여부만 판단함
- max = a;와 max = b;가 실행되는지 판단함
2. 결정(Decision) 커버리지
- 조건이 참인 조건과 거짓인 조건인 경우만 판단함
- if(a > b)에서 a > b인 경우와 a <= b인 경우를 판단함
3. 조건(Condition) 커버리지
- 세부적이고, 복잡적인 조건을 판단함
- 만약 조건이 3개이면 3개의 조건을 모두 판단해야 함
| 구분 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| 조건 - 1 | 거짓 | 참 | 거짓 | 참 | 거짓 | 참 | 거짓 | 참 |
| 조건 - 2 | 거짓 | 거짓 | 참 | 참 | 거짓 | 거짓 | 참 | 참 |
| 조건 - 3 | 거짓 | 거짓 | 거짓 | 거짓 | 참 | 참 | 참 | 참 |
- &&는 C언어에서 AND 조건 연산자로 모든 개별 조건식이 참이어야 전체 조건식이 참이 되는 관계 연산자
- a! = 0 && b! = 0 && a > b에서 a가 0이 아니고, b도 0이 아니고, a가 b보다 커야 전제 조건식이 참이 됨
| 구분 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| a! = 0 | 거짓 | 참 | 거짓 | 참 | 거짓 | 참 | 거짓 | 참 |
| b! = 0 | 거짓 | 거짓 | 참 | 참 | 거짓 | 거짓 | 참 | 참 |
| a > b | 거짓 | 거짓 | 거짓 | 거짓 | 참 | 참 | 참 | 참 |
| 전체 | 거짓 | 거짓 | 거짓 | 거짓 | 거짓 | 거짓 | 거짓 | 참 |
4. 조건/결정(Condition/Decision) 커버리지
- 조건이 세부적이고, 족합적인 조건일 경우를 판단함
- 전체 조건 중 참인 조건과 거짓인 조건을 판단하고, 세부적인 조건을 판단해야 함
5. 변형 조건/결정(Modified Condition/Decision) 커버리지
- 조건/결정 커버리지에서 전체 조건식 결과로 커버리지를 결정함
- 조건에 의해서 처리되는 구문의 수가 100가지이고, 예상되는 결과가 10가지이면 10개의 조건으로 판단함
6. 다중 조건(Multiple Condition) 커버리지
- 모든 경우의 수를 커버리지로 정함
- 조건에 의해서 처리되는 구문의 수가 100가지이면, 100개의 조건으로 판단함
02. 테스트 결함 식별 및 관리
1) 단계별 결함 유입 분류
- 기획 단계에서 유입되는 결함
- 요구사항의 표준 미준수로 결함이 발생할 수 있음
- 요구사항의 불명확, 불완전, 불일치로 결함이 발생할 수 있음
- 설계 단계에서 유입되는 결함
- 기획 단계에서 결함이 유입
- 설계 표준 미준수로 인해 결함이 발생할 수 있음
- 기능 설계 불명확, 불완전, 불일치로 인해 결함이 발생할 수 있음
- 코딩 단계에서 유입되는 결함
- 설계 단계에서 결함이 유입
- 코딩 표준 미준수로 인해 기능의 불일치, 불완전으로 결함이 발생할 수 있음
- 데이터 결함, 인터페이스 결함이 발생할 수 있음
- 테스트 부족으로 유입되는 결함
- 테스트 완료 기준의 미준수로 결함이 발생할 수 있음
- 테스트팀과 개발팀의 의사소통 부족으로 결함이 발생할 수 있음
- 개발자의 코딩 실수로 인한 결함이 발생할 수 있음
2) 결함 심각도
1. 결함 심각도의 개념
- 애플리케이션에 발생한 결함이 어떤 영향을 끼치며, 그 결함이 얼마나 치명적인지를 나타내는 척도
- 결함 심각도 분류 사례
- 치명적(Critical)결함
- 주요(Major)결함
- 보통(Normal)결함
- 경미한(Minor)결함
- 단순(Simple)결함
2. 결함 심각도 관리
- 정확성과 신뢰성 향상을 위해 결함 심각도의 각 단계별로 표준화된 용어를 사용하여 정의해야 함
- 프로젝트 및 조직 차원에서 결함 관리 활동을 수행해야 함
3. 결함 우선순위
- 결함이 처리되어야 하는 순서를 결정하는 척도
- 결함 심각도가 높아도 우선순위가 반드시 높은 것은 아님
- 애플리케이션의 특성에 따라 우선순위가 결정될 수 있음
- 결함 우선순위 표현 사례
- 결정적(Critical)
- 높음(High)
- 보통(Medium)
- 낮음(Low)
- 즉시 해결
- 주의 요망
- 대기
- 개선 권고
4. 결함 관리 항목
- 결함 내용, 결함 ID, 결함 유형, 발견일, 심각도, 우선순위(결함 수정의 우선순위), 시정 조치 예정일, 수정 담당자, 재테스트 결과, 종료일
'정보처리기사 > 소프트웨어 개발' 카테고리의 다른 글
| 애플리케이션 테스트 관리 10 (0) | 2023.05.24 |
|---|---|
| 애플리케이션 테스트 관리 9 (0) | 2023.05.23 |
| 애플리케이션 테스트 관리 7 (0) | 2023.05.23 |
| 애플리케이션 테스트 관리 6 (0) | 2023.05.23 |
| 애플리케이션 테스트 관리 5 (0) | 2023.05.23 |
