만약 아래와 같은 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옵션에 최적화 옵션을 통하여 바이너리 사이즈를 줄여서 테스트를 합니다.