기타 Lobsters · 21시간 전

개발자들 사이에서 화제인 버그 확실하게 잡는 '2단계 커밋' 꿀팁

핵심 요약
  • 버그를 고칠 때 한 번에 커밋하지 않고, 버그의 잘못된 동작을 그대로 통과시키는 테스트를 1단계로 먼저 커밋하는 팁이 공유되었습니다.
  • 이후 2단계에서 실제 버그 수정과 함께 테스트 기댓값을 올바르게 수정함으로써, CI 빌드를 깨뜨리지 않으면서 버그가 진짜 해결되었는지를 확실하게 증명할 수 있습니다.
  • 글쓴이는 동료에게 배운 이른바 '클루버 책략'이라 부르며, 날짜 계산 오류 예시와 함께 이슈 트래커를 깔끔하게 연동하는 방법도 제시했습니다.
요약 해외 개발자 커뮤니티에서 버그를 잡을 때 커밋을 두 번에 나눠 진행하는 일명 '클루버 책략(The Kluever Maneuver)' 팁이 공유되어 눈길을 끌었습니다. 글쓴이는 동료 커트 클루버(Kurt Kluever)에게서 전수받은 방식이라며, 평소 사내에서는 '끔찍한 테스트(terrible tests)'라고 불리던 습관을 소개했습니다. 핵심 원리는 간단합니다. 버그를 수정할 때 보통 한 커밋 안에 수정 코드와 테스트 코드를 동시에 넣기 마련인데, 이러면 버그를 실제로 고치지 못했거나 테스트 자체가 엉뚱하게 통과(false pass)하는 경우를 알아채기 어렵습니다. 따라서 첫 번째 커밋에서는 버그가 발생하고 있는 잘못된 동작을 '그대로 통과하도록' 단언(assert)하는 테스트를 먼저 작성합니다. 예를 들어 2 + 2가 5가 나오는 버그가 있다면, 첫 커밋에서는 `assert add(2, 2) == 5`라는 테스트를 추가해 CI가 녹색 불을 유지하면서도 버그의 존재를 명확히 기록해 두는 식입니다. 이어 두 번째 커밋에서 실제 로직을 수정함과 동시에 테스트 코드의 기댓값도 올바른 값(`assert add(2, 2) == 4`)으로 뒤집습니다. 이렇게 하면 모든 커밋 단계에서 CI 빌드가 깨지지 않고 통과 상태를 유지하며, 테스트가 이전 상태와 수정 후 상태를 명확히 구분해 주므로 버그가 실제로 해결되었음을 확실하게 입증할 수 있습니다. 글쓴이는 연도 차이만 계산해 미성년자 여부를 잘못 판별하는 날짜 계산 버그 사례를 들며, 잘못된 엉터리 수정안과 엉터리 테스트가 동시에 들어가면 둘 다 통과해 버려 버그를 놓치기 십상이라고 지적했습니다. 또한 이슈 트래커와 연동할 때도 첫 커밋에는 FIXME와 이슈 번호를 달고, 두 번째 커밋에서 이를 해결(fixes)하는 흐름을 적용하면 히스토리 관리 면에서도 유용하다고 덧붙였습니다.
Sponsored · 광고