Regression Test는 왜 Regression 이지? 회귀? 퇴보? 무슨 의미인지 고민해봤습니다.
명사 regression의 동사형인 Regress는 아래와 같이 정의합니다.
[Regress]
영한사전 동사 격식, 보통 못마땅함 퇴행[퇴보/회귀]하다.
영영사전 When people or things regress, they return to an earlier and less advanced stage of development.
그렇다면, 리그레션 테스트는 회귀, 퇴보하는 테스트 일까요? 그 의미를 정의하기 전에 반의어인 progress 의 정의를 보겠습니다.
[Progress]
영한사전 동사 진전을 보이다, 진행하다 (=advance)
영영사전 Progress is the process of gradually improving or getting nearer to achieving or completing something.
앞으로 나아간다는 의미이며 퇴보가 아닌 진보네요. 즉, 더 좋아진다는 긍정적인 의미로 받아 들일 수 있습니다.
소프트웨어에서 Progression 목적의 작업은 새로운 기능 개발, 버그 수정, 레거시 제거 등등 아주 많습니다. 사실, 모든 작업들이 더 좋게 개선되기 위한 일이고 당.연.히 퇴보하기 위한 작업은 없습니다.
위의 작업들이 적용된 후 그로 인해 소프트웨어가 개선되었음을 ‘보증’하기 위해선 두가지 확인이 필요합니다.
‘테스트 해보니, 변경 사항이 목적대로 잘 동작한다’ 와 ‘테스트 해보니, 기존 보다 나빠지지 않았다’ 입니다. 기존보다 나빠지는 것은 현재 잘 되던 기능에 문제가 생기거나 이미 해결 된 문제가 다시 재현되는 경우입니다. 즉, 더 안좋은 상태로 진행하거나 버그가 있던 상태로 회귀 해버리는것이죠.
만약 둘 중 한가지만 확인한다면 새로운 기능은 잘 적용되었지만 그로인해 기존에 잘되던 기능이 동작을 하지 않는 경우가 생기거나 기존 기능은 잘 동작하지만 새로운 기능이 의도대로 동작하지 않을 수 있죠. 소프트웨어가 퇴보(Regression)한 경우로 볼 수 있습니다.
이제 앞에서 잠시 미뤘던 ‘리그레션 테스트’를 정의해봅시다.
소프트웨어의 개선(Progression) 을 보증하기 위해서는 테스트 대상이 ‘퇴보(Regression) 하지 않음’ 을 확인 할 필요가 있고, 그 목적에 따라 수행하는 테스트가 바로 리그레션 테스트 입니다. 리그레션 여부를 점검하는것이죠!
실무에서,
보통 ‘테스트 한다’ 라고 하면 새로운 기능이 개발 될 때 해당 기능을 점검하는 작업입니다. 새로운 기능이 의도대로 동작하는지, 예상 못한 결함이나 불편한 점은 없는지 점검하는 과정들이죠.
‘Assurance(보증)’ 의 책임을 가진 QA 직무자로서 이렇게 새로운 기능에 대한 테스트를 성공적으로 마침과 함께 기존 기능에 영향을 주지는 않는지, 이미 해결 된 버그가 재현되는 예전의 상태로 돌아가진 않았는지까지 확인을 해야겠죠 ? 그래서 항상 리그레션 테스트가 수행될 수 있도록 QA프로세스를 구성하고 있습니다.
몇몇 작업들은 변화가 적고 영향을 주는 영역이 크지않아서 해당 작업에 대한 테스트는 간단하게 진행 또는 생략하더라도, 해당 작업이 기존 기능에 영향을 주어 소프트웨어가 퇴보하는것만은 막겠다는 목적이죠.
리그레션 테스트는 군대 제설작업 처럼 매번 반복하는 의미없는 테스트 같지만, 변경이 생길때마다 ‘새롭게’ 테스트를 하는것으로 보는것이 맞습니다 :-) 새로운 기능의 관점에서는 기존 기능을 고려하지 않은 채 테스트했던 시나리오와 다른 ‘새로운’ 시나리오인것이죠.
QA팀 업무 뿐 아니라, 기획을 하면서 기존 기능과의 영향성을 점검하는것이나 개발을 하면서 단위테스트와 통합테스트를 두어 꼼꼼히 점검하는 모든 활동들이 소프트웨어의 Regression을 방지하기위한 품질관리 활동입니다. QA팀에서는 그 활동으로 리그레션 테스트케이스를 수행하는것입니다!
우리가 만드는 소프트웨어가 퇴보하지 않도록 하는 모든 활동을 리그레션 테스트라고 부를 수 있겠네요!
많은 의견을 참고한 논의 링크를 첨부합니다.
https://stackoverflow.com/questions/3464629/what-does-regression-test-mean