核心概念
테스트 코드 내 각 단언문을 가장 작은 단위로 취급하여 선택함으로써 테스트 선택의 정밀도를 높이고 테스트 실행 시간을 단축시킬 수 있다.
要約
이 논문은 대규모 소프트웨어 애플리케이션에서 코드 변경 후 전체 테스트 스위트를 실행하는 것이 시간과 자원 집약적이라는 문제를 다룹니다. 회귀 테스트 선택 기술은 코드 변경의 영향을 받는 테스트만 선택하여 실행함으로써 테스트 실행 시간을 줄이는 것을 목표로 합니다.
기존 기술들은 테스트 클래스와 같은 비교적 거친 수준에서 테스트 엔티티를 선택하므로 정확성이 떨어지고 영향을 받지 않는 테스트도 실행하게 됩니다. 이 논문에서는 테스트 코드를 문장 단위로 분석하고 테스트 단언문을 선택의 단위로 사용하는 새로운 접근법을 제안합니다. 이를 통해 선택의 정밀도를 높일 수 있습니다.
제안된 접근법은 다음과 같은 단계로 구성됩니다:
- 코드 변경 계산: 클래스 및 메서드 수준에서 코드 변경을 감지합니다.
- 단언 슬라이싱: 테스트 코드를 분석하여 각 단언문과 관련된 종속 문장들을 찾아 단언 슬라이스를 생성합니다.
- 코드 계측: 테스트 및 프로덕션 코드를 계측하여 의존성 정보를 수집합니다.
- 테스트 선택: 수집된 정보를 바탕으로 단언 수준, 메서드 수준, 클래스 수준에서 테스트 엔티티를 선택합니다.
제안된 접근법을 구현한 SELERTION 도구를 11개의 오픈소스 프로젝트에 적용한 결과, 기존 기술 대비 3-18%의 정밀도 향상과 최대 23%의 테스트 실행 시간 단축을 달성할 수 있었습니다. 특히 테스트 실행 시간이 긴 프로젝트에서 더 큰 효과를 보였습니다.
統計
테스트 실행 시간이 7주가 소요되는 산업용 제품이 있다.
테스트 실행 시간이 35초인 asterisk-java 프로젝트의 경우 SELERTION이 Ekstazi보다 23% 더 빠르다.
테스트 실행 시간이 160초인 commons-math 프로젝트의 경우 SELERTION이 HyRTS보다 3.2% 더 느리다.
引用
"회귀 테스트 선택 기술은 코드 변경의 영향을 받는 테스트만 선택하여 실행함으로써 테스트 실행 시간을 줄이는 것을 목표로 합니다."
"기존 기술들은 테스트 클래스와 같은 비교적 거친 수준에서 테스트 엔티티를 선택하므로 정확성이 떨어지고 영향을 받지 않는 테스트도 실행하게 됩니다."
"이 논문에서는 테스트 코드를 문장 단위로 분석하고 테스트 단언문을 선택의 단위로 사용하는 새로운 접근법을 제안합니다."