어제 버전 18이 배포를 나갔다가 3시간 만에 롤백이 되었다.
이번에 새로 추가된 버전은 심지어 테스트 커버리지가 100%였다.
그런데 배포를 하고 나서 로컬에 새로운 기능 추가를 하는데 이상하게 동작하는 현상이 확인되었다.
history성 row가 추가되는데 마지막 row가 아닌 이전 row가 업데이트되는 문제였다.
원인은 기존의 엔티티에서 새로운 엔티티를 만들어서 값을 저장(insert)하고 업데이트(update)를 하는데,
예외가 발생하면 기존의 엔티티에 업데이트를 하는 버그가 있었다.
급하게 롤백을 하고 영향도를 파악하는데 다행히 production 환경에서는 예외가 없었는지 데이터가 꼬이지 않았다.
전에 N모 피처에서는 테스트 코드가 버그를 피하는데 도움을 주었는데 이번에는 해당 로직에 대한 체크를 안하고 있어서 검증을 하지못하고 있었다. 단지 테스트 코드의 flow상 통과를 해서 표면상으로 100%가 되고 있었던 것 같다.
또한 동일한 로직이 6군데에 퍼저있어서 어떤 것은 제대로 되어 있고 어떤 것은 문제가 있었다.
이번에 용혁님이 하나로 합쳐서 더 이상의 산탄총 수술 (Shotgun Surgery)은 필요없게 되었다.
결론
테스트 코드는 은총알이 아니다.
'Programing > 테스트' 카테고리의 다른 글
[sonarqube] 'sonar.jacoco.reportPath' is deprecated 메시지 없애기 (0) | 2020.01.14 |
---|---|
[Pokayoke] 휴먼에러를 어떻게 막지? (0) | 2019.12.24 |
[Spock] when: 및 then: 블럭에서 with 사용하기 (0) | 2019.04.03 |
[삽질] Spock : ClientHttpRequestInterceptor 테스트 하기 (0) | 2019.02.28 |
assertThat (org.fest.assertions vs org.hamcrest) (0) | 2015.06.29 |