지금까지는 일부러 프로그램 실행을 검사하는 활동과 오류를 고치는 활동을 나눴습니다. 하지만 물론 디버깅은 버그를 제거하는 것을 의미하기도 합니다. 이상적인 경우라면 코드를 완벽하게 이해하고 오류와 그것을 고치는 방법이 훤히 드러나는 ‘아하!’라고 깨닫는 순간에 도달해야 할 것입니다. 하지만 프로그램은 여러분이 명확하게 알기 힘든, 불충분하게 문서화된 시스템을 사용하는 경우도 있을 것이므로 이러한 순간이 늘 오지는 않을 것입니다. 어떤 경우에는 코드가 너무 복잡해서 완벽하게 이해하지 못하는 경우도 있을 것입니다.
버그를 고칠 때는 가장 작은 부분만 변경해서 해당 버그를 고치고 싶을 것입니다. 개선이 필요한 다른 부분이 보일지도 모릅니다. 하지만 그것들을 동시에 고치지는 마십시오. 한 번에 딱 하나만 변경하는 과학적 방법론을 활용하려고 하십시오. 이를 위한 최선의 방법은 버그를 손쉽게 재현한 다음, 고친 코드를 올바른 자리에 놓고, 프로그램을 다시 실행해서 버그가 더는 존재하지 않는지 관찰하는 것입니다. 물론 때로는 한 줄 이상을 변경해야 하겠지만 그럼에도 개념적으로는 단 하나의 최소한의 변경사항을 적용해 버그를 고쳐야 합니다.
간혹 여러 개의 버그가 하나로 보일 때도 있습니다. 버그를 정의하고 그것을 한번에 고치는 것은 여러분에게 달려 있습니다. 때로는 프로그램이 어떻게 동작해야 하거나 원 제작자가 의도한 바가 명확하지 않은 경우도 있습니다. 이 경우 경험과 판단을 발휘해 해당 코드에 여러분만의 의미를 부여해야 합니다. 프로그램이 어떻게 동작해야 할지를 결정하고 그것을 주석으로 남기거나 다른 어떤 방법으로 분명히 밝힌 다음 코드가 여러분이 의미한 바를 따르게 하십시오. 이는 맨 처음에 원래의 함수를 작성하는 것보다 더 어려운 중급 또는 고급 기술이며, 현실 세계는 깔끔하게 맞아떨어지지 않을 때가 많습니다. 어쩌면 재작성할 수 없는 시스템을 고쳐야 할 수도 있습니다.
- 다음 항목: 로그를 이용해 디버깅하는 법