배포와 인프라6 분 읽기

절반만 고쳤는데 '고쳐졌다'는 보고가 돌아왔습니다

진동이 전혀 안 온다는 신고를 받고 세 곳을 고쳤습니다. 사용자는 '이제 느껴진다'고 했지만, 실제로는 신호 사다리의 두 칸만 고쳐져 있었습니다.

#gotchas#android#verification#debugging
개념 도식: 세 단계 진동 사다리 중 두 칸만 수정되어 나머지 한 칸이 그대로 남은 구조
글 내용을 요약한 개념 도식.

카운터 앱을 하나 냈습니다. 탭할 때마다 숫자가 오르고, 특정 구간과 목표에 도달하면 다른 진동이 옵니다. 신호가 세 단계인 셈입니다.

출시 당일 신고가 왔습니다. "99까지 눌렀는데 아무 느낌이 없다."

앱 설정의 진동 토글은 켜져 있고, 기기 터치 피드백도 켜져 있고, 절전 모드는 꺼져 있고, 키보드 타이핑 진동은 정상입니다.

진동이 "안 온다"는 신고를 받으면 무엇부터 확인합니까?

눈으로는 못 봅니다

진동은 화면에 안 보이고 에뮬레이터에서는 감각이 없습니다. 그래서 시스템 덤프를 읽었습니다.

dumpsys vibrator_manager

여기에 요청이 도달했는지, 재생됐는지, 무시됐는지, 폴백으로 대체됐는지가 다 적힙니다. 확인해보니 우리 요청은 시스템에 도달했고 재생됐으며 무시된 건 0건이었습니다.

즉 호출 경로는 멀쩡했습니다. 문제는 고른 효과였습니다.

세 가지를 찾았습니다

첫째, 구간 경계 진동이 사양과 달랐습니다. 사양에는 짧은 클릭 두 번이라고 적혀 있는데 코드는 더 약한 틱을 쓰고 있었고, 유닛 테스트가 그 틀린 값을 단언해 고정하고 있었습니다.

둘째, 진동 프리미티브를 지원하지 않는 기기에서 8밀리초짜리 생파형으로 떨어지고 있었습니다. 8ms는 대부분의 모터가 물리적으로 낼 수 없는 길이입니다.

셋째, 매 탭 진동의 진폭이 낮아 보였습니다. 0.6에서 0.85로 올렸습니다.

셋을 고쳐 출하했습니다.

사용자가 확인해줬습니다

"구간이랑 목표는 느껴지는데 매 탭은 여전히 무감각."

이 한 문장이 원인을 확정했습니다.

그 기기는 진동 프리미티브를 지원하지 않아서 미리 정의된 효과 사다리를 탑니다. 제가 고친 건 그 사다리 중 두 칸(구간·목표)이었고, 매 탭은 수정 전과 같은 값 그대로였습니다.

그리고 세 번째 수정, 진폭 0.6 → 0.85는 프리미티브를 지원하는 기기에만 걸리는 변경이었습니다. 이 사용자의 기기에는 애초에 닿지 않습니다.

제가 커밋 메시지에 "이건 판단이지 증거가 아니다"라고 적어둔 그 변경이, 실제로 아무것도 설명하지 못했습니다.

여기서 선택이 갈립니다

"구간은 느껴진다"는 보고를 받았을 때, 두 가지로 읽을 수 있습니다. "고쳐졌다" 또는 "고쳐진 것과 안 고쳐진 것이 갈렸다".

당신이라면 어느 쪽으로 읽겠습니까?

이 신고가 없었다면 저는 첫 번째로 읽고 닫았을 겁니다. 사용자가 무엇이 안 되는지까지 말해줘서 갈렸습니다.

남은 한 칸을 고쳤습니다

폴백 사다리에서 매 탭 진동이 가장 약한 효과를 쓰고 있었습니다. 한 칸 위로 올렸습니다. 근거는 추측이 아니라 그 기기의 사실입니다 — 같은 폰에서 키보드 타이핑 진동은 느껴진다고 했으니까요.

세 칸이 서로 다른 효과라는 것을 이제 테스트가 고정합니다.

자가진단

  • 신호가 여러 단계인 기능에서, 수정할 때 모든 단계를 같은 표에 놓고 봅니까?
  • 기기 능력에 따라 분기하는 코드에서, 당신이 고친 분기가 신고자의 기기가 타는 분기입니까?
  • 사용자 확인 요청에 "되나요?" 대신 **"무엇이 되고 무엇이 안 되나요?"**를 묻습니까?

솔직한 부분

하루에 네 번 출하했습니다. 심사가 30~40분이라 가능했지만, 그건 제가 정확히 고쳤다는 뜻이 아니라 틀린 수정을 빠르게 반복할 수 있었다는 뜻입니다.

증거 없이 넣은 변경은 고쳐진 것처럼 보이는 데만 기여합니다. 진폭 변경이 딱 그랬습니다.

당신이 마지막으로 고친 다단계 기능에서, 고치지 않은 단계가 몇 개인지 세어보세요.

관련 글