최악의 버그가 뭐냐고 묻는다면 주저않고 답할 수 있는 것: 재현이 안되는 멀티스레드 응용의 버그.
오전에 날씨가 적당히 시원해서 ((7:45분쯤 집에서 나갔는데 가로수 그늘 따라 가기엔 시원하더라고)) 간만에 오전에 집중해서 프로그래밍을 했다. 대충 티켓 하나 제대로 치우고 오후 근무를 시작하려던 참에 -_- 버그 하나에 대한 사항이 넘어왔음.
3월 중순~4월 중순에 손댔던 응용의 버그라는데, 상황을 설명하자면
- 클라이언트 코드 / 바이너리 없음(…)
- 서버는 내가 작성
- 정확한 재현 조건 모름
- Q/A 팀은 버그 재현에 실패
- 덤프 남도록 설정해 놓은 것은 서비스 쪽 설정한 쪽에서 안남기게 바꿔놨음(…)
정도의 상황.
이건 뭐 손발 다 못쓰게 묶어놓고, 실로 연결된 환자 진맥하기 -_-. The Old New Thing의 용어를 멋대로 차용하자면 psychic debugging쯤 될듯[…]
재현가능성(reproduciblity ((이것도 영어 사전에 있는 영단어가 아닌데, 과학적 방법론이나 프로그래머들한텐 무척 익숙한 단어아닌가 -_-a)) ) 이 없는 버그를 잡으라니 누굴 죽이려는 건가(…). 일단 덤프 안남은 상황이 정말 깨고 -_-;;
오후 내내 더미 클라이언트 수정하면서 재현 시도를 반복했지만 재현 실패; GG선언(…).
팀장님이랑 상의해서 덤프 생기면 그 때 다시 생각하기로[…].
사실 버그가 재현만 되면, 반은 잡은 셈인데 -_-;; 예를 들어 몇일 전의 C 문자열 처리 버그 잡은 것도, 그나마 재현이 가능했고, 그 상황을 조금씩 줄이면서 — 프로그램은 왜 실패하는가 의 델타 디버깅 부분을 참고하면 좋음 — 버그를 최종적으로 “분리” 해낼 수 있어서 잡아낸건데, 이 경우엔 일단 재현부터 -_-
재현 되면 생각해야지 왠지 이거 신경쓰면 지는 기분 =,=
게다가 저건 현재 내게 할당된 작업도 아니어야 한단 말이다 ㅠㅠ
아.. 깝깝한 상황이네요 :)
거의 게임 하다 보니 죽던데요. 수준이네요 ㅎㅎ
자주 들어오는 버그 리포트 형태 군요 [..]
담당이 OS Pre-Loader쪽인데, 이런 상황을 꽤 자주 격게 되더군요 [..]
Q/A:’사용자가 설치 했더니 부팅이 안된다는군요. 버전은 모르겠고 PC도 모르겠고, OS XP인데, 아무튼 부팅하다 멈춘데요.’
Me:’지렁이는 나온데요?’
Q/A:’모르겠는데요’
Me:’아..그래요? 알겠습니다’ (뇌에서 삭제 중)
쑥갓 / 딱 그정도네요(…)
DarkAngel / 그걸 자주 받는다면(먼산)
그냥 재현 가능할 때 까지 연락하지 마세요… 하면 안되는건가 ㄷㄷ 내가 이래서 친구가 없는건가 ㅡ_ㅡ;; 그런데 재현 불가능한 버그가 어떻게 버그인질 알 수 있는거지 ;; 그 부분을 수행하다가 죽은 사실만 알고 두 번 다시 죽일 수 없는 상황인건가.
수원 / 비슷합니다[..]
인텔 ThreadChecker가 거의 유일무이한 data race 및 deadlock을 검출해주는 프로그램이기는 합니다만 겁나게 느리죠. 보통 100배 이상 느려질 수 있습니다. 그래도 정말로 심각한 버그이고 data race인 것이 확실하면 이 녀석이라도 써보시기를.. 여담으로 인텔 스레드 체커는 happens-before 알고리즘을 쓰기 때문에 문제가 있을 법한 스레드들이 충분한 횟수동안 반복이 되어야 대부분의 레이스가 검출될 수 있다는 원초적인 문제가 있습니다. 에.. 역시 전공 얘기라 말씀 안 드리고 지나칠 수가 없었네요;; 오늘도 여기 인텔 아저씨들이랑 스레드 체커 얘기 좀 했는데 뭐 뾰족한 수가 없죠.
관련 논문은 http://portal.acm.org/citation.cfm?id=312214&dl=ACM&coll=portal 에 있습니다. 아무런 배경 지식 없이도 아주 쉽게 읽을 수 있습니다.
object / ThreadChecker 라이센스가 있나 물어봐야겠네요 흑흑;
reproducibility 입니다. 사전에 있어요 :)
i가 하나 더 있는거군 흠. 근데 일반 영단어류엔 안나오고 화학 계통으로 나오는군(네이버 영한사전)
http://en.wikipedia.org/wiki/Reproducibility
저는 구글에서 define: reproducibility 로 찾는걸 좋아함
그거 좋다. 근데 저 위키페디아 페이지는 찾았었음. 대체 무슨 차이였을까… 그냥 구글의 보정?