랑아
article thumbnail

테스트 커버리지

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) 단계별 결함 유입 분류

  1. 기획 단계에서 유입되는 결함
    • 요구사항의 표준 미준수로 결함이 발생할 수 있음
    • 요구사항의 불명확, 불완전, 불일치로 결함이 발생할 수 있음
  2. 설계 단계에서 유입되는 결함
    • 기획 단계에서 결함이 유입
    • 설계 표준 미준수로 인해 결함이 발생할 수 있음
    • 기능 설계 불명확, 불완전, 불일치로 인해 결함이 발생할 수 있음
  3. 코딩 단계에서 유입되는 결함
    • 설계 단계에서 결함이 유입
    • 코딩 표준 미준수로 인해 기능의 불일치, 불완전으로 결함이 발생할 수 있음
    • 데이터 결함, 인터페이스 결함이 발생할 수 있음
  4. 테스트 부족으로 유입되는 결함
    • 테스트 완료 기준의 미준수로 결함이 발생할 수 있음
    • 테스트팀과 개발팀의 의사소통 부족으로 결함이 발생할 수 있음
    • 개발자의 코딩 실수로 인한 결함이 발생할 수 있음

2) 결함 심각도

1. 결함 심각도의 개념

  • 애플리케이션에 발생한 결함이 어떤 영향을 끼치며, 그 결함이 얼마나 치명적인지를 나타내는 척도
  • 결함 심각도 분류 사례
    • 치명적(Critical)결함
    • 주요(Major)결함
    • 보통(Normal)결함
    • 경미한(Minor)결함
    • 단순(Simple)결함

2. 결함 심각도 관리

  • 정확성과 신뢰성 향상을 위해 결함 심각도의 각 단계별로 표준화된 용어를 사용하여 정의해야 함
  • 프로젝트 및 조직 차원에서 결함 관리 활동을 수행해야 함

3. 결함 우선순위

  • 결함이 처리되어야 하는 순서를 결정하는 척도
  • 결함 심각도가 높아도 우선순위가 반드시 높은 것은 아님
  • 애플리케이션의 특성에 따라 우선순위가 결정될 수 있음
  • 결함 우선순위 표현 사례
    • 결정적(Critical)
    • 높음(High)
    • 보통(Medium)
    • 낮음(Low)
    • 즉시 해결
    • 주의 요망
    • 대기
    • 개선 권고

4. 결함 관리 항목

  • 결함 내용, 결함 ID, 결함 유형, 발견일, 심각도, 우선순위(결함 수정의 우선순위), 시정 조치 예정일, 수정 담당자, 재테스트 결과, 종료일
profile

랑아

@RangA

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!