In Front of an Unfamiliar System
Pinning the Symptom to a Number
한국어 원문으로 표시합니다.
목표
"가끔 안 돼요" 라는 신고를 20분 안에 측정값과 반증 가능한 가설로 바꿀 수 있게 됩니다.
왜 중요한가
고객은 버그 리포트를 주지 않습니다. 고통 리포트를 줍니다. 그것을 측정 가능한 문제로 바꾸는 것은 전적으로 이쪽의 일이고, 그 첫 도구가 재현 명령입니다. 실패율을 숫자로 고정하는 순간 두 가지가 생깁니다. 첫째, 고객과 같은 사실을 보게 됩니다. 둘째, 나중에 "고쳤다" 고 말할 잣대가 생깁니다. 잣대 없이 고친 것은 고쳤는지 알 수 없습니다.
그다음이 가설인데, 여기에 규칙이 하나 있습니다. 틀렸을 때 무엇이 보일지가 정해져 있지 않으면 가설이 아닙니다. "네트워크 문제 같다" 는 무슨 결과가 나와도 살아남기 때문에 후보를 줄여 주지 못합니다. 죽을 수 있는 문장만이 조사 범위를 좁힙니다. 그리고 배제한 것을 적어 두지 않으면, 30분 뒤에 자기가 이미 지운 후보를 다시 확인하고 있게 됩니다.
단계
/root/hypothesis디렉터리를 만드세요./opt/app/flaky.py를 실행해127.0.0.1:8001에서 응답하게 만드세요./quote를 연속 20회 호출해 200 이 아닌 응답의 개수를/root/hypothesis/baseline.txt에 적으세요.- 그 실패율을 퍼센트 정수로
/root/hypothesis/rate.txt에 적으세요. 기호 없이 숫자만. - 실패한 응답의 본문 문자열을
/root/hypothesis/reason.txt에 저장하세요. /root/hypothesis/h1.md에가설:,맞다면:,틀리면:세 줄이 들어간 가설을 쓰세요./root/hypothesis/ruled_out.txt에 배제한 계층을 적으세요. 각 줄은network,auth,app,data중 하나로 시작하고 근거를 덧붙입니다. 최소 두 줄./quote를 연속 40회 호출해 실패 횟수를/root/hypothesis/confirm.txt에 적으세요.
참고
python3 /opt/app/flaky.py &로 띄우고curl -s http://127.0.0.1:8001/health로 확인합니다.for i in $(seq 1 20); do curl -s -o /dev/null -w '%{http_code}\n' URL; done | sort | uniq -c- 흔한 실수 1: 20회를 나눠서 호출하고 사이에 다른 요청을 섞는 것. 연속 20회여야 합니다.
- 흔한 실수 2: 5번에서 상태 코드만 저장하는 것. 필요한 것은 응답 본문입니다.
가설 작업 디렉터리 만들기
/root/hypothesis 디렉터리를 만드세요.
배제 목록과 가설 문서를 한곳에 모읍니다. 나중에 보고서의 절반이 됩니다.
견적 API 띄우기
/opt/app/flaky.py 를 실행해 127.0.0.1:8001 에서 응답하게 만드세요.
/opt/app/flaky.py 를 python3 로 실행하면 127.0.0.1:8001 에서 대기합니다. 셸을 붙잡지 않도록 뒤에 & 를 붙이세요.
20회 호출해 실패 횟수 세기
/quote 를 연속 20회 호출해 200 이 아닌 응답의 개수를 /root/hypothesis/baseline.txt 에 적으세요.
curl 의 -o /dev/null -w '%{http_code}' 조합이면 상태 코드만 나옵니다. seq 로 20번 돌리고 200 이 아닌 것을 세세요.
실패율을 퍼센트로 적기
그 실패율을 퍼센트 정수로 /root/hypothesis/rate.txt 에 적으세요. 기호 없이 숫자만.
형용사를 숫자로 바꾸는 단계입니다. 20회 중 몇 회인지를 퍼센트 정수로 바꿔 기호 없이 적으세요.
실패 응답의 본문 확보하기
실패한 응답의 본문 문자열을 /root/hypothesis/reason.txt 에 저장하세요.
상태 코드만 보면 왜 실패했는지 모릅니다. -o /dev/null 을 빼고 응답 본문을 그대로 받아 보세요.
반증 가능한 가설 쓰기
/root/hypothesis/h1.md 에 가설:, 맞다면:, 틀리면: 세 줄이 들어간 가설을 쓰세요.
가설, 맞다면, 틀리면 세 줄이 필요합니다. 세 번째 줄이 안 써지면 그건 아직 가설이 아니라 느낌입니다.
배제한 계층 기록하기
/root/hypothesis/ruled_out.txt 에 배제한 계층을 적으세요. 각 줄은 network, auth, app, data 중 하나로 시작하고 근거를 덧붙입니다. 최소 두 줄.
network / auth / app / data 중 지금까지 확인해서 지운 계층을 최소 두 개, 각각 왜 지웠는지와 함께 적으세요.
같은 잣대로 재측정하기
/quote 를 연속 40회 호출해 실패 횟수를 /root/hypothesis/confirm.txt 에 적으세요.
무작위인지 규칙적인지는 표본을 늘려 보면 갈립니다. 40회로 다시 재서 비율이 유지되는지 확인하세요.