파이어맨 이야기

Code Coverage

  • Code Coverage 란?
    • Code Coverage는 테스트를 충분히 했는가에 대한 메트릭 지표 중 하나입니다. 코드는 크게 구문(Statement), 조건 (Condition) , 결정 (Decision)으로 나뉘며 얼마나 커버했는지를 측정기준으로 나뉩니다. 

  • 측정기준
    • Function coverage
      • 프로그램에서 함수가 테스트 중 실행 되었는지에 대한 기준입니다.
    • Statement coverage
      • 각 statement를 기준으로 테스트 중 실행되었는지에 대한 기준입니다. 
    • Decision coverage
      • if, loop , case 등의 문에서 결과가 true, false로 실행되었는지에 대한 기준입니다.
        • 표현
          • A && B
          • (A && B) || C
    • Condition coverage
      • 프로그램에서 각각의 condition에 대해서 테스트 중 실행되었는지에 대한 기준입니다.
        • 표현 
          • A==B
          • C
    • MC/DC (Modified condition/ Decision coverage)
      •  Condition과 Decision을 복합적으로 고려하며 아래의 조건을 만족합니다. 
        • 각 Entry와 종료문이 실행되었는가
        • 각 Decision은 가능한 결과가 모두 실행되었는가
        • 각 condition은 가능한 결과를 모두 실행되었는가
        • 1개의 decision안에 개별적 condition이 각각 실행되었는가
    • Multiple condition coverage (Condition Combination Coverage )
      • 프로그램에서 각각의 condition의 조합이 모두 실행되었는가에 대한 기준입니다.
        • 만약 아래와 같은 if문이 있다면 (true , true) ,( true , false) ,( false , true ), (false ,false) 이렇게 4개의 조합이 나오면 이 조합을 모두 만족하는지 확인합니다. 
        • 예) if (a==1 or b==1)
    • Parameter value coverage (PVC)
      • PVC는 파라미터를 가진 함수에 각 파라미터의 일반적인 값들이 모두 고려되었는지에 대한 coverage입니다. 
        • 일반적인 값 (string)
          • null
          • empty
          • whitespace (space, tabs, newline)
          • 유효한 string
          • 유효하지 않은 string
          • single-byte string
          • double-byte string
          • 아주 긴 String
    • 그외 측정 기준
      • Linear Code Sequence and Jump (LCSAJ) coverage
      • Path coverage 
      • Entry/exit coverage
      • Loop coverage
      • State coverage

  • 측정 기준 선별
    • code coverage는 측정기준에 따라 100%가 나올 수도 있고 아주 낮게 나올 수도 있습니다. 보통은 Statement coverage, condition coverage, branch coverage를 사용하며 중요한 소프트웨어나 인증에서 요구할 경우 MC/DC 나 Multiple condition coverage를 사용하여 code coverage를 측정합니다. 

  • code coverage 측정시 이점
    • code coverage에서 누락된 부분을 확인하여 Test Case를 작성하는데 도움이 됩니다. 
    • 프로그램에서 실행되지 않은 코드 부분을 확인 할 수 있습니다. 
    • 소프트웨어의 품질적인 측정시 정량적으로 결정하는데 도움을 줍니다.

  • code coverage 측정시 문제점
    • code coverage측정은 사용된 code범위에서 측정을 합니다. 만약 사용하지 않는 소스 코드가 있다면 측정을 할 수 없습니다. 
    • code coverage는 프로그램을 실행하여 측정하기 때문에 만약 구현이 완료되지 않은 소스코드나 개발 스펙에 기능이 빠져있는 코드의 경우는 측정이 힘듭니다. 

  • Code coverage 프로그램 측정원리
    • Code coverage도구는 측정기준에 맞게 소스코드에 해당 ststement, condition , decion등이 실행에 대해서 Log를 남기는 부분을 추가하여 추가한 소스를 빌드합니다. 이렇게 생성된 실행파일을 실행하여 생성된 로그로 리포트를 출력합니다. 소스코드에 coverage측정을 위한 코드를 삽입하는 것을 instrument 라고 합니다. 

  • 타겟 테스트(Target Test) 란?
    • 타겟 테스트는 code codecoverage를 측정시 실제 프로그램이 동작하는 타겟 장비에서 테스트하는 것을 말합니다. 

  • 타겟테스트시 고려사항
    • Code coverage도구에서 사용하는 IO관련 라이브러리가 타겟장비에서 지원여부
      • 이러한 경우 타겟장비에 관련 IO라이브러리를 추가하거나 타겟장비의 IO라이브러리를 사용하여 coverage data를 작성하도록 coverage도구에서 지원하는지 확인해야합니다.
    • 테스트 후에 저장되는 coverage데이터가 저장될 공간여부
      • code coverage결과 데이터를 저장할 공간이 없을 경우 네트워크 통신으로 client에 coverage데이터를 저장하는 방법이 coverage도구에서 지원하는지 확인해야합니다.
    •  instrument로 인해 바이너리 파일의 사이즈가 증가하여도 타겟장비에서 실행가능 여부
      • 바이너리 파일 사이즈가 증거하여 프로그램이 load되지 않을 경우 instrument시 code coverage측정기준을 function coverage로 나추거나 compiler옵션에 최적화 옵션을 통하여 바이너리 사이즈를 줄여서 테스트를 합니다. 


'IT > 소프트웨어 엔지니어링' 카테고리의 다른 글

CMMI for Development, Version 1.3 Part 1 1부 한글  (0) 2015.09.07
테스팅의 주요원리 (testing principles)  (0) 2015.06.20
Autoit - Hello World!!  (0) 2015.04.22
Autoit 설치  (0) 2015.04.22
TestLink 설치  (0) 2015.04.18

공유하기

facebook twitter kakaoTalk kakaostory naver band