Software Testing & Fuzzing Camp Lab1
image 출처 : https://safecode.org/focus-on-fuzzing-types-of-fuzzing/
triangle.c라는 c언어로 된 프로그램이 있다.
이 프로그램은 총 3개의 integer를 받는데 각각의 integer는 삼각형의 변의 길이를 뜻한다.
프로그램은 인풋으로 총 3개의 삼각형 변의 길이를 받아 이것이 어떤 삼각형인지에 대한 결과를 아웃풋으로 보여주는 프로그램이다.
컴파일시, "--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를 실행시키고 싶으면, 다음과 같이 옵션을 주면 된다.
gcov -b -c triangle.c
branch coverage도 100%달성했음을 볼 수 있는데, Taken은 아직 100%달성을 못했다.
vi triangle.c.gcov
사진을 보면, 각 branch가 생기는 부분에 branch 옆의 숫자는branch의넘버링 이고, taken은 branch가 실행된 횟수를 뜻한다.
branch0은 총 15번 실행이 된 것을 확인할 수 있다.
완벽하게 Taken을 아직 100%달성하기 위해 테스트 케이스를 더 돌려보겠다.
모두 100%달성했다.