소프트웨어 버그 잡기 교훈.

 1. 조금 더 찬찬히 바라보자.

문제추적을 하다가 원인을 발견하고 이것만 고치면 되겠다 생각했는데...

어 뭔가 조금 이상하네.. A케이스이 경우에는 딱 들어맞는데 B케이스는 왜 일어났지?

B케이스는 조금 이해가 안되네.

이럴 경우, 보통 바쁜 일정에 쫓기다 보면 A케이스만 대책을 세워서 해결했다고 문제를 클로즈시켜 버린다.

시간이 지나면 이 문제의 경우에는 제대로 대책이 되지 않았든지 아니면 또 다른 파생버그를 일으킬 가능성이 아주 높다. 경험상으로 거의 반드시 나중에 나를 괴롭힌다. 

그래서 얻은 교훈은 조금 더 여유롭게 가는 것이 전체 프로젝트를 단축시킨다.

B케이스가 발견되면 당연히 검토를 해야 하고 그리고 조금 더 한발짝 물러나서 다른 파생버그는 없을지, 전체적으로 한번 더 바라본 후에 클로즈 시키는 것이 좋다.

한번씩 설계는 결백증환자가 맡는 것이 좋지 않을까라는 생각이 든다.

뭔가 여지를 남겨두면 그것들이 점점 쌓여서 복잡해 지고, 시간이 지날수록 실타래가 복잡하게 꼬이듯이 문제 해결을 할 수가 없다. 그래서 거대한 성을 쌓듯이 단계단계, 반듯하게 쌓아가야 한다. 그런 면에서 결백증이 필요할 것 같다. 프로그램을 작성하는 것이 중요한 것이 아니라 어떻게 검증할 것인지에 초점을 맞추어 벽돌을 쌓아가야 할 것이다.


왜 낮은 음을 화음으로 연주하면 불편하게 들릴까?

C코드의 경우에는 도,미,솔이라는 3가지 음으로 구성된다. 피아노나 기타로 연주하면 전혀 불편함 없이 아름답게 들린다. 그런데 더블베이스(베이스기타)로 도,미,솔을 누르고 연주하면 뭔가 불협화음처럼 들린다. (피아노에서도 낮은 옥타브에서 C코드를 치면...