메인 콘텐츠로 건너뛰기

"Debugging" 태그의 게시물 2개 게시물건

Debugging and troubleshooting

모든 태그 보기

보이지 않는 것을 디버깅하기: 이벤트 시스템에 전용 관측 레이어가 필요한 이유

TinyGiants
GES Creator & Unity Games & Tools Developer

QA 테스터가 버그를 올린다: "플레이어가 열쇠를 줍는데 문이 열리지 않습니다."

간단하지? 아마 참조 누락이나 조건 오류일 것이다. 프로젝트를 열고, 열쇠를 줍고... 문이 잘 열린다. 내 컴퓨터에서는 동작한다. 테스터에게 재현 단계를 물어보니 "30% 정도의 확률로 발생하는데, 보통 세이브/로드 후에 그렇습니다"라고 한다.

이제 디버깅 지옥이다. 열쇠 획득 이벤트, 인벤토리 업데이트, 퀘스트 진행 확인, 문의 잠금 해제 조건을 잇는 체인 어딘가에서 간헐적으로 뭔가 실패하고 있다. 그런데 어느 링크에서? 이벤트가 Raise되지 않은 건가? Raise는 됐는데 리스너가 구독되지 않은 건가? 리스너는 구독됐는데 조건이 false로 평가된 건가? 조건은 맞았는데 로드 후 문의 상태가 오래된 건가?

보이지 않는 이벤트 체인: 볼 수 없는 것은 디버깅할 수 없다

TinyGiants
GES Creator & Unity Games & Tools Developer

플레이어가 죽습니다. 사망 사운드가 재생됩니다. 래그돌이 활성화됩니다. "You Died" UI 팝업이 나타납니다. 게임이 자동 저장됩니다. 분석 이벤트가 발생합니다. 리스폰 타이머가 카운트다운을 시작합니다. 하나의 이벤트 OnPlayerDeath에 여섯 개의 다른 시스템이 응답합니다. 하지만 질문 하나 — 이게 어디에 문서화되어 있나요?

코드에 없습니다. 프로젝트 관리 도구에도 없습니다. 어떤 다이어그램에도 없습니다. 딱 한 곳에 존재합니다: 원래 설정한 사람의 머릿속. 그 사람이 6개월 전에 팀을 떠났다면, 아무 데도 존재하지 않습니다.

이것이 이벤트 기반 아키텍처의 더러운 비밀입니다. 시스템을 디커플링하기 위해 채택합니다. AudioManagerUIManager에 대한 참조가 필요 없다는 걸 축하합니다. 하지만 비용에 대해서는 절대 이야기하지 않습니다: 실행 흐름이 보이지 않게 됩니다. 그리고 보이지 않는 것은, 정의상, 시각적으로 디버깅할 수 없습니다.