Skip to main content
QUICK REVIEW

[논문 리뷰] Unit Test Case Generation with Transformers and Focal Context

Michele Tufano, Dawn Drain|arXiv (Cornell University)|2020. 09. 11.
Software Engineering Research참고 문헌 29인용 수 8
한 줄 요약

이 논문은 실제 Java 메서드와 그에 해당하는 테스트 케이스로 구성된 대규모 평행 코퍼스를 기반으로 BART 기반 트랜스포머를 피지테이닝하여 인간이 읽을 수 있는 단위 테스트 케이스를 생성하는 시퀀스-투-시퀀스 딥 러닝 접근법인 AthenaTest를 제안한다. 단지 30회의 尝시에 43.7%의 포커스 메서드 커버리지를 달성하며, 테스트 케이스의 정확도와 개발자 선호도에서 GPT-3를 능가하고, EvoSuite와 동등한 테스트 커버리지를 확보한다.

ABSTRACT

Automated unit test case generation tools facilitate test-driven development and support developers by suggesting tests intended to identify flaws in their code. Existing approaches are usually guided by the test coverage criteria, generating synthetic test cases that are often difficult for developers to read or understand. In this paper we propose AthenaTest, an approach that aims to generate unit test cases by learning from real-world focal methods and developer-written testcases. We formulate unit test case generation as a sequence-to-sequence learning task, adopting a two-step training procedure consisting of denoising pretraining on a large unsupervised Java corpus, and supervised finetuning for a downstream translation task of generating unit tests. We investigate the impact of natural language and source code pretraining, as well as the focal context information surrounding the focal method. Both techniques provide improvements in terms of validation loss, with pretraining yielding 25% relative improvement and focal context providing additional 11.1% improvement. We also introduce Methods2Test, the largest publicly available supervised parallel corpus of unit test case methods and corresponding focal methods in Java, which comprises 780K test cases mined from 91K open-source repositories from GitHub. We evaluate AthenaTest on five defects4j projects, generating 25K passing test cases covering 43.7% of the focal methods with only 30 attempts. We execute the test cases, collect test coverage information, and compare them with test cases generated by EvoSuite and GPT-3, finding that our approach outperforms GPT-3 and has comparable coverage w.r.t. EvoSuite. Finally, we survey professional developers on their preference in terms of readability, understandability, and testing effectiveness of the generated tests, showing overwhelmingly preference towards AthenaTest.

연구 동기 및 목표

  • 기존 자동 테스팅 도구에서 생성된 기계적 테스트 케이스의 낮은 가독성과 이해 가능성 문제를 해결하기 위해.
  • 실제 개발자가 작성한 테스트 케이스와 포커스 메서드를 학습하여 테스트 케이스 생성을 향상시키기 위해.
  • 사전 훈련이 자연어와 소스 코드에 미치는 영향, 그리고 포커스 컨텍스트가 테스트 생성 품질에 미치는 영향을 조사하기 위해.
  • 가장 큰 공개 가능한 감독형 평행 코퍼스인 Java 테스트 케이스와 그에 해당하는 포커스 메서드를 포함한 Methods2Test를 구축하고 배포하기 위해.
  • EvoSuite와 GPT-3와 같은 최신 기술 도구와 비교하여 생성된 테스트 케이스의 효과성, 커버리지, 개발자 선호도를 평가하기 위해.

제안 방법

  • 트랜스포머 기반 모델을 사용하여 테스트 케이스 생성을 시퀀스-투-시퀀스 학습 과제로 설정한다.
  • 이중 단계 훈련을 수행한다: 대규모 비지도 학습 코퍼스인 Java 소스 코드와 영문 텍스트에서의 노이즈 제거 사전 훈련을 수행한 후, 테스트 생성 과제에서의 지도 학습 미세조정을 수행한다.
  • 생성 품질 향상을 위해 포커스 메서드 주변의 컨텍스츄얼 코드인 포커스 컨텍스트를 통합한다.
  • 91개의 GitHub 레포지토리에서 추출한 78만 개의 테스트 케이스 쌍을 포함한 Methods2Test 데이터셋을 사용하여 지도 미세조정을 수행한다.
  • 사전 훈련된 BART 모델을 테스트 케이스 생성 과제에 적응시키기 위해 전이 학습 기법을 적용한다.
  • 실행을 통한 평가를 통해 라인 커버리지와 조건 커버리지를 측정하고, 가독성과 이해 가능성에 대한 개발자 설문 조사를 실시한다.

실험 결과

연구 질문

  • RQ1자연어와 소스 코드 코퍼스에서의 사전 훈련이 생성된 단위 테스트 케이스의 품질에 어떤 영향을 미치는가?
  • RQ2포커스 컨텍스트를 통합할 경우 테스트 케이스의 품질과 커버리지가 얼마나 향상되는가?
  • RQ3AthenaTest의 성능은 테스트 커버리지와 정확도 측면에서 GPT-3와 EvoSuite와 비교해 어떻게 되는가?
  • RQ4전문 개발자들은 AthenaTest가 생성한 테스트 케이스와 EvoSuite가 생성한 테스트 케이스의 가독성과 이해 가능성에 대해 어떻게 평가하는가?
  • RQ5미세조정된 트랜스포머 모델이 정확하고 인간이 작성한 코드와 구분되지 않는 테스트 케이스를 생성할 수 있는가?

주요 결과

  • 자연어와 소스 코드 코퍼스에서의 사전 훈련은 비사전 훈련 모델 대비 검증 손실을 25% 상대적으로 감소시켰다.
  • 포커스 컨텍스트를 통합함으로써 사전 훈련만으로도 얻을 수 있는 성능보다 검증 손실에서 추가로 11.1% 향상되었다.
  • AthenaTest는 5개의 defects4j 프로젝트에서 단지 30회의 尝시에 포커스 메서드의 43.7%에 대해 통과하는 테스트 케이스를 생성하였다.
  • AthenaTest가 생성한 테스트 케이스는 EvoSuite와 동등한 테스트 커버리지를 확보하였으며, isNumber 메서드의 경우 51줄과 41개의 조건을 커버하였다. 이는 GPT-3보다 정확도와 커버리지에서 뛰어났다.
  • 개발자 설문 조사 결과, AthenaTest가 생성한 테스트 케이스는 EvoSuite의 것보다 더 높은 선호도를 보였으며, 더 나은 가독성과 이해 가능성 덕분이었다.
  • AthenaTest는 포커스 메서드의 모든 조건을 커버하는 정확하고 관용적인 테스트 케이스를 성공적으로 생성하였으며, 예를 들어 null 반환 값을 적절히 확인하고 유효한 값 생성을 수행하였다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.