Dumb Game Lab

블로그 · 개발 이야기

개발 일지 · 우여곡절

고친 버그를 16번 다시 고쳤다고 보고한 날

Justin Lee, Dumb Game Lab ·

동네빵집 키우기 시작 화면. 가게 앞에서 빵을 건네는 장면 아래로 DAY 10까지 진행, 누적 매출 1300만원 표시가 보인다

크래시 수집기에 오류가 올라왔다고 전부 새 버그는 아닙니다. 11월 3일 하루에 연 오류 티켓을 확인했더니 16건이 이미 main에서 고친 버그였고, 오류를 보낸 앱은 고치기 전의 옛 버전이었습니다. 오류를 세기 전에 «보낸 앱 버전이 고친 버전보다 낮은가»부터 보는 게 맞습니다.

11월 3일, 티켓 16개를 열었는데 고칠 게 없었습니다

그날 일기에 적은 숫자부터 옮깁니다. 오류 티켓을 확인해 닫은 PR이 16개였고, 전부 «이미 main에서 고쳐짐»이었습니다. 제목으로 센 건 13개였고 나머지 3개는 표현이 달랐습니다.

동네빵집 «비정상 종료»(#5259), 찜질방 «앞 화면에서 신호 없이 꺼짐»(#5263), 털뭉치 «비정상 종료»(#5287), 왁뿌타워 폰 오류 3건(#5307)이 그런 예입니다. 열어 보면 같은 결론이었습니다. 고친 커밋이 이미 main에 있었고, 코드에서 할 일이 없었습니다.

티켓 하나를 확인하는 데는 오류 지문을 찾고, 어느 판에서 났는지 보고, 고친 커밋을 찾아 연결하는 시간이 듭니다. 코드는 한 줄도 안 바뀌는데 그 시간이 16번 들어갔습니다.

오류를 보낸 건 고치기 전의 앱이었습니다

원인은 오류가 새로 난 게 아니라 옛 앱이 계속 보내고 있었다는 점입니다. 앱 스토어에서 업데이트하지 않은 사람은 고치기 전 버전을 그대로 씁니다. 그 앱이 죽으면 수집기에는 새 오류 한 건으로 올라옵니다.

#5276은 왁뿌타워 1.0.17, #5275는 빵 합치기 1.0.3만 보낸 오류였습니다. #5258은 1.0.4 이상에서는 재발이 0건이었습니다. 숫자가 말해 주는 건 «고친 뒤 판에서는 안 난다»입니다. 그런데 수집기는 판 번호와 관계없이 같은 오류를 같은 오류로 셌습니다.

동네빵집 키우기 새 빵 만들기 화면. 반죽과 속, 토핑을 고르고 아래에 빵 도감 24종이 격자로 나열되어 있다
빵집 앱도 옛 판은 이 화면 그대로 설치돼 있습니다. 고친 판이 나와도 사람들 폰에서는 한동안 옛 판이 돕니다.

틀린 판단 하나: 오류가 오면 새 버그라고 믿었다

수집기를 만들 때 «오류가 한 건 올라오면 지금 고칠 버그가 하나 생긴 것»이라고 가정했습니다. 오류가 올라오는 순서만 보고 만든 가정이었고, 그 오류가 어느 시점의 코드에서 났는지는 묻지 않았습니다.

고치는 속도는 빠른데 사람들이 업데이트하는 속도는 그만큼 빠르지 않습니다. 고친 버그가 늘수록 «이미 고친 버그»가 옛 판에서 다시 올라올 길도 같이 늘어납니다.

그날 일기의 «오늘의 낭비» 두 번째 줄이 이 16건이었습니다. 한 건에 PR 하나씩 쓰고도 바뀐 코드는 0이었습니다.

고친 뒤에도 열흘간 같은 PR이 29개 더 나왔습니다

내일의 할 일에 «옛 판 오류는 티켓을 세우지 않고 장부에만 적게 한다, 판 번호가 main보다 낮으면 걸러지도록 수집기부터»라고 적었습니다(t-261103-bszc).

그 뒤 11월 11일까지 제목에 «이미 고침»이 든 오류 PR을 세어 보면 11월 1일부터 모두 42건입니다. 11월 3일 13건을 빼면 이후 8일에 29건입니다. 하루 평균은 13건에서 3~4건으로 줄었지만 0은 아닙니다.

#6070 빵 합치기 1.0.3, #6377 PC방 2.0.37, #6473 알고있여우 1.0.6이 그런 예입니다. 고친 판이 나온 뒤에도 옛 판은 한참 살아 있습니다. 이 숫자는 PR 제목을 센 것이라 제목에 표현이 다른 건은 빠져 있습니다.

기간제목에 «이미 고침»이 든 오류 PR
11월 3일 하루13건
11월 4일~11일(8일)29건
11월 1일~11일 합계42건

그래서 바꾼 것

오류가 올라오면 개수보다 먼저 두 가지를 봅니다. 보낸 앱 판 번호, 그리고 그 오류를 고친 커밋이 들어간 첫 판입니다. 보낸 판이 고친 판보다 낮으면 새 버그가 아니라 옛 판 글입니다.

고친 커밋 번호를 오류 장부에 한 줄로 남기는 방식도 늘렸습니다. 그러면 같은 지문이 다시 올라와도 장부에서 «이미 고침, 몇 번 커밋, 몇 판부터»가 바로 나옵니다. 티켓 쪽은 꼬리표를 커밋 단위로 받아 적도록 바꿨습니다(#5316).

동네빵집 키우기 이야기 장면. 할머니가 지키던 골목 빵집의 문을 다시 여는 대사 상자가 아이소메트릭 거리 위에 떠 있다
고친 건 «이미 열린 문»이어도 옛 판 사용자 눈에는 닫힌 가게입니다. 판 번호로 둘을 가릅니다.

같은 처지라면 먼저 해 볼 것

크래시 모니터링을 직접 붙인 1인 개발자라면 이 순서가 시간을 아껴 줍니다. 도구 이름은 달라도 대부분 앱 버전 필터가 있습니다.

아직 못 한 게 있습니다. 판 번호가 낮은 오류를 티켓으로 올리기 전에 자동으로 거르는 일이 어디까지 됐는지는 이 글을 쓰면서 코드로 다시 확인하지 못했습니다. 확실한 건 열흘 가까이 지난 지금도 열어 확인하고 닫는 PR이 남아 있다는 점입니다.

  • 오류 수를 세기 전에 앱 버전별로 나눠 본다
  • 고친 커밋이 들어간 첫 판 번호를 장부에 적어 둔다
  • 보낸 판이 그보다 낮으면 티켓을 열지 않고 장부에만 적는다
  • 옛 판이 줄어드는 속도를 확인해, 강제 업데이트가 필요한지 따진다

FAQ

앱 크래시 리포트에 이미 고친 버그가 계속 올라오는 이유는 뭔가요?

업데이트하지 않은 사용자의 폰에서 옛 버전 앱이 계속 돌기 때문입니다. 그 앱이 죽으면 고치기 전 코드의 오류가 수집기에 새 건처럼 올라옵니다. 앱 버전별로 나눠서 보면 구분됩니다.

옛 앱 버전의 오류는 어떻게 걸러 내나요?

오류를 고친 커밋이 들어간 첫 판 번호를 장부에 적어 두고, 보낸 판이 그보다 낮으면 새 버그로 세지 않습니다. 크래시 모니터링 도구 대부분은 앱 버전 필터를 지원하니 먼저 그걸 쓰세요.

고친 판이 나왔는데 옛 판 사용자는 얼마나 오래 남나요?

앱마다 다릅니다. 이 글의 숫자로 보면 11월 3일 이후 8일 동안에도 옛 판 오류로 닫은 PR이 29건이었습니다. 정확한 사용자 비율은 세어 두지 않아서 모릅니다.

다른 글

새 게임과 작은 소식을 한 달에 한 번쯤 보냅니다.

다른 언어English한국어日本語繁體中文