[논문 리뷰] CoCoFuzzing: Testing Neural Code Models with Coverage-Guided Fuzzing
CoCoFuzzing는 신경 코드 모델의 강건성 테스트를 위해 의미 유지 코드 변형을 생성하는 새로운 커버리지 유도 퍼징 프레임워크이다. 10개의 고유한 변형 연산자와 뉴런 커버리지 기반 테스트 생성을 통해 모델의 강건성을 향상시키며, NeuralCodeSum에서 최대 84.81%의 성능 저하를 이끌어내었고, 이 결과물을 활용한 적대적 재학습은 모델 정확도를 최대 35.15% 향상시켰다.
Deep learning-based code processing models have shown good performance for tasks such as predicting method names, summarizing programs, and comment generation. However, despite the tremendous progress, deep learning models are often prone to adversarial attacks, which can significantly threaten the robustness and generalizability of these models by leading them to misclassification with unexpected inputs. To address the above issue, many deep learning testing approaches have been proposed, however, these approaches mainly focus on testing deep learning applications in the domains of image, audio, and text analysis, etc., which cannot be directly applied to neural models for code due to the unique properties of programs. In this paper, we propose a coverage-based fuzzing framework, CoCoFuzzing, for testing deep learning-based code processing models. In particular, we first propose ten mutation operators to automatically generate valid and semantically preserving source code examples as tests; then we propose a neuron coverage-based approach to guide the generation of tests. We investigate the performance of CoCoFuzzing on three state-of-the-art neural code models, i.e., NeuralCodeSum, CODE2SEQ, and CODE2VEC. Our experiment results demonstrate that CoCoFuzzing can generate valid and semantically preserving source code examples for testing the robustness and generalizability of these models and improve the neuron coverage. Moreover, these tests can be used to improve the performance of the target neural code models through adversarial retraining.
연구 동기 및 목표
- 딥 러닝 기반 신경 코드 모델에 대한 효과적인 테스트 프레임워크 부족 문제를 해결하기 위해, 적대적 입력에 취약한 모델을 대상으로 한다.
- 모델의 강건성을 철저히 테스트할 수 있도록 의미 유지 코드 변형을 생성하는 체계적인 접근법을 개발한다.
- 뉴런 커버리지( neuron coverage )를 메트릭으로 사용해 테스트 생성을 이끌어내어 다양한 프로그램 변형을 체계적으로 탐색한다.
- 생성된 테스트의 효과를 평가하여 모델의 취약점을 드러내고, 적대적 재학습을 통해 성능 향상을 이끌어내는 데 목적이 있다.
제안 방법
- 실제 세계의 의미 유지 코드 변형을 반영하는 10개의 변형 연산자(예: 변수 이름 변경, 사라진 코드 삽입, 인수 추가 등)를 설계하고 구현한다.
- 뉴런 커버리지( NC )를 가이던스 메트릭으로 사용해 모델의 내부 동작을 다양하고 포괄적으로 탐색할 수 있도록 한다.
- 커버리지 유도 퍼저를 통합하여, 뉴런 커버리지 증가 효과가 높은 연산자를 선택하고 적용한다.
- 생성된 테스트 케이스를 적용해 모델의 강건성을 평가하고, 적대적 재학습을 통해 일반화 능력을 향상시킨다.
- 테스트 케이스가 모델 성능 저하 및 재학습을 통한 향상에 미치는 영향을 측정한다.
실험 결과
연구 질문
- RQ1커버리지 유도 퍼징 프레임워크는 신경 코드 모델을 위한 유효하고 의미 유지되는 코드 테스트를 효과적으로 생성할 수 있는가?
- RQ2뉴런 커버리지는 다양한 강건한 테스트 케이스를 생성하는 데 얼마나 효과적인가?
- RQ3생성된 테스트 케이스는 최신 신경 코드 모델의 성능을 어느 정도 감소시키는가?
- RQ4생성된 테스트 케이스를 활용한 적대적 재학습은 이러한 모델의 강건성과 정확도를 향상시킬 수 있는가?
주요 결과
- CoCoFuzzing는 NeuralCodeSum, CODE2SEQ, CODE2VEC에 대해 각각 84.81%, 22.06%, 27.58%의 성능 저하를 유도하는 유효하고 의미 유지되는 코드 예제를 성공적으로 생성하였다.
- 생성된 테스트 케이스는 모델의 강건성을 향상시켰으며, 적대적 재학습을 통해 NeuralCodeSum에서 최대 35.15% 향상, CODE2SEQ에서 8.83%, CODE2VEC에서 34.14% 향상되었다.
- 뉴런 커버리지 메트릭은 퍼저가 다양한 프로그램 변형을 탐색하고 모델 내부 뉴런의 높은 커버리지에 도달하도록 효과적으로 이끌었다.
- CoCoFuzzing는 신경 코드 모델 전용으로 설계된 첫 번째 커버리지 기반 퍼징 프레임워크로, 기존 영상, 음성, NLP 분야의 접근 방식에 비해 한계를 해결한다.
- 10개의 고유한 변형 연산자는 이전 방법에서 사용하는 두 가지 연산자(예: 이름 변경 및 사라진 코드 삽입)에 비해 더 넓은 의미 유지 코드 변형 탐색을 가능하게 하였다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.