회귀 테스트(regression testing)는 소프트웨어나 그 운영 환경을 바꾼 뒤, 바꾸지 않은 부분에 결함이 새로 생기거나 드러났는지 찾는 테스트다.[1][2] ISTQB 용어집은 회귀 테스트를 변경 관련 테스트(change-related testing)의 한 종류로 둔다.[2] SWEBOK V4.0a에 따르면 실무의 회귀 테스트는 테스트 대상이 스위트에서 전에 통과한 테스트를 여전히 통과하는지 보인다.[3]
회귀 테스트의 계기
ISTQB CTFL 강의계획서에 따르면 변경은 기능을 더해 개선하거나 결함을 없애 고치려고 하고, 그 뒤의 테스트에는 확인 테스트와 회귀 테스트가 든다. 회귀 테스트는 확인 테스트를 마친 수정까지 포함해, 변경이 나쁜 결과를 낳지 않았는지 확인한다. 회귀 테스트는 테스트 대상만이 아니라 환경과도 관련될 수 있고, 운영 환경의 업그레이드나 다른 플랫폼으로의 이전은 유지보수 테스트의 계기다.[4]
테스트 선택
이 강의계획서는 먼저 영향 분석으로 소프트웨어의 어느 부분이 영향을 받을 수 있는지 보고, 회귀 테스트의 범위를 정하기를 권한다.[4]
SWEBOK V4.0a에 따르면 실행할 테스트가 많아 회귀 테스트는 시간이 많이 들 수 있어서, 변경마다 얻는 보증과 드는 자원 사이에서 절충해야 할 때가 있다. 회귀 테스트에서는 기존 스위트에서 테스트 케이스를 고르거나 줄이고, 우선순위가 높은 테스트가 먼저 실행되도록 순서를 정하기도 한다.[3]
테스트 자동화와 지속적 통합
ISTQB 용어집은 테스트 자동화(test automation)를 테스트 활동을 자동으로 돌아가게 바꾸는 일로 정의한다.[5] ISTQB CTFL 강의계획서에 따르면 회귀 테스트 스위트는 여러 번 돌리고 회귀 테스트 케이스의 수는 대개 반복이나 릴리스마다 늘어나므로, 회귀 테스트는 자동화에 알맞은 대상이고 그 자동화는 프로젝트 초기에 시작해야 한다.[4]
테스트 자동화는 테스트 실행만이 아니라 테스트 케이스와 테스트 데이터를 만드는 일에도 쓰인다.[3][4] ISTQB CTFL 강의계획서에 따르면 테스트 자동화는 회귀 테스트 실행, 같은 테스트 데이터 다시 입력하기, 기대 결과와 실제 결과 비교하기처럼 되풀이하는 수작업을 줄일 수 있고, 테스터가 새롭고 더 효과적인 테스트를 설계할 시간을 늘릴 수 있다.[4]
지속적 통합에서는 자동화한 회귀 테스트도 함께 돌린다.[3][4] ISTQB CTAL-TAE(Certified Tester Advanced Level Test Automation Engineering) 강의계획서에 따르면 실행에 오래 걸리는 회귀 테스트 스위트는 파이프라인에서 매일 밤처럼 주기적으로 돌릴 수 있다.[6]
ASPICE
ASPICE 4.1은 SYS.4, SYS.5, SWE.4, SWE.5, SWE.6에 검증 수단을 고르는 BP(base practice)를 두고, 그 선택 기준에 회귀 검증 기준을 넣게 한다. SWE.5에서는 그 선택 기준의 예로 소프트웨어 아키텍처나 상세 설계의 변경 등으로 지속적 통합·지속적 개발(continuous integration / continuous development)에서 회귀 검증이 필요한 경우를 든다.[7]
ASPICE 3.1은 SYS.5, SWE.4, SWE.6의 BP1과 SYS.4, SWE.5의 BP2에서 테스트나 검증의 전략을 세울 때 회귀 전략을 함께 세우게 했다. ASPICE 4.1은 이를 검증 수단을 고르는 BP의 회귀 검증 기준으로 바꿨다.[7][8] 전략 BP가 4.1에서 어디로 갔는지는 ASPICE 프로세스 평가 모델에서 다룬다.
확인 테스트와의 차이
확인 테스트(confirmation testing)는 결함을 고친 뒤 그 결함이 일으킨 장애(failure)가 다시 일어나지 않는지 확인하는 변경 관련 테스트로, 재테스트(retesting)라고도 부른다.[9] ISO/IEC/IEEE 24765 용어집은 재테스트를 결함을 고치려고 한 수정이 그 결함을 실제로 없앴는지 확인하는 테스트로 정의하고, 그 주석에서 재테스트를 흔히 회귀 테스트로 보완하는 것으로 둔다.[1]
확인 테스트는 수정이 제대로 됐는지를 보고, 회귀 테스트는 변경이 다른 부분에 뜻하지 않은 영향을 주지 않았는지를 본다.[1][4]