작년에 운영 중인 서비스의 사용자로부터 버그 리포트를 받았습니다. 버그 리포트에 따라 소스 코드를 살펴보니 버그가 맞더군요. 문제는 그 버그가 생긴지 거의 일년이 넘은 것이었죠.

버그가 생긴 상황은 이렇습니다.

올빼미씨가 B 로직을 만들면서 B 로직 전에 실행되는 A 로직의 동작을 가정하고 개발을 했습니다. A 로직은 부엉이씨가 개발을 했고, A 로직에 대해서 올빼미씨는 잘 알고 있었기에 잘 동작하는 B 로직을 만들 수 있었습니다.

그러나 반대로 부엉이씨는 B 로직이 어떤 가정하에 만들어진 것인지 모르고 있었습니다. 시간이 흘러 부엉이씨가 A 로직을 변경 할 필요가 생겨 수정을 하자 올빼미씨의 B 로직의 가정을 깨지게 됐고 이것이 교묘히 숨은 버그가 되어버렸습니다.

이렇게 로직이 동작을 하는데 어떤 사전에 필요한 조건이 생긴다면 그 조건이 변경됐을 때 자신이 개발한 부분은 전혀 변경이 없었음에도 불구하고 버그가 생겨날 가능성이 있습니다.

이를 막기 위해서는 가능하면 사전에 필요한 조건을 최대한 없애는 것이 좋습니다. 그리고 어쩔 수 없이 어떤 조건이 필요하다면 자신의 모듈에서 해당 조건이 만족되었는지 확인 할 수 있는 안전 장치를 마련 해놓는 것이 중요합니다.

TDD와 같은 것을 통해서 이런 작업이 어느 정도 자연스럽게 일어날 수도 있지만 TDD를 사용하지 않으신다면 꼭 이런 부분을 세세히 신경쓰면서 개발하는 것이 좋습니다.