같은 기능을 하는 코드가 두 벌 있었고 어느 것이 실제로 쓰이는지 아는 사람이 없었다. 새 기능을 넣을 때 어느 쪽에 넣어야 하는지부터 막히는 상태였다.
Table of contents
Open Table of contents
어느 것이 쓰이는지 모르는 코드
먼저 두 벌을 각각 어디서 부르는지 grep 으로 세어 봤는데 둘 다 실제로 불리고 있었다. 하나가 죽은 코드였으면 그것을 지우는 것으로 끝났을 텐데 그렇지 않았다.
부르는 자리를 보니 화면에 따라 다른 쪽을 부르고 있었다. 화면마다 어느 벌을 쓰는지가 갈려 있다는 뜻이었다.
기능 표와 결과 대조
두 벌이 각각 무엇을 하는지 표로 만들어 비교했더니 새것에 없는 기능이 옛것에 있었다. 그것 때문에 옛것을 못 지우고 남겨 뒀던 것으로 보였다.
기능 목록만 맞춰 보고 끝내지 않고 같은 입력을 넣어서 결과가 같은지도 봤다. 몇 개는 같았고 몇 개는 값이 달랐다.
결과가 다르면 물어본다
결과가 다른 항목에서 어느 쪽이 맞는지는 내가 정할 수 없어서 확인을 받았다. 확인해 보니 새것이 맞았고 옛것의 계산에 빠진 조건이 있었다.
그러면 옛것을 부르던 화면들은 그동안 다른 값을 보여 주고 있었던 것이다. 두 벌이 있다는 사실보다 그 사실이 더 중요한 발견이었다.
옛 문제까지 옮기지 않기
새것으로 통일하기로 하고 옛것에만 있던 기능을 새것에 옮겨 넣었다. 옮기면서 그 기능이 안고 있던 문제까지 그대로 가져오지는 않았다.
그대로 옮기면 통합은 되지만 문제는 그대로 남는다. 옮기는 시점이 그것을 고칠 수 있는 자리이므로 여기서 정리했다.
두 벌이 생긴 경위와 기록
부르는 곳을 새것으로 바꾸면서 화면에 나오는 숫자가 달라지는 것을 미리 알렸다. 값이 바뀌는 것을 아무 말 없이 내보내면 그 자체가 새 문의가 된다.
마지막으로 왜 두 벌이 생겼는지를 확인해 보니 새로 만들다가 중간에 멈춘 것이었다. 중단된 작업을 기록에 남기지 않으면 이런 것이 몇 년씩 그대로 남는다.
정리
- 같은 것을 하는 코드가 두 벌이면
grep으로 어느 것이 쓰이는지 센다 - 둘 다 쓰이면 화면에 따라 갈려 있는 것이다
- 기능을 표로 비교한다
- 기능만이 아니라 같은 입력에 같은 결과가 나오는지 본다
- 결과가 다르면 어느 것이 맞는지 물어본다
- 옮길 때 옛 문제까지 옮기지 않는다
- 숫자가 달라지면 미리 알린다
- 중단된 작업을 기록에 남긴다