Symbolic execution이란?

유형주·2022년 9월 17일

Symbolic Execution

코드를 테스팅 하기 위해서는 특정한 분기의 라인을 실행하는 입력을 주어야 한다. 특정 분기의 코드가 실행되기 위해 어떤 입력값을 주어야 할까? Symbolic Execution을 통해 특정한 코드라인을 실행하기 위한 조건을 알 수 있다.

Symbolic Execution은 입력값으로 변수에 어떠한 값을 주는 대신 기호를 주어 프로그램을 실행한다. 중등수학에서 배웠던 미지수 x 라고 생각하면 이해가 쉽다.

1: void func(int A){
2:	int ret =0;
3:	if (A ==1)
4:		ret = 100;
5:	else if (A ==2)
6:		ret ==200;
7:	else
8:		ret = -1;
9: }

변수에 기호를 주고 테스팅 한 결과로 (ret = 100 and a=1), (ret = 200 and a =2), (ret = -1 and (a != 1 and a != 2) 가 나오게 된다.

그림 1 은 Symbolic execution tree이다. 이제 이 트리를 통해 내가 테스트 하고 싶은 라인을 실행하기 위한 조건을 조합할 수 있게 된다.

프로그램의 모든 실행 경우의 수를 테스트할 수 없기 때문에 효율적인 방법으로 테스팅하는 것이 중요한데 Symbolic execution은 특정 라인의 실행 조건에 대한 정보를 수집할 수 있기 때문에 테스팅에 중요한 정보를 제공해준다.

[참고자료]
https://blog.naver.com/PostView.naver?blogId=suresofttech&logNo=222272849897&parentCategoryNo=157&categoryNo=155&viewDate=&isShowPopularPosts=false&from=thumbnailList

0개의 댓글