실용주의 프로그래머 Topic 20

Topic 20 디버깅

데이비드 토머스, 앤드류 헌트

Alt text

느낌표 ! (인상 깊은 문장 | 문맥)

참으로 고통스러운 일입니다.

자신이 겪는 어려움을 보고는 알게 되죠.

다른 누구도 아닌 바로 자신이 문제를 만들었다는 걸.

- 소포클레스(Sophocles) «아이아스»

p.125

개발자라면 모두 공감할 인용구인 것 같습니다..

버그가 여러분의 잘못인지 다른 사람의 잘못인지는 중요치 않다. 어쨌거나 그 버그를 해결해야 하는 사람은 여러분이다.

p.127

사실 버그 고치는 것만큼 힘든 것도 없지만 버그를 고쳤을 때 쾌감만한 것도 없는 것 같다. 때로는 버그의 원인을 알고나면 허무할 때도 있다.

디버깅할 때 근시안의 함정에 주의하라. 표면에 보이는 증상만 고치려는 욕구를 이겨 내라. 실제 문제는 여러분 눈앞에 있는 것에서 몇 단계 떨어져 있고, 또 다른 여러 가지와 연관되어 있을 확률이 다분하다. 겉으로 드러난 특정한 증상만 고치려고 하지 말고, 항상 문제의 근본 원인을 찾으려고 노력하라.

p.128-9

지금 당장만 해결할 수 있는 방법은 항상 존재하고 떠오른다. 그렇지만 문제가 얽혀있어 해결하기 어려워보이더라도 근본 원인을 찾으려 노력해야한다.

부끄러운 경험이지만 MVVM 패턴을 사용한 애플리케이션이였는데 버그를 살펴보니 특정 클래스의 동작으로 해당 이벤트가 호출이 되면 안되는 것까지 파악이 되었다. 그렇지만 왜 불리고 어떻게해서 불리는 것인지 파악할 수 없어 callstack 을 사용해서 해당 클래스 이름이 포함하면 return 하는 코드를 작성한 적이 있다. 물론 이 코드는 어떻게보면 동작했지만 코드 리뷰 때 피드백을 받고 근본 원인을 해결하였다. 도저히 할 수 없어 그렇게 하였지만 도저히 할 수 없어도 그렇게 했으면 안됐었다.

놀라운 버그를 마주쳤을 때, 단순히 그걸 고치는 것을 넘어서 왜 이 문제가 더 일찍 발견되지 않았을까 생각해 봐야 한다.

p.137

버그를 테스트 케이스에서 못 잡는 경우를 보면 테스트 데이터가 잘못되었는 경우다. 이럴 때 왜 이런 상황을 생각하지 못했을까 하는 자책이 들곤한다. 문제를 알았을 때 잘 고치는 것도 중요하다. 다른 곳에서는 이와 같지 않은지 등을 살펴봐야한다.

Topic 20 느낌

Topic 20 에서는 디버깅할 때 태도, 방법론을 경험을 토대로 소개하고있다. 글에서 인용하지는 않았지만 이진 분할을 통해 버그 찾기 등을 소개하고 있는 부분이 인상적이다.


실용주의 프로그래머 Topic 19

Topic 19 버전 관리

한 번 읽으면 두 번 깨닫는 객체지향 프로그래밍 Ch 1

발상의 전환

NCloud LB & SourcePipeline 구축하기
tech collection 서비스 성능 개선하기
Selenium 복권 구매 자동화 만들어보기
디자인 패턴
책 리뷰
블로그 챌린지