GCOV 사용해보기 Lab1-Triangle

Kongsub·2020년 7월 22일
0

Fuzzing Camp

목록 보기
1/5

Software Testing & Fuzzing Camp Lab1

image 출처 : https://safecode.org/focus-on-fuzzing-types-of-fuzzing/

실행파일 설명

triangle.c라는 c언어로 된 프로그램이 있다.
이 프로그램은 총 3개의 integer를 받는데 각각의 integer는 삼각형의 변의 길이를 뜻한다.
프로그램은 인풋으로 총 3개의 삼각형 변의 길이를 받아 이것이 어떤 삼각형인지에 대한 결과를 아웃풋으로 보여주는 프로그램이다.

Line Coverage

컴파일시, "--coverage"옵션을 주면, gcov가 실행된다.

gcc -o triangle --coverage triangle.c

triangle.gcno가 생긴 것을 확인할 수 있다.

여기서 실행파일을 실행시켜보면, 다음과 같이 "triangle.gcda"이 생긴 것을 볼 수 있다.

./triangle
3 3 3

자 그러면 gcov를 실행시켜 코드를 얼마나 cover했는지 확인해 보자.

gcov triangle.gcda 

사진에 나온 것 처럼 input "3 3 3"은 코드의 55.26%를 cover했음을 알 수 있다.

그리고 "triangle.c.gcov"라는 파일이 생긴 것을 확인 할 수 있다.

그럼 저 파일을 열어서 확인해보자.

vi triangle.c.gcov

사진을 보면, "-"표현된 것은 실제로 코드 coverage에 포함이 되지 않는 코드이고,
숫자로 표현된 것은 코드가 실행된 횟수를 나타낸다.
즉, "1"표현된 것은 코드가 1번 cover되었다는 것을 의미한다.
"####"으로 표현된 것은 코드가 실행되지 않았다는 것을 의미한다.

그럼 테스트 케이스를 몇번 더 돌려서 line coverage를 높여보자.

총 테스트 케이스 6번을 돌렸고, 모두 triangle.gcda에 누적이 되었을 것이다.
다시 한번 더 gcov를 실행시켜 코드를 얼마나 cover했는지 확인해 보자.

gcov triangle.gcda 

Line의 84.21%를 커버했음을 확인 할 수 있다.

coverage를 100%달성하기 위해, "triangle.c.gcov"파일을 열어 실행이 되지 않은 코드를 찾아보겠다.
"####"되어있는 코드들을 확인하여 그에 맞는 테스트케이스를 몇번 돌려보았다.
총 89%를 커버했음을 알 수 있다.

계속해서 "####"되어있는 코드들을 확인하여 그에 맞는 테스트케이스를 몇번 돌려보았다.
마침내 coverage 100%를 달성했다.

Branch Coverage

branch coverage를 실행시키고 싶으면, 다음과 같이 옵션을 주면 된다.

gcov -b -c triangle.c

branch coverage도 100%달성했음을 볼 수 있는데, Taken은 아직 100%달성을 못했다.

vi triangle.c.gcov

사진을 보면, 각 branch가 생기는 부분에 branch 옆의 숫자는branch의넘버링 이고, taken은 branch가 실행된 횟수를 뜻한다.
branch0은 총 15번 실행이 된 것을 확인할 수 있다.

완벽하게 Taken을 아직 100%달성하기 위해 테스트 케이스를 더 돌려보겠다.

모두 100%달성했다.

profile
심은대로 거둔다

0개의 댓글