2006년 06월 22일
버그의 3가지 개념

Defect : An incorrect program code (a bug in the code)
Infection : An incorrect program state (a bug in the state)
Failure : An observable incorrect program behavior (a bug in the behavior)
일반적으로 버그라고 하면, 실제로는 3가지의 개념을 혼동해서 사용합니다.
Defect는 잘못된 프로그램 코드를 말하고,
Infection은 잘못된 프로그램의 (실행) 상태를 말합니다.
Failure는 관찰할 수 있는 잘못된 프로그램의 동작을 말합니다.
1. The programmer creates a defect
2. The defect causes an infection
3. The infection propagates
4. The infection causes a failure
이를 정리해보면,
1. 프로그래머가 Defect를 만들어 냅니다.
2. Defect는 실행을 통해 Infection을 만들어 냅니다.
3. Infection은 퍼져나가게 되죠. 즉 다른 상태를 오염시키게 됩니다.
4. 오염된 Infection중에 어떤것이 결국 failure, 즉 관찰가능한 동작의 오류로 나타납니다.
명쾌하죠?
이 세가지 개념을 정확히 이해함으로써 전에 보지 못했던 것들이 이해 되는 것 같습니다.
느낌 상으로 했던 일들이, 3가지 중의 어떤 부분을 하고 있는지 정확히 이야기 할 수 있게 되었죠.
마찬가지로 여러분 들에게도 도움이 되었음 좋겠습니다.
그렇다면, 과연 Infection은 되었는데 Failure가 나타나지 않는다면,
그건 Bug로 봐야 되나요? 아니면 Bug가 아닌 건가요? 하하
Why Programs Fail ? A Guide to SystemaicDebugging p3~4, 30
Andreas Zeller
PS. 이 책은 학술적이고 다소 과학적인 전문가용 책입니다. 이런 방법도 있구나~ 하고 느끼고 싶은 분은 좋아하겠지만, 실제 적용을 목적으로 하신다면 조금 버겁다는 느낌이 들지도 모르겠습니다.
# by | 2006/06/22 01:30 | 작은이야기들 | 트랙백 | 덧글(6)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
failure는 결국 보여주는 시간의 문제일 뿐이니까요.
고로... "infection은 bug 이다"로 봐야 겠지요?
근데 돌아보면, lint를 돌려서 defect를 찾아주면, 그거 안쓰는 코드예요... 혹은 그쪽을 안들어가는데... 그런 이야기 익숙하죠. 안쓰는 코드에 defect가 있다면 그것도 버그겠죠? 아니면 깨진 창문을 놔둔 게으름으로 봐야되나요? 학술적인 바이러스에 감염된 기분이군요 ^^
바쁘면 바쁘다는 핑게로, 안바쁘면 코드 볼 일이 없는 관계로 쓰레기는 그냥 방치되게 됩니다.
사실 정말 필요없는 부분이라면 #if 0로 막는데 5초도 안걸립니다.
자신에게 너무 관대한 덕분이겠지요.
오히려 제가 감사하죠 ^^