디지털 라이브러리[ 검색결과 ]
기호 실행의 성능 극대화를 위한 최적의 시드 선택 기법
http://doi.org/10.5626/JOK.2025.52.7.578
기호 실행은 테스트 케이스를 효과적으로 생성하여 프로그램의 실행 경로를 최대한 넓게 탐색하고자 하는 유망한 소프트웨어 테스팅 기술이다. 그러나 경로-조건식 풀이에 사용되는 높은 비용은 기호 실행의 대표적 한계로 지적된다. 이를 극복하기 위한 방안 중 하나는, 이미 생성된 테스트 케이스를 기호 실행 도구의 시드 입력으로 재사용하여 그 도구의 경로-조건식 풀이 횟수를 줄이는 것이다. 이 접근법의 효과성은 어떤 테스트 케이스를 시드 입력으로 사용할지에 따라 결정된다. 본 논문에서는 생성된 테스트 케이스들을 군집화하고 각 군집들의 특성을 기반으로 가장 잠재력이 높은 군집을 골라 그 군집 내 최적의 시드 입력을 선택하는 기법을 통해 기호 실행의 분기 커버리지 성능을 높이는 방법을 제안한다. 그 결과, 제안한 기법은 동일한 테스팅 시간동안 기존 기호 실행 도구보다 평균적으로 42.0%의 더 높은 분기 커버리지를 달성하는 데 성공하였다.
동적 함수 관련도를 이용한 퍼징 커버리지 향상 기법
http://doi.org/10.5626/JOK.2021.48.4.391
커버리지 기반 퍼징(Coverage Guided Fuzzing)은 테스트 케이스 생성 기법으로, 기법 자체가 간단하고, 큰 소프트웨어에도 적용이 가능하기 때문에 널리 이용되고 있다. 하지만, 기존의 퍼징 기법은 프로그램 내부의 시맨틱 정보를 쓰지 못하고 있다. 본 논문에서는 커버리지 향상을 위해 함수 관련도를 기반으로 변이할 바이트를 선택하는 새로운 2가지 휴리스틱을 제시한다. 두 함수 간의 함수 관련도는 두 함수가 같이 실행되는 테스트 케이스의 개수로 정의 되며, 높은 함수 관련도는 두 함수가 서로 높은 의존성을 가짐을 나타낸다. 어떤 타겟 함수의 커버리지 향상을 위해, 이 새로운 휴리스틱은 그 타겟 함수와 관련도가 높은 함수들이 읽고 쓰는 바이트만 변이하여 커버리지 향상을 꾀한다. 제시된 휴리스틱은 최신 퍼저(Fuzzer)인 Angora와 FairFuzz를 기반으로 구현되었으며, 최신 퍼저들에서 사용된 실제 C 프로그램으로 평가하여 기존 퍼저 대비 각각 17.88%와 11.03%의 경로 커버리지 향상을 보였다.
RESTful 웹 어플리케이션 행위 모델 기반 결함 위치 추정
http://doi.org/10.5626/JOK.2020.47.11.1044
웹 어플리케이션의 규모나 복잡성이 전통적인 소프트웨어보다 커 기존 결함 위치 추정 기법을 적용하기 어렵고, 웹 어플리케이션과 같은 복잡한 시스템 대상의 연구들도 시스템 내 구성 요소들 간 간접적 상호작용과 시스템의 동적 재구성을 고려하지 못한다. 이 문제를 풀기 위해 본 연구는 RESTful 웹 어플리케이션의 실행 기록을 구성 요소들이 수행하는 행위들의 순열로 모델링하고, 그 행위 모델 상에서 결함을 위치 추정하는 기법을 제안한다. 이 기법은 직간접적 상호작용을 모두 반영하는 행위 모델을 사용하고 실행 전에 모델을 미리 구축할 필요가 없어 동적 환경에 적합하다. 기법의 평가를 위해 사례 연구를 수행하여 전체 디버깅 대상 수의 1.8%에 해당하는 순위 내에 모든 결함을 위치 추정했다. 본 연구에서 제안하는 행위 모델 기반 RESTful 웹 어플리케이션 결함 위치 추정 기법이 대규모의 복잡한 웹 어플리케이션의 디버깅 노력을 효과적으로 감소시킬 것으로 기대된다.
Concolic Testing 기법을 활용한 프로그래밍 실습 문항의 채점 개선에 관한 연구
http://doi.org/10.5626/JOK.2019.46.11.1133
최근 프로그래밍 교육에 대한 관심이 많아지면서 효과적인 프로그래밍 교육을 위한 연구가 활발히 진행되고 있다. 현재 다양한 자동 채점 시스템이 개발되어 프로그래밍 교육에 활용되고 있지만 이 시스템을 사용하기 위해 강사가 직접 작성해야 하는 내용들이 존재한다. 특히 채점 시 사용되는 테스트 케이스가 이러한 경우이다. 채점에 사용되는 테스트 케이스는 단순히 올바른 입력만을 사용하지 않고 학생들이 소스코드에 추가할 수 있는 다양한 부분을 고려해서 작성해야 한다. 이런 테스트 케이스를 강사가 직접 작성하는 경우 작성자의 실수로 인해 충분하지 못한 테스트 케이스나 잘못된 테스트 케이스가 작성되어 채점 자체가 잘못 이루어질 수 있다. 이러한 문제를 개선하기 위해 본 논문에서는 학생들의 소스코드에 concolic testing 기법을 적용하여 기존 채점에 사용되던 테스트 케이스를 개선하는 도구를 제안하였다. 또한 제안한 도구를 이용해 잘못 채점된 사례를 발견하고 개선된 테스트 케이스를 추가하여 다시 채점한 결과를 보였다.
효과적인 변이 분석을 위한 C 프로그램 변이 도구 비교
http://doi.org/10.5626/JOK.2018.45.4.342
변이 분석은 분석 대상 프로그램의 코드를 변형한 프로그램 변이를 실행해 프로그램 변형에 따른 실행 결과 변화를 분석하는 기법이다. 프로그램 변이 분석이 효과적이기 위해선 프로그램 변이 도구가 효과적인 프로그램 변이를 생성할 수 있어야 한다. 예를 들어 생성된 프로그램 변이가 분석 대상 프로그램과 의미가 동일한 동등 변이거나 다른 변이와 의미가 동일한 중복 변이인 경우 변이 분석을 통한 다양한 실행결과 변화를 볼 수 없기 때문에 변이 분석에 효과적이지 않다. 본 논문에서는 C 프로그램의 효과적인 변이분석을 위해 변이 도구 Proteum과 Milu를 대상으로 얼마나 효과적인 프로그램 변이를 생성하는지 비교하였다. 효율적으로 효과적인 프로그램 변이를 생성하기 위해 변이된 표현식의 정규형을 계산하고 정규형이 같은 변이를 중복 변이로 제거하였다. SIR 벤치마크의 4개 Linux/Unix 유틸리티 프로그램 프로그램을 대상으로 적용한 결과 Proteum과 Milu가 생성한 변이 중 각각 평균 48.7%, 46.4%가 유용한 변이였다.
안드로이드 커널 모듈 취약점 탐지를 위한 자동화된 유닛 테스트 생성 기법
본 논문에서는 안드로이드 커널 모듈의 취약점을 탐지하기 위한 자동 유닛 테스트 생성 기법을 제안한다. 안드로이드 커널 모듈의 각 함수를 대상으로 테스트 드라이버/스텁 함수를 자동 생성하고 동적 기호 실행 기법을 사용하여 테스트 입력 값을 자동으로 생성한다. 또한 안드로이드 커널 모듈의 함수 포인터와 함수 선행 조건을 고려하지 않은 테스트 생성으로 인한 거짓 경보를 줄이기 위해 정적 분석을 통한 함수 포인터 매칭 기법과 def-use 분석을 사용한 함수 선행 조건 생성 기법을 개발하였다. 자동 유닛 테스트 생성 기법을 안드로이드 커널 3.4 버전의 세 모듈에 적용한 결과 기존에 존재하던 취약점을 모두 탐지할 수 있었으며 제안한 거짓 경보 감소 기법으로 평균 44.9%의 거짓 경보를 제거할 수 있었다.
Mutagen4J : 효과적인 Java 프로그램 변이 생성 도구
프로그램 변이 분석은 분석대상 프로그램의 코드를 변형한 다양한 프로그램 변이를 활용해 분석대상 프로그램의 특성을 분석하는 기법이다. 효과적인 변이 분석을 위해서는 분석대상 프로그램의 동작을 다양하게 변화시키는 유용한 변형 연산자의 사용이 필수적이다. 현재까지 Java 프로그램을 대상으로 제안된 변이 생성 도구들은 변형 연산자의 종류가 제한적이거나, 최근 Java 언어 요소로 작성된 분석대상 프로그램의 경우 올바른 변이 생성을 지원하지 못하는 한계가 있다. 본 논문은 Java 프로그램을 위한 새로운 변이 생성 도구 Mutagen4J를 소개한다. Mutagen4J는 기존 연구를 통해 유용한 것으로 알려진 프로그램 변형 연산자를 추가로 지원하며, 최근 Java 언어요소를 처리함으로써, Java 프로그램에 대한 효과적인 변이 분석을 지원한다. 기존 Java 프로그램 변이 생성 도구와 비교 실험을 수행한 결과, Mutagen4J이 기존 도구보다 유용한 변이를 평균 2.3배 생성하였다.
효과적인 내장형 소프트웨어의 정수 확장 (Integer Promotion) 버그 검출 기법
세탁기, 냉장고 등의 가전제품에 탑재되는 8-bit MCU용 C 컴파일러는 소프트웨어 실행 속도를 높이기 위해 표준 C 언어 규칙을 따르지 않고 컴파일을 수행할 수 있다. 개발자가 일반 C 컴파일러와 8-bit MCU용 C 컴파일러의 차이를 정확하게 이해하지 못할 경우 표준 C 언어 환경에서는 발생하지 않으나 8-bit MCU를 사용하는 내장형 시스템에서는 발생하는 버그를 야기할 수 있으며 이런 버그는 표준 C언어 환경을 가정하는 버그 검출 도구로는 찾기 어렵다. 본 논문에서는 표준 C 정수 확장 규칙을 따르지 않는 8-bit MCU용 컴파일러를 사용할 때 발생하는 정수 확장 버그를 소개하고 정수 확장 버그를 탐지하기 위한 다섯 종류의 버그 패턴을 제안한다. 정수 확장 버그 패턴 검출 도구를 개발하여 LG전자 세탁기 소프트웨어를 분석한 결과 컴파일러 옵션을 잘못 선택한 경우 발생하는 27개의 정수 확장 버그를 발견하였다.
메트릭에 따른 탐색 기반 테스팅 알고리즘 비교
탐색 기반 테스팅은 넓은 탐색 범위에서 효과적으로 테스트 데이터를 생성하는 대표적인 기술중 하나이다. 탐색 기반 테스팅의 성능이 프로그램의 구조적 특성에 영향을 받는 것이 알려져 있음에도 구조적 특성을 고려한 탐색 기반 테스팅 비교 연구는 제한적으로 수행되었다. 본 연구는 탐색 기반 테스팅 비교를 통해 테스트 대상의 구조적 특성 차이에 따른 최적 알고리즘을 분석하고자 한다. 실험 결과의 일반화를 위해 탐색 성능에 영향을 주는 4가지 메트릭 값을 조합하여 19,800개의 테스트 대상 프로그램을 자동 생성하였다. 실험 결과 복잡도가 높은 프로그램을 20,000번 이하의 횟수로 분석하였을 경우에는 유전알고리즘이 가장 우수한 성능을 보였으나 50,000번 이상 분석하였을 경우에는 유전 담금질 기법과 담금질 기법이 다른 알고리즘들 보다 우수한 성능을 보였다. 복잡도가 낮은 프로그램에서는 유전 담금질 기법, 담금질 기법, 언덕 오르기 방법이 다른 알고리즘들 보다 우수한 성능을 보였다.