본문으로 건너뛰기

Concolic Testing 기반 프로그램 상호작용 슬라이싱 기법 설계

· 약 4분
서강복
김덕엽
이우진
담당교수

논문 정보

  • 제목: Design of interactive slicing method based on Concolic Testing (Concolic Testing 기반 프로그램 상호작용 슬라이싱 기법 설계)
  • 저자: 서강복, 김덕엽, 이우진 (경북대학교 컴퓨터학부, 소프트웨어기술연구소)
  • 학회/저널: 2019년 한국정보과학회 춘계학술발표대회 논문집 제26권 제1호
  • 발행일: 2019-05
  • 주요 연구 내용: 기존의 의존성 기반 슬라이싱이 프로그램 실행에 필요한 문법적 요소나 외부 모듈 상호작용 코드를 누락하는 문제를 해결하기 위해, Concolic Testing을 이용한 실행 경로 기반의 동적 슬라이싱 기법을 설계했다.
  • 주요 결과 및 결론: 제안된 기법은 변수 의존성뿐만 아니라 프로그램 실행 자체에 요구되는 구문(헤더, 괄호 등)을 함께 추출하여 슬라이싱된 코드의 실행 가능성을 보장한다.
  • 기여점: 기존 정적/동적 슬라이싱의 한계점인 '실행 불가능한 슬라이스' 생성 문제를 화이트 박스 테스트 기법인 Concolic Testing을 접목하여 해결하는 구조를 제안하였다.

요약

초록

프로그램 슬라이싱은 테스팅, 디버깅, 유지보수 등 다양한 분야에서 활용된다. 기존 슬라이싱 기법은 특정 변수에 대한 의존성을 계산하여 수행되는데, 이 과정에서 프로그램 실행을 가능하게 하는 필수 정보들이 누락되어 실행이 보장되지 않는 경우가 발생한다. 본 논문에서는 이러한 문제를 개선하기 위해 Concolic Testing 기법을 이용하여 기준 변수에 대한 의존성 있는 구문뿐만 아니라, 프로그램 실행에 요구되는 구문들을 함께 추출해낼 수 있는 프로그램 상호작용 슬라이싱 기법을 제안한다.

서론

프로그램 슬라이싱은 소스코드 내 특정 변수에 의존성을 가지는 모든 라인을 계산하여 분리해내는 기술이다. 하지만 지정된 변수에 대해서만 의존성을 계산하기 때문에, 변수와 직접적인 관련은 없으나 프로그램 구동에 필수적인 데이터나 구조적 요소들이 누락될 수 있다. 특히 외부 모듈과의 상호작용이나 문법적 요소 등은 의존성 계산만으로는 분별하기 어렵다. 본 논문은 소스코드의 모든 분기를 방문하는 Concolic Testing을 활용하여 이러한 문제를 해결하고자 한다.

배경

본 연구의 기반이 되는 주요 기술은 다음과 같다.

  1. 프로그램 슬라이싱 (Program Slicing): 정적 슬라이싱과 동적 슬라이싱으로 나뉜다. 정적은 실행 없이 변수에 영향을 미치는 구문을 추출하고, 동적은 실행 중에 영향을 미치는 구문을 추출한다. 기존 방식은 실행 가능성을 보장하기 어렵다.
  2. Concolic Testing: 화이트 박스 테스트 기법 중 하나로, 심볼릭 실행(Symbolic Execution)과 구체적 실행(Concrete Execution)을 결합하여 소스코드의 모든 분기를 방문하는 것을 목표로 한다. 본 논문에서는 CREST 도구와 같은 프로브 코드(Probe Code) 기반 방식을 활용한다. Figure 1

모델 아키텍처 / 방법론

본 논문에서 제안하는 Concolic Testing 기반 동적 슬라이싱 기법의 구조는 논문의 그림 1(Figure 1)에 제시되어 있으며, 그 과정은 다음과 같다.

  • 프로브 코드 삽입 (Probe Code Insertion): 슬라이싱 대상 소스코드의 각 라인별로 실행 여부를 확인할 수 있는 프로브 코드를 삽입하여 코드를 재생성한다.
  • Concolic Testing 수행: 재생성된 소스코드를 CREST와 같은 Concolic Testing 도구로 테스트한다. 이 과정에서 입력을 자동으로 생성하며 다양한 분기를 탐색한다.
  • 로그 기록 및 분석: 각 프로브 코드는 실행된 라인을 로그로 남긴다. 이를 통해 실제 프로그램 실행 흐름에서 방문한 라인들을 식별한다.
  • 코드 추출 (Extraction Code): 로그 파일을 분석하여 실행된 라인들을 추출하고, 이를 기반으로 소스코드를 재구성한다. 이 방식은 변수 의존성 분석이 아닌, 실제 '실행된 경로'를 기반으로 하므로 실행에 필요한 구문들이 포함된다. Table 1 Figure 2

실험 결과

본 논문은 기법을 제안하는 설계 논문으로, 정량적 성능 실험 대신 기존 기법과의 비교 분석을 통해 제안 방법의 유효성을 설명한다.

  • 누락 요소 분석: 논문의 표 1(Table 1)에서는 기존 슬라이싱에서 누락되어 실행 오류를 일으키는 요소들을 정의했다. 주요 요소로는 헤더 파일(변수/함수 호출 오류), 중괄호 {}(문법 오류), 외부 모듈 선언 등이 있다.
  • 비교 분석: 그림 2(Figure 2)를 통해 기존 슬라이싱과 제안 기법을 비교한다. 기존 기법은 write(sum)과 관련된 로직만 남기고 초기화 구문이나 반복문 구조 등을 누락시킬 위험이 있으나, 제안된 기법은 테스팅 과정에서 실행된 모든 구문을 포함하므로 이러한 요소들이 보존되어 실행 가능한 슬라이싱 결과를 얻을 수 있다.

결론

기존의 프로그램 슬라이싱은 지정된 변수에 대한 의존성만을 계산하여 프로그램 실행에 요구되는 필수 구문들이 누락되는 문제가 있었다. 본 논문에서 제안한 Concolic Testing 기반의 상호작용 슬라이싱 기법은 실제 수행되는 구문을 추출함으로써, 기준 변수 관련 로직뿐만 아니라 프로그램 실행에 필요한 구문들을 함께 확보하여 실행 가능한 형태의 슬라이싱을 가능하게 한다. 향후 연구로는 해당 기법을 실제로 구현하고 기존 슬라이싱 기법과 소요 자원 및 효율성을 비교하는 실험을 진행할 예정이다.