리그레션 다시 생각해보기 – 파트 3: 리스크 완화 전략
앞의 글에서 나는 아래와 같이 리그레션과 관련된 리스크들을 소개했다. 또한 이들이 단지 하나의 독립적인 형태로 나타날 뿐만 아니라 다른 문제와 조합되어 발생할 수도 있다는 것도 언급했다.
n 새로운 버그(New Bug)
n 이전 버그(Old Bug)
n 좀비 버그(Zombie Bug)
n 빌드 오류(Bad Build)
이러한 각각의 리스크를 완화시키는 다양한 전략이 존재한다. 주로 아래와 같은 3가지로 전략을 분류할 수 있다.
n 예방(Prevention): 리스크 발생을 애초에 방지한다.
n 확인(Confirmation): 이전과 같이 동작한다는 것을 검증한다. 리스크가 발생하지 않음을 확인하는 것이 이 범주에 속한다(마이클 볼튼(Michael Bolton)은 이것을 체킹(checking)이라고 부른다).
n 반증(Disconfirmation): 정상적으로 동작한다는 것을 반증하기 위해 노력하는 것. 예를 들어 버그가 발생했음을 입증하는 것은 이 범주에 속한다.
이 전략들을 각각의 리스크에 순서대로 적용시켜 보고 프로젝트에 어떤 전략을 사용할 수 있을지 고민해 보자.
새로운 버그
n 예방: 새롭게 구현되는 부분에서 새로운 버그가 발생하지 않도록 하기 위해 변경사항에 대한 명세를 리뷰한다.
n 확인: 새로운 빌드가 바로 이전 빌드와 동일하게 동작한다는 것을 증명하기 위해 이전 버전의 테스트를 수행한다.
n 반증: 장애(failure)를 찾아봄으로써 능동적으로 새로운 버그를 발견할 수 있다.
이전 버그
n 예방: 리팩토링을 통해 코드가 점점 복잡해지고 혼란스러워 지는 것을 방지할 수 있다. 코드가 복잡해지고 혼란해질수록, 필연적으로 변경이 꼬리를 물고 발생하게 된다.
n 확인: 오래된 버그들이 다시 발생하지 않았음을 증명해야 하며, 오래된 버그들을 리테스트하기 위해 특별히 고안된 테스트를 다시 수행해야 한다.
n 반증: 오래된 버그들을 드러낼 수 있는 새로운 방법을 고안해야 한다.
좀비 버그
n 예방: 한 번도 실행되지 않은 데드 코드가 없다는 것을 확인하기 위해 리뷰와 정적분석을 활용한다.
n 확인: 새로운 버그와 유사하게, 이전 버전과 소프트웨어의 동작이 동일하게 수행된다는 것을 증명하기 위해 이전 버전의 테스트를 수행한다.
n 반증: 새로운 버그와 유사하게, 장애를 찾아봄으로써 능동적으로 버그를 발견할 수 있다.
빌드 오류
n 예방: 이전 버전의 버그투성이 빌드가 다시 배포되는 것을 막기 위해 소프트웨어 형상관리(Configuration management)를 수행할 필요가 있다.
n 확인: 빌드가 정상적이라는 것을 확인하기 위한 스모크 테스트를 수행하거나, 이전 버그의 재현 여부를 확인하기 위해 이전 버그의 리테스트를 수행한다.
간략하게 정리하면 다음과 같다.
리스크 |
예방 |
확인 |
반증 |
새로운 버그 |
리뷰 |
유닛레벨 리그레션 테스트 |
버그 발견을 위한 테스트 |
이전 버그 |
리팩토링 |
이전 버그에 대한 리테스트 수행 |
버그 발견을 위한 테스트 |
좀비 버그 |
정적 분석 |
유닛레벨 리그레션 테스트 |
버그 발견을 위한 테스트 |
빌드 오류 |
형상관리 |
스모크 테스트 |
- |
앞서 소개한 이런 방법들을 활용한다고 하더라도 궁극적인 테스트가 가능한 것은 아니지만 이런 기법들이 가지는 상대적인 장점들에 대해 불만을 제기받은 적도 없다. 명백한 사실이기도 하지만, 리그레션 문제에 대한 단 하나의 탁월한 해결책은 바로 리그레션 테스트라는 것을 명심해야 한다.
그렇다면 리그레션 테스트에 있어서 잘못된 점은 무엇인가? 다음은 이 주제에 대해 알아보도록 하자.
'QA > Regression' 카테고리의 다른 글
[번역] 리그레션 다시 생각해보기 - 파트 5: 테스팅 미션을 결정하라 (0) | 2012.03.03 |
---|---|
[번역] 리그레션 다시 생각해보기 - 파트 4: 리그레션 테스팅에서 잘못된 점은 무엇인가? (0) | 2012.02.15 |
[번역] 리그레션 다시 생각해보기 - 파트 2: 리그레션이란 무엇인가? (0) | 2012.01.08 |
[번역] 리그레션 다시 생각해보기 - 파트 1: 힘들게 얻은 교훈 (0) | 2012.01.04 |