재테스팅, 레그레션 테스팅
재테스팅 및 회귀 테스팅 상세 설명
소프트웨어에 변경(예: 결함 수정, 기능 추가/변경)이 발생한 후에 수행되는 중요한 테스트 활동에는 재테스팅과 회귀 테스팅이 있습니다. 이 둘은 목적과 초점이 다르므로 명확히 구분하는 것이 중요합니다.
1. 재테스팅 (Re-testing / Confirmation Testing)
정의: 소프트웨어에서 발견된 결함(Defect)이 개발자에 의해 수정된 후에, 해당 결함이 실제로 올바르게 수정되었는지 확인하기 위해 수행하는 테스트입니다.
주요 목적: 이전에 발견된 특정 결함이 성공적으로 제거되었는지 '확인(Confirmation)'하는 것입니다. 즉, '버그가 제대로 고쳐졌는가?'를 검증하는 데 초점을 맞춥니다.
수행 시점: 결함이 보고되고, 개발자가 해당 결함을 수정한 후, 수정된 빌드(build)나 버전을 받으면 즉시 수행합니다.
특징 / 초점:
- 이전에 실패했던 특정 테스트 케이스를 다시 실행하는 것이 핵심입니다.
- 테스트 대상은 주로 수정된 코드 영역과 직접적으로 관련된 기능입니다.
- 성공적인 재테스팅은 해당 결함이 더 이상 존재하지 않음을 증명합니다.
사용 테스트 케이스: 결함 발견 시 실패했던 바로 그 테스트 케이스(들)를 사용합니다. 필요에 따라 해당 결함과 관련된 추가적인 테스트 케이스를 생성하여 실행할 수도 있습니다.
2. 회귀 테스팅 (Regression Testing)
정의: 소프트웨어의 특정 부분(코드, 기능 등)이 변경되었을 때, 이 변경이 기존에 정상적으로 작동하던 다른 기능이나 시스템의 다른 부분에 의도하지 않은 부작용(Side Effect)을 일으키지 않았는지 확인하기 위해 수행하는 테스트입니다.
주요 목적: 새로운 결함이 도입되거나 기존의 기능이 손상되지 않았음을 '보증(Assurance)'하는 것입니다. 즉, '새로운 변경이 기존 기능에 영향을 미치지 않았는가?'를 검증하는 데 초점을 맞춥니다.
수행 시점: 코드 변경(결함 수정, 기능 추가/변경, 환경 변화 등)이 발생한 후에 주기적으로 또는 중요 변경이 있을 때마다 수행합니다.
특징 / 초점:
- 기존에 성공했던 테스트 케이스들을 포함하여 다양한 기능과 영역을 테스트합니다.
- 테스트 대상은 변경의 영향 범위를 고려하여 선정되며, 전체 시스템의 주요 기능이 될 수도 있습니다.
- 자동화 테스팅이 회귀 테스팅에 매우 유용하게 활용됩니다. 반복적인 테스트가 많기 때문입니다.
- 변경의 위험도가 높을수록 회귀 테스트의 범위와 빈도가 증가합니다.
사용 테스트 케이스:
- 이전에 성공했던 기존 테스트 케이스들 중에서 회귀 테스트 스위트(Regression Test Suite)로 선정된 테스트 케이스를 사용합니다.
- 핵심 기능, 자주 사용되는 기능, 변경의 영향 범위에 있는 기능 등을 중심으로 선정합니다.
- 새로운 기능에 대한 테스트 케이스도 회귀 테스트 스위트에 점진적으로 추가될 수 있습니다.
재테스팅과 회귀 테스팅의 관계 및 차이점
이 둘은 모두 '변경 후'에 수행되는 테스트이지만, 목적과 범위에서 차이가 있습니다.
- 목적: 재테스팅은 특정 결함이 수정되었는지 확인하는 것이고, 회귀 테스팅은 변경으로 인해 새로운 결함이 발생하거나 기존 기능이 손상되지 않았는지 확인(보증)하는 것입니다.
- 범위: 재테스팅은 수정된 결함과 직접 관련된 부분에 초점을 맞추는 반면, 회귀 테스팅은 변경의 잠재적 영향 범위에 있는 기존 기능 전체 또는 일부를 대상으로 합니다.
- 사용 테스트 케이스: 재테스팅은 이전에 실패했던 테스트 케이스를 다시 사용하지만, 회귀 테스팅은 이전에 성공했던 테스트 케이스들을 재실행하여 기존 기능의 건전성을 확인합니다.
일반적인 테스트 프로세스에서는 결함을 수정한 후에 먼저 재테스팅을 수행하여 해당 결함이 제대로 고쳐졌음을 확인하고, 이어서 회귀 테스팅을 수행하여 수정 작업이 다른 부분에 문제를 일으키지 않았음을 검증합니다.
두 활동 모두 소프트웨어 품질을 유지하고 향상시키는 데 필수적입니다.